SpringMVC拦截器实例

来源:互联网 发布:淘宝账号找回 编辑:程序博客网 时间:2024/06/08 14:00

简介

拦截器可以再请求被控制器处理前后做一些预处理或者后处理。该实例展示一个使用场景:在web开发中,常常需要设置网站的公用信息,比如网站名字,路径,协议等等。一般把这些信息存放到request或者session中。这里可以使用拦截器,在所有请求处理之前加上这些公用的信息。

接口声明如下:

public interface HandlerInterceptor {     boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)        throws Exception;     void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)            throws Exception;    void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)            throws Exception;} 

自定义拦截器

可以继承抽象类HandlerInterceptorAdapter,不需要继承接口。

package com.ydoing.web.interceptor;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;import com.ydoing.constant.web.WebConstant;import com.ydoing.domain.CmsSite;public class SiteInterceptor extends HandlerInterceptorAdapter {    @Override    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)            throws Exception {        CmsSite site = new CmsSite();        request.setAttribute(WebConstant.SITE_NAME_KEY, site);//将公用信息放入request中        return true;    }}

配置

    <mvc:interceptors>        <mvc:interceptor>            <mvc:mapping path="/**.html"/><!--映射路径 -->            <bean class="com.ydoing.web.interceptor.SiteInterceptor"/>        </mvc:interceptor>    </mvc:interceptors>  

控制器使用

直接从request取出即可

    @RequestMapping("/index.html")    public String index(HttpServletRequest request, ModelMap mm) {        CmsSite site = (CmsSite) request.getAttribute(WebConstant.SITE_NAME_KEY);        mm.addAttribute("base", site.getSiteName());//从request取出拦截器存放的数据        return "index";    } 
1 0