4-Spring MVC
2018-04-14 17:50:17 0 举报
AI智能生成
Spring提供的一个优秀的MVC框架,在数据绑定、视图解析、本地化处理及静态资源处理上都有不俗的表现
作者其他创作
大纲/内容
Spring MVC
简介
Spring提供的一个优秀的MVC框架
采用了松散耦合可插拔组件结构
支持REST风格的URL请求
在数据绑定、视图解析、本地化处理及静态资源处理上都有不俗的表现
Spring MVC系统概述
Spring MVC体系结构
DispatcherServlet
DispatcherServlet是SpringMVC的灵魂和心脏,它负责接受HTTP请求并协调Spring MVC的各个组件完成请求处理工作
在web.xml中配置
<!-- spring mvc 配置开始 --> <!-- Spring MVC本质上就是一个Servlet --> <servlet> <servlet-name>springMVC</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- contextConfigLocation参数来指定Spring MVC配置文件的位置,默认为WEB-INF/[Servlet-Name]-servlet.xml文件 --> <!-- <init-param> <param-name>contextConfigLocation</param-name> <param-value></param-value> </init-param>--> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springMVC</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <!-- spring mvc 配置结束 -->
初始化Spring MVC组件
protected void initStrategies(ApplicationContext context) {\t\tinitMultipartResolver(context);\t\tinitLocaleResolver(context);\t\tinitThemeResolver(context);\t\tinitHandlerMappings(context);\t\tinitHandlerAdapters(context);\t\tinitHandlerExceptionResolvers(context);\t\tinitRequestToViewNameTranslator(context);\t\tinitViewResolvers(context);\t\tinitFlashMapManager(context);\t}
注解驱动的控制器
使用@RequestMapping映射请求
请求处理方法签名
Spring MVC通过分析处理方法签名,将HTTP请求信息绑定到处理方法的相应入参中
@PathVariable
@RequestParam
@RequestHeader
绑定请求报文头的属性值
@CookieValue
一个拥有若干属性的POJO
可以直接在请求参数中通过属性传递对象,支持级联的属性
使用Servlet API对象作为入参
HttpServletRequest
HttpServletResponse
如果处理方法自行使用response返回相应,则处理方法的返回值设为void即可
HttpSession
Spring定义的若干个可代理Servlet原生API类的接口
WebRequest
NativeWebRequest
使用IO对象作为入参
其它类型的参数
Locale
Principal
并根据方法返回值作出相应的后续处理
ModelAndView
包含模型和逻辑视图
String
只包含逻辑视图
使用矩阵变量绑定参数
@MatrixVairable
使用HttpMessageConverter<T>
font color=\"#0076b3\
DispatcherServlet默认已经安装了RequestMappingHandlerAdapter去处理HttpMessageConverter
默认实现类
StringHttpMessageConverter
ByteArrayHttpMessageConverter
T为byte[]类型,可读取*/*,可通过supportedMediaTypes属性指定媒体类型,响应信息媒体类型为application/octer-stream
MarshallingHttpMessageConverter:T为Object,可读取text/xml和application/xml媒体类型请求,响应信息的媒体类型为text/xml或application/xml
Jaxb2RootElementHttpMessageConverter
MappingJacksonHttpMessageConverter
利用jackson的ObjectMapper读写Json数据,T为Object,可读取application/json,响应媒体类型为application/json
FormHttpMessageConverter
AllEncompassingFormHttpMesssageConverter
扩展于FormHttpMessageConverter。如果表单部份属性是XML数据,则可以使用该转换器进行读取
XmlAwareFormHttpMessageConverter
ResourceHttpConverterMessage
BufferedImageHttpMessageConverter
SourceHttpMessageConverter
RssChannelHttpMessageConverter
AtomFeedHttpMessageConverter
表示RequestMappingHandlerAdapter默认已经装配了
装配其它类型的HttpMessageConverter
在web容器上下文中定义一个RequestMappingHandlerAdapter
<!-- 自定义装配HttpMessageConverter 开始 --> <bean class=\"org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter\" p:messageConverters-ref=\"myConverters\"/> <util:list id=\"myConverters\"> <bean class=\"org.springframework.http.converter.BufferedImageHttpMessageConverter\"/> <bean class=\"org.springframework.http.converter.ByteArrayHttpMessageConverter\"/> <bean class=\"org.springframework.http.converter.StringHttpMessageConverter\"/> <bean class=\"org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter\"/> </util:list> <!-- 自定义装配HttpMessageConverter 结束 -->
自定义的RequestMappingHandlerAdapter配置,将覆盖默认配置
使用@RequestBody/@ResponseBody对处理方法进行标注
不需要成对出现
使用HttpEntity<T>/ResponseEntity<T>作为处理方法的入参或返回值
不但可以访问请求和响应报文体的内容,还可以访问报文头的内容也不需要成对出现。
只有当控制器处理方法使用了上面两种方式时,Spring MVC才会使用注册的HttpMessageConverter对请求/响应消息进行处理
使用RequestTemplat
调用web服务端的服务,支持REST风格的URL,且内部维护了HttpMessageConverter组件
使用@RestController
为了方便Rest开发引入了@RestController注解,相当于@Controller+@ResponseBody
(使用REST风格开发)当我们使用Rest风格开发程序时,只需要配置
<mvc:annotation-driven/> <!--扫描通过注解配置的类--> <context:component-scan base-package=\"top.richpeople\
使用syncRestTemplate
以异步无阻塞的方式进行服务访问
处理模型数据
@ModelAttribute
Map及Model
@SessionAttributes
处理方法的数据绑定
数据绑定流程
数据转换
ConversionService
数据格式化
Formatter
注解驱动格式化的重要接口
@NumberFormat
@DateTimeFormat
数据校验
JSR-303
Spring校验框架
Spring MVC数据校验
获取校验结果
在页面中显示错误
通过国际化资源显示错误信息
自定义校验规则
视图和视图解析器
如果不使用REST风格,处理方法执行完后最终会返回一个ModelAndView对象。对于哪些返回String、View或ModelMap等类型的处理方法,Spring MVC也会在内部将它们装配成一个ModelAndView对象。
Spring MVC借助视图解析器得到最终的视图对象(View),可以是Jsp或基于FreeMarker、Velocity模板技术处理视图,还可能是PDF、Excel、XML、JSON等各种类型的视图
Spring MVC不同视图的实现类
本地化解析
文件上传
MultipartResolver用于处理上传请求,处理方法就是将普通的request包装成MultipartHttpServletRequest,后者可以直接调用getFile方法获取到File,如果上传多个文件,还可以通过调用getFileMap得到FileName->File结构的Map。
其实上传不用Multipart封装成MultipartHttpServletRequest,直接用原来的Request也是可以的,所以在Spring MVC中没有默认装配MultipartResulver
Spring使用Jakarta Commons FileUpload技术实现了一个MultipartResulver的实现类:CommonsMultipartResolver
配置MultipartResolver
使用WebSocker
很好的解决了浏览器与服务器的全双工通信问题
Spring 4.0wei WebSocket通信提供了支持
发送和接受消息的API
用来发送消息的模板
静态资源的处理
<mvc:default-servlet-handler/>
<mvc:resources/>
缓存及版本的处理
装配拦截器
<mvc:interceptors> <mvc:interceptor> <mvc:mapping path=\"/secure/*\"/> <bean class=\"\" /> </mvc:interceptor> </mvc:interceptors>
异常处理
HandlerExcpetionResolver
RequestContextHolder启用
<listener> <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class> </listener>
0 条评论
回复 删除
下一页