springmvc的handler handlermapping怎么工作的

4226人阅读
SpringMVC(6)
SpringMVC中的HandlerMapping有三种不同的配置方式:
1、根据beanname来配置:
&bean class=&org.springframework.web.servlet.mvc.support.ControllerBeanNameHandlerMapping&&&/bean&
&bean name=&/user.do& class=&com.smile.controller.UserController&&&/bean&
2、根据简单URL 来查找Controller :
&bean class=&org.springframework.web.servlet.handler.SimpleUrlHandlerMapping&&
&property name=&mappings&&
&prop key=&/userInfo.do&&userController&/prop&
&/property&
&bean id=&userController& class=&com.smile.controller.UserController&&&/bean&
3、根据控制类的类名访问controller:
&bean class=&org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping&&&/bean&
class=&com.smile.controller.UserController&&&/bean&三种配置方式没有多大区别。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:78914次
积分:2001
积分:2001
排名:千里之外
原创:120篇
转载:33篇
(2)(6)(3)(13)(3)(9)(3)(3)(13)(34)(37)(27)
(window.slotbydup = window.slotbydup || []).push({
id: '4740887',
container: s,
size: '250,250',
display: 'inlay-fix'SpringMVC工作原理 - 简书
SpringMVC工作原理
上面的是springMVC的工作原理图:1、客户端发出一个http请求给web服务器,web服务器对http请求进行解析,如果匹配DispatcherServlet的请求映射路径(在web.xml中指定),web容器将请求转交给DispatcherServlet.2、DipatcherServlet接收到这个请求之后将根据请求的信息(包括URL、Http方法、请求报文头和请求参数Cookie等)以及HandlerMapping的配置找到处理请求的处理器(Handler)。3-4、DispatcherServlet根据HandlerMapping找到对应的Handler,将处理权交给Handler(Handler将具体的处理进行封装),再由具体的HandlerAdapter对Handler进行具体的调用。5、Handler对数据处理完成以后将返回一个ModelAndView()对象给DispatcherServlet。6、Handler返回的ModelAndView()只是一个逻辑视图并不是一个正式的视图,DispatcherSevlet通过ViewResolver将逻辑视图转化为真正的视图View。7、Dispatcher通过model解析出ModelAndView()中的参数进行解析最终展现出完整的view并返回给客户端。---------------------------------------------------------------------在web.xml配置中&url-pattern&/url-pattern&拦截的是客户端发送过来的请求,“/”表示拦截除了jsp中的所有的,“/*”表示“.jsp”请求也会被拦截。请求拦截之后,控制权被DispatcherServlet获取,然后DispatcherServlet将拦截到到的请求交与@Controller注解下与@RequestMapping注解进行匹配,使得@RequestMapping注解下的方法对请求进行处理。Controller下的方法处理完之后,return的返回值默认为视图对象,Controller下的方法处理完之后,return的返回值默认为视图对象Controller下的方法处理完之后,return的返回值默认为视图对象,,通过XXX-servlet.xml中配置的和添加上下文之后,在相应路径中寻找视图文件。当然,也可以通过重定向return "redirect:/ XXX";,使得另一个Controller对请求XXX继续进行处理。君,已阅读到文档的结尾了呢~~
基于ssh框架和jquery技术的网上书城,jquery ssh,ssh ajax jquery,jquery ui框架,jquery框架,基于jquery的ui框架,jquery验证框架,jquery框架有哪些,jquery前端框架,jquery mobile 框架
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
基于ssh框架和jquery技术的网上书城
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口Spring MVC教程 映射处理器Handler Mapping
一、简析映射处理器
在spring m中,使用映射处理器可以把web请求映射到正确的处理器上,spring内置了很多映射处理器,而且我们也可以自定义映射处理器。下面的实例展示spring中最常用的三个映射处理器:
BeanNameUrlHandlerMapping(默认)官方推荐使用默认映射器
SimpleUrlHandlerMapping
ControllerClassNameHandlerMapping
快速案例演示:
&!-- bean名url处理器映射 --&
&bean id=&beanNameUrlHandlerMapping& class=&org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping&&
& & & & &property name=&order& value=&1& /&
&!-- 简单url处理器映射 --&
&bean id=&simpleUrlHandlerMapping& class=&org.springframework.web.servlet.handler.SimpleUrlHandlerMapping&&
&property name=&mappings&&
& & & & & & & & &prop key=&/u9vip.action&&u9Controller&/prop&
&/property&
&property name=&order& value=&2& /&
&!-- 控制器类名处理器映射 --&
&bean id=&controllerClassNameHandlerMapping& class=&org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping&&
& & & & &property name=&order& value=&3& /&
在正式开始前有必要了解以下相关要点:
(1)映射处理器都能把请求传递到处理器执行链接(HandlerExecutionChain)上,并且处理器执行链接必须包含能处理该请求的处理器(实质就是处理器链上动态添加了了此处理器,可以结合filter工作原理理解),而且处理器链接也能包含一系列拦截器。
(2)上面列举的spring最常用的两种处理器都是继承自AbstractHandlerMapping类,因而它们具备父类的属性。
二、实例:BeanNameUrlHandlerMapping
建立SpringMVC02项目,并导入相关jar包。
快速下载地址:链接:/s/1c0h6RGO 提取密码:2xqe
com.springsource.javax.servlet..jstl-1.1.2.jar
com.springsource.org.aopalliance-1.0.0.jar
com.springsource.mons.logging-1.1.1.jar
com.springsource.org.apache.taglibs.standard-1.1.2.jar
org.springframework.aop-3.0.0.RELEASE.jar
org.springframework.asm-3.0.0.RELEASE.jar
org.springframework.beans-3.0.0.RELEASE.jar
org.springframework.context.support-3.0.0.RELEASE.jar
org.springframework.context-3.0.0.RELEASE.jar
org.springframework.core-3.0.0.RELEASE.jar
org.springframework.expression-3.0.0.RELEASE.jar
org.springframework.web.servlet-3.0.0.RELEASE.jar
org.springframework.web-3.0.0.RELEASE.jar
步骤一:建立后端控制器 &包:com.u9vip.springmvc.controller & & &类名:U9Controller.java,代码如下:
package com.u9vip.springmvc.
import javax.servlet.http.HttpServletR
import javax.servlet.http.HttpServletR
import org.springframework.web.servlet.ModelAndV
import org.springframework.web.servlet.mvc.AbstractC
public class U9Controller extends AbstractController {
& & & & @Override
& & & & protected ModelAndView handleRequestInternal(HttpServletRequest arg0,
& & & & & & & & & & & & HttpServletResponse arg1) throws Exception {
& & & & & & & & //
& & & & & & & &
步骤二:配置web.xml,代码如下:
&?xml version=&1.0& encoding=&UTF-8&?&
&web-app version=&2.5&&
& & & & xmlns=&/xml/ns/javaee&&
& & & & xmlns:xsi=&https://www.w3.org/2001/XMLSchema-instance&&
& & & & xsi:schemaLocation=&/xml/ns/javaee&
& & & & /xml/ns/javaee/web-app_2_5.xsd&&
& & & & &!-- 配置spring核心servlet --&
& & & & &servlet&
& & & & & & & & &servlet-name&action&/servlet-name&
& & & & & & & & &servlet-class&org.springframework.web.servlet.DispatcherServlet&/servlet-class&
& & & & & & & & &load-on-startup&1&/load-on-startup&
& & & & &/servlet&
& & & & &!--
& & & & & & & & url-pattern配置为/,不带文件后缀,会造成其它静态文件(js,css等)不能访问。如配为*.do,则不影响静态文件的访问
& & & & *.action配置,会拦截所有以.action为后缀的请求
& & & & 注意:此处我们的servlet-name 配置的为action,则当我们配置&应用上下文&时。名称应该为action-servlet.xml
& & & & --&
& & & & &servlet-mapping&
& & & & & & & & &servlet-name&action&/servlet-name&
& & & & & & & & &url-pattern&*.action&/url-pattern&
& & & & &/servlet-mapping&
& &welcome-file-list&
& & &welcome-file&index.jsp&/welcome-file&
& &/welcome-file-list&
&/web-app&
步骤三:配置action-servlet.xml,代码如下:
&?xml version=&1.0& encoding=&UTF-8&?&
&beans xmlns=&https://www.springframework.org/schema/beans&
xmlns:context=&https://www.springframework.org/schema/context&
xmlns:p=&https://www.springframework.org/schema/p&
xmlns:mvc=&https://www.springframework.org/schema/mvc&
xmlns:xsi=&https://www.w3.org/2001/XMLSchema-instance&
xsi:schemaLocation=&https://www.springframework.org/schema/beans
& & & https://www.springframework.org/schema/beans/spring-beans-3.0.xsd
& & & https://www.springframework.org/schema/context
& & & https://www.springframework.org/schema/context/spring-context.xsd
& & & https://www.springframework.org/schema/mvc
& & & https://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd&&
& & &bean id=&u9Controller& name=&/u9.action& class=&com.u9vip.springmvc.controller.U9Controller&&&/bean&
& & & & &&!-- 视图解析器 --&
& & & & &&bean class=&org.springframework.web.servlet.view.InternalResourceViewResolver&&
& & & & & &!-- 前缀名 --&
& & & & &&property name=&prefix& value=&/WEB-INF/U9VIP/&&&/property&
& & & & & &!-- 后缀名 --&
& & & & & &property name=&suffix& &value=&.jsp&&&/property&
& & & & &&/bean&
& & & & & & & &&
步骤四:在WEB-INF/U9VIP目录下建立U9FirstSpringMVC.jsp,主要代码如下:
&%@ page language=&java& import=&java.util.*& pageEncoding=&UTF-8&%&
&!DOCTYPE HTML PUBLIC &-//W3C//DTD HTML 4.01 Transitional//EN&&
& & & & &head&&title&My JSP 'U9FirstSpringMVC.jsp' starting page&/title&
& & & & &/head&
& & & & &body&
& & & & & & & & ${message}
& & & & & & & & &br&
& & & & &/body&
步骤五:启动服务器,输入https://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
5 and higher). 我们还需注意:这种后端控制器的bean Name必须以&/&开头,并且要结合DispatcherServlet的映射配置。同时beanName支持通配符配置。比如如果配置:*.action 时,当访问U9VIP.action时也可以成功访问到U9Controller类。
(3)BeanNameUrlHandlerMapping处理器,会查找在spring容器中是否在名为&u9.action&的bean实例。当查找到此实例后,则把此bean作为处理此请求的后端控制器。同时把自身加到映射处理器链上,并向处理器链传递此请求。
(4)后端控制器进行处理,并返回视图。
三、实例:SimpleUrlHandlerMapping
步骤一:建立后端控制器U9SimpleUrlHandlerMappingContrller.java.代码如下:
package com.u9vip.springmvc.
import javax.servlet.http.HttpServletR
import javax.servlet.http.HttpServletR
import org.springframework.web.servlet.ModelAndV
import org.springframework.web.servlet.mvc.AbstractC
public class U9SimpleUrlHandlerMappingContrller extends AbstractController {
& & & & @Override
& & & & protected ModelAndView handleRequestInternal(HttpServletRequest arg0,
& & & & & & & & & & & & HttpServletResponse arg1) throws Exception {
& & & & & & & & //
& & & & & & & & System.out.println(&U9社区第二个SpringMVC 控制层案例 &SimpleUrlHandlerMapping&);
& & & & & & & & return new ModelAndView(&U9FirstSpringMVC&, &message&,
& & & & & & & & & & & & & & & & &U9社区第二个SpringMVC 控制层案例 SimpleUrlHandlerMapping&);
步骤二:在action-servlet.xml中增加如下配置:
&bean id=&simpleUrlHandlerMapping& class=&org.springframework.web.servlet.handler.SimpleUrlHandlerMapping&& &&
& & & & &property name=&mappings&& & &
& & & & & & &props& & &
& & & & & & & & &prop key=&/u9demo2.action&&u9SimpleUrlHandlerMappingContrller&/prop&
& & & & & & &&/props& & &
& & & & &&/property& & &
& & &&/bean& & &
& & &bean id=&u9SimpleUrlHandlerMappingContrller& class=&com.u9vip.springmvc.controller.U9SimpleUrlHandlerMappingContrller&& & &
& & &&/bean& &&标签:至少1个,最多5个
SpringMVC的入口是DispatchServlet,它的工作大致可以分为两个部分,一个是初始化,另外一个是请求处理。下面我们对它的工作原理做简单分析。
1. 类继承关系
HttpServletBean重写了GenericServlet的init()方法,它是整个初始化的入口。
首先,会读取配置在ServletContext中的bean属性参数,这些属性参数设置在web.xml的web容器初始化参数中,即web.xml中的context-param,然后设置这些bean属性;
接着会执行ioc容器的初始化,通过反射的方式去完成XmlWebApplicationContext的创建;
在调用refresh方法后,DispatchServlet的initStrategies()方法被调用。由它完成springmvc框架各部分的初始化,比如HandlerMapping、ViewResolver等。
3. 请求处理
FrameworkServlet重写了HttpServlet的一系列请求方法,请求首先会被FrameworkServlet的processRequest()接收,经过DispatcherServle的doService(),最终由doDispatch()完成请求处理。doDispatch()方法是springmvc框架中最核心的部分,主要包括:
1. 准备ModelAndView2. 调用getHandler()来处理HTTP请求
首先会查询HandlerMappings,它包含了一系列从URL请求到Controller的映射。基于注解配置的springmvc使用的是DefaultAnnotationHandlerMapping。getHandler()最终会返回一个HandlerExecutionChain对象,其中包含了最终的Controller和定义的一个拦截器链。
3. 通过HandlerAdapter的handle()来触发Controller中方法的调用,最后返回ModelAndView对象
这个ModelAndView对象由相应的视图解析器解析出视图对象并由视图对象完成页面的渲染呈现。
0 收藏&&|&&9
你可能感兴趣的文章
31 收藏,1.3k
7 收藏,333
3 收藏,222
本作品采用 署名-非商业性使用-禁止演绎 4.0 国际许可协议 进行许可
分享到微博?
技术专栏,帮你记录编程中的点滴,提升你对技术的理解收藏感兴趣的文章,丰富自己的知识库
明天提醒我
我要该,理由是:}

我要回帖

更多关于 springmvc handler 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信