麻绳先生

做一些记录性的工作

SpringMVC第一节

SpringMVC是一种基于Java的实现MVC设计模型的请求驱动类型的轻量级web框架,属于Spring FrameWork的后续产品,以及融合在Spring Web Flow里面。Spring框架提供了构建Web应用程序的全部功能MVC模块,使用Spring可插入的MVC框架,从而在进行Web开发时,选择使用Spring MVC框架或集成其他MVC开发框架,如Struts2等。支持RESTful编程风格的请求。

  • 清晰的角色划分;
  • 分工明确,扩展灵活;

基本组件

DispatcherServlet前端控制器

用户i请求到达前端控制器,相当于MVC模式中的C,DispatcherServlet是整个流程控制的中心,由它调用其他组件处理用户的请求,DispatcherServlet降低了组件之间的耦合。

HandlerMapping处理器映射器*

HandlerMapping负责根据用户请求找到Handler,SpingMVC提供了不同的映射器实现不同的映射方式,例如配置文件方式、实现接口方式、注解方式等。

Handler处理器

开发中需要编写的具体业务控制器,由DispatcherServlet把用户的请求转发到Handler,由Handler对具体的用户请求进行处理。

HandlerAdapter处理器适配器*

通过HandlerAdapter对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理器进行执行。

View Resolver视图解析器*

View Resolver负责将处理结果生成View视图,View Resolver首先根据逻辑视图名解析成物理视图名即具体的页面地址,再生成View视图对象,最后对View进行渲染将处理结果通过页面展示给用户。

View视图

SpringMVC框架提供了很多的View视图类型的支持,包括jstlView, freemarkerView, pdfView等。最常用的是jsp。一般情况下需要通过页面标签或页面模板技术将模型数据通过页面展示给用户。

RequestMapping

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package org.springframework.web.bind.annotation;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.springframework.core.annotation.AliasFor;

//可以作用于类和方法,支持分级映射
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Mapping
public @interface RequestMapping {

String name() default "";

//别名path和value通用,用于指定url
@AliasFor("path")
String[] value() default {};

@AliasFor("value")
String[] path() default {};


//public enum RequestMethod {
// GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS, TRACE
//}
RequestMethod[] method() default {};

//限定传递的请求参数
String[] params() default {};

//用于指定限制请求的头条件
String[] headers() default {};

String[] consumes() default {};

String[] produces() default {};
}

请求参数的绑定

支持简单数据类型、对象、列表等。@RequestMapping(param={username=””})

自定义类型转换器

  1. 首先实现Converter接口;
  2. 在spring配置文件中配置自定义类型转换器;

Servlet原生API

HttpServletRequest、HttpServletResponse、HttpSession、ServletContext。

常用注解

  1. @RequestParam
  2. @RequestBody get方法不适用
  3. @PathVariable RESTful风格 WebClient模拟发送请求
  4. @RequestHeader
  5. @CookieValue 获取cookie的值
  6. @ModelAttribute
  7. @SessionAttributes 用于多次执行控制器方法间的参数共享

ResponseBody相应json数据

DispatcherServlet会拦截所有资源,导致静态资源,如image、css、js等也会被拦截,解决方法就是需要配置静态资源不拦截。