<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"> <path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path> </svg>
讯享网
1.1 导入SpringMVC相关坐标
pom.xml:
讯享网
1.2 创建 Controller 类并使用注解配置映射地址
UserServlet.java:
1.3 配置 SpringMVC 核心文件 spring-mvc.xml
spring-mvc.xml:
讯享网
1.4 配置 SpringMVC 核心控制器 DispatcherServlet
web.xml:
1.5 客户端发起请求测试

2.1 SpringMVC 执行流程

- 用户发送请求至前端控制器 DispatcherServlet
- DispatcherServlet 收到请求调用 HandlerMapping 处理器映射器
- 处理器映射器找到具体的处理器(可以根据 xml 配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给 DispatcherServlet
- DispatcherServlet 调用 HandlerAdapter 处理器适配器
- HandlerAdapter 经过适配调用具体的处理器(Controller:也叫后端控制器)
- Controller 执行完成返回 ModelAndView
- HandlerAdapter 将 controller 执行结果 ModelAndView 返回给 DispatcherServlet
- DispatcherServlet 将 ModelAndView 传给 ViewResolver 视图解析器
- ViewResolver 解析后返回具体 View
- DispatcherServlet 根据 View 进行渲染视图(即将模型数据填充至视图中),DispatcherServlet 响应用户
2.2 SpringMVC 组件解析
- 前端控制器 DispatcherServlet:用户请求到达前端控制器,它就相当于 MVC 模式中的 C,DispatcherServlet 是整个流程控制的中心,由它调用其它组件处理用户的请求,DispatcherServlet 的存在降低了组件之间的耦合性。
- 处理器映射器 HandlerMapping:HandlerMapping 负责根据用户请求找到 Handler 即处理器,SpringMVC 提供了不同的映射器实现不同的映射方式,例如:配置文件方式,实现接口方式,注解方式等。
- 处理器适配器 HandlerAdapter:通过 HandlerAdapter 对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理器进行执行。
- 处理器 Handler:它就是我们开发中要编写的具体业务控制器。由 DispatcherServlet 把用户请求转发到 Handler。由Handler 对具体的用户请求进行处理。
- 视图解析器 ViewResolver:View Resolver 负责将处理结果生成 View 视图,View Resolver 首先根据逻辑视图名解析成物理视图名,即具体的页面地址,再生成 View 视图对象,最后对 View 进行渲染将处理结果通过页面展示给用户。
- 视图 View:SpringMVC 框架提供了很多的 View 视图类型的支持,包括:jstlView、freemarkerView、pdfView等。最常用的视图就是 jsp。一般情况下需要通过页面标签或页面模版技术将模型数据通过页面展示给用户,需要由程序员根据业务需求开发具体的页面
2.3 @RequestMapping 详解
作用:用于建立请求 URL 和处理请求方法之间的映射关系
位置:
- 类:请求 URL 的第一级访问目录,此处若不写则相当于应用的根目录
- 方法:请求 URL 的第二级访问目录,与类上的使用 @RequestMapping 标注的一级目录一起组成访问虚拟路径
属性:
- value:用于指定请求的 URL ,它和 path 属性的作用是一样的
- method:用于指定请求的方式
- RequestMethod.GET:请求方法只能是 GET(URL 地址请求为 GET)
- RequestMethod.POST:请求方法只能是 POST
- …
- params:用于指定限制请求参数的条件,它支持简单的表达式,要求请求参数的 key 和 value 必须和配置的一模一样
- params = {“accountName”}:表示请求参数必须有 accountName
- params = {“moeny!100”}:表示请求参数中 money 不能是 100
- …
讯享网

2.4 视图解析器 InternalResourceViewResolver
SpringMVC 有默认组件配置,默认组件都是 DispatcherServlet.properties 配置文件中配置的,该配置文件地址 org/springframework/web/servlet/DispatcherServlet.properties,该文件中配置了默认的视图解析器,如下:
其中便有默认的视图解析器:
讯享网
自定义配置 InternalResourceViewResolver:
此时, 等价于 :

3.1 数据响应
数据响应方式:
- 页面跳转
- 直接返回字符串
- 通过 ModelAndView 对象返回
- 回写数据
- 直接返回字符串
- 返回对象或集合
3.1.1 页面跳转-1:字符串跳转
讯享网
3.1.2 页面跳转-2:ModelAndView 对象
success.jsp:

1)形式一
2)形式二
讯享网
3)形式三
3.1.3 重定向(请求) & 转发(请求)
⭐重定向请求:
注意,重定向的只能是请求而不能是页面!
讯享网
实现效果:URL 由 ==> ❗ 然后由处理 请求的 Controller 处理(页面跳转了)
⭐转发:
注意,转发的只能是请求而不能是页面!
实现效果:URL 仍是 ❗ 但请求的是 的 Controller 处理(页面没跳转)
3.1.4 回写数据-1:回写字符串
@ResponseBody:将需要回写的字符串直接返回,但此时需要通过 @ResponseBody 注解告知 SpringMVC 框架,方法返回的字符串而不是跳转页面。
1)形式一
讯享网
2)形式二
3.1.5 回写数据-2:对象或集合
3)形式三
一文了解 JSON
pom.xml:
讯享网
UserServlet.java:

