监听器里的东西为什么会在tomcat启动时加进去?

时间:2022-12-29 16:47:51
程序代码:

控制台输出如下:

信息: Deploying web application directory qi002
非法文字过滤初始化
2011-10-5 23:20:19 org.apache.catalina.startup.HostConfig deployDirectory
信息: Deploying web application directory qi003
添加application范围属性,属性名com.sun.faces.config.WebConfiguration com.sun.faces.config.WebConfiguration@bd4dc2   
2011-10-5 23:20:19 org.apache.catalina.startup.HostConfig deployDirectory
信息: Deploying web application directory ROOT
2011-10-5 23:20:19 org.apache.catalina.startup.HostConfig deployDirectory
信息: Deploying web application directory test
2011-10-5 23:20:19 org.apache.catalina.startup.HostConfig deployDirectory
信息: Deploying web application directory test.myeclipse.bak
2011-10-5 23:20:20 org.apache.catalina.startup.HostConfig deployDirectory
信息: Deploying web application directory test1
2011-10-5 23:20:20 org.apache.catalina.startup.HostConfig deployDirectory
信息: Deploying web application directory test2
2011-10-5 23:20:20 org.apache.catalina.startup.HostConfig deployDirectory
信息: Deploying web application directory test3
2011-10-5 23:20:20 org.apache.coyote.http11.Http11Protocol start
信息: Starting Coyote HTTP/1.1 on http-8080
2011-10-5 23:20:20 org.apache.jk.common.ChannelSocket init
信息: JK: ajp13 listening on /0.0.0.0:8009
2011-10-5 23:20:20 org.apache.jk.server.JkMain start
信息: Jk running ID=0 time=0/31  config=null
2011-10-5 23:20:20 org.apache.catalina.startup.Catalina start
信息: Server startup in 3288 ms
这两行红色的部分怎么被加进来了
添加application范围属性,属性名org.apache.jasper.runtime.JspApplicationContextImpl org.apache.jasper.runtime.JspApplicationContextImpl@a33d00
添加application范围属性,属性名name tom
替换application范围属性,属性名name
移除applocation范围属性,属性名name




程序代码:

监听器代码
package net.qijiabin.listener;

import javax.servlet.ServletContextAttributeEvent;
import javax.servlet.ServletContextAttributeListener;

public class MyServletContextAttributeListener implements ServletContextAttributeListener{

    public void attributeAdded(ServletContextAttributeEvent scab) {
        System.out.println("添加application范围属性,属性名"+scab.getName()+" "+scab.getValue());
    }

    public void attributeRemoved(ServletContextAttributeEvent scab) {
        System.out.println("移除applocation范围属性,属性名"+scab.getName());
    }

    public void attributeReplaced(ServletContextAttributeEvent scab) {
        System.out.println("替换application范围属性,属性名"+scab.getName());
    }

}





程序代码:

web.xml配置如下
    <listener>
        <listener-class>
        net.qijiabin.listener.MyServletContextAttributeListener
        </listener-class>
    </listener>



程序代码:

测试代码如下
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'application.jsp' starting page</title>
    
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->

  </head>
  
  <body>
    <%
        application.setAttribute("name","tom");
        application.setAttribute("name","123");
        application.removeAttribute("name");
     %>
  </body>
</html>

10 个解决方案

#1


你去研究源码吧


知道怎么用知道为何用就完了嘛

#2


基本上所有的操作都与监听器有关,你像adroid的一个onclick事件都是绑定了监听器的,C#也是,
java也是,基本上所有的程序都与监听器有关,你启动服务,监听器会运行,这一点也不稀奇!

#3


问题是我粘别人的,题目忘了改了,其实我上想问问,为什么每次在tomcat每次启动的时候,都会输出红色字体的那两行?。。。。

#4


引用
web项目在容器启动后,需要进行一些初始化的准备。。如:tomcat服务器启动后会加载web.xml(这是tomcat的机制。。除非修改tomcat的实现源码),web.xml会根据该xml的dtd标准(如:发现<listener><listener-class>net.qijiabin.listener.MyServletContextAttributeListener</listener-class></listener>标签,tomcat就利用监听方式加载net.qijiabin.listener.MyServletContextAttributeListener)按照从上往下顺序依次载入。。
而你在web.xml中配置了监听,所以就启动了。。。

