Spring MVC
是Spring Framework提供的web组件核心组件:
DispatcherServlet Handler HandlerMapping
HandlerInterceptor HandlerExecutionChain
HandlerAdapter ModelAndView
ViewResolver工作流程:
1. 客户端请求被DispatcherServlet接收
2. 根据HandlerMapping映射到Handler
3. 生成Handler和HandlerInterceptor
4. Handler和HandlerInterceptor以HandlerExecutionChain的形式一并返回给DispatcherServlet
5. DispatcherServlet通过HandlerAdapter调用Hanlder的方法完成业务逻辑处理
6. 返回一个ModelAndView对象给DispatcherServlet
7. DispatcherServlet将获取的ModelAndView对象传给ViewResolver视图解析器,将逻辑视图解析成物理视图
8. ViewResolver返回一个View给DispatcherServlet
9. DispatcherServlet根据View进行视图渲染
10. DispatcherServlet将渲染之后的视图响应给客户端
使用步骤:
1. 在pom.xml配置spring-webmvc的依赖
2. 在web.xml中配置Spring MVC的DispatcherServlet
3. speingmvc.xml中配置自动扫描、视图解析器(前缀、后缀)
4. 创建Handler
流程梳理:
1. DispatcherServlet就收到URL请求index,结合@RequestMapping("/index")注解将该请求交给index业务方法进行处理
2. 执行index业务方法,控制台打印日志,并且返回“index”字符串(逻辑视图)
3. 结合springmvc.xml中的视图解析器配置,找到目标资源:/index.jsp,即根目录下的index.jsp文件,将该jsp资源返回给客户端完成响应
Spring MVC常用注解
1. @RequestMapping:将URL请求与业务方法进行映射,在控制器的类定义处和方法定义处都可以以添加@RequestMapping,在类定义处添加相当于多了一层访问路径
@RequestMapping常用参数: value:指定URL请求的实际地址,是@RequestMapping的默认值 method:指定请求的method类型,包括GET,POST,DELETE,PUT等 params:指定request请求中必须包含的参数值,若不包含,无法调用该方法参数绑定: params是对URL请求参数进行限制,不满足条件的URL无法访问该方法,需要在业务方法中获取URL的参数值。
1. 在业务方法定义时声明参数列表
2. 给参数列表添加@RequestParam注解进行绑定
Spring MVC也支持RESTful风格的URL参数获取传统URL : http://localhost:8080/springmvc_war/hello/restful?id=1&name=tomRESTful URL: http://localhost:8080/springmvc_war/hello/restful/1/tom将参数列表的注释该位@PathVariable("id")即可映射Cookie: @CookieValue("JESSIONID")使用POJO绑定参数Spring MVC会根据请求参数名和POJO属性名进行匹配,自动为该对象填充属性值,并且支持属性级联(属性名要一致)级联:在jsp文件中的name设置为address.id这样的形式主体对象可以没有无参构造函数,但是级联对象必须有无参构造函数。如果出现中文乱码,可以通过配置过滤器来解决,在web.xml中配置即可(encodingFilter)。JSP页面的转发和重定向Spring MVC默认以转发的形式响应JSP,可以手动进行修改。重定向的时候不能写逻辑视图,必须写明资源的物理路径,比如“redirect:/index.jsp”或“forward:/index.jsp”Spring MVC数据绑定:在后台业务方法中,直接获取前端HTTP请求中的参数@RequestMapping注解可以添加参数,进行设置: value=“id”:将HTTP请求中名为id的参数与Handler业务方法中的形参进行映射 required:true表示id参数是必填的,false表示非必填 defaultValue=“0”,表示默认值解决响应时乱码问题,在
springmvc.xml中配置转换器:
<mvc:annotation-driven> <!-- 消息转换器 -->
<mvc:message-converters>
<bean class="org.springframework.http.converter.StringHttpMessageConverter"> <property name="supportedMediaTypes" value="text/html;charset=UTF-8"></property> </bean>
</mvc:message-converters>
</mvc:annotation-driven>
Spring MVC不支持LIst类型的直接转换,需要包装成Object,List集合的基本类 要有无参构造函数。
JSON数据:JSON数据可以使用JSON.stringify()方法转换成字符串contentType:"application/json;charset5=UTF-8"不能省略业务方法:@RequestBody注解:将JSON数据转为java bean,使用Fastjson@ResponseBody注解Spring MVC视图层解析业务数据的搬到是指将业务数据绑定给JSP域对象,业务数据的绑定是由ViewResolver来完成的。
MapModelModelAndView@SessionAttribute@ModelAttribute :当Handler接收到一个客户端请求后,Servlet APIHttpServletRequest@ModelAttribute :当Handler接收到一个客户端请求后,无论调用哪个业务方法,都会优先调用被@ModelAttribute注解修改的方法,并将其返回值作为业务数据,在进入到业务方法,此时业务方法只需要返回视图信息即可,不需要返回业务数据,及时返回业务数据,也会被@ModelAttribute注释修饰的方法返回的数据所覆盖。直接给Model对象进行装载的方法优先级更高。业务数据绑定到session,从sessionScope取数@SessionAttribute :给类添加只要给类添加了@SessionAttribute注解之后,无论类中的哪个业务方法被访问,将业务数据绑定到request域对象的同时,也会将业务数据帮到session域对象中,前提是request域中的key值需要与@SessionAttribute注解中的value值一致。@SessionAttribute可以通过key值绑定,也可以通过业务数据的数据类型进行绑定。@SessionAttribute可以同时绑定多个数据Spring MVC自定义数据类型转换器
1. 创建DateConverter类,并实现org.springframework.core.convert.converter.Converter接口,需要指定泛型Converter<String,Date>
2. 在springmvc.xml中配置conversionService bean,这个bean是org.springframework.context.support.ConversionServiceFactoryBean的实例化对象,同时bean中必须包含一个converters属性,在其中注册所有需要自定义的转换器。