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