zoukankan      html  css  js  c++  java
  • Java Web组件Servlet、Filter、Listener

    一、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销毁后调用。
    

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

  • 相关阅读:
    python3中try异常调试 raise 异常抛出
    基于 k8s-搭建 Kubernetes 的 web 管理界面
    PostgreSQL SERIAL创建自增列
    C++之同名覆盖、多态
    golang实现路由中间件middleware
    fastjson源码分析之序列化
    AJPFX实践 java实现快速排序算法
    AJPFX关于IO流的简单总结
    AJPFX关于多态中的动态绑定和静态绑定的总结
    关于java的arrays数组排序示例AJPFX的分享
  • 原文地址:https://www.cnblogs.com/beenupper/p/6876191.html
Copyright © 2011-2022 走看看