SpringMVC是一个轻量级的Web表现层框架,用来写Controller接收请求跳转页面的,它是Spring框架的一部分。SpringMVC是对Servlet的封装和增强,简化了servlet的操作。它已经超越了Struts,成为目前就最优秀的表项层框架。
1 入门案例
需求:浏览器输入url发起请求,该URL请求被SpringMVC框架拦截处理,把后台服务器的当时时间输出到jsp页面显示
实现步骤:
DispatcherServlet:前端控制器。接收用户请求,响应结果,相当于中央处理器,DispatcherServlet是整个流程控制的中心,由它调用其他组件完成用户请求的处理。DispatcherServlet的存在建立了组件之间的耦合性。
- HandlerMapping:处理器映射器。理解为一个Map
,HandlerMapping负责根据用户请求的URL找到Handler即处理器,SpringMVC提供了不同的映射器来实现不同的映射方式,例如:实现接口的方式,注解方式等。 - HandlerAdapter:处理器适配器。不同接口类型转换成usb,体现了万物归一的思想,通过HandlerAdapter对Handler处理器进行执行,这是适配器模式的应用。
- Handler:处理器。在SpringMVC当中有两层意思:Controller或者Controller当中的方法,Handler相对于前端控制器DispatcherServlet来说是后端控制器,执行具体业务处理的,它在DispatcherServlet的控制下处理用户的具体请求。
- ViewResolver:视图解析器。ViewResolver进行视图解析,首先根据逻辑视图名解析成物理视图名即具体的页面地址,再生成View视图对象。
View:视图。SpringMVC框架提供了很多的View视图类型的支持,包括:jsp、freemarkerView等。我们最常用的视图就是jsp。注意:在SpringMVC的各个组件中,处理器映射器、处理器适配器、视图解析器称为SpringMVC的三大组件。需要我们开发的组件有handler、view 。
3 @RequestMapping注解使用
多个URL映射到同一个Handler(同一个方法)。
- 作用到类上面,实现对请求路径的分类管理,限定类中方法访问的前缀。
- method属性限定请求方法:请求的handle相同,请求方式不同进入不同的方法处理
params属性限定请求参数:支持简单表达式语法,URL一样,根据携带参数的不同进入不同的方法处理。
4 请求参数绑定
功能1:默认支持ServletAPI,SpringMVC在方法中直接声明HttpServletRequest,HTTPServletResponse,HTTPSession即可使用
- 功能2:绑定简单的数据类型,基本数据类型推荐使用包装类,包装类可以为null。对于布尔类型的参数,请求的参数值只能为true或false。或者1或0 。
- 功能3:@RequestParam注解使用,当形参和传递的参数名称不一致时使用ResquestParam进行手动映射,类似于Mybatis中resultMap的作用
- 功能4:绑定pojo对象,直接形参声明pojo即可接收。要求传递的参数名必须和pojo属性名对应
- 功能5:绑定pojo对象的包装对象,重点在于传参参数命名。pojo包装对象首先就是一个普通的pojo,就应该按照上面绑定pojo的要求来,然后进一步处理,传参时参数名,首先应该定位到包装对象的属性名,如果不能确定数据,通过属性 . 的方式进一步锁定即可。
- 功能6:绑定List集合包装pojo对象,传递绑定集合类型(List/Map),作为pojo的一个属性来传递
- 功能7:绑定Map集合包装pojo对象
- 功能8:自定义类型转换器,文件 SpringMVC-params
- 功能9:RequestHeadler注解
- 获取请求头信息
- 属性Value,属性值为请求头的键名
- 文件 SpringMVC-params
功能10:CookieValue注解,获取浏览器携带的Cookie,属性value,属性值是Cookie的键名。
5 SpringMVC编码过滤器
<!--配置编码过滤器:过滤post请求--><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>
6 Controller方法(Handler)返回值
返回ModelAndView
返回字符串(直接返回逻辑视图名,数据使用Model和ModelMap封装)
json数据是咱们企业级开发数据交互经常使用的一种方式,它比较轻量级,格式比较清晰
- 交互:前端和后端交互
- 前端传递json字符串到后台,后台如何能够自动转换为pojo对象
- @RequestBody注解,将JSON字符串转换为POJO对象。作用:用于获取请求体(按照http协议进行一个完整的封装,往往都是由请求头+请求体等组成)内容,不适用于Get请求方式。
- 后台return对象,能否前端直接接收到json格式的字符串
@ResponseBody注解,作用:该注解用于将Controller的方法返回的对象转换为json字符串返回给客户端
8 SpringMVC对Restful风格URL的支持
http请求方式:get主要做查询就, post主要做插入, put主要做更新, delete主要做删除
- 什么是Restful:resful是一个资源定位及资源操作的风格。不是标准也不是协议,只是一种风格。基于这个风格设计的软件可以更简洁,更有层次。资源:互联网所有的事物都可以被抽象为资源url(只要互联网上一个事物可以用url来表示,那么它就是一个资源)。资源操作:使用POST、delete、put、get,使用不同方法对资源进行操作。
- 传统方式操作资源
- 操作啥(原来的url)?操作谁(传来的参数)
- url中先定义动作,然后传递的参数表明这个动作操作的是哪个对象(数据);先定位动作,然后定位对象
- http://localhost:8080/springmvc/user/queryUserById.do?id=1 查询
- http://localhost:8080/springmvc/user/saveUser.do 新增
- http://localhost:8080/springmvc/user/updateUser.do 更新
- http://localhost:8080/springmvc/user/deleteUserById.do?id=1 删除
使用Restful操作资源
- http://localhost:8080/springmvc/user/1 查询,get
- http://localhost:8080/springmvc/user/ 新增,post
- http://localhost:8080/springmvc/user/ 更新,put
- http://localhost:8080/springmvc/user/1 删除,delete
9 SpringMVC拦截器
过滤器(Filter):对Request请求起到过滤的作用,作用在Servlet之前,如果配置为/*可以对所有资源访问进行过滤处理
- 拦截器(Interceptor):是SpringMVC、Struts等表现层框架自己的,可以对jsp、HTML、css、image等访问设置是否拦截,也可以设置对访问的控制器方法(Handler)设置是否拦截。底层采用的是aop的思想
- 自定义拦截器:实现接口HandlerInterceptor
- 重写方法:
- PreHandle:handler之前执行,返回true表示放行
- postHandle:在Handler方法执行完毕后,进行页面跳转渲染之前执行
- afterCompletion:在页面渲染完毕以后执行
- 重写方法:
组件说明: