一、过滤器
并不是所有请求都可以访问目标资源,也不是所有响应都要返回客户端,这时就需要过滤器进行过滤操作
Filter的常用应用包括但不限于:登录权限检查、解决网站乱码、过滤敏感字符、日志记录等
1.过滤器实现
@WebFilter(urlPatterns = {"/index/*"})
public class Loginfilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
// 参数父转子
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
HttpSession session = request.getSession();
User user = (User) session.getAttribute("user");
if(user == null) response.sendRedirect("userLogin.html");
// 传递给下一层过滤器
else filterChain.doFilter(request, response);
}
@Override
public void destroy() {
}
}
2.过滤器生命周期
二、监听器
监听器是专门对三大域对象进行监听和做出相应处理的对象,是设计模式中观察者模式的典型案例
1.监听器的分类
web中定义八个监听器接口作为监听器的规范
(1)application域监听器
ServletContextListener 监听应用域对象的创建和销毁
ServletContextAttributeListener 监听应用域对象数据的增删改事件
(2)session域监听器
HttpSessionListener 监听会话域对象的创建和销毁
HttpSessionAttributeListener 监听会话域对象数据的增删改事件
HttpSessionBindingListener 监听会话域监视器的绑定和解绑
HttpSessionActivationListener 监听会话域活化与钝化
(3)request域监听器
ServletRequestListener 监听请求域对象的创建和销毁
ServletRequestAttributeListener 监听请求域对象数据的增删改事件
2.监听器的使用
@WebListener
public class MyApplicationListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce){
ServletContext application = sce.getServletContext();
System.out.printIn(application.hashCode()+"应用域初始化了");
}
@Override
public void contextDestroyed(ServletContextEvent sce){
ServletContext application = sce.getServletContext();
System.out.printIn(application.hashCode()+"应用域销毁了");
}
}