第三集 Spring MVC教程 映射处理器Handler Mapping

Spring MVC教程 第三集 映射处理器Handler Mapping
http://www.u9vip.com/forum.php?mod=viewthread&tid=214&fromuid=1
(出处: U9社区)


注:本文为U9社区 http://www.u9vip.com/ 原创内容,请大家在转载时保留文章出处。

一、简析映射处理器
在spring mvc中,使用映射处理器可以把web请求映射到正确的处理器上,spring内置了很多映射处理器,而且我们也可以自定义映射处理器。下面的实例展示spring中最常用的三个映射处理器:
  • BeanNameUrlHandlerMapping(默认)官方推荐使用默认映射器
  • SimpleUrlHandlerMapping
  • ControllerClassNameHandlerMapping

快速案例演示:
  1. <!-- bean名url处理器映射 -->
  2. <bean id="beanNameUrlHandlerMapping" class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">
  3.         <property name="order" value="1" />
  4. </bean>

  5. <!-- 简单url处理器映射 -->
  6. <bean id="simpleUrlHandlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
  7. <property name="mappings">
  8. <props>
  9.                 <prop key="/u9vip.action">u9Controller</prop>
  10. </props>
  11. </property>
  12. <property name="order" value="2" />
  13. </bean>

  14. <!-- 控制器类名处理器映射 -->
  15. <bean id="controllerClassNameHandlerMapping" class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping">
  16.         <property name="order" value="3" />
  17. </bean>
复制代码



在正式开始前有必要了解以下相关要点:

(1)映射处理器都能把请求传递到处理器执行链接(HandlerExecutionChain)上,并且处理器执行链接必须包含能处理该请求的处理器(实质就是处理器链上动态添加了了此处理器,可以结合filter工作原理理解),而且处理器链接也能包含一系列拦截器。

(2)上面列举的spring最常用的两种处理器都是 继承 AbstractHandlerMapping 类,因而它们具备父类的属性。


二、实例:BeanNameUrlHandlerMapping


建立SpringMVC02项目,并导入相关jar包。
快速下载地址:链接: http://pan.baidu.com/s/1c0h6RGO  提取密码:2xqe
  1. com.springsource.javax.servlet.jsp.jstl-1.1.2.jar
  2. com.springsource.org.aopalliance-1.0.0.jar
  3. com.springsource.org.apache.commons.logging-1.1.1.jar
  4. com.springsource.org.apache.taglibs.standard-1.1.2.jar
  5. org.springframework.aop-3.0.0.RELEASE.jar
  6. org.springframework.asm-3.0.0.RELEASE.jar
  7. org.springframework.beans-3.0.0.RELEASE.jar
  8. org.springframework.context.support-3.0.0.RELEASE.jar
  9. org.springframework.context-3.0.0.RELEASE.jar
  10. org.springframework.core-3.0.0.RELEASE.jar
  11. org.springframework.expression-3.0.0.RELEASE.jar
  12. org.springframework.web.servlet-3.0.0.RELEASE.jar
  13. org.springframework.web-3.0.0.RELEASE.jar
复制代码



步骤一:建立后端控制器  包:com.u9vip.springmvc.controller      类名:U9Controller.java,代码如下:
  1. package com.u9vip.springmvc.controller;

  2. import javax.servlet.http.HttpServletRequest;
  3. import javax.servlet.http.HttpServletResponse;

  4. import org.springframework.web.servlet.ModelAndView;
  5. import org.springframework.web.servlet.mvc.AbstractController;

  6. public class U9Controller extends AbstractController {

  7.         @Override
  8.         protected ModelAndView handleRequestInternal(HttpServletRequest arg0,
  9.                         HttpServletResponse arg1) throws Exception {
  10.                 // http://www.u9vip.com U9社区
  11.                 return null;
  12.         }

  13. }
复制代码


步骤二:配置web.xml,代码如下:
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app version="2.5" 
  3.         xmlns="http://java.sun.com/xml/ns/javaee" 
  4.         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  5.         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
  6.         http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  7.         
  8.         <!-- 配置spring核心servlet -->
  9.         <servlet>
  10.                 <servlet-name>action</servlet-name>
  11.                 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  12.                 <load-on-startup>1</load-on-startup>
  13.         </servlet>
  14.         <!--
  15.                 url-pattern配置为/,不带文件后缀,会造成其它静态文件(js,css等)不能访问。如配为*.do,则不影响静态文件的访问
  16.         *.action配置,会拦截所有以.action为后缀的请求
  17.         注意:此处我们的servlet-name 配置的为action,则当我们配置“应用上下文”时。名称应该为action-servlet.xml
  18.         -->
  19.         <servlet-mapping>
  20.                 <servlet-name>action</servlet-name>
  21.                 <url-pattern>*.action</url-pattern>
  22.         </servlet-mapping>
  23.         
  24.   <welcome-file-list>
  25.     <welcome-file>index.jsp</welcome-file>
  26.   </welcome-file-list>
  27. </web-app>
复制代码