4)形式四
pom.xml:
讯享网

spring-mvc.xml:
UserServlet.java:
讯享网
测试结果:

5)形式五(最终形式)
在 SpringMVC 的各个组件中,处理器映射器、处理器适配器、视图解析器称为 SpringMVC 的三大组件。使用 自动加载 RequestMappingHandlerMapping 和 RequestMappingHandlerAdapter,可用在 Spring-mvc.xml 配置文件中使用 替代注解处理器和适配器的配置。同时使用 默认底层就会集成 jackson 进行对象或集合的 json 格式字符串的转换。
引入 mvc 命名空间:

UserServlet.java:
讯享网
3.1.6 返回数据: vs
💦最常见的响应数据有两种:一种是 String 格式的数据,一种是 Object 类型的数据。那么若直接在页面上打印这两种数据有什么区别呢?
🔥 String 格式的数据自动转换为 html 格式:

🔥 Object 格式的数据自动转换为 JSON 数据(底层自动使用 Jackson 转换为 JSON 格式):

3.2 数据请求的四大类型
客户端请求参数的格式是:
服务器端要获得请求的参数,有时还需要进行数据的封装,SpringMVC 可以接收如下类型的参数:
- 基本类型参数
- POJO 类型参数
- 数组类型参数
- 集合类型参数
3.2.1 基本数据类型
Controller 中的业务方法的参数名称要与请求参数的 name 一致,参数值会自动映射匹配。
URL 请求:
SpringMVC 是该项目模块的名称噢~

UserServlet.java:
讯享网
3.2.2 POJO 类型参数
Controller 中的业务方法的 POJO 参数的属性名与请求参数的 name 一致,参数值会自动映射匹配。
URL 请求:


Person.java:
讯享网
UserServlet.java:
3.2.3 数组类型参数
Controller 中的业务方法数组名称与请求参数的 name 一致,参数值会自动映射匹配。
URL 请求:
讯享网

UserServlet.java:
3.2.4 集合类型参数
当使用 Ajax 提交时,可以指定 contentType 为 json 形式,那么在方法参数位置使用 @RequestBody 可以直接接收集合数据而无需使用 POJO 进行包装。
1. AjaxRequest.jsp:

2. 静态资源访问的开启
SpringMVC 的前端控制器 DispatcherServlet 的 url-pattern 配置的是 ,代表对所有资源(动态、静态)都进行过滤操作,我们可以通过以下两种方式指定过滤静态资源:
1)方式一:
讯享网
:浏览器的 URI 访问地址
:静态资源实际的相对路径位置
比如访问 localhost:8080/SpringMVC/js/main.js,这个 URI 对于的 mapping 就是 /js/main.js,它是在设置的 mapping 的范围内的,随后就去拿到对应的实际路径 location 中的静态资源,那么静态资源这样就可以访问到了。
2)方式二:
3. UserServlet.java:
讯享网
4. URL 请求:

