Java Web组件ServletFilterListener

Posted 曙光城邦

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java Web组件ServletFilterListener相关的知识,希望对你有一定的参考价值。

一、Servlet 类javax.servlet.http.HttpServlet;

 1.是单例模式,一个web容器中只有一个实例。服务器调用它的service方法进行请求处理,
service方法又根据请求的类型分别调用doGet,doPost等方法。
 2.由于是单例模式,所以线程不安全
 3.自定义Servlet需继承HttpServlet,并重写相应的doGet等方法。方法体内不能调用父类的该方法。


web.xml注册:
  <servlet>
    <servlet-name>myservlet</servlet-name>
    <servlet-class>com.zk.baseservlet.MyServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>myservlet</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>



二、Filter 接口javax.servlet.Filter;

 1.过滤器首先执行init方法,从web.xml中的filter配置中读取信息进行初始化。只执行一次。
 2.客户端的每次请求,都会经过doFilter方法。过滤器必须配置拦截路径。
 3.多个过滤器执行流程
控制台输出:

init2 method
init3 method
init method

MyFilter1 before
MyFilter2 before
MyFilter3 before
servlet doget method
MyFilter3 after
MyFilter2 after
MyFilter1 after

是个U型流程
Filter1类源码
public class MyFilter1 implements Filter {

    public MyFilter1() {
    }

    public void destroy() {
    }

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {

        System.out.println("MyFilter1 before");
        chain.doFilter(request, response);
        System.out.println("MyFilter1 after");
    }

    public void init(FilterConfig fConfig) throws ServletException {
        System.out.println("init method1");
    }
}
MyFilter2,
MyFilter3同上
web.xml注册,3个过滤器都拦截/a路径:
  <filter-mapping>
    <filter-name>myfilter1</filter-name>
    <url-pattern>/a</url-pattern>
  </filter-mapping>
 
  <filter-mapping>
    <filter-name>myfilter2</filter-name>
    <url-pattern>/a</url-pattern>
  </filter-mapping>

  <filter-mapping>
    <filter-name>myfilter3</filter-name>
    <url-pattern>/a</url-pattern>
  </filter-mapping>

分析:init方法在容器启动时候,只执行一次。doFilter则每访问一次路径就执行一次。

三、Listener 接口ServletContextListener
监听器用于监听并接收被监听对象的变化

 1.容器启动通知contextInitialized方法在filter和servlet前调用。
 2.contextDestroyed方法在容器关闭后,filter和servlet销毁后调用。

  不完善的地方欢迎大家补充

以上是关于Java Web组件ServletFilterListener的主要内容,如果未能解决你的问题,请参考以下文章

Java Web组件ServletFilterListener

java web学习: 三大组件之servlet基础

java Web三大组件--过滤器

java web学习:三大组件 Listener基础

Redhat 8.4 Java Swing web -- 组件不可见,但确实存在

在Java Web Project中实现Vue异步组件加载