web学习:web.xml使用:listener标签的使用

web学习:web.xml使用:listener标签的使用

1.认识web.xml

从零开始学习java web,学习web最开始就不得不说web.xml,以前只知道web.xml对web应用来说很重要,却不知道为什么,现在来记录下学习web.xml的标签。

web.xml的加载过程(引用)
在web-app元素内,元素的配置顺序与工程的加载顺序无关,web.xml的加载过程为:

1.启动一个web项目,web容器(如tomcat)读取web.xml文件,读取其中的配置信息
2.容器创建一个servlet上下文(servletContext),这个web项目所有部分共享这个上下文
3.容器将转换为键值对,交给servletContext
4.容器创建中的监听器实例
5.触发contextInitialized方法,listener被调用(当Servlet 容器启动或终止Web 应用时,会触发ServletContextEvent 事件,该事件由ServletContextListener 来处理。ServletContextListener 接口中定义了处理ServletContextEvent 事件的两个方法contextInitialized;contextDestroyed,web.xml有contextLoaderListener监听器,spring等框架实现了本监听器的接口方法)
6.调用完contextInitialized方法后,容器再对filter初始化
7.容器对web.xml中的指定load-on-startup的值时,

1.当值为0或者大于0时,表示容器在应用启动时就加载并初始化这个servlet。
2.如果值小于0或未指定时,则表示只有在第一次请求的容器才在该servlet调用初始化函数(springMVC的初始化为此阶段。
3.正值越小,(优先级1,2,3...->递减)servlet的优先级越高,应用启动时就越先加载。
4.值相同时,容器就会自己选择顺序来加载。

1.1 listener标签

一般我们会在web.xml中见到如下的listener标签

		<listener>
    		<listener-class>web.xml.testListener</listener-class>
  		</listener>
1.1.1 listener-class标签是我们什么的listener的全路径,该类需要实现系统已经实现的listener接口。

1.2 简单使用

这些设置完之后我们就可以来看看这些标签到底是如何使用的:

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >
<!-- xml配置  -->
<web-app>
  <display-name>Archetype Created Web Application</display-name>
  	<context-param>
    	<param-name>myparam</param-name>
    	<param-value>我是context-param</param-value>
    </context-param>
    <filter>
    	<filter-name>MyFilter</filter-name>
    	<filter-class>web.xml.testFilter</filter-class>
    	<init-param>
       		<param-name>testfilter</param-name>
       		<param-value>我是测试过滤器</param-value>
	    </init-param>
    </filter>
    <filter-mapping>
    	<filter-name>MyFilter</filter-name>
    	<url-pattern>*.do</url-pattern>
    </filter-mapping>
    <listener>
    	<listener-class>web.xml.testListener</listener-class>
    </listener>
    <servlet>
       <servlet-name>MyServlet</servlet-name>
       <servlet-class>web.xml.testServlet</servlet-class>
       <init-param>
       		<param-name>test</param-name>
       		<param-value>我是测试param</param-value>
	   </init-param>
	</servlet>
	<servlet-mapping>  
       <servlet-name>MyServlet</servlet-name>  
       <url-pattern>*.do</url-pattern>  
    </servlet-mapping>
</web-app>
//这里是我写的测试listener
public class testListener implements ServletContextListener {

	public void contextInitialized(ServletContextEvent sce) {
		System.out.println("监听器运行");
		System.out.println("ServletContext创建");
		
	}

	public void contextDestroyed(ServletContextEvent sce) {
		System.out.println("ServletContext销毁");
		System.out.println("监听器销毁");
		
	}

}

将程序用web容器跑起来,启动过程中的输出如下

2019-4-2 17:52:16 org.apache.catalina.core.AprLifecycleListener lifecycleEvent
信息: The Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: D:\esendev\jdk1.6\bin;.;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;D:\esendev\jdk1.6\jre\bin;D:/esendev/jdk1.8.0_65/bin/server;D:/esendev/jdk1.8.0_65/bin;D:/esendev/jdk1.8.0_65/lib/amd64;D:\app\longw\product\11.2.0\dbhome_1\bin;D:\oracle\longw\product\11.2.0\dbhome_1\bin;C:\Program Files (x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS Client\;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;";D:\esendev\jdk1.8.0_65\bin";D:\esendev\jdk1.8.0_65\jre\bin;C:\WINDOWS\System32\OpenSSH\;D:\esendev\Git\cmd;C:\Users\longw\AppData\Local\Microsoft\WindowsApps;D:\Python\Python37-32;;D:\esendev\eclipse_kjzz\eclipse;
2019-4-2 17:52:16 org.apache.coyote.http11.Http11BaseProtocol init
信息: Initializing Coyote HTTP/1.1 on http-8088
2019-4-2 17:52:16 org.apache.catalina.startup.Catalina load
信息: Initialization processed in 347 ms
2019-4-2 17:52:16 org.apache.catalina.core.StandardService start
信息: Starting service Catalina
2019-4-2 17:52:16 org.apache.catalina.core.StandardEngine start
信息: Starting Servlet Engine: Apache Tomcat/5.5.28
2019-4-2 17:52:16 org.apache.catalina.core.StandardHost start
信息: XML validation disabled
监听器运行
ServletContext创建
初始化filter
我是context-param
我是测试过滤器
MyFilter
2019-4-2 17:52:16 org.apache.coyote.http11.Http11BaseProtocol start
信息: Starting Coyote HTTP/1.1 on http-8088
2019-4-2 17:52:16 org.apache.jk.common.ChannelSocket init
信息: JK: ajp13 listening on /0.0.0.0:8019
2019-4-2 17:52:16 org.apache.jk.server.JkMain start
信息: Jk running ID=0 time=0/28  config=null
2019-4-2 17:52:16 org.apache.catalina.storeconfig.StoreLoader load
信息: Find registry server-registry.xml at classpath resource
2019-4-2 17:52:16 org.apache.catalina.startup.Catalina start
信息: Server startup in 494 ms

可以看见该监听器是检测ServletContext的创建,当ServletContext创建时,该监听器运行contextInitialized方法,当ServletContext销毁时,该监听器运行contextDestroyed方法。这个监听器可以用来干嘛呢?比如我们可以在ServletContext启动时初始化我们需要的各种初始化参数。监听器其实就是用来给我们做额外参数的初始化的(个人理解:框架比较常用)

  • 1
    点赞
  • 5
    收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论

打赏作者

程序员小孩

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值