导图社区 SpringMVC
Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的Spring MVC框架或集成其他MVC开发
编辑于2022-09-26 14:33:56 四川省listener 音标['lisnә] 读音 汉语翻译 n. 收听者, 听众 英语解释: 名词listener: someone who listens attentively 同义词:hearer, auditor, attender
Filter过滤器(重要) Javaweb中的过滤器可以拦截所有访问web资源的请求或响应操作。 1、Filter快速入门 1.1、步骤: 1. 创建一个类实现Filter接口 2. 重写接口中方法 d...
会话的解释 [conversation] 指两人以上的对话(多用于学习别种语言或方言时) 详细解释 (1).聚谈;对话。现多用于学习别种语言或方言时
社区模板帮助中心,点此进入>>
listener 音标['lisnә] 读音 汉语翻译 n. 收听者, 听众 英语解释: 名词listener: someone who listens attentively 同义词:hearer, auditor, attender
Filter过滤器(重要) Javaweb中的过滤器可以拦截所有访问web资源的请求或响应操作。 1、Filter快速入门 1.1、步骤: 1. 创建一个类实现Filter接口 2. 重写接口中方法 d...
会话的解释 [conversation] 指两人以上的对话(多用于学习别种语言或方言时) 详细解释 (1).聚谈;对话。现多用于学习别种语言或方言时
springMVC
介绍
SpringMVC是一种基于Java实现MVC模型的轻量级Web框架,实际是spring框架中的一个模块
技术架构图
DispatcherServlet
前端控制器, 是整体流程控制的中心,由其调用其它组件处理用户的请求, 有效的降低了组件间的耦合性
HandlerMapping
处理器映射器, 负责根据用户请求找到对应具体的Handler处理器
Handler
处理器,业务处理的核心类,通常由开发者编写,描述具体的业务
HandlAdapter
处理器适配器,通过它对处理器进行执行
View Resolver
视图解析器, 将处理结果生成View视图
View
视图,最终产出结果, 常用视图如jsp、 html
基本配置
常规
Controller加载控制
SpringMVC的处理器对应的bean必须按照规范格式开发,未避免加入无效的bean可通过bean加载过滤器进行包含设定或排除设定,表现层bean标注通常设定为@Controller
xml
静态资源加载
核心控制器拦截的是所有请求,需要对静态资源请求进行放行,通过配置放行资源实现
<mvc:resources mapping="/img/**" location="/img/"/><mvc:resources mapping="/js/**" location="/js/"/><mvc:resources mapping="/css/**" location="/css/"/>
SpringMVC提供的通用资源放行方式
<mvc:default-servlet-handler/>
中文乱码处理
SpringMVC提供专用的中文字符过滤器,用于处理乱码问题。配置在 web.xml 里面
<!--乱码处理过滤器,与Servlet中使用的完全相同,差异之处在于处理器的类由Spring提供--><filter> <filter-name>CharacterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param></filter><filter-mapping> <filter-name>CharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern></filter-mapping>
注解驱动
使用注解形式转化SpringMVC核心配置文件为配置类
基于servlet3.0规范,自定义Servlet容器初始化配置类,加载SpringMVC核心配置类
静态资源加载
配置类实现welbMveconfigurer接口,覆盖addResourceHandlers方法,在其中对具体的资源进行设定
覆盖configureDefaultservletHanalin方法,使用servlet默认过滤规则
中文乱码处理
请求
介绍
SpringMVc将传递的参数封装到处理器方法的形参中,达到快速访问参数的目的
请求参数
普通类型参数
参数名与处理器方法形参名保持一致
@RequestParam
类型
形参注解
位置
处理器类中的方法形参前方
作用
绑定请求参数与对应处理方法形参间的关系
例子
POJO类型参数
当POJO中使用简单类型属性时, 参数名称与POJO类属性名保持一致
当POJO中出现对象属性时,参数名称与对象层次结构名称保持一致
当PO.JO中出现集合,保存简单数据,使用多个相同名称的参数为其进行赋值
当POJO中出现List,保存对象数据,参数名称与对象层次结构名称保持一致,使用数组格式描述集合中对象的位置
当POJO中出现Map,保存对象数据,参数名称与对象层次结构名称保持一致,使用映射格式描述集合中对象的位置
参数冲突
当POJO类型属性与其他形参出现同名问题时,将被同时赋值
建议使用@RequestParam注解进行区分
数组类型参数
请求参数名与处理器方法形参名保持一致,且请求参数数量>1个
集合类型参数
保存简单类型数据,请求参数名与处理器方法形参名保持一致,且请求参数数量>1个
类型转换器
SpringMVC对接收的数据进行自动类型转换,该工作通过Converter接口实现
种类
标量转换器
集合、数组相关转换器
默认转换器
自定义类型转换器使用以日期转换为例
简化
@DateTimeFormat
类型
形参注解、成员变量注解
位置
形参前面 或 成员变量上方
作用
为当前参数或变量指定类型转换规则
例子
请求映射@RequestMapping
类型
类注解
位置
处理器类定义上方
作用
为当前处理器中所有方法设定公共的访问路径前缀
例子
属性
value
设定请求路径,与path属性相同
method
设定请求方式
params
设定请求参数条件
headers
设定请求消息头条件
consumes
用于指定可以接收的请求正文类型(MIMB类型)
produces
用于指定可以生成的响应正文类型(MIM类型)
响应
页面跳转方式
转发(默认)
重定向
页面访问快捷设定
展示页面的保存位置通常固定,且结构相似,可以设定通用的访问路径,简化页面配置格式
如果未设定了返回值,使用void类型,则默认使用访问路径作页面地址的前缀后缀
带数据页面跳转
使用HttpServletRequest类型形参进行数据传递
String:仅封装跳转页面的基本信息,底层由ModelAndview实现
使用Model类型形参进行数据传递
Model:仅封装数据
使用ModelAndView类型形参进行数据传递,将该对象作为返回值传递给调用者
ModelAndview:封装数据并封装视图,包含Mode1和view两个对象
返回json数据
基于response返回数据的简化格式,返回JSON数据
使用SpringMVC提供的消息类型转换器将对象与集合数据自动转换为JSON数据
使用SpringMVC注解驱动简化配置
异步调用
异步请求传参
@RequestBody
类型
形参注解
作用
将异步提交数据组织成标准请求参数格式,并赋值给形参
例子
Pojo参数
注解添加到Pojo参数前方时,封装的异步提交数据按照Pojo的属性格式进行关系映射
集合参数
注解添加到集合参数前方时,封装的异步提交数据按照集合的存储结构进行关系映射
接受响应数据
@ResponseBody
类型
方法注解、返回值注解
作用
将异步提交数据组织成标准请求参数格式,并赋值给形参
例子
方法返回值为Pojo时,自动封装数据成json对象数据
方法返回值为List时,自动封装数据成json对象数组数据
跨域访问
介绍
当通过域名A下的操作访问域名B下的资源时,称为跨域访问
跨域环境搭建
为当前主机添加备用域名
修改windows安装目录中的host文件
格式
ip 域名
动态刷新DNS
命令
ipconfig /displaydns
ipconfig /flushdns
跨域访问支持
@CrossOrigin
类型
方法注解 、 类注解
作用
设置当前处理器方法/处理器类中所有方法支持跨域访问
例子
拦截器
介绍
拦截器( Interceptor)是一种动态拦截方法调用的机制
作用
在指定的方法调用前后执行预先设定后的的代码
阻止原始方法的执行
拦截器链
多个拦截器按照一定的顺序,对原始被调用功能进行增强。核心原理是AOP思想
拦截器与过滤器
归属不同
Filter属于Servlet技术, Interceptor属于SpringMVC技术
拦截内容不同
Filter对所有访问进行增强, Interceptor仅针对SpringMVC的访问进行增强
拦截器开发
制作拦截器功能类(通知)
实现HandlerInterceptor接口
配置拦截器的执行位置(切入点)
配置顺序为先配置执行位置,后配置执行类
拦截器执行流程
拦截器参数
前置处理方法
原始方法之前运行
参数
request
请求对象
response
响应对象
handler
被调用的处理器对象,本质上是一个方法对象,对反射中的Method对象进行了再包装
返回值
返回值为false,被拦截的处理器将不执行
后置处理方法
原始方法运行后运行,如果原始方法被拦截,则不执行
参数
modelAndView
如果处理器执行完成具有返回结果,可以读取到对应数据与页面信息,并进行调整
完成处理方法
拦截器最后执行的方法,无论原始方法是否执行
参数
ex
如果处理器执行过程中出现异常对象,可以针对异常情况进行单独处理
拦截器配置项
mapping标签
可以配置多个,支持通配符*
*表示任意名称,/*仅表示根路径下任意名称,不再往下匹配目录
**表示当前路径及其子路径,/**表示根路径及其子路径下任意名称
exclude-mapping标签
用于剔除不符合要求的配置项,加速配置过程,支持通配符*
bean标签(ref标签)
只能配置一个
多拦截器配置
介绍
当配置多个拦截器时,形成拦截器链
拦截器链的运行顺序参照配置的先后顺序
当拦截器中出现对原始处理器的拦截,后面的拦截器均终止运行
当拦截器运行中断,仅运行配置在前面的拦截器的aftercompletion操作
责任链模式
责任链模式是一种行为模式
特征是沿着一条预先设定的任务链顺序执行,每个节点具有独立的工作任务
异常处理
异常处理器
HandlerExceptionResolver接口
异常分类管理
注解开发异常处理器
@ControllerAdvice
类型
类注解
作用
设置当前类为异常处理器类
例子
@ExceptionHandler
类型
方法注解
作用
设置指定异常的处理方式
例子
说明
处理器方法可以设定多个
异常处理解决方案
业务异常
介绍
规范的用户行为产生的异常
不规范的用户行为操作产生的异常
解决
发送对应消息传递给用户,提醒规范操作
系统异常
介绍
项目运行过程中可预计且无法避免的异常
解决
发送固定消息传递给用户,安抚用户
发送特定消息给运维人员,提醒维护
记录日志
其他异常
介绍
编程人员未预期到的异常
解决
发送固定消息传递给用户,安抚用户
发送特定消息给编程人员,提醒维护
纳入预期范围内
记录日志
自定义异常
通过自定义异常将所有的异常现象进行分类管理,以统一的格式对外呈现异常消息
格式
触发方式
实用技术
文件上传下载
MultipartResolver接口
MultipartResolver接口定义了文件上传过程中的相关操作,并对通用性操作进行了封装
MultipartResolver接口底层实现类CommonsMultipartResovler
CommonsMultipartResovler并未自主实现文件上传下载对应的功能,而是调用了apache的文件上传下载组件
<dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.4</version></dependency>
实现
页面表单
SpringMVC配置
控制器
注意事项
文件命名问题, 获取上传文件名,并解析文件名与扩展名
文件名过长问题
文件保存路径
重名问题
Restful
介绍
Rest( REpresentational State Transfer) 一种网络资源的访问风格,定义了网络资源的访问方式
访问路径
传统风格
http://localhost/user/get?id=1
http://localhost/deleteuser?id=1
Rest风格
http://localhost/user/1
Restful是按照Rest风格访问网络资源
优点
隐藏资源的访问行为,通过地址无法得知做的是何种操作
书写简化
Rest行为约定方式
GET(查询)
http://localhost/user/1 GET
POST(保存)
http://localhost/user POST
PUT(更新)
http://localhost/user PUT
DELETE(删除)
http://localhost/user DELETE
注意
上述行为是约定方式,约定不是规范,可以打破,所以称Rest风格,而不是Rest规范
postman
postman 是 一款可以发送Restful风格请求的工具,方便开发调试。首次运行需要联网注册
表单校验
介绍
表单校验保障了数据有效性、安全性
分类
校验位置
客户端校验
服务端校验
校验内容与对应方式
格式校验
客户端
使用Js技术,利用正则表达式校验
服务端
使用校验框架
逻辑校验
客户端
使用ajax发送要校验的数据,在服务端完成逻辑校验,返回校验结果
服务端
接收到完整的请求后,在执行业务操作前,完成逻辑校验
表单校验规则
长度
例如用户名长度,评论字符数量
非法字符
例如用户名组成
数据格式
例如Email格式、 IP地址格式
边界值
例如转账金额上限,年龄上下限
重复性
例如用户名是否重复
表单校验框架
JCP(Java Community Process)
Java社区
JSR(Java Specification Requests)
Java 规范提案
JSR规范列表
Bean Validation 1.0 (JSR 303)
提供bean属性相关校验规则
Hibernate框架中包含一套独立的校验框架hibernate-validator
<dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>6.1.0.Final</version></dependency>
tomcat8.5↑ :搭配hibernate-validator版本6...Final