1.简析映射处理器
在spring mvc中,使用映射处理器可以把web请求映射到正确的处理器上,spring内置了很多映射处理器,而且我们也可以自定义映射处理器。下面的实例展示spring中最常用的两个映射处理器:BeanNameUrlHandlerMapping和SimpleUrlHandlerMapping。
(1)映射处理器都能把请求传递到处理器执行链接(HandlerExecutionChain)上,并且处理器执行链接必须包含能处理该请求的处理器(实质就是处理器链上动态添加了了此处理器,可以结合filter工作原理理解),而且处理器链接也能包含一系列拦截器。
(2)上面列举的spring最常用的两种处理器都是继承自AbstractHandlerMapping类,因而它们具备父类的属性。
2.实例:BeanNameUrlHandlerMapping
建立springMVC_03_handlerMappings项目,并导入相关jar包。
步骤一:建立后端控制器MessageController.java,代码如下:
package com.asm;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
public class MessageController implements Controller{
@Override
public ModelAndView handleRequest(HttpServletRequest arg0,
HttpServletResponse arg1) throws Exception {
ModelAndView mav=new ModelAndView("message");
mav.addObject("message", "你好,springMVC!");
return mav;
}
}
步骤二:配置web.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>classpath:springmvc-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
步骤三:配置springmvc-servlet.xml,代码如下:
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/page/"/>
<property name="suffix" value=".jsp"/>
</bean>
<bean name="/message.do" class="com.asm.MessageController"/>
步骤四:在WEB-INF/page目录下建立message.jsp,主要代码如下:
<body>
获取message中的信息:
${message}
</body>
步骤五:启动服务器,输入…/message.do访问测试。
简析执行过程:
(1)启动服务器后,当我们向服务器发送message.do请求后,首先被宰web.xml中配置的前端控制器dispatcherServlet拦截到
(2)前端控制器把请求转交给后端控制器,下面分析转交过程:当在springmvc-servlet.xml中查找能执行message.do请求的映射器处理器时,发现没有能处理的映射器处理器,则使用默认的映射器处理器BeanNameUrlHandlerMapping.我们还需注意:这种后端控制器
的bean Name必须以“/”开头,并且要结合DispatcherServlet的映射配置。同时beanName支持通配符配置。比如如果配
置: 时,当访问messasge.do时也可以成功访问
到MessageController类。
(3)BeanNameUrlHandlerMapping处理器会查找spring容器中是否存在名为“message.do”的bean实例,当查找到此实例后,则把此bean作为处理此请求的后端控制器,同时把自身加到映射器处理器链上,并向处理器链传递此请求。
(4)后端处理器进行处理,并返回视图。