Servlet、Filter、Listener小结

Servlet Filter Listener
实现类 继承 HttpServlet 类 实现 Filter 接口 根据需要实现十个接口中的某几个
初始化 默认情况是在第一次使用时初始化
可以通过配置 web.xml 文件来实现服务器启动时初始化
Web容器启动时初始化 Web容器启动时初始化
和<url-pattern>的关系 一对多
一个 Servlet 可以对应多个 url
多对多 不需要配置

  Servlet/Filter/Listener 的加载顺序:

  1. 启动 Web 项目,首先 Web 容器首先读取 web.xml 配置文件中<context-param></context-param><listener></listener>
  2. Web 容器创建一个 ServletContext 实例,整个 Web 项目所有部分都共享给这个上下文实例(JSP 中的 application)
  3. Web 容器将<context-param></context-param>中的 name 和 value 的标签值转化成键值对的形式交给 ServletContext 对象
  4. 容器按照配置文件顺序加载 Listener
  5. 容器加载 Filter
  6. 容器加载 web.xml 中 <load-onstartup>标签配置为大于等于0的 Servlet
  7. 在容器销毁时,按照 Servlet → Filter → Listener 的顺序销毁。

  加载顺序 context-param → Listener → Filter → Servlet,这个顺序不会因为配置位置而改变,也就是说,即使 Servlet 配置在 Listener 之前,依旧是先加载 Listener
  而对于同样是 Filter 来说,配置在前面的会先加载;对于同样是 Servlet 来说,<load-on-starup>配置的值是非负数时,数字越小,越优先加载;如果没有配置,或者配置的是负数,那么只有在 Servlet 被请求时,才会加载

Servlet

  1. Servlet 线程不安全
  2. 一个 Servlet 实现类只能有一个实例
  3. 一个 Servlet 可以对应多个 url-pattern

Filter

  1. 多个 Filter 组成一个 FilterChain
  2. 多个Filter的执行有先后顺序,规则是在<filter-mapping>中,配置在前面的 Filter 执行要早于配置在后面的 Filter。
  3. Filter 和 url-pattern 可以是多对多的关系

猜你喜欢

转载自blog.csdn.net/qq_40395874/article/details/114292495