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>

 

posted @ 2018-01-29 17:20  张小铁  阅读(139)  评论(0编辑  收藏  举报