2 votes

Struts2 Hello World jsp exemple d'erreur

J'essaie d'exécuter un projet Hello World Struts2 dans Tomcat 6.

Je n'arrête pas de recevoir :

  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)

Cependant, je dispose des bocaux requis pour struts2 dans le dossier WEB-INF/lib du projet.

Des jarres :

struts-core xwork ognl freemarker commons-fileupload commons-io commons-lang

Des idées ?

J'ai suivi un exemple en ligne de Struts2 HelloWorld :

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

6voto

arvin_codeHunk Points 2230

Il suffit d'ajouter les Jars suivants uniquement dans le WEB-INF/lib. Supprimez tous les jars associés si vous n'en avez pas besoin.

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

Si vous n'avez pas ces bocaux, téléchargez-les.

Aquí org.apache.struts2.dispatcher.FilterDispatcher est maintenant déprécié. Donc, éditez votre web.xml à partir de

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

a

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

Je suppose que cela pourrait faire le travail pour vous.

3voto

TechSpellBound Points 1004

Il semble que la version du bocal xwork-core que vous utilisez ne soit pas compatible avec les versions des autres bocaux.

Essayez d'utiliser xwork-2.1.2.jar . Je l'ai déjà utilisé avec succès.

Si cela ne fonctionne toujours pas, assurez-vous que vous utilisez les mêmes versions de chaque jar que dans l'application d'exemple.

EDIT :

Selon votre code, essayez de changer

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

a

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

Il semble que puisque vous n'avez pas appelé le setter, Struts recherche le nom de la propriété dans la session.

0voto

Raki Points 331

En ce qui concerne votre question, le problème peut être dans le serveur ou dans votre outil IDE, donc nettoyez les deux sous project clean et sous server clean respectivement.

Si vous rencontrez le même problème, téléchargez struts2 à partir de ce lien.

struts2 Il suffit de copier le fichier struts-blank.war depuis ce dossier et avec the new workspace Exécutez un programme (struts-blank.war contient des programmes de test) et vous serez certain qu'il fonctionnera.

0voto

Deepak Points 21

L'erreur No classdeffound survient généralement lorsque vous n'avez pas cette classe dans le classpath ou qu'il y a plus d'une version de cette classe dans le classpath. Dépannez en utilisant ces deux options. J'ai rencontré ce problème lorsque je travaillais sur mon Exemples de JSP pour des exemples de code.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X