SpringMVC Controller内部跳转如何被拦截器拦截
2015-03-08 11:02
411 查看
以下讨论在某个拦截器a能拦截所有url的前提下
1.x使用直接调用另一个方法y,a将只拦截x(一次).
2.x使用
方式跳转,a将拦截x和/test(两次)。
3.x使用redirect方式跳转,a也将拦截两次。
测试类
@RequestMapping(value = "/test", method = { RequestMethod.GET })
public ModelAndView test(Model model) {
System.out.println("test");
return new ModelAndView("index", model.asMap());
}
@RequestMapping(value = "/test1", method = { RequestMethod.GET })
public ModelAndView test1(Model model) {
System.out.println("test1");
try {
this.request.getServletContext().getRequestDispatcher("/test").forward(request, response);
} catch (ServletException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
@RequestMapping(value = "/test2", method = { RequestMethod.GET })
public ModelAndView test2(Model model) {
System.out.println("test2");
return test(model);
}
拦截器
public class AllMappingInterceptor extends HandlerInterceptorAdapter {
@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----------------");
}
}访问test
-------------------preHandle----------------
test
-------------------postHandle----------------
-------------------afterCompletion----------------
访问test1
-------------------preHandle----------------
test1
-------------------preHandle----------------
test
-------------------postHandle----------------
-------------------afterCompletion----------------
-------------------postHandle----------------
-------------------afterCompletion----------------
访问test2
-------------------preHandle----------------
test2
test
-------------------postHandle----------------
-------------------afterCompletion----------------
课间使用forward(req,res)的方式,preHandle在各自被调用之前执行,postHandle和afterCompletion在所有跳转结束后再执行
1.x使用直接调用另一个方法y,a将只拦截x(一次).
2.x使用
this.request.getServletContext().getRequestDispatcher("/test").forward(request, response);
方式跳转,a将拦截x和/test(两次)。
3.x使用redirect方式跳转,a也将拦截两次。
测试类
@RequestMapping(value = "/test", method = { RequestMethod.GET })
public ModelAndView test(Model model) {
System.out.println("test");
return new ModelAndView("index", model.asMap());
}
@RequestMapping(value = "/test1", method = { RequestMethod.GET })
public ModelAndView test1(Model model) {
System.out.println("test1");
try {
this.request.getServletContext().getRequestDispatcher("/test").forward(request, response);
} catch (ServletException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
@RequestMapping(value = "/test2", method = { RequestMethod.GET })
public ModelAndView test2(Model model) {
System.out.println("test2");
return test(model);
}
拦截器
public class AllMappingInterceptor extends HandlerInterceptorAdapter {
@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----------------");
}
}访问test
-------------------preHandle----------------
test
-------------------postHandle----------------
-------------------afterCompletion----------------
访问test1
-------------------preHandle----------------
test1
-------------------preHandle----------------
test
-------------------postHandle----------------
-------------------afterCompletion----------------
-------------------postHandle----------------
-------------------afterCompletion----------------
访问test2
-------------------preHandle----------------
test2
test
-------------------postHandle----------------
-------------------afterCompletion----------------
课间使用forward(req,res)的方式,preHandle在各自被调用之前执行,postHandle和afterCompletion在所有跳转结束后再执行
相关文章推荐
- springMVC 拦截器如何做登录检查及页面跳转
- springMVC 拦截器如何做登录检查及页面跳转
- springMVC 拦截器如何做登录检查及页面跳转
- springMVC 拦截器如何做登录检查及页面跳转
- 拦截器springmvc防止表单重复提交【3】3秒后自动跳回首页【重点明白如何跳转到各自需要的页面没有实现 但是有思路】
- SpringMVC拦截器之拦截跳转页面
- spring拦截器 拦截springMVC的controller
- 如何为 SpringMVC 编写单元测试:普通 Controller 测试
- Yii 中如何获取当前controller名称和controller内部action方法Id
- storyboard 中如何从一个viewcontroller跳转到另外一个storyboard
- 很扯淡的一次SpringMVC错误,配置mvc:resources后跳转找不到Controller
- springmvc的拦截器,怎么设置不拦截的url
- 详解SpringMVC请求的时候是如何找到正确的Controller[附带源码分析]
- 详解SpringMVC请求的时候是如何找到正确的Controller
- SpringMVC中Controller跳转到另一个Controller方法
- 利用SpringMVC拦截器控制Controller返回值
- springmvc 如何跳转到根目录下的index.jsp页面
- 实现springmvc 的controller级别的跳转的方法 return "redirect:/news/to";
- SpringMVC controller控制页面跳转
- 如何使用SpringMVC拦截器