过滤器 监听器 拦截器区别
过滤器Filter | 特殊的Servlet Filter对用户的请求进行预处理,接着将请求交给Servlet进行处理并响应,最后Filter在对服务器响应进行预处理 。1.在过滤器中修改字符编码。2.在过滤器中修改HttpServletRequest的一些参数,包括过滤低俗文,危险字符等。 |
- | – |
拦截器Introspector | AOP的一种实现,在SpringMvc中就是依赖于SpringMvc框架,在实现上基于java的反射机制,属于面向切面(AOP)的一种应用。1.只能对controller请求进行拦截,对直接访问的静态资源的请求则没有办法进行拦截处理。 |
- | – |
监听器Listener | 1.监听session,request,context的创建于销毁,为别为HttpSessionListener,ServletContextListener,ServletRequestListener。2.监听对象属性变化,为别为:HttpSessionAttributeListener,ServletContextAttributeListener,ServletRequestAttributeListener. |
编码过滤
登录过滤
XML配置
拦截器
package com.ambow.interceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import com.ambow.pojo.User;
public class LoginInterceptor implements HandlerInterceptor {
//之后拦截
@Override
public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
throws Exception {
// TODO Auto-generated method stub
}
@Override
public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
throws Exception {
// TODO Auto-generated method stub
}
//之前拦截
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object object) throws Exception {
// TODO Auto-generated method stub
String uri = request.getRequestURI();
User user = (User) request.getSession().getAttribute("user");
System.out.println(uri);
if(uri.contains("/login.action")) {
return true;
}
if(user != null) {
return true;
}
request.setAttribute("msg", "你还没有登录");
request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request, response);
return false;
}
}
XML配置