3.3 访问静态资源
详见 3.2.4 小节第 2 小点
3.3.1 方式一
讯享网
3.3.2 方式二
3.4 配置全局过滤器
POST 请求时,数据会出现乱码,我们可以设置一个过滤器来进行编码过滤
讯享网
3.5 参数绑定注解 @RequestParam
注解 @RequestParam 参数:
- value:请求参数的名称
- required:此在指定的请求参数是否必须包括,默认是 true,提交时如果没有此参数则报错
- defaultValue:当没有指定请求参数时,则使用指定的默认值赋值
URL 请求:

UserServlet.java:
3.6 获取 Resultful 风格的参数
Restful 是一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。主要用于客户端和服务器交互类的软件,基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存机制等。
Restful 风格的请求是使用 “url + 请求方式” 表示一次请求目的的,HTTP 协议里面四个表示操作方式的动词如下:
- GET:用于获取资源;/user/1 GET:得到 id = 1 的 user
- POST:用于新建资源;/user/1 DELETE:删除 id = 1 的 user
- PUT:用于更新资源;/user/1 PUT:更新 id = 1 的 user
- DELETE:用于删除资源; /user POST:新增 user
上述 url 地址 /user/1 中的 1 就是要获得的请求参数,在 SpringMVC 中可以使用占位符进行参数绑定。地址 /user/1 可以写成/user/{id},占位符 {id} 对应的就是 1 的值;在业务方法中我们可以使用 @PathVariable 注解进行占位符的匹配获取。
URL 请求:
讯享网

UserServlet.java:
3.7 自定义类型转换器
SpringMVC 默认已经提供了一些常用的类型转换器,例如:客户端提交的字符串转换成 int 类型进行参数设置;但不是所有的数据类型都提供了转换器,没有提供的就需要自定义转换器,例如:日期类型的数据就需要自定义转换器。
URL 请求:

UserServlet.java:
讯享网
3.7.1 自定义转换器类实现 Converter 接口
3.7.2 在配置文件中声明转换器
spring-mvc.xml:
讯享网
3.7.3 在 中引用转换器
spring-mvc.xml:
重新访问:

3.8 获取 Servlet 相关 API
SpringMVC 支持使用原始 Servlet_API 对象作为控制器方法的参数注入…
讯享网
3.9 获取请求头
3.9.1 @RequestHeader

3.9.2 @CookieValue
讯享网

3.10 文件上传
文件上传客户端的三要素:
- 表单项 type=“file”
- 表单的提交方式是 post
- 表单的 enctype 属性是多部分表单形式,及 enctype=“multipart/form-data”
文件上传步骤:
1. 导入fileupload & io 相关依赖
pom.xml:
讯享网
2. 配置文件上传解析器
spring-mvc.xml:
3. Controller 编写文件处理代码
讯享网
name 属性一致:

URL 请求:

SpringMVC 的拦截器类似于 Servlet 开发中的过滤器 Filter,用于对处理器进行预处理和后处理。、
将拦截器按一定的顺序联结成一条链,这条链称为拦截器链(Interceptor Chain)。在访问被拦截的方法或字段时,拦截器链中的拦截器就会按其之前定义的顺序被调用;拦截器也是 AOP 思想的具体实现。
4.1 自定义拦截器
4.1.1 创建拦截器类实现 HandlerInterceptor 接口
4.1.2 配置拦截器
spring-mvc.xml:
讯享网
演示拦截效果:

4.2 、、
系统中异常包括两类:预期异常和运行时异常 RuntimeException,前者通过捕获异常从而获取异常信息,后者主要通过规范代码开发、测试等手段减少运行时异常的发生。
系统的 Dao、Service、Controller 出现都通过 throws Exception 向上抛出,最后由 SpringMVC 前端控制器 DispatcherServlet 交由异常处理器进行异常处理,如下图:

异常处理的两种方式:
- 使用 SpringMVC 提供的简单异常处理器 SimpleMappingExceptionResolver
- 实现 Spring 的异常处理接口 HandlerExceptionResolver 自定义异常处理器
5.1 SimpleMappingExceptionResolver
UserServiceImpl.java:
spring-mvc.xml:
讯享网

Controll.java:
5.2 HandlerExceptionResolver
MyExceptionHandler.java:
讯享网
spring-mvc.xml:
error.jsp:
讯享网

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/198094.html