我正在使用Eclipse,在struts.xml
,如果我使用:
<action name="hello">
<result>
/hello.jsp
</result>
</action>
当我访问localhost:8080/app/hello
但是如果我添加一个自定义的动作类,如:
<action name="hello" class="com.hah">
<result>
/hello.jsp
</result>
</action>
hah.java
不会自动编译,它给了我例外:
Unable to load configuration. - action - file:/D:/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/Struts2/WEB-INF/classes/struts.xml:17:46
at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:58)
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.ng.InitOperations.initDispatcher(InitOperations.java:69)
at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.init(StrutsPrepareAndExecuteFilter.java:48)
at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:279)
at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:260)
at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:105)
at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4658)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5277)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1408)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1398)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: Action class [com.hah] not found - action - file:/D:/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/Struts2/WEB-INF/classes/struts.xml:17:46
at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.verifyAction(XmlConfigurationProvider.java:405)
at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.addAction(XmlConfigurationProvider.java:355)
at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.addPackage(XmlConfigurationProvider.java:460)
at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.loadPackages(XmlConfigurationProvider.java:265)
at org.apache.struts2.config.StrutsXmlConfigurationProvider.loadPackages(StrutsXmlConfigurationProvider.java:111)
at com.opensymphony.xwork2.config.impl.DefaultConfiguration.reloadContainer(DefaultConfiguration.java:189)
at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:55)
... 16 more
但我可以手动编译hah.java
(使用javac hah.java)并将编译后的hah.class
移动到/D:/workspace/.metadata/.plugins/org中,使其正常工作.eclipse.wst.server.core / tmp0 / wtpwebapps / Struts2 / WEB-INF / classes / folder
我已检查Build Automatically
,Deployment Assembly
中有一个条目“/ src WEB-INF / classes”。
所以问题是动作类不会自动编译。当Tomcat启动时,我该怎么做才能编译它?
ps:最后,我重新安装eclipse for Java EE并使用struts-2.3.29,它可以工作。 但我还是不知道为什么......
答案 0 :(得分:0)
检查是否已选择Project > Build Automatically
。
另外
右键单击打开项目属性,然后选择Deployment Assembly
检查项目目标类是否已复制到web-inf/classes
如果这些问题无法解决,我建议你创建一个空项目并选择Dynamic Web Project
模板,然后在这个新项目中复制你的文件。
答案 1 :(得分:0)
我终于找到了解决方法:
以下是发生的事情: 我有同样的问题。 Eclipse没有将Java类编译成.class文件,即使在下面的路径中创建了包:
[workspace_root] .metadata.plugins \ org.eclipse.wst.server.core \ TMP0 \ wtpwebapps \ 2_StrutsReadingProject \ WEB-INF \类\
我尝试在cmd提示符中手动编译该类。结果我错过了BUILD PATH中的JAR文件。我所有的JAR都是正确的,没有重复。但看起来Eclipse在您的构建路径以及WEB-INF / lib文件夹中都需要这些JAR。
在我在两个地方添加JAR并再次从Eclipse构建项目之后,这些类被正确编译。
以下是如何在Eclipse Build Path中添加JAR:
右键单击“Project Explorer”中的项目节点&gt;构建路径&gt; 配置构建路径&gt;切换到“库”标签&gt;单击“添加外部” JARs“&gt;浏览并选择所有必需的JAR&gt;点击”应用“&gt; 单击“确定”。
希望这会为很多人解决这个错误!如果没有,请尝试手动编译类,CMD提示符将显示任何错误。
故事的道德: Eclipse在这样的场景中没有显示任何错误,其中错误源在其自己的操作中!
答案 2 :(得分:0)
有同样的问题,显然这可能是从磁盘(即lib文件夹中)删除库文件(.jar)而不是从构建路径中删除它时引起的。
我如何解决它:
如果选择“自动构建”(菜单:项目>“自动构建”),这将自动重建项目。