2013-01-11 182 views
2

我想給Tomcat 6運行一個Hello World Struts2的項目的Struts2的Hello World JSP示例錯誤

我不斷收到:

root cause: java.lang.ClassNotFoundException: org.apache.struts2.interceptor.SessionAware 

    java.lang.NoClassDefFoundError: org/apache/struts2/interceptor/SessionAware 
    at java.lang.ClassLoader.defineClass1(Native Method) 
    at java.lang.ClassLoader.defineClass(ClassLoader.java:621) 
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124) 
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:260) 
    at java.net.URLClassLoader.access$000(URLClassLoader.java:56) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:195) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:188) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:252) 
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1374) 
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233) 
    at com.opensymphony.xwork2.util.ClassLoaderUtil.loadClass(ClassLoaderUtil.java:138) 
    at com.opensymphony.xwork2.ObjectFactory.getClassInstance(ObjectFactory.java:96) 
    at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.verifyAction(XmlConfigurationProvider.java:398) 
    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) 
    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) 

不過,我對struts2中的WEB需要的jar -INF/lib文件夾。

罐:

支柱核心 XWork的 OGNL freemarker的 公地文件上傳 的commons-io的 公地郎

任何想法?

我跟着一個網上Struts2的HelloWorld示例:

HelloWorld.action類:

package za.co.vine.tutorialspoint.struts2; 

    public class HelloWorldAction{ 
    private String name; 

    public String execute() throws Exception { 
    return "success"; 
    } 

    public String getName() { 
    return name; 
    } 

    public void setName(String name) { 
    this.name = name; 
    } 
    } 

的helloWorld.jsp:

<%@ page contentType="text/html; charset=UTF-8" %> 
    <%@ taglib prefix="s" uri="/struts-tags" %> 
    <html> 
    <head> 
    <title>Hello World</title> 
    </head> 
    <body> 
    Hello World, <s:property value="name"/> 
    </body> 
    </html> 

的index.jsp:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
    pageEncoding="ISO-8859-1"%> 
    <%@ taglib prefix="s" uri="/struts-tags"%> 
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
    "http://www.w3.org/TR/html4/loose.dtd"> 
    <html> 
    <head> 
    <title>Hello World</title> 
    </head> 
    <body> 
    <h1>Hello World From Struts2</h1> 
     <form action="hello"> 
     <label for="name">Please enter your name</label><br/> 
     <input type="text" name="name"/> 
     <input type="submit" value="Say Hello"/> 
    </form> 
    </body> 
    </html> 

在struts.xml :

<?xml version="1.0" encoding="UTF-8"?> 
    <!DOCTYPE struts PUBLIC 
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" 
    "http://struts.apache.org/dtds/struts-2.0.dtd"> 
    <struts> 
    <constant name="struts.devMode" value="true" /> 
    <package name="helloworld" extends="struts-default"> 

    <action name="hello" 
     class="za.co.vine.tutorialspoint.struts2.HelloWorldAction" 
     method="execute"> 
     <result name="success">/HelloWorld.jsp</result> 
    </action> 
    </package> 
    </struts> 

的web.xml:

