问题:按照课本使用Eclipse部署SpringMVCTest这个web应用(部署方法见解决方法后面)。但是输入URL测试应用时报404错误。
解决方法:在下述的方法中,继续在web.xml中添加<context-param>和<listener>两个标签。最终的web.xml文件如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/springmvc-config.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/springmvc-config.xml</param-value>
</context-param>
#注意:这里通过init-param和context-param来指定Dispatcher加载时候需要的配置文件所在的路径。
其中,init-param和context-param所指定的路径应该要保持一致,不然就会报错。
可以看到,这里我在两个标签中所指定的“contextConfigLocation”都是"/WEB-INF/springmvc-config.xml"
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
</web-app>
部署步骤总结
1、创建Dynamic web project,然后导入需要的包,放到\Webcontent\WEB-INF\lib路径下。
2、在web.xml文件中配置前端控制器DispatcherServlet
通过<init-param>和<context-param>来指定springMVC的配置文件的位置(可以命名为springmvc-config.xml)。
3、配置springmvc-config.xml
该文件声明了业务控制器类(通过扫描指定包),并映射到URL请求。例如下面就是将位于org.fkit.controller包下的HelloController包映射到"/hello"请求。
<bean name = "/hello" class = "org.fkit.controller.HelloController">
4、接着就要实现这个业务控制器类(如上例的HelloController),该类继承自Controller接口,必须实现handleRequest方法,最后返回一个ModelAndView对象。
ModelAndView对象可以添加模型并传送到其指明具体的视图页面。
ModelAndView mv = new ModelAndView();
mv.addObject("message","Hello World!") /添加模型
mv.setViewName("/WEB-INF/content/welcome.jsp")/指定返回某个视图页面
5、在WEB-INF/content创建视图页面welcome.jsp。
<body>
${requestScope.message} /将第4步中传递的message变量显示在页面中
</body>
部署方法
安装Spring 4.2.0版本,并在Eclipse(4.8 photon)中配置,新建Dynamic web 项目(项目名为SpringMVCTest),选择创建2.5版本的module。然后将所需的Spring框架下的class文件的JAR包和common-logging-1.2.jar包放到
SpringMVCTest\WebContent\WEB-INF\lib
路径下。(由于对Eclipse还不熟悉,这里是直接在windows文件管理器中操作,而不是在Eclipse中进行导入)。
操作完成后,刷新(F5)Eclipse就可以看到src下多了个Web App Libraries,下面存放的就是我们刚刚导入的jar包。
配置前端控制器DispatcherServlet,这里并没有servlet信息。
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>SpringMVCTest</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
手动在</welcome-file-list>和</web-app>之间加入下面的内容。
在SpringMVCTest/WebContent/WEB-INF目录下新建springmvc-config.xml文件。
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/springmvc-config.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
同时还要在WEB-INF下新建一个springmvc-config.xml,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.2.xsd">
<bean name = "/hello" class="org.fkit.controller.HelloController"/>
<bean class = "org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
<bean class = "org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
<bean class = "org.springframework.web.servlet.view.InternalResourceViewResolver"/>
</beans>
并且作者指出,在spring4.0之后,如果不配置处理映射器、处理器适配器和视图解析器,也会使用默认的完成Spring的内部MVC工作。
按照课本使用Eclipse部署SpringMVCTest这个web应用。但是输入URL测试应用时报404错误。(解决方法在文章前面)