5.1简介
在spring mvc中,使用映射处理器可以把web请求映射到正确的后台控制器上,spring mvc内置了很多映射处理器,而且我们也可以自定义映射处理器。学习之前,我们有必要了解如下两个要点:
(1)映射处理器都能把请求传递到处理器执行链接(HandlerExecutionChain)上,并且处理器执行链接必须包含能处理该请求的处理器(实质就是处理器链上动态添加了了此处理器,可以结合filter工作原理理解),而且处理器链接也能包含一系列拦截器。
(2)上面列举的spring最常用的两种处理器都是继承自AbstractHandlerMapping类,因而它们具备父类的属性。
最常用的两个映射处理器分别为BeanNameUrlHandlerMapping和SimpleUrlHandlerMapping。其中SimpleUrlHandlerMapping我们前面已经介绍和使用过,这里就不再详述了。
5.2 开发环境
开发工具:myeclipse8.6.1
数据库:mysql5.5.23
服务器: tomcat6.0.37
框架版本: spring3.2.2
5.3 案例开发步骤
步骤一:在myeclipse8.6中新建web工程springmvc03,拷贝如下包到lib目下:
步骤二:编写web.xml 配置文件,代码如下:
=================================web.xml========================
<?xmlversion="1.0" encoding="UTF-8"?>
<web-appversion="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<!-- 配置spring的字符集过滤 -->
<filter>
<filter-name>encode</filter-name>
<filter-class>org.springframework.web.filter
.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encode</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
</web-app>
================================================================
步骤三:在com.wx.controls包下面编写控制器MessageControl.java,如下:
=======================MessageControl.java=========================
public class MessageControl implements Controller {
public ModelAndView handleRequest(HttpServletRequest request,
HttpServletResponseresponse) throws Exception {
ModelAndView mav = new ModelAndView("index");
mav.addObject("message", "默认的映射处理器示例");
return mav;
}
}
==================================================================
步骤四:在核心配置文件springmvc-servlet.xml里面完善如下配置
======================== springmvc-servlet.xml=======================
<beans>
<!-- 给由控制器返回的视图名加前缀和后缀 -->
<bean id="resourceView"
class="org.springframework.web.servlet
.view.InternalResourceViewResolver">
<property name="prefix"value="/"></property>
<property name="suffix"value=".jsp"></property>
</bean>
<bean name="/message.do" class="com.wx.controls.MessageControl"></bean>
</beans>
====================================================================
步骤五:在webroot目录下建立index.jsp
================================index.jsp=======================
<body>
<h1>${requestScope.message }</h1>
</body>
==================================================================
步骤六: 启动tomcat,发布项目,在地址栏输入 http://localhost:8080/springmvc05/message.do 进行测试。
知识讲解:
简析执行过程-->
(1)启动服务器后,当我们向服务器发送message.do请求时,首先被在web.xml中配置的前端控制器DispatcherServlet拦截到。
(2)前端控制器把此请求转交给后端控制器,下面分析转交过程:当在spmvc-servlet.xml中查找能执行message.do请求的映射处理器时,发现没有能处理此请求的映射处理器,这时便使用默认的映射处理器BeanNameUrlHandlerMapping:This is the default implementation used by the DispatcherServlet,alongwith DefaultAnnotationHandlerMapping (on Java 5 and higher). 我们还需注意:这种后端控制器的bean Name必须以“/”开头,并且要结合DispatcherServlet的映射配置。
(3)BeanNameUrlHandlerMapping处理器,会查找在spring容器中是否在名为“message.do”的bean实例。当查找到此实例后,则把此bean作为处理此请求的后端控制器。同时把自身加到映射处理器链上,并向处理器链传递此请求。
(4)后端控制器进行处理,并返回视图。