一、过滤器(Filter)
1.作用:
拦截不合理的请求,过滤不应该的响应。在web当中的过滤器可以当访问服务器资源时,把请求拦截下来,完成一些特殊功能。
2.应用场景:
登录验证、权限检查、事务管理、统一编码处理、敏感字符
3.生命周期:
在服务器启动后创建,在服务器关闭后销毁
4.拦截路径配置:
(1) 具体资源路径: /index.jsp 只有访问indexjsp资源时,过滤器才会被执行
(2) 拦截目录: /user/* 访问/user下的所有资源时,过滤器都会被执行
(3) 后缀名拦截:*.jsp 访问所有后缀名为isp资源时,过滤器都会被执行访问所有资源时,过滤器都会被执行
(4) 拦截所有资源:/* 访问所有资源时,过滤器都会被执行
5.代码展示
/**
*使用过滤器统一编码集
*/
import javax.servlet.*;
import java.io.IOException;
public class CharsetFilter implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
servletRequest.setCharacterEncoding("utf-8");
servletResponse.setContentType("text/html;charset=utf-8");
filterChain.doFilter(servletRequest,servletResponse);//使用filterChain.doFilter放行
}
}
二、监听(Listener)
1.概念:
用于监听ServletContext,HttpSession和ServletRequest等域对象的创建与销毁事件,用于监听域对象的属性发生增、删、改的事件,可以在事件发生前,发生后做一些必要的处理
2.生命周期:
在服务器启动后创建,在服务器关闭后销毁
3.代码展示
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
@WebListener
public class ListenerDemo1 implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
System.out.print("ServletContext创建了!");
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
System.out.print("ServletContext销毁!");
}
}
import javax.servlet.ServletContextAttributeEvent;
import javax.servlet.ServletContextAttributeListener;
import javax.servlet.annotation.WebListener;
@WebListener
public class ListenerDemo2 implements ServletContextAttributeListener {
@Override
public void attributeAdded(ServletContextAttributeEvent scae) {
System.out.print("增加属性");
}
@Override
public void attributeRemoved(ServletContextAttributeEvent scae) {
System.out.print("删除属性");
}
@Override
public void attributeReplaced(ServletContextAttributeEvent scae) {
System.out.print("修改属性");
}
}
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/ServletDemo4")
public class ServletDemo4 extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.getServletContext().setAttribute("username","Lanfeng");
this.getServletContext().setAttribute("username","Wanni");
this.getServletContext().removeAttribute("username");
}
}