Struts2 Hello World jsp示例错误

时间:2013-01-11 12:30:32

标签: java jsp struts2 tomcat6

我正在尝试在Tomcat 6中运行Hello World Struts2项目。

我一直在:

  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)

但是我确实在项目的WEB-INF / lib文件夹中有struts2所需的jar。

罐:

支柱核    XWork的    OGNL    freemarker的    公地文件上传    公地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>

4 个答案:

答案 0 :(得分:6)

只需在WEB-INF / lib中添加以下Jars即可。如果您没有需要,请删除所有相关的罐子。

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 现已弃用。请编辑您的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>

<?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>

我想这可以帮到你。

答案 1 :(得分:3)

您使用的xwork-core jar版本似乎与其他jar版本不兼容。

尝试使用xwork-2.1.2.jar。我早先成功地使用过它。

如果它仍然不起作用,请确保使用与示例应用程序中相同的每个jar版本。

修改

根据您的代码,尝试更改

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

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

似乎由于你没有调用setter,Struts正在会话中搜索属性名称。

答案 2 :(得分:0)

关于您的问题,问题可能出在服务器或IDE工具中,因此请分别在项目清理和服务器清理下清除它们。

如果您再遇到同样的问题,请从此链接下载struts2

  

struts2   只需要从该文件夹中复制struts-blank.war并使用 the new workspace 运行一个程序(struts-blank.war包含测试程序),它肯定会起作用。

答案 3 :(得分:0)

如果在类路径中没有该类,或者类路径中有该类的多个版本,则通常不会出现classdeffound错误。使用这两个选项进行故障排除。当我在JSP examples处理代码示例时遇到了这个问题。