现在的位置: 首页 > 综合 > 正文

学习Struts时遇到的错误,及解决方法

2013年11月01日 ⁄ 综合 ⁄ 共 9050字 ⁄ 字号 评论关闭

 

 

在server.xml中做了如下配置后

<Context path="/struts2qs" reloadable="true" docBase="D:/ProjectIDE/eclipse3.4/workspace/struts2qs" workDir="D:/ProjectIDE/eclipse3.4/workspace/struts2qs/work" />

发生了下面的错误信息:

2010-11-14 11:41:40 StandardContext[/manager]HTMLManager: list: Listing contexts for virtual host 'localhost'

2010-11-14 11:41:41 StandardContext[/struts2qs]Exception starting filter struts2

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

at javax.xml.transform.TransformerFactory.newInstance(Unknown Source)

at com.opensymphony.xwork2.util.DomHelper$DOMBuilder.<clinit>(DomHelper.java:159)

at com.opensymphony.xwork2.util.DomHelper.parse(DomHelper.java:107)

at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.loadConfigurationFiles(XmlConfigurationProvider.java:885)

at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.loadDocuments(XmlConfigurationProvider.java:144)

at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.init(XmlConfigurationProvider.java:111)

at com.opensymphony.xwork2.config.impl.DefaultConfiguration.reloadContainer(DefaultConfiguration.java:164)

at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:55)

at org.apache.struts2.dispatcher.Dispatcher.init_PreloadConfiguration(Dispatcher.java:360)

at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:403)

at org.apache.struts2.dispatcher.FilterDispatcher.init(FilterDispatcher.java:190)

at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:225)

at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:308)

at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:79)

at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:3698)

at org.apache.catalina.core.StandardContext.start(StandardContext.java:4349)

at org.apache.catalina.core.StandardHostDeployer.start(StandardHostDeployer.java:830)

at org.apache.catalina.core.StandardHost.start(StandardHost.java:991)

at org.apache.catalina.manager.ManagerServlet.start(ManagerServlet.java:1322)

at org.apache.catalina.manager.HTMLManagerServlet.start(HTMLManagerServlet.java:530)

at org.apache.catalina.manager.HTMLManagerServlet.doGet(HTMLManagerServlet.java:104)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)

at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)

at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)

at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)

at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198)

at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152)

at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)

at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:540)

at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)

at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)

at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)

at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)

at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118)

at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)

at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)

at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)

at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)

at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)

at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)

at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)

at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)

at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)

at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)

at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)

at java.lang.Thread.run(Thread.java:619)

错误原因: 
认为是由于jdk1.5 与 tomcat5.0之间的关于 TransformerFactoryImpl 类的冲突造成的。
tomcat-5.0.28/common/endorsed下有两个jar包:xercesImpl.jar和xml-apis.jar,其中的类 javax.xml.transform.TransformerFactory 与jdk1.5中的类org.apache.xalan.processor.TransformerFactoryImpl其实是同一个类。
in tomcat java is called with the following argument:
-Djava.endorsed.dirs="X:/my_app/Portal/tomcat/common/endorsed"
In this directory you find two jar files: xercesImpl.jar and xml-apis.jar needed by tomcat and that must be loaded before all xmsl stuff present in the jdk (1.4 naming problem). And in the file xml-apis.jar the TransformerFactoryImpl is set to "org.apache.xalan.processor.TransformerFactoryImpl".
解决办法:
1. 将xml-apis.jar移出endorsed文件夹。
2. 用xalan系列jar包替换原来的xercesImpl.jar和xml-apis.jar。
   xalan系列jar包:serializer.jar、xalan.jar、xercesImpl.jar和xml-apis.jar。
3. For other application, just check this file or dom3-xml-apis.jar in your class path.

 

参考:http://www.blogjava.net/allen-zhe/archive/2007/03/02/101373.html

 

2、在server.xml中有如下配置:

<Context path="/struts2qs" reloadable="true" docBase="D:/ProjectIDE/eclipse3.4/workspace/struts2qs" workDir="D:/ProjectIDE/eclipse3.4/workspace/struts2qs/work" />

 

我启动Tomcat后,在URL栏里输入网址:http://127.0.0.1:8080/struts2qs/后,

报如下错误信息:

 

2010-11-14 13:06:17 com.opensymphony.xwork2.util.logging.commons.CommonsLogger warn

警告: Could not find action or result

There is no Action mapped for namespace / and action name . - [unknown location]

at com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:177)

at org.apache.struts2.impl.StrutsActionProxy.prepare(StrutsActionProxy.java:61)

at org.apache.struts2.impl.StrutsActionProxyFactory.createActionProxy(StrutsActionProxyFactory.java:39)

at com.opensymphony.xwork2.DefaultActionProxyFactory.createActionProxy(DefaultActionProxyFactory.java:47)

at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:458)

at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:395)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)

at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)

at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)

at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)

at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198)

at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152)

at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)

at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)

at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)

at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)

at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118)

at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)

at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)

at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)

at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)

at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)

at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)

at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)

at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)

at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)

at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)

at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)

at java.lang.Thread.run(Thread.java:619)

 

 

我多方查找原因,网上很多说是struts.xml没有放对位置(正确的位置:/struts2qs/WEB-INF/src/struts.xml)或者struts.xml有语法问题,我仔细看了一下,这两点在我的工程里面配置都是正确的,然后我就clean了一下工程,再试,还是抱着个错误,我就分析为什么会报这个错呢,输入这个URL之后Tomcat该做什么操作,默认情况下,他应该去现实欢迎画面,然后我就输入http://127.0.0.1:8080/struts2qs/index.html这个URL,发现能正常显示,说明配置应该没问题,那为什么直接输入上个URL没有显示呢,那肯定是web.xml的配置有问题,看了一下,果真是这个原因。

 

 

<welcome-file-list>

        <welcome-file>index.jsp</welcome-file>

    </welcome-file-list>

 

没有配置html的欢迎画面。配置上之后就好了。

 

 

<welcome-file-list>

        <welcome-file>index.jsp</welcome-file>

        <welcome-file>index.html</welcome-file>

    </welcome-file-list>

 

 

对于出现这个问题的说明:不建议进工程的时候直接输入http://127.0.0.1:8080/struts2qs/这样的网址,最好能定位到某个JSP或者html画面。

抱歉!评论已关闭.