在路上

 找回密码
 立即注册
在路上 站点首页 学习 查看内容

浅谈Listener、Filter、Servlet初始化顺序

2016-12-13 12:56| 发布者: zhangjf| 查看: 497| 评论: 0

摘要: Listener、Filter、Servlet都有一个初始化的过程,对应的方法分别为: contextInitialized(ServletContextEvent arg0); // Listenerinit(FilterConfig filterConfig); // Filterinit(ServletConfig config); // Serv ...

Listener、Filter、Servlet都有一个初始化的过程,对应的方法分别为:

  1. contextInitialized(ServletContextEvent arg0); // Listener
  2. init(FilterConfig filterConfig); // Filter
  3. init(ServletConfig config); // Servlet
复制代码

那么它们的初始化顺序是什么呢?

TestServlet.java:

  1. package com.king;
  2. import java.io.IOException;
  3. import javax.servlet.GenericServlet;
  4. import javax.servlet.ServletConfig;
  5. import javax.servlet.ServletException;
  6. import javax.servlet.ServletRequest;
  7. import javax.servlet.ServletResponse;
  8. public class TestServlet extends GenericServlet {
  9. @Override
  10. public void init(ServletConfig config){
  11. System.out.println("Servlet 初始化 。。。");
  12. }
  13. @Override
  14. public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
  15. System.out.println("Servlet service 。。。");
  16. }
  17. }
复制代码

TestFilter.java:

  1. package com.king;
  2. import java.io.IOException;
  3. import javax.servlet.Filter;
  4. import javax.servlet.FilterChain;
  5. import javax.servlet.FilterConfig;
  6. import javax.servlet.ServletException;
  7. import javax.servlet.ServletRequest;
  8. import javax.servlet.ServletResponse;
  9. public class TestFilter implements Filter{
  10. public void init(FilterConfig filterConfig) throws ServletException {
  11. System.out.println("Filter 初始化。。。");
  12. }
  13. public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
  14. System.out.println("doFilter 。。。");
  15. chain.doFilter(request, response);
  16. }
  17. public void destroy() {
  18. System.out.println("Filter 销毁。。。");
  19. }
  20. }
复制代码

TestListener.java:

  1. package com.king;
  2. import javax.servlet.ServletContextEvent;
  3. import javax.servlet.ServletContextListener;
  4. public class TestListener implements ServletContextListener{
  5. public void contextInitialized(ServletContextEvent arg0) {
  6. System.out.println("Listener 初始化。。。");
  7. }
  8. public void contextDestroyed(ServletContextEvent arg0) {
  9. System.out.println("Listener 销毁。。。");
  10. }
  11. }
复制代码

web.xml:

  1. <xml version="1.0" encoding="UTF-8"?>
  2. <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  3. <servlet>
  4. <servlet-name>s<servlet-name>
  5. <servlet-class>com.cos.TestServlet<servlet-class>
  6. <servlet>
  7. <servlet-mapping>
  8. <servlet-name>s<servlet-name>
  9. <url-pattern>/login<url-pattern>
  10. <servlet-mapping>
  11. <filter>
  12. <filter-name>f<filter-name>
  13. <filter-class>com.cos.TestFilter<filter-class>
  14. <filter>
  15. <filter-mapping>
  16. <filter-name>f<filter-name>
  17. <url-pattern>/*<url-pattern>
  18. <filter-mapping>
  19. <listener>
  20. <listener-class>com.cos.TestListener<listener-class>
  21. <listener>
  22. <web-app>
复制代码

启动tomcat后,在控制台里以此打印出:

可以看出Listener的初始化最早,Filter次之。他俩的初始化都是在容器启动完成之前初始化的。Servlet没有初始化,原因是没有匹配的请求进来。初始化的顺序跟Listener、Filter、Servlet在web.xml中的顺序无关。

而多个Filter或多个Servlet的时候,谁的mapping在前面,谁先初始化。

最新评论

小黑屋|在路上 ( 蜀ICP备15035742号-1 

;

GMT+8, 2025-7-7 12:19

Copyright 2015-2025 djqfx

返回顶部