具体访问顺序为 先过滤器 后拦截器
测试:
过滤器写法
package com.buaa.nstri.common.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import com.buaa.nstri.common.safe.XssHttpServletRequestWrapper;
/**
* 该过滤器提供ContextPath以及其他拦截器做不了的事情
* @author manta
*
*/
public class DefaultFilter implements Filter{
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
setContext((HttpServletRequest)request);
//------------------------
System.out.println("filter");
chain.doFilter(new XssHttpServletRequestWrapper(
(HttpServletRequest) request), response);
}
@Override
public void destroy() {
}
@Override
public void init(FilterConfig arg0) throws ServletException {
}
/**
* @param request
* request中放ContextPath的内容
*/
private void setContext(HttpServletRequest request)
{
if(request.getContextPath()!=null){
request.setAttribute("ContextPath", request.getContextPath());
}
}
}
拦截器写法
@Override
public void postHandle(HttpServletRequest request,
HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
//这里可以设置一些默认的参数值
System.out.println("out");
}
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler)
throws ServletException {
//这里可以设置一些默认的参数值
System.out.println("in");
return super.preHandle(request, response, handler);
}
输出为:
filter
in
out