SpringMVC基本应用
MVC模式
- MVC是软件工程中的一种软件架构模式,它是一种分离业务逻辑与显示界面的开发思想。
SpringMVC概述
- SpringMVC 是一种基于 Java 的实现 MVC 设计模式的轻量级 Web 框架,属于SpringFrameWork 的
后续产品,已经融合在 Spring Web Flow 中。 - SpringMVC 已经成为目前最主流的MVC框架之一,并且随着Spring3.0 的发布,全面超越 Struts2,成为最优秀的 MVC 框架。它通过一套注解,让一个简单的 Java 类成为处理请求的控制器,而无须实现任何接口。同时它还支持 RESTful 编程风格的请求。
- SpringMVC的框架就是封装了原来Servlet中的共有行为;例如:参数封装,视图转发等。
- SpringMVC的开发步骤:
- 1.创建web项目,导入SpringMVC相关坐标
- 2.配置SpringMVC前端控制器 DispathcerServlet
- 3.编写Controller类和视图页面
- 4.使用注解配置Controller类中业务方法的映射地址
- 5.配置SpringMVC核心文件 spring-mvc.xml
SpringMVC的执行流程
SpringMVC组件解析
SpringMVC注解解析
@Controller
SpringMVC基于Spring容器,所以在进行SpringMVC操作时,需要将Controller存储到Spring容器
中,如果使用@Controller注解标注的话,就需要使用
<!--配置注解扫描--> <context:component-scan base-package="com.lagou.controller"/>
@RequestMapping
- SpringMVC的三大组件
处理器映射器:HandlerMapping
处理器适配器:HandlerAdapter
视图解析器:View Resolver - 开发者编写
处理器:Handler
视图:View
SpringMVC的请求
SpringMVC可以接收如下类型的参数:
- 基本类型参数
- 对象类型参数
- 数组类型参数
- 集合类型参数
获取基本类型参数
- Controller中的业务方法的参数名称要与请求参数的name一致,参数值会自动映射匹配。并且能自
动做类型转换;自动的类型转换是指从String向其他类型的转换。
获取对象类型参数
- Controller中的业务方法参数的POJO属性名与请求参数的name一致,参数值会自动映射匹配。
中文乱码过滤器
- 当post请求时,数据会出现乱码,我们可以设置一个过滤器来进行编码的过滤。
获取数组类型参数
- Controller中的业务方法数组名称与请求参数的name一致,参数值会自动映射匹配。
获取集合(复杂)类型参数
- 获得集合参数时,要将集合参数包装到一个POJO中才可以。
自定义类型转换器
相关注解
@RequestParam
- 当请求的参数name名称与Controller的业务方法参数名称不一致时,就需要通过@RequestParam注解显示的绑定
@RequestHeader
@CookieValue
获取Servlet相关API
SpringMVC的响应
SpringMVC响应方式介绍
页面跳转
- 返回字符串逻辑视图
- void原始ServletAPI
- ModelAndView
返回数据
4. 直接返回字符串数据
5. 将对象或集合转为json返回
返回字符串逻辑视图
void原始ServletAPI
转发和重定向
ModelAndView
方式一
方式二
@SessionAttributes
静态资源访问的开启
springmvc进阶
@RequestBody
- 该注解用于Controller的方法的形参声明,当使用ajax提交并指定contentType为json形式时,通过
HttpMessageConverter接口转换为对应的POJO对象。
@ResponseBody
- 该注解用于将Controller的方法返回的对象,通过HttpMessageConverter接口转换为指定格式的数
据如:json,xml等,通过Response响应给客户端。
RESTful
- Restful是一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。主要用于客户端和
服务器交互类的软件,基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存机制等。 - GET:读取(Read)
- POST:新建(Create)
- PUT:更新(Update)
- DELETE:删除(Delete)
@PathVariable
- 用来接收RESTful风格请求地址中占位符的值
- @RestController
- RESTful风格多用于前后端分离项目开发,前端通过ajax与服务器进行异步交互,我们处理器通常返
回的是json数据所以使用@RestController来替代@Controller和@ResponseBody两个注解。
文件上传三要素
- 表单项 type=“file”
- 表单的提交方式 method=“POST”
- 表单的enctype属性是多部分表单形式 enctype=“multipart/form-data"
文件上传原理
- 当form表单修改为多部分表单时,request.getParameter()将失效。
- 当form表单的enctype取值为 application/x-www-form-urlencoded 时,
- form表单的正文内容格式是: name=value&name=value 当form表单的enctype取值为 mutilpart/form-data 时,请求正文内容就变成多部分形式:
异常处理
拦截器
拦截器(interceptor)的作用
- Spring MVC 的拦截器类似于 Servlet 开发中的过滤器 Filter,用于对处理器进行预处理和后处理。
- 将拦截器按一定的顺序联结成一条链,这条链称为拦截器链(InterceptorChain)。在访问被拦截
的方法或字段时,拦截器链中的拦截器就会按其之前定义的顺序被调用。拦截器也是AOP思想的具体实现。
拦截器和过滤器区别
SSM整合
spring整合mybatis
1)整合思想
- 将mybatis接口代理对象的创建权交给spring管理,我们就可以把dao的代理对象注入到service中,
此时也就完成了spring与mybatis的整合了。
导入整合包
<!--mybatis整合spring坐标-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.1</version>
</dependency>
spring整合springMVC
1)整合思想
- spring和springMVC其实根本就不用整合,本来就是一家。
- 但是我们需要做到spring和web容器整合,让web容器启动的时候自动加载spring配置文件,web容
器销毁的时候spring的ioc容器也销毁。
spring和web容器整合
- 可以使用spring-web包中的ContextLoaderListener监听器,可以监听servletContext容器的创建和
销毁,来同时创建或销毁IOC容器。