SpringMVC学习-----二
1、转发和重定向以及参数
@RequestMapping(value = "/sayNo") public ModelAndView sayNo(){ ModelAndView mv=new ModelAndView(); mv.addObject("msg","第一次11测试"); mv.setViewName("redirect:/no.jsp"); return mv;
以上的方式是将mv以“重定向”的方式来传递。
参数将以这种方式来传递。通过mv.addObject来完成。
转发
/** * 转发到25 * @return */ @RequestMapping(value = "show2") public String test2(){ // /宝石的是到应用名称结束====https://localhost:8080/day/ return "forward:/show3.do"; } @RequestMapping(value = "show3") public String test3(){ System.out.println("这是show3"); return "welcome"; }
2、springmvc拦截器
HandlerExecutionChain
HandlerExecutionChain是一个执行链,从HandlerMapping返回给DispatherServlet,其中包含了Handler对象和Interceptor(拦截器)对象(数组),SpringMVC的拦截器接口定义了三种方法:
(1)preHandler调用handler之前执行
(2)postHandler调用handler之后执行
(3)afterCompletion视图渲染完之后执行
拦截器代码
package intercepter; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class MyHandlerIntercepter implements HandlerInterceptor { /** * 前置方法,在执行完handler之前执行。返回值true:继续向下执行。false:终止执行 * @param httpServletRequest * @param httpServletResponse * @param o * @return * @throws Exception */ @Override public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception { System.out.println("=======================================前置方法"); return true; } /** * 后置方法,在执行完handler之后执行,从后向前执行。前置方法执行返回false,后置方法以及整个拦截器中的所有后置方法不再执行 * @param httpServletRequest * @param httpServletResponse * @param o * @param modelAndView * @throws Exception */ @Override public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception { System.out.println("======================================后置方法"); } /** * 完成方法,视图渲染完成之后执行,从后向前执行。视图渲染完成之后执行 * @param httpServletRequest * @param httpServletResponse * @param o * @param e * @throws Exception */ @Override public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception { System.out.println("完成方法"); } }
如果要让拦截器生效,需要在springmvc-servlet.xml文件中配置
<!--对拦截器进行配置--> <mvc:interceptors> <mvc:interceptor> <!--拦截的路径,配置和servlet不同。/**表示拦截所有--> <mvc:mapping path="/**"/> <bean class="intercepter.MyHandlerIntercepter"></bean> </mvc:interceptor> </mvc:interceptors>
坚持就是胜利