您的位置:首页 > 编程语言 > Java开发

SpringMVC拦截器实例

2015-11-16 11:39 453 查看

简介

拦截器可以再请求被控制器处理前后做一些预处理或者后处理。该实例展示一个使用场景:在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";
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  spring mvc web开发