zoukankan      html  css  js  c++  java
  • java 程序 Exception starting filter struts2异常解决

    错误信息   严重: Exception starting filter struts2

    错误:

    javax.xml.transform.TransformerFactoryConfigurationError: Provider org.apache.xalan.processor.TransformerFactoryImpl not found  

    参考:http://hpfgc.blog.163.com/blog/static/14799557200851711309391/

    今天下载了一个struts例子,遇到一个问题就是该网站不能被访问,分两步把这个问题人解决啦!!!

    报的错误:

    StandardContext[/struts2-mailreader-2.0.11.1]Exception starting filter Struts2
    javax.xml.transform.TransformerFactoryConfigurationError: Provider org.apache.xalan.processor.TransformerFactoryImpl not found
     at javax.xml.transform.TransformerFactory.newInstance(Unknown Source)

    第一步:

    去看tomcat的webapps,里边也部署上了。去看Tomcat 5.0logs下的日志,显示javax.xml.transform.TransformerFactoryConfigurationError Provider org.apache.xalan.processor.TransformerFactoryImpl not found

    后来上网搜了一下:找到了一篇文章,说该问题是由于tomcat 里Tomcat 5.0commonendorsed下的两个有关xml的jar文件和JDK里的xml解析器冲突造成的:原文如下:

    http://localhost:8080/testdwr/dwr 访问

    页面出现错误

    javax.xml.transform.TransformerFactoryConfigurationError: Provider org.apache.xalan.processor.TransformerFactoryImpl not found
    javax.xml.transform.TransformerFactory.newInstance(Unknown Source)
    uk.ltd.getahead.dwr.convert.DOMConverter.<init>(DOMConverter.java:157)

    这是一个 XML 解析器的问题,我们能直接能理解的就是 TransformerFactoryImpl 找不到,那么这个类在哪个包里呢? xalan,就去 apache 网上下载到 xalan.jar 包扔到应用的 WEB-INF/lib 目录中,重启 Tomcat 就能OK 了。

    上面是第一种解决办法。问题是解决了,但是根由何在?难道就不能用别的 XML 解析器呢,难道 JDK 和 Tomcat 就没有为我们预备好对于 dwr 可用的 XML 解析器吗?先说个背景

    ·JDK1.3 没有 XML 解析器,所以要自己配上 xercesImpl.jar 和 xml-apis.jar
    ·JDK 1.4.0 和 JDK 1.4.1 虽然具有了 XML 解析器,但是有些 Bug,所以还是得把 xercesImpl.jar 放到 Tomcat/common/endorsed 目录中覆盖掉默认的解析器
    ·JDK 1.4.2 及后来版本的 XML 解析器可以工作的很好
    ·最后,那个出现错误本质原因还得由下面慢慢道来……

    这样就是说 JDK 1.4.2 及更新版本根本用不着 xercesImpl.jar 和 xml-apis.jar 帮忙了。只要我们细心些就能发现在 Tomcat5.0.x/common/endorsed 目录中有两个包 xercesImpl.jar 和 xml-apis.jar。因为 Tomcat 加载 endorsed 中的包是通过参数 -Djava.endorsed.dirs="X:Tomcat5.0.xcommonendorsed" 加载的,所以放在 endorsed 目录中的包要优于 JDK 的 rt.jar,所以要用 JDK 的 XML 解析器必须把 xercesImpl.jar 和 xml-apis.jar 从 endorsed 目录中移去,这是第二种解决办法。

    再静心想一想,问题在 XML 解析器,为何偏偏是 org.apache.xalan.processor.TransformerFactoryImpl 这样的类名呢?这让我不免思考起 JDK 1.4 及 JDK 1.5 以上版本的差异来,再次回想起为何 Tomcat 5.5.x 版本需要 JDK 1.5 以上的版本来。

    不妨做个实验,dwr 1.1.4 + JDK 1.4.2 + Tomcat 5.0.x,xercesImpl.jar 和 xml-apis.jar 仍旧让它们在 endorsed 目录中,运行最基本的 dwr 程序没一点问题。那为什么换个JDK就又行了呢?原因就在 xml-apis.jar 中指定了 TransformerFactory 的实现类全名为 org.apache.xalan.processor.TransformerFactoryImpl,它存在于 JDK 1.4.2 的 rt.jar 包中,而在 JDK 1.5 的 rt.jar 包中根本就没有 apache 的包了,所以它不行,再进一步,其实第二种解决办法如果用的是 JDK 1.5 以上版本仅仅需要把 xml-apis.jar 包从 endorsed 目录挪出就行了。

    我按上面介绍的第二种方法,删除了endorsed下面的两个jar文件,再重启tomcat,查看日志,果然没报上面的那个错误,但一运行,还是不能显示该项目。

    第二步:

    查看MyEclipse下console控制台,发现有

    严重: Error filterstart错误

    上网查了一下:原文如下:

    最近使用上了Tomcat 5.5,只是这东西在你最需要的时候,往往令你很失望。
      缘由代码要提交到CVS,删除了一些测试使用的类以及页面文件,只是当时忽略了去注释掉所删除的类在Struts.xml里Action映射。紧接着重新启动Tomcat,只是该站点无法访问,仔细查看Tomcat 5.5的日志,就发现:

    严重: Error filterStart

           信息,当时就检查初始化Struts2的Filter以及初始化对应的Servlet-api.jar,没有发现什么问题。最后实在没有办法,直接使用Tomcat 6,其启动时候抛出的异常告诉我无法加载在struts.xml配置的Java 类。这时候,我才明白,原来问题所在。
    一旦struts.xml文件所配置的类在初始化的时候一旦不存在,则造成整个站点无法访问。

            最后教训,一旦在struts.xml配置的类,若丢失的话,会影响整个站点的运行。

            建议大家可以直接把站点直接放在Tocmat 6下面,用于取代tomat 5.5。Tomcat 5.5的错误日志太让人寒心了~

    ”其启动时候抛出的异常告诉我无法加载在struts.xml配置的Java 类“

    这名话是关键,说的很明确说是找不着java类,在我的程序里就是LoginAction这个类,怎么会找不到呢,上struts.xml文件里一看,天啊,应该是class="com.test.action.LoginAction",而我写的是"com.test.LoginAction",改过以后,运行,好使!!!

    感悟:错误很低级,但是通过这些错误学到很多知识和学习的方法。

    ---------------------------------------------------------------------

    错误:java.lang.NoSuchMethodError: org.w3c.dom.Node.getTextContent()Ljava/lang/Str

    参考:http://blog.sina.com.cn/s/blog_67cc72cc010135c4.html
    此异常是因为jdk1.5以上的版本与tomcatcommonendorsed下的xml-apis.jar的类发生冲突,解决办法如下:

    1,将commonendorsed下的xml-apis.jar移出或删掉.   (已测试过)

    2. 用xalan系列jar包替换原来的xercesImpl.jar和xml-apis.jar。
       xalan系列jar包:serializer.jar、xalan.jar、xercesImpl.jar和xml-apis.jar。(网上留传的)

    ---------------------------------------------------------------------

    2012-08-11 09:11   

    错误:jar not loaded. See Servlet Spec 2.3, section 9.7.2. 错误原因和解决办法

     

    参考:http://hi.baidu.com/luoyeyilin/item/2d319cad125b979a151073b5

    信息: validateJarFile(D:xjworkspacewebworktestwebappWEB-INFlibservlet-api-2.4.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class

    分析:

    jsp-api.jar和servlet-api.jar这两个包tomcat的commonlib已经有了,必须将WEB-INFlib目录下的去掉,否则会冲突的,会引起tomcat启动正常,而页面却总是无内容显示的错误

    解决方案:

    将WEB-INFlib目录下的jsp-api.jar和servlet-api.jar删除

    保证WEB-INFlib跟tomcat5的common/lib下的JAR包没有重复的即可!

     

  • 相关阅读:
    java 通过Iterator输出Map
    java SortedSet接口swap方法
    java vector
    java Iterator双向迭代输出
    java 序列化和反序列化多个对象
    培训
    每天晚上

    又想起了

  • 原文地址:https://www.cnblogs.com/tianshuilv/p/3533159.html
Copyright © 2011-2022 走看看