Spring MVC RequestMappingHandlerMapping
来源:原创 发布时间:2015-04-06 归档:springmvc
开发环境 :
JDK 7
Maven 3
Tomcat 7
Spring 4.1.5
Eclipse Luna
@RequestMapping 用于处理请求与处理方法之间的映射关系。RequestMappingHandlerMapping 负责分发请求, 它自动的查找控制器中所有的 @RequestMapping 注解, 当一个请求到来时, 它决定调用哪个方法来处理这个请求。
示例代码下载
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"> <property name="useSuffixPatternMatch" value="true" /> <property name="useTrailingSlashMatch" value="true" /> <property name="interceptors"> <list> <bean class="org.lychie.interceptor.MethodAccessInterceptor" /> </list> </property> </bean>
useSuffixPatternMatch 默认为 true, 它允许 url 带后缀, 如 /user/login.html --> /user/login
useTrailingSlashMatch 默认为 true, 它允许 url 带斜杠, 如 /user/login/ --> /user/login
interceptors 配置拦截器, 要求必须实现 HandlerInterceptor 接口。
useTrailingSlashMatch 默认为 true, 它允许 url 带斜杠, 如 /user/login/ --> /user/login
interceptors 配置拦截器, 要求必须实现 HandlerInterceptor 接口。
public class MethodAccessInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("---> preHandle"); return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("---> postHandle"); } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println("---> afterCompletion"); } }
@RequestMapping(value = "/domain", method = GET) public String domain() { System.out.println("---> handle method"); return "domain"; }
GET /domain
---> preHandle ---> handle method ---> postHandle ---> afterCompletion请求被 MethodAccessInterceptor 截获。可以看到, HandlerInterceptor.preHandle 在处理方法执行前执行, HandlerInterceptor.postHandle 在处理方法执行后执行, 当请求处理完成后执行 HandlerInterceptor.afterCompletion。若 HandlerInterceptor.preHandle 返回 false, 则终止后续逻辑的执行。HandlerInterceptor 的这 3 个方法提供了足够的灵活性来做各种各样预处理和后处理操作。
示例代码下载