步骤三:配置action-servlet.xml,代码如下:
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:context="http://www.springframework.org/schema/context"
  4. xmlns:p="http://www.springframework.org/schema/p"
  5. xmlns:mvc="http://www.springframework.org/schema/mvc"
  6. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  7. xsi:schemaLocation="http://www.springframework.org/schema/beans
  8.       http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
  9.       http://www.springframework.org/schema/context
  10.       http://www.springframework.org/schema/context/spring-context.xsd
  11.       http://www.springframework.org/schema/mvc
  12.       http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
  13.    
  14.    
  15.     <bean id="u9Controller" name="/u9.action" class="com.u9vip.springmvc.controller.U9Controller"></bean>
  16.    
  17.          <!-- 视图解析器 -->
  18.          <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  19.           <!-- 前缀名 -->
  20.          <property name="prefix" value="/WEB-INF/U9VIP/"></property>
  21.           <!-- 后缀名 -->
  22.           <property name="suffix"  value=".jsp"></property>
  23.          </bean>
  24.          
  25. </beans>
复制代码

                
步骤四:在WEB-INF/U9VIP目录下建立U9FirstSpringMVC.jsp,主要代码如下:
  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  3. <html>
  4.         <head><title>My JSP 'U9FirstSpringMVC.jsp' starting page</title>
  5.         </head>
  6.         <body>
  7.                 ${message}
  8.                 <br>
  9.         </body>
  10. </html>
复制代码


步骤五:启动服务器,输入 http://127.0.0.1:8080/SpringMVC02/u9.action  访问测试。

简析执行过程

(1)启动服务器后,当我们向服务器发送u9.action请求时,首先被在web.xml中配置的前端控制器DispatcherServlet拦截到。

(2)前端控制器把此请求转交给后端控制器,下面分析转交过程:当在action-servlet.xml中查找能执行u9.action请求的映射处理器时,发现没有能处理此请求的映射处理器,这时便使用默认的映射处理器BeanNameUrlHandlerMapping:This is the default implementation used by the DispatcherServlet, along with DefaultAnnotationHandlerMapping (on Java 5 and higher). 我们还需注意:这种后端控制器的bean Name必须以“/”开头,并且要结合DispatcherServlet的映射配置。同时beanName支持通配符配置。比如如果配置:*.action 时,当访问U9VIP.action时也可以成功访问到U9Controller类。

(3)BeanNameUrlHandlerMapping处理器,会查找在spring容器中是否在名为“u9.action”的bean实例。当查找到此实例后,则把此bean作为处理此请求的后端控制器。同时把自身加到映射处理器链上,并向处理器链传递此请求。

(4)后端控制器进行处理,并返回视图。




三、实例:SimpleUrlHandlerMapping
步骤一:建立后端控制器U9SimpleUrlHandlerMappingContrller.java.代码如下:

  1. package com.u9vip.springmvc.controller;

  2. import javax.servlet.http.HttpServletRequest;
  3. import javax.servlet.http.HttpServletResponse;

  4. import org.springframework.web.servlet.ModelAndView;
  5. import org.springframework.web.servlet.mvc.AbstractController;

  6. public class U9SimpleUrlHandlerMappingContrller extends AbstractController {

  7.         @Override
  8.         protected ModelAndView handleRequestInternal(HttpServletRequest arg0,
  9.                         HttpServletResponse arg1) throws Exception {
  10.                 // http://www.u9vip.com U9社区
  11.                 System.out.println("U9社区第二个SpringMVC 控制层案例  SimpleUrlHandlerMapping");
  12.                 return new ModelAndView("U9FirstSpringMVC", "message",
  13.                                 "U9社区第二个SpringMVC 控制层案例 SimpleUrlHandlerMapping");
  14.         }

  15. }
复制代码


步骤二:在action-servlet.xml中增加如下配置:

  1. <bean id="simpleUrlHandlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">   
  2.         <property name="mappings">    
  3.             <props>    
  4.                 <prop key="/u9demo2.action">u9SimpleUrlHandlerMappingContrller</prop>
  5.              </props>    
  6.          </property>    
  7.      </bean>    
  8.     
  9.     <bean id="u9SimpleUrlHandlerMappingContrller" class="com.u9vip.springmvc.controller.U9SimpleUrlHandlerMappingContrller">    
  10.       
  11.      </bean>   
复制代码


步骤三:访问  http://127.0.0.1:8080/SpringMVC02//u9demo2.action
说明:
(1)通过前面实例我们可以知道,SimpleController这样的后端控制器必须绑定一个commandClass对象,在这里我们通过配置文件绑定。

(2)SimpleUrlHandlerMapping是一个更强大的映射处理器,它除了支持上面 的这种配置,还支持Ant风格的路径匹配。另外也可以进行如下形式的配置:

  1.         <bean id="simpleUrlHandlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">   
  2.         <property name="mappings">    
  3.           <!--  <props>    
  4.                 <prop key="/u9demo2.action">u9SimpleUrlHandlerMappingContrller</prop>
  5.              </props>    --> 
  6.              <value>/u9demo2.action=u9SimpleUrlHandlerMappingContrller</value> 
  7.          </property>    
  8.      </bean>   
复制代码





四、实例ControllerClassNameHandlerMapping


步骤一:在action-servlet.xml中增加如下配置:

  1.         <!-- 控制器类名处理器映射 -->
  2.         <bean id="controllerClassNameHandlerMapping"
  3.                 class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping">
  4.                 <property name="order" value="3" />
  5.         </bean>
复制代码


测试访问:
http://127.0.0.1:8080/SpringMVC0 ... ingContrller.action






注:本文为U9社区  http://www.u9vip.com/  原创内容,请大家在转载时保留文章出处。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值