zoukankan      html  css  js  c++  java
  • “监听HttpSession对象的状态的综合实例”编写时遇到的问题

    程序运行环境:MyEclipse+Tomcat6.0.20

    写“监听HttpSession对象的状态的综合实例”(《JavaWeb开发速学宝典》第12章Servlet监听器)时,按照书上的步骤在tomcat根目录\conf\server.xm文件中的<Host>节点中加入了一段“指定HttpSession对象钝化前的空闲时间”功能的代码

    指定HttpSession对象钝化前的空闲时间
    1 <!-- 指定HttpSession对象钝化前的空闲时间-->
    2  <Context crossContext="true" docBase="demo" path="/demo" reloadable="true" source="org.eclipse.jst.jee.server:demo">
    3 <Manager className="org.apache.catalina.session.PersistentManager" maxIdleSwap="1">
    4 <Store className="org.apache.catalina.session.FileStore" directory="d:\tomcat"/>
    5 </Manager>
    6  </Context>

     然而在MyEclipse中的Servers窗口中不能正常启动Tomcat,却在Console窗口中出现了以下警告信息

    2010-6-15 11:22:32 org.apache.catalina.startup.Catalina load
    警告: Catalina.start using conf/server.xml:
    com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: Invalid byte 1 of 1-byte UTF-8 sequence.
     at com.sun.org.apache.xerces.internal.impl.io.UTF8Reader.invalidByte(Unknown Source)
     at com.sun.org.apache.xerces.internal.impl.io.UTF8Reader.read(Unknown Source)
     at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.load(Unknown Source)
     at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.scanData(Unknown Source)
     at com.sun.org.apache.xerces.internal.impl.XMLScanner.scanComment(Unknown Source)
     at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanComment(Unknown Source)
     at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(Unknown Source)
     at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source)
     at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
     at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
     at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
     at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)
     at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source)
     at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
     at org.apache.tomcat.util.digester.Digester.parse(Digester.java:1644)
     at org.apache.catalina.startup.Catalina.load(Catalina.java:521)
     at org.apache.catalina.startup.Catalina.load(Catalina.java:555)
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
     at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
     at java.lang.reflect.Method.invoke(Unknown Source)
     at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:260)
     at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:412)
    2010-6-15 11:22:32 org.apache.catalina.startup.Catalina load
    警告: Catalina.start using conf/server.xml:
    com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: Invalid byte 1 of 1-byte UTF-8 sequence.
     at com.sun.org.apache.xerces.internal.impl.io.UTF8Reader.invalidByte(Unknown Source)
     at com.sun.org.apache.xerces.internal.impl.io.UTF8Reader.read(Unknown Source)
     at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.load(Unknown Source)
     at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.scanData(Unknown Source)
     at com.sun.org.apache.xerces.internal.impl.XMLScanner.scanComment(Unknown Source)
     at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanComment(Unknown Source)
     at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(Unknown Source)
     at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source)
     at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
     at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
     at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
     at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)
     at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source)
     at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
     at org.apache.tomcat.util.digester.Digester.parse(Digester.java:1644)
     at org.apache.catalina.startup.Catalina.load(Catalina.java:521)
     at org.apache.catalina.startup.Catalina.start(Catalina.java:575)
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
     at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
     at java.lang.reflect.Method.invoke(Unknown Source)
     at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
     at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
    2010-6-15 11:22:32 org.apache.catalina.startup.Catalina start
    信息: Server startup in 0 ms
    java.lang.reflect.InvocationTargetException
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
     at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
     at java.lang.reflect.Method.invoke(Unknown Source)
     at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
     at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
    Caused by: java.lang.NullPointerException
     at org.apache.catalina.startup.Catalina.await(Catalina.java:647)
     at org.apache.catalina.startup.Catalina.start(Catalina.java:607)
     ... 6 more

    我知道问题出在刚刚编写过的server.xml上,仔细和书上的代码对比,没发现不一致的地方,上网Google了一通发现问题出在“由于你修改的某个配置文件中出现了中文汉字才导致的。”后来才意识到我原先在server.xml中加入了中文注释,去掉中文注释后再运行Tomcat,Tomcat虽然能运行,但在Console窗口中又出现了如下警告信息

    2010-6-15 19:15:45 org.apache.tomcat.util.digester.SetPropertiesRule begin
    警告: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:demo' did not find a matching property.
    2010-6-15 19:15:45 org.apache.catalina.core.AprLifecycleListener init
    信息: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\Program Files\Java\jre6\bin;F:\Java\Tools\Apache Tomcat 6.0.20\bin
    2010-6-15 19:15:45 org.apache.coyote.http11.Http11Protocol init
    信息: Initializing Coyote HTTP/1.1 on http-8080
    2010-6-15 19:15:45 org.apache.catalina.startup.Catalina load
    信息: Initialization processed in 779 ms
    2010-6-15 19:15:45 org.apache.catalina.core.StandardService start
    信息: Starting service Catalina
    2010-6-15 19:15:45 org.apache.catalina.core.StandardEngine start
    信息: Starting Servlet Engine: Apache Tomcat/6.0.20
    表示</demo>的ServletContext对象被创建
    2010-6-15 19:15:47 org.apache.catalina.core.ApplicationContext log
    信息: ContextListener: contextInitialized()
    2010-6-15 19:15:47 org.apache.catalina.core.ApplicationContext log
    信息: SessionListener: contextInitialized()
    2010-6-15 19:15:47 org.apache.coyote.http11.Http11Protocol start
    信息: Starting Coyote HTTP/1.1 on http-8080
    2010-6-15 19:15:47 org.apache.jk.common.ChannelSocket init
    信息: JK: ajp13 listening on /0.0.0.0:8009
    2010-6-15 19:15:47 org.apache.jk.server.JkMain start
    信息: Jk running ID=0 time=0/35  config=null
    2010-6-15 19:15:47 org.apache.catalina.startup.Catalina start
    信息: Server startup in 1588 ms

    虽然部署的程序能正常运行,但看到有这样红色的警告信息总让人感到不爽,因此又Google了一番,发现了如下的解决方案“出现SetPropertiesRule警告的原因是Tomcat在server.xml的Context节点中不支持source属性。解决方法是在Servers视图里双击创建的server,然后在其server的配置界面中选中"Publish module contexts to separate XML files"选项。”我在MyEclipse的Servers视图中双击创建的Server没有响应,可能在Eclipse中这样操作才有用。正当犯愁时,又看到了这样一段文字

      “这几天一直在看tomcat 6的有关内容,在其文档中看到tomcat 5,6关于context的配置不同于tomcat 4,不推荐在server.xml中进行配置,在context.xml文件中进行配置才是更好的方法。回想以前所有的项目都是在server.xml中配置context的,每次部署一个新的应用或者修改context内容都要重新启动tomcat,导致应用总是要中断服务一小段时间,比较不方便,而且多个context都在server.xml中,显得有些杂乱。于是决定使用在context.xml中进行配置应用的方式。在tomcat_home\ conf目录下有一个context..xml文件,修改其中内容之后,tomcat 能够自动reload所有的应用。我的应用是在 tomcat_home\webapps下部署了多个应用,这多个应用的context配置是不同的。于是我把原来server.xml有关 context的部分(多个)复制出来,粘贴到context.xml中,保存之后,启动tomcat ,发现启动的时候出错,看来tomcat是不支持在一个context.xml中配置多个不同应用的。上网上google有关在context.xml中配置多个应用的方法,遗憾的是,始终无法找到。后来仔细阅读tomcat 文档,终于找到了解决方法,在应用下面的META-INF文件夹下建立context.xml文件就可以满足应用的定制需求。具体路径就是: tomcat_home\webapps\yourApp\META-INF\context.xml,这样每个应用都可以拥有各自的配置,修改了该文件中的内容,tomcat可以自动重新装载该应用,非常的方便。”

      于是,我在WebRoot\META-INF下新建了Context.xml文件,加上了“HttpSession对象钝化前的空闲时间”功能的代码。再次运行Tomcat,终于能正常运行。-_-

  • 相关阅读:
    Axure RP 8.0 中继器初体验
    随便写的随机数生成器,目前并没有实现设置精度和去重功能
    PHP向MySql中插入数据
    php连接mysql数据库练手
    C随便练练手的题
    个人档案 7-5
    个人档案
    个人档案 7-4
    个人档案 6-30
    个人档案 6-29
  • 原文地址:https://www.cnblogs.com/guoqi/p/1758752.html
Copyright © 2011-2022 走看看