Spring MVC
2023-12-26 18:56:21 32 举报
AI智能生成
Spring MVC
作者其他创作
大纲/内容
请求转发/重定向
转发
在返回值前面加"forward:",譬如"forward:user.do?name=method4"
重定向
在返回值前面加"redirect:",譬如"redirect:http://www.baidu.com"
重要组件
前端控制器(DispartcherServlet)
不需要程序员开发,用户接受请求,响应结构,相当于请求装发器,减少了其他组件之间的耦合
处理器映射器(HandlerMapping)
不需程序员开发,根据请求的Url找到对应的Handler;
完成客户请求到Controller之间的映射
处理器适配器(HandlerAdapter)
在编写Handler的时候要按照HandlerAdapter要求的规则去编写,这样适配器HandlerAdapter才可以正确的去执行Handler。
处理器(Handler)
需要程序员开发的部分
视图解析器(ViewResolver)
不需要程序员开发,解析视图,根据视图逻辑解析成真正的视图(view)
视图(view)
需要程序员开发,View是一个接口, 它的实现类支持不同的视图类型(jsp,freemarker,pdf等等)
过滤器与拦截器
过滤器
依赖servlet容器
实现上,基于函数回调,它可以对几乎所有请求进行过滤
一个过滤器实例只能在容器初始化时调用一次
目的
做一些过滤操作,获取我们想要获取的数据
业务场景
修改字符编码(CharacterEncodingFilter)
修改HttpServletRequest的一些参数(XSSFilter(自定义过滤器)),如:过滤低俗文字、危险字符等
拦截器
依赖于web框架
实现上,基于Java的反射机制,属于面向切面编程(AOP)的一种运用
一个拦截器实例在一个controller生命周期之内可以多次调用
只能对controller请求进行拦截,对其他的一些比如直接访问静态资源的请求则没办法进行拦截处理。
中文乱码问题
post
在web.xml中配置一个CharacterEncodingFilter过滤器
get
1.修改tomcat配置文件添加编码与工程编码一致
2.对参数进行重新编码
常用注解
@RequestMapping
value
method
consumes
指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;
produces
指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;
params
headers
指定request中必须包含某些指定的header值,才能让该方法处理请求。
@RequestBody
@ResponseBody
@Controller
@SessionAttribute
希望在多个请求之间共用数据,则可以在控制器类上标注一个 @SessionAttributes,配置需要在session中存放的数据范围,Spring MVC将存放在model中对应的数据暂存到HttpSession 中
只能使用在类定义上。
@SessionAttributes 除了可以通过属性名指定需要放到会 话中的属性外,还可以通过模型属性的对象类型指定哪些模型属性需要放到会话中
参数
names:这是一个字符串数组。里面应写需要存储到session中数据的名称
types:根据指定参数的类型,将模型中对应类型的参数存储到session中
value:其实和names是一样的
优势
支持多种视图解析技术,不仅限于JSP
与spring框架集成
支持各种资源的映射策略
工作流程
1.用户发送请求到前段控制器(DispatcherServlet)
2.前端控制器拿到请求之后,调用处理器映射器(HandlerMapping)请求获取Handler
根据用户请求的url找到Handler即处理器;(xml配置、注解查找)
3.处理器映射器根据url找到具体的处理器(Handler),生成处理器对象及处理器拦截器(如果存在)返回执行链(HandlerExecutionChain)给前端控制器
4.前端控制器调用处理器适配器(HandlerAdapter)
5.处理器适配器经过适配调用具体的处理器(Handler)
参数封装,数据格式转换,数据验证等操作
6.处理器执行完(Handler)返回ModeAndView
逻辑视图名
模型对象
7.处理器适配器将处理器(Handler)执行的结果返给前端控制器
8.前端控制器将ModeAndView传递给视图解析器(ViewResoler)解析
如果加上@responsebody注解,则返回值不通过viewResolver,而是直接返回object
9.视图解析器解析后返回View
根据逻辑视图名解析成真正的视图对象
JSP 视图、一个基于 FreeMarker、Velocity 模板技术的视图,还可能是 PDF、Excel、XML、JSON 等各种形式的视图
10.前端控制器对View进行渲染(及将模型数据填充进视图)
数据填充:将模型(ModelAndView对象中)填充到request域
11.前端控制器响应给用户
mvc优势
实现前端页面的展示与后端数据处理的分离
清晰的角色分配,对web层进行指责解耦,简化开发,减少错误,方便组内人员开发配合
分层设计,实现了业务系统各个组件之间的解耦,有利于业务系统的可扩展性,可维护性。
有利于系统的并行开发,提升开发效率。
控制器采用单例模式
在进行多线程访问的时候有线程安全问题
不建议使用同步方法,会有性能问题
在控制器里面不写成员变量即可
原因
性能,不能每次请求都创建一个对象
不需要多例,不需要在控制器中定义成员变量
0 条评论
下一页