导图社区 1.3.1 Spring MVC
1.3.1 Spring MVC 学习笔记,详细整理
社区模板帮助中心,点此进入>>
互联网9大思维
组织架构-单商户商城webAPP 思维导图。
域控上线
python思维导图
css
CSS
计算机操作系统思维导图
计算机组成原理
IMX6UL(A7)
考试学情分析系统
3. Spring MVC
概述
Spring提供的用于简化web开发的框架
只有一个前端Servlet:DispatcherServlet
工作流程
客户端发起请求
DispatcherServlet接收请求
HandlerMapping查询Handler,获取HandlerExecutionChain
HandlerAdapter执行Handler,得到ModelAndView
ViewResolver解析视图,返回视图对象
Jsp视图渲染
响应客户端
交互图
九大组件
HandlerMapping 处理器映射器
处理器执行链
Handler
Interceptor
表现形式
类
方法
HandlerAdapter 处理器适配器
让固定的 Servlet 处理方法调用Handler来进行处理
HandlerExceptionResolver 处理器异常解析器
ViewResolver 视图解析器
InternalResourceViewResolver JSP解析器
RequestToViewNameTranslator 请求转换视图名
Handler没有设置view时,将请求地址转换为视图路径
LocaleResolver 国际化解析器
ThemeResolver 主题解析器
MultipartResolver 文件上传
FlashMapManager 重定向参数封装
URL Pattern
拦截形式
*.do,拦截后缀
/,不拦截.jsp,但会拦截静态资源
覆盖了父web.xml中DefaultServlet的URL Pattern配置
通过配置<mvc:default-servlet-handler/>解决
父级JspServlet依然生效
/*,拦截所有
静态资源
URL Pattern /,配置<mvc:default-servlet-handler/>
<mvc:resources location="classpath:/" mapping="/resources/**"/>
数据封装
return
ModelAndView
parameter
参数类型
ModelMap
Model
Map<String,Object>
实现类
BindingAwareModelMap
请求参数绑定
Integer int
String
Float float
Double double
Boolean boolean
日期类型
定义 Converter<String,Date>
通过FormattingConversionServiceFactoryBean注册
RESTful
REST
Representational State Transfer
资源表现层状态转移
是一种风格
REST认为互联网中所有的东西都是资源,都会有一个唯一的URL标识它
概念
资源:互联网上的一个实体
表现:实体表现形式,如XML,JSON等
转移:代表一次交互,可能会影响资源状态
form表单method不能为PUT和DELETE的处理
form中增隐藏域_method
配置过滤器 HiddenHttpMethodFilter
Json交互
@ResponseBody
不再走视图解析器,等同于Response响应
@RequestBody
直接获取Pojo对象
Interceptor 拦截器
SpringMVC自有组件
只拦截handler
拦截时机
在Handler业务逻辑执行之前拦截1次
在Handler逻辑执行完毕但未跳转页面之前拦截1次
在跳转页面之后拦截1次
对比标准组件
Servlet
处理Request请求和Response响应
过滤器(Filter)
对Request请求起到过滤的作用,作用在Servlet之前
监听器(Listener)
实现了javax.servlet.ServletContextListener 接口的服务器端组件,它随 Web应用的启动而立启动,只初始化一次,然后会一直运行监视,随Web应用的停止而销毁
做一些初始化工作,web应用中spring容器启动ContextLoaderListener
监听web中的特定事件,如HttpSession,ServletRequest的创建和销毁
变量的创建、销毁和修改
可以在某些动作前后增加处理,实现监控,如统计在线人数
执行流程
单个执行流程
preHandle
postHandle
afterCompletion
接口
HandlerInterceptor
注册
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<mvc:exclude-mapping path="/demo/**"/>
<bean class="xx.xx.InterceptorClassPath"/>
流程
CustomInterceptor:preHandle
HandlerAdapter:handle
CustomInterceptor:postHandle
DispatcherServlet:render
CustomInterceptor:afterCompletion
多个执行流程
Multipart
环境
pom: commons-fileupload
context: CommonsMultipartResolver
maxUploadSize
id必须为multipartResolver
存储
MultipartFile.transfer
异常处理
实现方案
实现接口: HandlerExceptionResolver
@ExceptionHandler 获取request,处理并返回ModelView
@ControllerAdvice 嵌套 @ExceptionHandler
疑问
多个ExceptionHandler处理同一个异常时的情况
重定向
特点
地址变化
参数丢失
两个请求
HTTP代码
302: 临时重定向
301: 永久重定向
flash
传递数据: RedirectAttributes.addFlashAttribute()
原理:暂存到session中,跳转到页面后属性销毁