SpringMVC笔记

springMVC三层架构概述

SpringMVC笔记
在 Spring 的基本架构中,红色圈起来的 Spring Web MVC ,也就是本系列的主角 SpringMVC,它是属于Spring基本架构里面的一个组成部分,属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面,所以我们在后期和 Spring 进行整合的时候,几乎不需要别的什么配置。

Spring+MVC=SpringMVC : 在spring的基础上,对MVC思想的一个实现,是一个MVC框架

SpringMVC: 对servlet做的一个封装,换成controller层

相对于struts2,SpringMVC和Spring结合的更加完美
SpringMVC笔记

web.xml文件配置

只有在满足地址后缀 .do,才会进入SpringMVC框架
SpringMVC笔记
SpringMVC笔记
地址后加上匹配规则 .do,进入SpringMVC框架

springMVC.xml

SpringMVC笔记

@requestMapping 映射请求

SpringMVC笔记

使用@RequestMapping映射请求
1.使用@RequestMapping注解映射请求的URL
2.返回值(此处为“success”)会通过视图解析解析为实际的物理视图,此处为InternalResourceViewResolver,并通过prefix + 返回值 + suffix 这样的方式得到实际的物理视图,然后做转发操作
3.SpringMvc使用@RequestMapping注解为控制器指定可以处理的URL请求,注解可以标记在类上或方法上
4.Dispatcher截获请求后就通过@RequestMapping提供的映射信息确定请求所对应的处理方法
[email protected]中可以指定value(请求URL)、method(请求的方法)、params(请求参数)、heads(请求头),他们之间的关系,使用多个条件联合查询,可使请求精确化。
?:匹配文件名中的一个字符
*:匹配文件名中的任意字符
**: ** :匹配多层路径
SpringMVC笔记

映射请求参数 请求头

springMVC通过分析处理方法的名,将Http请求信息绑定到处理方法的相关入参中
1.使用@requestParam可以请求参数传递给请求方法
2.使用@requestHeader请求抱头信息
3.使用@CookieValue绑定请求中的Cookie值
4.使用POJO对象绑定请求参数,springMVC会按照参数名和POJO属性名自行匹配

处理模型数据

当我们采用映射路径到方法处理完数据时,需要将数据显示页面上,springMVC框架提供可以将模型数据暴露给视图的解决方案
1.ModelAndView

控制器处理方法的返回值可以是ModelAndView,其包含模型和数据信息,Springmvc会将model中的数据放到request域中。

添加模型数据:ModelAndView addObject(String attributeName,Object attributeValue) ModelAndView addAllObject(Map<String,?>
modelMap)

设置视图: void setView(View view)
[email protected]注解
[email protected]
这个注解的作用是将处理方法对应的模型属性透明的保存到HttpSession中。前提是HttpSession中已经事先存在一个对应的模型,否则就会报错

视图和视图解析器

SpringMVC如何解析视图:

对于那些返回String、view或ModelMap等类型的处理方法,SpringMvc都会将其装配成一个ModelAndView对象。view接口时无状态的,不会有线程安全问题
2).重定向
如果返回的字符串中带有“forward:”或“redirect:”前缀时,SpringMVC会对他们进行特殊处理,将其当成指示符,其后的字符串作为URL来处理。
在SpringMVC 配置文件中添加<mvc:annotation-driven />,<mvc:annotation-driven />会默认装配好一个
SpringMVC笔记

拦截器

SpringMvc也可以使用拦截器对请求进行拦截,可以自定义拦截器来实现特定的功能,自定义拦截器必须实现HandlerInterceptor接口
SpringMVC笔记

运行流程

1、浏览器客户端发出HTTP请求,WEB应用服务器接收到这个请求,如果匹配到DispatcherServlet的请求映射路径(web.xml中指定),web容器就将该请求转交给DispatcherServlet处理。
2、由DispatcherServlet控制器根据请求的信息(URL、HTTP方法、请求报文头、请求参数、Cookie等)及HandlerMapping的配置找到处理请求的处理器(Handler)。可将HandlerMapping看成路由控制器,将Handler看成目标主机。值得注意的是:Spring MVC中并没有定义一个Handler接口,实际上任何一个Object都可以成为请求处理器。
3、当DispatcherServlet根据HandlerMapping得到对应请求的Handler后,通过HandlerAdapter对Handler进行封装,再以统一的适配器接口调用Handler。HandlerAdapter是Spring MVC的框架级接口,顾名思义,HandlerAdapter是一个适配器,它用统一的接口对各种Handler方法进行调用。
4、处理器完成业务逻辑的处理后由HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet,ModelAndView包含了视图逻辑名和模型数据信息。
5、ModelAndView中的包含的是”逻辑视图名“,而非真正的视图对象,DispatcherServlet将ModelAndView传给视图解析器(ViewResolver)完成逻辑视图名到真实视图对象的解析工作,ViewReslover解析后返回具体View给DispatcherServlet。
6、当得到真实的视图对象View后,DispatcherServlet就使用这个View对象对ModelAndView中的模型数据进行视图渲染。然后DispatcherServlet将渲染结果响应给用户。
7、最终客户端得到相应消息,可能是一个普通的HTML页面,也可能是一个XML或JSON串,甚至是一张图片或一个PDF文档等不同的媒体形式

参数收集

  1. 内置对象 HttpServletRequest (了解)
    SpringMVC笔记

  2. 方法参数收集(常用)
    SpringMVC笔记
    前台的key值对应到参数值,就可以获取到value

  3. 方法对象收集 (常用)

SpringMVC笔记
1 后台执行无参构造方法,创建对象
2 根据前台的key,调用对应的set/get方法完成赋值