<?xml version="1.0" encoding="UTF-8"?> 
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
    id="WebApp_ID" version="3.0"> 

    <display-name>Struts 2</display-name> 
    <welcome-file-list> 
    <welcome-file>index.jsp</welcome-file> 
    </welcome-file-list> 
    <filter> 
    <filter-name>struts2</filter-name> 
    <filter-class> 
    org.apache.struts2.dispatcher.FilterDispatcher 
    </filter-class> 
    </filter> 

    <filter-mapping> 
    <filter-name>struts2</filter-name> 
    <url-pattern>/*</url-pattern> 
    </filter-mapping> 
</web-app> 
+0

打開你的核心jar並檢查這個類:org.apache.struts2.interceptor.SessionAware是否存在於jar中,或者從http://mirrors.ibiblio.org/pub/mirrors/maven2/下載jar文件org/apache/struts/struts2-core/2.0.11.2/struts2-core-2.0.11.2.jar –

+0

給出錯誤的完整堆棧跟蹤。 – Dipak

+0

好吧,我固定的上述錯誤,現在我得到這樣的: java.lang.NoSuchMethodError:com.opensymphony.xwork2.config.ConfigurationManager.addConfigurationProvider(LCOM/OpenSymphony的/ xwork2 /配置/ ConfigurationProvider;)V – lulu88

回答

6

下載的struts2僅僅只在WEB-INF/lib中添加以下JAR文件。如果您不需要,請移除所有相關的罐子。

asm-3.3.jar 
asm-commons-3.3.jar 
asm-tree-3.3.jar 
commons-fileupload-1.2.2.jar 
commons-io-2.0.1.jar 
commons-lang3-3.1.jar 
freemarker-2.3.19.jar 
javaassist-3.11.0.GA.jar 
ognl-3.0.5.jar 
struts2-core-2.3.7.jar 
xwork-core-2.3.7.jar 

如果你沒有這些罐子然後下載它。

這裏org.apache.struts2.dispatcher.FilterDispatcher現在已經過時。所以從

<?xml version="1.0" encoding="UTF-8"?> 
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
    id="WebApp_ID" version="3.0"> 

    <display-name>Struts 2</display-name> 
    <welcome-file-list> 
    <welcome-file>index.jsp</welcome-file> 
    </welcome-file-list> 
    <filter> 
    <filter-name>struts2</filter-name> 
    <filter-class> 
    org.apache.struts2.dispatcher.FilterDispatcher 
    </filter-class> 
    </filter> 

    <filter-mapping> 
    <filter-name>struts2</filter-name> 
    <url-pattern>/*</url-pattern> 
    </filter-mapping> 
</web-app> 

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> 
    <display-name>Struts2 Application</display-name> 

    <filter> 
     <filter-name>struts2</filter-name> 
     <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> 
    </filter> 
    <filter-mapping> 
     <filter-name>struts2</filter-name> 
     <url-pattern>/*</url-pattern> 
    </filter-mapping> 

    <welcome-file-list> 
    <welcome-file>/index.jsp</welcome-file> 
    </welcome-file-list> 
</web-app> 

我想這可以做的工作,爲修改你的web.xml您。

+0

感謝您的幫助!我們是初學者,像你這樣的人真的幫助我們。我正在學習Struts2,並面臨與OP相同的問題 –

3

看來你正在使用XWork的核心罐子的版本與其他罐子的版本兼容。

嘗試使用xwork-2.1.2.jar。我早先成功地使用了它。

如果它仍然不起作用,請確保您使用與示例應用程序中相同版本的每個jar。

編輯

根據您的代碼,請嘗試更改

public String execute() throws Exception { 
    return "success"; 
} 

public String execute() throws Exception { 
    setName("Honey Bunny"); 
    return "success"; 
} 

看來,既然你已經不叫二傳手,Struts是搜索的會話中的屬性名稱。

+0

感謝您的回覆:)我從Apache下載了完整的struts 2.3.8包,但仍然無法正常工作。我得到一個aused:java.lang.ClassNotFoundException:org.apache.struts2.views.gxp.inject.InjectedObjectContainer at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1387) at com.opensymphony .xwork2.util.ClassLoaderUtil.loadClass(ClassLoaderUtil.java:152)at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.register(XmlConfigurationProvider.java:216) struts-core 2.3.8.jar xwork-core -2.3.8.jar – lulu88

+0

編輯問題以從struts.xml,view.jsp,action類添加代碼。然後我們可以告訴。 – TechSpellBound

+0

struts2工作所需的最低罐數是多少? – lulu88

0

關於您的問題,問題可能出現在服務器或IDE工具中,因此請分別在項目清理和服務器清理下清理它們。

如果你面臨同樣的問題再次從該鏈接

struts2 Just you have to copy the struts-blank.war from that folder and with the new workspace run one program (that struts-blank.war contains test programs) definitely it will work.

+0

做到了。我在我的tomcat日誌中得到這個錯誤: java.lang.ClassNotFoundException:org.apache.struts2.interceptor.SessionAware – lulu88

+0

那麼你是如何解決它lulu88? – Saturnian

0

當你沒有在類路徑中獲得該類時,或者在類路徑中存在該類的多個版本時,通常不會出現classdeffound錯誤。使用這兩個選項排除故障。我在編寫代碼示例的JSP examples時遇到了這個問題。