spring mvc基础篇(五):映射处理器之BeanNameUrlHandlerMapping

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)后端控制器进行处理,并返回视图。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

御前两把刀刀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值