1. Spring2.5中引入注解对处理器(headler)支持
@Controller:用于标识是处理器类;@RequestMapping:请求到处理器功能方法的映射规则;
@RequestParam:请求参数到处理器功能处理方法的方法参数上的绑定;
@ModelAttribute:请求参数到命令对象的绑定; @InitBinder:自定义数据绑定注册支持,用于将请求参数转换到命令对象属性的对应类型; @SessionAttributes:用于声明session 级别存储的属性,放置在处理器类上,通常列出模型属性(如@ModelAttribute)对应的名 称,则这些属性会透明的保存到session 中
2. Spring3引入了更多的注解,其中包含了对RESTful架构风格的支持
@CookieValue: cookie数据到处理器功能处理方法的方法参数上的绑定;@RequestHeader: 请求头数据到处理器功能处理方法的方法参数上的绑定;
@RequestBody: 请求的body体的绑定
@ResponseBody: 处理器功能处理方法的返回值作为响应体
@ResponseStatus: 定义处理器功能处理方法/异常处理器返回的状态码和原因;
@ExceptionHandler: 注解式声明异常处理器;
@PathVariable: 请求URI 中的模板变量部分到处理器功能处理方法的方法参数上的绑定,从而支持RESTful架构风格的URI;
3. Spring3中引入的mvc命名空间
mvc这个命名空间是在Spring3中引入的,其作用是用来支持mvc的配置。需要在<bean>中声明出这个命名空间及其对应的schemaLocation中的值。<mvc:annotation-driven>自动注册基于注解风格的处理器和适配器:
在spring2.5中是 DefaultAnnotationHandlerMapping和 AnnotationMethodHandlerAdapter
在spring3中是 RequestMappingHandlerMapping和 RequestMappingHandlerAdapter.
同时还支持各种数据的转换器.
< mvc:interceptors>标签,配置自定义的处理器拦截器,例如:
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<ref bean="handlerInterceptor1"/>
</mvc:interceptor>
</mvc:interceptors>
<mvc:view-controller>标签,可以配置在收到相应请求后直接选择相应的视图,不需要写控制器的代码了,例如:
<mvc:view-controller path="/hello" view-name="test">
</mvc:view-controller>
<mvc:resources>标签,逻辑静态资源路径到物理静态资源路径的对应.例如:
<mvc:resources mapping="/images/**" location="/images/"/>
<mvc:resources mapping="/js/**" location="/js/"/>
<mvc:resources mapping="/css/**" location="/css/"/>
<mvc:default-servlet-handler>
当在web.xml中DispatcherServlet使用<url-pattern>/</url-pattern> 映射的时候,会静态资源也映射了,如果配置了这个mvc标签,那么再访问静态资源的时候就转交给默认的Servlet来响应静态文件,否则报404 找不到静态资源错误。
4. @Controller和@RequestMapping注解
4.1 声明处理器 @Controller
public class HelloWorldController {
//代码。。。。
}
4.2
映射处理器中的【功能处理方法】
@Controller
public class HelloWorldController {
@RequestMapping("/home")
public ModelAndView home(){
ModelAndView mv = new ModelAndView("index");
return mv;
}
} // 表明该方法映射的url路径为/home
4.3 @RequestMapping也可以写在处理器类上
@RequestMapping("/test")
@Controller
public class HomeController {
@RequestMapping("/home")
public ModelAndView home(){
ModelAndView mv = new ModelAndView("index");
return mv;
}
} //表明该方法映射的url路径为/test/home
注意:功能处理方法的方法可以是String类型,表示逻辑视图的名字,可以不用返回ModelAndView对象, 例如:
@Controller
public class HelloWorldController {
@RequestMapping("/home")
public String home(){
return "index";
}
}
5. 请求映射
假设浏览器发送了一个请求如下:-------------------------------
POST /login HTTP1.1 (请求方式 URL 协议版本号)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 (请求头信息)
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,en;q=0.8,zh;q=0.5,en-US;q=0.3
Connection: keep-alive
Cookie: JSESSIONID=DBC6367DEB1C024A836F3EA35FCFD5A2
Host: 127.0.0.1:8989
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:49.0) Gecko/20100101 Firefox/49.0
(回车换行。。。)
username=tom&password=123 (请求正文)
--------------------------------
http协议的请求格式如下:
---------------------------------
请求方法 URL 协议版本号
请求头信息
请求头信息
请求头信息
..
回车换行
请求正文
---------------------------------