基本是总结

跟开淘学习SpringMVC系列http://www.iteye.com/blogs/subjects/kaitao-springmvc

以及Spring in action中的RestFul


1. 控制器:前端DispatchServelt,应用HandlerMapping ViewResolver,页面控制器Controller
2. 支持:
   本地化解析 主题解析 文件上传
   灵活的数据验证 格式化 数据绑定
   约定大于配置(管理优先)
   Web层的单元测试
   JSP标签库
   支持RestFul风格
3. DispatcherServlet
   配置在web.xml
   默认配置文件“/WEB-INF/[servlet名字]-servlet.xml”
   主要工作在于调度
       1、文件上传解析,如果请求类型是multipart将通过MultipartResolver 进行文件上传解析;
       2、通过 HandlerMapping,将请求映射到处理器(返回一个 HandlerExecutionChain,它包括一个处理器、多个HandlerInterceptor 拦截器)
       3、通过HandlerAdapter 支持多种类型的处理器(HandlerExecutionChain中的处理器);
       4、通过ViewResolver 解析逻辑视图名到具体视图实现;
       5、本地化解析;
       6、渲染具体的视图等;
       7、如果执行过程中遇到异常将交给HandlerExceptionResolver 来解析。
4. Controller
   主要工作
       1、收集、验证请求参数并绑定到命令对象;
       2、将命令对象交给业务对象,由业务对象处理并返回模型数据;
       3、返回ModelAndView(Model部分是业务对象返回的模型数据,视图部分为逻辑视图名)。

5. 注解式控制器
@Controller:用于标识是处理器类;
@RequestMapping:请求到处理器功能方法的映射规则;
@RequestParam:请求参数到处理器功能处理方法的方法参数上的绑定;
@ModelAttribute:请求参数到命令对象的绑定; (即方法声明中的参数)
@SessionAttributes:用于声明 session 级别存储的属性,放置在处理器类上,通常列出模型属性(如
@ModelAttribute:对应的名称,则这些属性会透明的保存到session中;

请求映射:
路径映射:URI模板映射(@PathVariable)/Ant风格/正则
方法映射: @RequestMapping(value="/create", method = RequestMethod.GET):组合
参数限制: @RequestMapping(params="create", method=RequestMethod.GET)
header限制:@RequestMapping(value="/header/test3", headers = "Content-Type=application/json"):
生产者、消费者限定:@RequestMapping(value  =  "/produces",  produces  =  "application/json"):匹配Header“Accept:application/json”

数据绑定:
功能处理方法支持的参数类型:
   ServletRequest/HttpServletRequest 和  ServletResponse/HttpServletResponse
   InputStream/OutputStream 和  Reader/Writer
   WebRequest/NativeWebRequest
   HttpSession
   表单对象(命令对象):user.name自动绑定
   Model、Map、ModelMap
@RequestParam 绑定单个请求参数值:requestparam2(@RequestParam("username",required=false) String username)
@PathVariable 绑定 URI 模板变量值 :
   @RequestMapping(value="/users/{userId}/topics/{topicId}")
   public String test(
      @PathVariable(value="userId") int userId,  
      @PathVariable(value="topicId") int topicId)  
@ModelAttribute 绑定请求参数到命令对象:
   绑定到对象:test1(@ModelAttribute("user") UserModel user)  
   方法注释:调用处理函数之前执行,初始化对象到model,处理函数可访问
   暴露@RequestMapping 方法返回值为模型数据 :public @ModelAttribute("user2") UserModel test3(@ModelAttribute("user2") UserModel user)
@SessionAttributes 绑定命令对象到 session :最优先,如果没有查找有@ModelAttribute的方法,处理方法绑定参数

6. RESTful支持
Spring对RestFul的支持
   Controller支持HTTP METHOD:DELETE POST GET
   @PathVariable支持URI参数
   支持提交PUT DELETE请求(HiddenHttpMethodFilter)
   通过Spirng ViewResolver展示各种结构
   使用ContentNegotiatingViewResolver选择最适合client的展示
   RestTemplate简化client

编写Controller
   @RequestMapping(value="/{id}",method=RequestMethod.GET)

展示支持
   Negotiated view-based rendering
   HTTP message converters

client
   使用RestTemplate: 适用于第三方软件调用RestFul接口
   new RestTemplate().getForObject(
       "http://localhost:8080/Spitter/spitters/{spitter}/spittles",
       Spittle[].class, urlVariables);

RestFul Form
   http4 form只支持:post get

   


       
       ...
   

   web.xml配置:
       httpMethodFilter
           
               org.springframework.web.filter.HiddenHttpMethodFil
           

       

       
           httpMethodFilter
           /*