




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
知识点前端技术分享SpringMVC工作原理和配置SpringMVC和前端技术分享前端技术分享参考地址:SpringMVC和前端技术分享SpringMVC工作原理和配置一.SpringMVC的控制器DispatcherServlet
使用SpringMVC,配置DispatcherServlet是第一步。DispatcherServlet是一个Servlet,所以可以配置多个DispatcherServlet。DispatcherServlet是前置控制器,配置在web.xml文件中的。拦截匹配的请求,Servlet拦截匹配规则要自已定义,把拦截下来的请求,依据某某规则分发到目标Controller来处理。DispatcherServlet主要用作职责调度工作,本身主要用于控制流程,主要职责如下:1、文件上传解析,如果请求类型是multipart将通过MultipartResolver进行文件上传解析;2、通过HandlerMapping,将请求映射到处理器(返回一个HandlerExecutionChain,它包括一个处理器、多个HandlerInterceptor拦截器);3、通过HandlerAdapter支持多种类型的处理器(HandlerExecutionChain中的处理器);4、通过ViewResolver解析逻辑视图名到具体视图实现;5、本地化解析;6、渲染具体的视图等;7、如果执行过程中遇到异常将交给HandlerExceptionResolver来解析。SpringMVC和前端技术分享SpringMVC工作原理和配置SpringMVC和前端技术分享SpringMVC工作原理和配置SpringMVC和前端技术分享SpringMVC工作原理和配置DispatcherServlet是一个Servlet,可以同时配置多个,每个DispatcherServlet有一个自己的上下文对象(WebApplicationContext),称为子上下文(子容器),子上下文可以访问父上下文中的内容,但父上下文不能访问子上下文中的内容。它也保存在ServletContext中,key是"org.springframework.web.servlet.FrameworkServlet.CONTEXT"+Servlet名称。当一个Request对象产生时,会把这个子上下文对象(WebApplicationContext)保存在Request对象中,key是DispatcherServlet.class.getName()+".CONTEXT"。可以使用工具类取出上下文对象:RequestContextUtils.getWebApplicationContext(request);SpringMVC和前端技术分享SpringMVC工作原理和配置二.DispatcherServlet的默认配置DispatcherServlet的默认配置在DispatcherSperties(和DispatcherServlet类在一个包下)中,而且是当Spring配置文件中没有指定配置时使用的默认策略:DispatcherServlet默认使用WebApplicationContext作为上下文,因此我们来看一下该上下文中有哪些特殊的Bean:1、Controller:处理器/页面控制器,做的是MVC中的C的事情,但控制逻辑转移到前端控制器了,用于对请求进行处理;2、HandlerMapping:请求到处理器的映射,如果映射成功返回一个HandlerExecutionChain对象(包含一个Handler处理器(页面控制器)对象、多个HandlerInterceptor拦截器)对象;如BeanNameUrlHandlerMapping将URL与Bean名字映射,映射成功的Bean就是此处的处理器;3、HandlerAdapter:HandlerAdapter将会把处理器包装为适配器,从而支持多种类型的处理器,即适配器设计模式的应用,从而很容易支持很多类型的处理器;如SimpleControllerHandlerAdapter将对实现了Controller接口的Bean进行适配,并且掉处理器的handleRequest方法进行功能处理;4、ViewResolver:ViewResolver将把逻辑视图名解析为具体的View,通过这种策略模式,很容易更换其他视图技术;如InternalResourceViewResolver将逻辑视图名映射为jsp视图;SpringMVC和前端技术分享SpringMVC工作原理和配置5、LocalResover:本地化解析,因为Spring支持国际化,因此LocalResover解析客户端的Locale信息从而方便进行国际化;6、ThemeResovler:主题解析,通过它来实现一个页面多套风格,即常见的类似于软件皮肤效果;7、MultipartResolver:文件上传解析,用于支持文件上传;8、HandlerExceptionResolver:处理器异常解析,可以将异常映射到相应的统一错误界面,从而显示用户友好的界面(而不是给用户看到具体的错误信息);9、RequestToViewNameTranslator:当处理器没有返回逻辑视图名等相关信息时,自动将请求URL映射为逻辑视图名;10、FlashMapManager:用于管理FlashMap的策略接口,FlashMap用于存储一个请求的输出,当进入另一个请求时作为该请求的输入,通常用于重定向场景SpringMVC和前端技术分享SpringMVC工作原理和配置二.SpringMVC的配置<!--
自动扫描的包名
-->
<context:component-scan
base-package="com.app,com.core,JUnit4"
></context:component-scan>
<!--
默认的注解映射的支持
-->
<mvc:annotation-driven
/>
这是一种简写形式,完全可以手动配置替代这种简写形式,会自动注册DefaultAnnotationHandlerMapping与AnnotationMethodHandlerAdapter两个bean,是springMVC为@Controllers分发请求所必须的。
<!--
视图解释类
-->
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property
name="prefix"
value="/WEB-INF/jsp/"/>
<property
name="suffix"
value=".jsp"/><!--可为空,方便实现自已的依据扩展名来选择视图解释类的逻辑
-->
<property
name="viewClass"
value="org.springframework.web.servlet.view.JstlView"
/>
</bean>
SpringMVC和前端技术分享SpringMVC工作原理和配置
<!--
对静态资源文件的访问
方案一
(二选一)
-->
<mvc:default-servlet-handler/>
会把"/**"url,注册到SimpleUrlHandlerMapping的urlMap中,把对静态资源的访问由HandlerMapping转到org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler处理并返回.
DefaultServletHttpRequestHandler使用就是各个Servlet容器自己的默认Servlet.
<!--
对静态资源文件的访问
方案二
(二选一)-->
<mvc:resources
mapping="/images/**"
location="/images/"
cache-period="31556926"/>
</beans>
在spring3.0.4以后版本提供了mvc:resources,使用<mvc:resources/>元素,把mapping的URI注册到SimpleUrlHandlerMapping的urlMap中,
key为mapping的URIpattern值,而value为ResourceHttpRequestHandler
SpringMVC和前端技术分享SpringMVC工作原理和配置
<!--
拦截器
-->
org.springframework.web.servlet.HandlerInterceptor接口,org.springframework.web.servlet.handler.HandlerInterceptorAdapter适配器,
实现这个接口或继承此类,可以非常方便的实现自己的拦截器。
分别实现预处理、后处理(调用了Service并返回ModelAndView,但未进行页面渲染)、返回处理(已经渲染了页面)
在preHandle中,可以进行编码、安全控制等处理;
在postHandle中,有机会修改ModelAndView;
在afterCompletion中,可以根据ex是否为null判断是否发生了异常,进行日志记录。拦截器会在什么时候执行呢?一个请求交给一个HandlerMapping时,这个HandlerMapping先找有没有处理器来处理这个请求,如何找到了,就执行拦截器,执行完拦截后,交给目标处理器。
如果没有找到处理器,那么这个拦截器就不会被执行。
SpringMVC和前端技术分享SpringMVC工作原理和配置
在springMVC的配置文件中配置有三种方法1.<mvc:interceptors>
<bean
class="com.app.mvc.MyInteceptor"
/>
</mvc:interceptors>
只要请求被HandlerMapping上,即只找到一个处理器,这个拦截器总会被执行的。起到了总拦截器的作用。如果是REST风格的URL,静态资源也会被拦截。方案二,(近似)总拦截器,拦截匹配的URL<mvc:interceptors
>
<mvc:interceptor>
<mvc:mapping
path="/user/*"
/>
<!--
/user/*
-->
<bean
class="com.mvc.MyInteceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
<mvc:interceptors><mvc:interceptor><mvc:mappingpath="/user/*"/><!--/user/*--><beanclass="com.mvc.MyInteceptor"></bean></mvc:interceptor></mvc:interceptors>就是比方案一多了一个URL匹配。如果是REST风格的URL,静态资源也会被拦截。
SpringMVC和前端技术分享SpringMVC工作原理和配置<bean
class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
<property
name="interceptors">
<list>
<bean
class="com.mvc.MyInteceptor"></bean>
</list>
</property>
</bean>如果是REST风格的URL,静态资源就不会被拦截。因为我们精准的注入了拦截器。如果使用了<mvc:annotation-driven/>,
它会自动注册DefaultAnnotationHandlerMapping与AnnotationMethodHandlerAdapter这两个bean,所以就没有机会再给它注入interceptors属性,就无法指定拦截器。
SpringMVC和前端技术分享SpringMVC工作原理和配置三.SpringMVC的数据绑定1).常用注释1、@RequestParam绑定单个请求参数值;2、@PathVariable绑定URI模板变量值;3、@CookieValue绑定Cookie数据值4、@RequestHeader绑定请求头数据;5、@ModelValue绑定参数到命令对象;6、@SessionAttributes绑定命令对象到session;7、@RequestBody绑定请求的内容区数据并能进行自动类型转换等。8、@RequestPart绑定“multipart/data”数据,除了能绑定@RequestParam能做到的请求参数外,还能绑定上传的文件等。例如:@RequestMapping(value
=
"/error1")
public
String
error1(UserModel
user,
BindingResult
result)
可以直接得到提交的表单数据user,和对user验证
SpringMVC和前端技术分享SpringMVC工作原理和配置2)url数据绑定1、普通URL路径映射@RequestMapping(value={"/test1",
"/user/create"}):多个URL路径可以映射到同一个处理器的功能处理方法。2、URI模板模式映射@RequestMapping(value="/users/{userId}"):{×××}占位符,请求的URL可以是“/users/123456”或“/users/abcd”,通过@PathVariable可以提取URI模板模式中的{×××}中的×××变量。@RequestMapping(value="/users/{userId}/create"):这样也是可以的,请求的URL可以是“/users/123/create”。3、Ant风格的URL路径映射@RequestMapping(value="/users/**"):可以匹配“/users/abc/abc”,但“/users/123”将会被【URI模板模式映射中的“/users/{userId}”模式优先映射到】@RequestMapping(value="/product?"):可匹配“/product1”或“/producta”,但不匹配“/product”或“/productaa”;
SpringMVC和前端技术分享SpringMVC工作原理和配置3.数据转换springMVC实际是先利用java.beans.PropertyEditor中的setAdText方法来把string格式的输入转换为bean属性1.利用@InitBinder来注册customerpropertyEditor即在controller类中增加一个使用@InitBinder标注的方法,在其中注册customerEditor@InitBinder
publicvoidinitBinder(WebDataBinderbinder){
SimpleDateFormatdateFormat=newSimpleDateFormat("yyyy-MM-dd");
dateFormat.setLenient(false);
binder.registerCustomEditor(Date.class,newCustomDateEditor(
dateFormat,false));
}
SpringMVC和前端技术分享SpringMVC工作原理和配置2.继承WebBindingInitializer接口来实现全局注册
publicclassCustomerBindingimplementsWebBindingInitializer并修改servletcontextxml配置文件<bean
class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<propertyname="webBindingInitializer">
<bean
class="net.zhepu.web.customerBinding.CustomerBinding"/>
</property>
</bean>但这样一来就无法使用mvc:annotation-driven
了。3.使用conversion-service来注册自定义的converter
DataBinder实现了PropertyEditorRegistry,TypeConverter这两个interface
SpringMVC和前端技术分享SpringMVC工作原理和配置<beanid="conversionService"
class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<propertyname="converters">
<list>
<beanclass="net.zhepu.web.customerBinding.CustomerConverter"/>
</list>
</property>
</bean>需要修改springservicecontextxml配置文件中的annotation-driven,增加属性conversion-service指向新增的conversionServicebean。<mvc:annotation-drivenvalidator="validator"
conversion-service="conversionService"/>
SpringMVC和前端技术分享SpringMVC工作原理和配置<beanid="conversionService"
class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<propertyname="converters">
<list>
<beanclass="net.zhepu.web.customerBinding.CustomerConverter"/>
</list>
</property>
</bean>需要修改springservicecontextxml配置文件中的annotation-driven,增加属性conversion-service指向新增的conversionServicebean。<mvc:annotation-drivenvalidator="validator"
conversion-service="conversi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 华为公司担保管理制度
- 医院客户服务管理制度
- 工匠精神培养管理制度
- 小学学校钉钉管理制度
- 光伏场站设备管理制度
- 公司股东决议管理制度
- 加工工厂设备管理制度
- 医院呆滞物资管理制度
- 外包司机加班管理制度
- 工地楼顶日常管理制度
- 问卷调查设计及研究方法(浙江大学)知到智慧树章节答案
- 果园管理合同
- 广东省广州市南沙区南外实验学校2022-2023学年七年级上学期期中考试英语试题(原卷版+解析)
- 市政工程雨污水管网维护方案
- 火锅店餐厅管理制度
- 道化学(火灾爆炸危险指数评价法)
- 农网配电营业工(台区经理)高级技师资格考试题库(全真题库)
- 消防工程火灾自动报警及联动控制系统施工
- 2024年江西省高考地理试卷真题(含答案)
- 消防员初、中、高级职业鉴定技能项目操作规程
- 《丝绸服饰文化》课件-第一讲丝绸的起源与发展
评论
0/150
提交评论