#5


4楼说的我也知道,就是不清楚为什么输出了红色字体的部分,正常来说,直接输出最后的三行就行了啊。但是我每次启动tomcat的时候,无论JSP页面中有没有设置application范围属性,都会输出红色字体部分。我理解的应该是在JSP页面中设置了application范围属性,才会调用监听器的attributeAdded()方法。

#6


tomcat里所有项目都查清楚了吗

#7


恩啊。其他的项目我全给移除了啊,但是还是会出现那部分。。。

#8


信息: Deploying web application directory ROOT
2011-10-5 23:20:19 org.apache.catalina.startup.HostConfig deployDirectory
信息: Deploying web application directory test
2011-10-5 23:20:19 org.apache.catalina.startup.HostConfig deployDirectory
信息: Deploying web application directory test.myeclipse.bak
2011-10-5 23:20:20 org.apache.catalina.startup.HostConfig deployDirectory
信息: Deploying web application directory test1
2011-10-5 23:20:20 org.apache.catalina.startup.HostConfig deployDirectory
信息: Deploying web application directory test2
2011-10-5 23:20:20 org.apache.catalina.startup.HostConfig deployDirectory
信息: Deploying web application directory test3

这些部署的难道都是空的?

#9


你移除了tomcat下work下的项目缓存没有?移除下试试了

#10


嗯嗯,谢谢8楼以及所有回答的朋友。问题是我粘别人的,我清空部署的时候忘了把装tomcat时带有的那些样例的部署给移除掉。。。

#1


你去研究源码吧


知道怎么用知道为何用就完了嘛

#2


基本上所有的操作都与监听器有关,你像adroid的一个onclick事件都是绑定了监听器的,C#也是,
java也是,基本上所有的程序都与监听器有关,你启动服务,监听器会运行,这一点也不稀奇!

#3


问题是我粘别人的,题目忘了改了,其实我上想问问,为什么每次在tomcat每次启动的时候,都会输出红色字体的那两行?。。。。

#4


引用
web项目在容器启动后,需要进行一些初始化的准备。。如:tomcat服务器启动后会加载web.xml(这是tomcat的机制。。除非修改tomcat的实现源码),web.xml会根据该xml的dtd标准(如:发现<listener><listener-class>net.qijiabin.listener.MyServletContextAttributeListener</listener-class></listener>标签,tomcat就利用监听方式加载net.qijiabin.listener.MyServletContextAttributeListener)按照从上往下顺序依次载入。。
而你在web.xml中配置了监听,所以就启动了。。。

#5


4楼说的我也知道,就是不清楚为什么输出了红色字体的部分,正常来说,直接输出最后的三行就行了啊。但是我每次启动tomcat的时候,无论JSP页面中有没有设置application范围属性,都会输出红色字体部分。我理解的应该是在JSP页面中设置了application范围属性,才会调用监听器的attributeAdded()方法。

#6


tomcat里所有项目都查清楚了吗

#7


恩啊。其他的项目我全给移除了啊,但是还是会出现那部分。。。

#8


信息: Deploying web application directory ROOT
2011-10-5 23:20:19 org.apache.catalina.startup.HostConfig deployDirectory
信息: Deploying web application directory test
2011-10-5 23:20:19 org.apache.catalina.startup.HostConfig deployDirectory
信息: Deploying web application directory test.myeclipse.bak
2011-10-5 23:20:20 org.apache.catalina.startup.HostConfig deployDirectory
信息: Deploying web application directory test1
2011-10-5 23:20:20 org.apache.catalina.startup.HostConfig deployDirectory
信息: Deploying web application directory test2
2011-10-5 23:20:20 org.apache.catalina.startup.HostConfig deployDirectory
信息: Deploying web application directory test3

这些部署的难道都是空的?

#9


你移除了tomcat下work下的项目缓存没有?移除下试试了

#10


嗯嗯,谢谢8楼以及所有回答的朋友。问题是我粘别人的,我清空部署的时候忘了把装tomcat时带有的那些样例的部署给移除掉。。。