基本是总结
跟开淘学习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参数 <form:form>支持提交PUT DELETE请求(HiddenHttpMethodFilter) 通过Spirng ViewResolver展示各种结构 使用ContentNegotiatingViewResolver选择最适合client的展示 RestTemplate简化client编写Controller @RequestMapping(value="/{id}",method=RequestMethod.GET) 展示支持 Negotiated view-based rendering HTTP message convertersclient 使用RestTemplate: 适用于第三方软件调用RestFul接口 new RestTemplate().getForObject( "http://localhost:8080/Spitter/spitters/{spitter}/spittles", Spittle[].class, urlVariables);RestFul Form http4 form只支持:post get <form method="post"> <input type="hidden" name="_method" value="delete"/> ... </form> web.xml配置:<filter> <filter-name>httpMethodFilter</filter-name> <filter-class> org.springframework.web.filter.HiddenHttpMethodFil </filter-class> </filter> <filter-mapping> <filter-name>httpMethodFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>