Estudia el pasado si quieres pronosticar el futuro
Confucio

Primeros Pasos con Struts2

Struts2 es un framework para desarrollar aplicaciones web basadas en Java. Surge de la unión de las comunidades de Webwork y de Struts, en la que la base es de webwork y el nombre lo pone Struts.

En su sitio web nos informa de que es más simple y más completo. Aquí podemos encontrar la última versión disponible para descargar así como tutoriales, guías

Herramientas necesarias

Necesitamos nuestras herramientas Java (JDK), un IDE (hoy por hoy Eclipse es el rey y yoxos su profeta) y un servidor de aplicaciones (Tomcat siempre es una buena elección).

Además descargaremos la distribución 2.0.14 de Struts. La distribución contiene el código, la documentación, y varias aplicaciones web de ejemplo (empaquetadas en formato .war), entre ellas struts-blank-2.0.14.war, que es una aplicación web vacía preparada para comenzar con Struts2, es decir, algo así como el hola mundo que vamos a construir en esta entrada.

holamundoStruts2014

Empezamos con el eclipse. Creamos un nuevo proyecto web dinámico, que llamaremos holamundoStruts2014.

En el fichero despcriptor de la aplicación web, el WebContent > WEB-INF > web.xml nos aseguramos que esté nuestro fichero en la lista de ficheros de bienvenida. El valor de <display-name> será el que se mostrará en la administración de nuestro servidor de aplicaciones.

<?xml version=“1.0″ encoding=“UTF-8″?>

<web-app id=“WebApp_ID” version=“2.4″ xmlns=“http://java.sun.com/xml/ns/j2ee” xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance” xsi:schemaLocation=“http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd”>

<display-name>holamundoStruts2014</display-name>

<welcome-file-list>

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

</welcome-file-list>

</web-app>

Añadimos las librerías sobre las que vamos a trabajar:

  • commons-logging.jar. Se trata de una librería genérica que nos posibilita el registro de sucesos (logging).
  • freemarker.jar. Es un motor para trabajar con plantillas en nuestra parte de Vista.
  • ognl.jar. Es una librería para trabajar con EL.
  • struts2-core.jar. El núcleo de Struts2. Si lo abrís fijáos en el nombre de los paquetes.
  • xwork.jar. Es un framework que nos proporcionaInversión de Control, EL, validaciones…

Ahora debemos capturar las llamadas al contenedor web para que las atienda Struts2. Para ello configuramos el fichero web.xml añadiendo:

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

El  resultado será que todas las URLs invocadas dentro del contexto de nuestra aplicación web serán interceptadas y atendidas por el filtro de Struts2.

Nuestra primera acción

Queremos crear una acción que recibirá unos datos de entrada introducidos por el cliente (dos cadenas de caracteres, identificador y contraseña), los procesará (comprobará si está autorizado) y decidirá la siguiente acción. Fácil ? Pensemos en cómo implementarlo.

Necesitamos dos jsp’s : una jsp de entrada donde introducir los datos (jsp/identificar.jsp) y otra para a la que se accederá si se tiene éxito al identificarse (jsp/indexIdentificado.jsp).

Necesitamos una acción que recibirá los datos, procesará los datos (los enviará al negocio), y en función del resultado decidirá si dirigir al cliente a la zona que necesita identificación (indexIdentificado.jsp si son correctos los datos), o dirigir a la pantalla de identificación (identificar.jsp si no son correctos los datos) mostrando un mensaje. Si durante el proceso se detecta un error (una excepción, por ejemplo si la base de datos está caída) también se dirigirá a la pantalla de identificación con un mensaje de error interno.

Ahora toca los formularios… pero espera ! Struts2 NO TIENE FORMULARIOS ! Sus desarrolladores se muestran muy orgullosos con este punto.

Necesitamos una clase de negocio, que en este ejemplo tan simple será muy sencilla. Y necesitamos una clase de persistencia que sería la que accedería a la base de datos para obtener los datos. Con esos datos el negocio decidirá el resultado que pasar a la acción. En este ejemplo tan sencillo no utilizaremos bbdd y los datos estarán a fuego.

Utilizaremos un objeto de modelo (bean Usuario) como apoyo para facilitar y simplificar el código.

Como vemos hasta ahora es muy parecido a Struts 1.3.8, excepto en el tema de los formularios. Pasemos a ver cómo implementar nuestra aplicación.

Como somos muy buenos desarrollando y hemos hecho bien antes nuestro trabajo, podemos reutilizar el código que desarrollamos en el artículo sobre los primeros pasos en Struts 1.3.8 (únicamente renombramos el paquete de es.lycka.holamundoStruts138 -> es.lycka.holamundoStruts2014) para :

  • es.lycka.holamundoStruts138.model.Usuario
  • es.lycka.holamundoStruts138.negocio.IdentificarBO
  • es.lycka.holamundoStruts138.persistencia.IdentificarDAO

index.jsp

Con respecto a Struts 1.3.8, únicamente cambia las taglibs. Ejemplos de los enlaces.

<%@ 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>

<meta http-equiv=“Content-Type” content=“text/html; charset=ISO-8859-1″>

<title>Hola Mundo</title>

</head>

<body>

<h1>Lycka te da la bienvenida!</h1>

<p>Bienvenido a nuestra aplicación de Hola Mundo</p>

<p>

Usted puede :

</p>

<ul>

<li>Ingresar en la zona privilegiada <s:a href=“jsp/identificar.jsp”>aquí</s:a>.</li>

</ul>

</body>

</html>

jsp/identificar.jsp

Aquí podemos ver cómo se tratan los formularios.

<%@ 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>

<meta http-equiv=“Content-Type” content=“text/html; charset=ISO-8859-1″>

<title>Identificación</title>

</head>

<body>

<h2><s:property value=“mensaje” /></h2>

<div>

Por favor, identifíquese.

</div>

<s:form action=“identificar”>

<s:textfield label=“Identificador” name=“usuario.identificador”/>

<s:password label=“Contraseña” name=“usuario.contrasenna” />

<s:submit value=“Login” align=“center”/>

</s:form>

</body>

</html>

jsp/indexIdentificado.jsp

Un ejemplo de cómo leer datos de la sesión.

<%@ 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>

<meta http-equiv=“Content-Type” content=“text/html; charset=ISO-8859-1″>

<title>Zona Identificada</title>

</head>

<body>

Bienvenido a la zona de administración.

<s:property value=“#session.usuario.identificador” />

</body>

</html>

es.lycka.holamundoStruts138.action.IdentificarAction

package es.lycka.holamundoStruts2014.action;

import java.util.Map;

import com.opensymphony.xwork2.ActionContext;

import com.opensymphony.xwork2.ActionSupport;

import es.lycka.holamundoStruts2014.model.Usuario;

import es.lycka.holamundoStruts2014.negocio.IdentificarBO;

public class IdentificarAction extends ActionSupport {

private static final long serialVersionUID = 2228074990625416790L;

private static final String USUARIO_NO_AUTORIZADO = “El usuario introducido no está autorizado.”;

private static final String ERROR_INTERNO = “Error interno. Por favor, inténtelo otra vez en unos minutos.”;

private Usuario usuario;

private String mensaje;

public String execute () {

String destino = INPUT;

try {

if (IdentificarBO.esUsuarioAutorizado(usuario)) {

Map session = ActionContext.getContext().getSession();

session.put(“usuario”, usuario);

destino = SUCCESS;

} else {

setMensaje(USUARIO_NO_AUTORIZADO);

}

} catch (Exception e) {

e.printStackTrace();

setMensaje(ERROR_INTERNO);

}

return destino;

}

public Usuario getUsuario() {

return usuario;

}

public void setUsuario(Usuario usuario) {

this.usuario = usuario;

}

public String getMensaje() {

return mensaje;

}

public void setMensaje(String mensaje) {

this.mensaje = mensaje;

}

}

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>

<include file=“es/lycka/holamundoStruts2014/properties/identificar.xml”/>

</struts>

es.lycka.holamundoStruts2014.properties.identificar.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>

<package name=“identificar” namespace=“/jsp” extends=“struts-default”>

<action name=“identificar” class=“es.lycka.holamundoStruts2014.action.IdentificarAction”>

<result name=“input”>/jsp/identificar.jsp</result>

<result>/jsp/indexIdentificado.jsp</result>

</action>

</package>

</struts>

La estructura del proyecto quedaría así :

He subido el war a hordit por si prefieres el código.

Fácil ? Bien explicado ? Más fácil que en Struts 1.3.8 ?

23 Comentarios hasta el momento »

  1. lanz dijo

    8 de January del 2009 a las 8:09 pm

    Hola Jeronimo,

    Quiero bajarme el Yoxos, pero cuando voy a su pagina , en la seccion de downloads http://www.innoopract.com/en/eclipse-downloads/
    sólo habla del Eclipse, no encuentro nada sobre el Yoxos.

    ¿Realmente tiene alguna característica diferenciadora sobre el Eclipse? ¿como puedo bajarme el Yoxos y no el Eclipse?

    Un saludo

  2. ricardo dijo

    4 de March del 2009 a las 6:21 am

    Hola.. muy interesante tu tutorial pero una pregunta las demas clases? usuario.java y las otras 2 mas?.. ahi dice que es de un proyecto anterior pero se me hace mas confuso. Me baje el war pero cuando lo importe en mi eclipse los paquetes action, model, negocio y persistencia estan vacios… el unico que tiene algo es el de persistencia… y es increible que veo referencias a clases dentro de los paquetes que te acabo de mencionar pero no hay absolutamente nada… te agradeceria mucho si me puedes ayudar.

    Gracias

  3. yoyoooyoy dijo

    4 de March del 2009 a las 9:23 am

    Hola Ricardo,

    el proyecto anterior es el de holamundoStruts138, pero se me pasó enlazarlo. Mañana intentaré revisar los war de los proyectos, a ver si los he exportado sin fuentes :P (en los war van los mismos archivos que pongo en los tutoriales, pero es más fácil de entender en el eclipse que en este chorizo de tutorial)

  4. Pedro dijo

    6 de April del 2009 a las 12:08 pm

    Hola, he empezado con el tutorial de Struts2 y he llegado a este.

    He descargado el WAR y aparantemente funciona.

    Eso si, estan las clases, pero no las fuentes de estas.

    Me uno a la petición de que postees, si eres tan amable con nosotros, las clases que faltan, más que nada, por tener el ejemplo completo y ver que somos capaces de reproducirlo.

    Muchas gracias, un saludo.

  5. Pedro dijo

    6 de April del 2009 a las 12:10 pm

    Pd: ricardo, el ejemplo funciona y el SRC esta vacio, ¿verdad?.

    Es correcto, las clases estan en:

    Libraries\Web App Libraries\ ImportedClasses

    No sé si el autor lo hizo así ó es eclipse el que las importa de esta manera.

    Salu2

  6. yoyoooyoy dijo

    7 de April del 2009 a las 8:08 am

    Joer, qué cabeza la mía, el war sin fuentes… Si tenéis paciencia intentaré (otra vez) compartirlo con fuentes. Si no el código que cuelgo es el mismo que el del war, y la estructura es la de la imagen (y la de las clases).

    También podéis decompilar las clases con DJ Decompiler.

    En cuanto a las clases, físicamente están en WEB-INF > classes, pero Eclipse nos las coloca en Libraries > Web App Libraries > Imported Classes de la misma forma que las librerías físicamente están en WEB-INF > lib y eclipse las coloca en Libraries

  7. Antonio dijo

    26 de May del 2009 a las 10:22 am

    Hola
    Segui todos tus pasos al pie de la letra y me funciona correctamente.
    Hice un fichero JAVA apartae de lo que pusiste que se me conecta a una BD en MYSQL correctamente.
    ¿¿Como puedo hacer para que IdentificarDAO.java se una con mi MYSQL.java ?? En la BD tengo una tabla llamada usuarios y con unos campos de Login, Password y edad pa mostrarlo nada mas entrar.

    Si me pudieras orientar te lo agradezco que hace años que no uso java y ahora estaba intentandolo recuperar con Struts2 :D

    GRACIAS por adelantado y muy grande la página.

    Un cordial saludo

  8. Luis Javier dijo

    2 de June del 2009 a las 8:36 am

    Podria alguien explicarme un poco como va esto del MVC ya que tenia entendido que esto son 3 partes Modelo-Vista-Controlador pero aqui veo que está estructurado en action-modelo-negocio-persistencia-propiedades-por otro lado los JSP….
    Lei por ahi hablar del Controlador FilterDispatcher de las acciones y de los resultador…sigue este ejemplo eso ?? Si es asi no lo entiendo o no lo se ver.
    Se agradece cualquier mínima explicación porque es la 1ª vez que sigo este esquema y me estoy volviendo loco xD

  9. yoyoooyoy dijo

    2 de June del 2009 a las 9:01 am

    Hola Luis Javier,

    lo de MVC (Modelo Vista Controlador) es un patrón para implementar tus aplicaciones en 3 capas en lugar de como se hacía hace más de 5 años en 2 capas. Actualmente utilizamos más capas, como la de negocio, persistencia y otras como para los informes…

    Quizás estos dos enlaces te sirvan:
    * framework struts
    * Modelo Vista Controlador

    Se sigue utilizando el concepto MVC para la parte “frontal” de la aplicación, la que implementas con Struts, Struts2 o Spring MVC. El resto de capas (negocio, persistencia…) deberían ser independientes del framework utilizado para implementar esta parte.

    Espero te haya servido de ayuda.

  10. TiToVaSSi dijo

    17 de June del 2009 a las 12:08 pm

    Hola, he seguido todos los pasos y una vez que lo compilo entra sin problemas en el index y en poner el login pero una vez que pulso para que “se loguee” salta un error 404 creo que lo que me esta pasando es que no me encuentra el action, tengo todo el codigo como tu asi que nose que es lo que me puede pasar. He probado con un Hola Mundo normal y me pasaba lo mismo con el action uso los jdk 1.5 hay que usar superiores? el tomcat es el 5.5

  11. yoyoooyoy dijo

    18 de June del 2009 a las 9:10 am

    Hola TiToVaSSi,

    te puedo decir cuál no es el problema, no es ni la versión de la jdk ni del tomcat ni del eclipse :) .

    Los frameworks en general tienen un “punto débil” para nosotros que contamos con el compilador, y eso son su archivos de configuración xml. Probablemente hayas escrito mal la dirección en el xml, yo empezaría por ahí. Si aún así no lo encuentras, mándame por correo el código y le echo un vistazo cuando saque un rato.

    Ciao

  12. Mendez dijo

    8 de September del 2009 a las 1:42 am

    Buenas tardes. Gracias por el ejemplo.
    sin embargo me suregió una duda mientras proba con el método validate, como puedo validar de la misma manera que lo hago con “x”, en el ejemplo que a continuación muestro:
    en IdentificarAction.java
    public void validate() {
    if (getX().length() == 0) {
    addFieldError(“x”, getText (“x.required”));
    }

    }
    public void setX(String x){
    this.x=x;
    }

    public String getX(){
    return x;
    }

    en idenfificar.jsp

    en IdenticarAction.properties

    introcuimos errores
    x.required = x is required.

    Intente hacer lo mismo para las variables
    “identificador” y “password”, pero no me funcionó
    alguien sabe como implementar el manejo de errores para estas ultimas dos variable como lo hice con “x”.
    Mil Gracias!!!

  13. Nicolás dijo

    17 de November del 2009 a las 6:20 pm

    antes que nada, muy buen tutorial! te hago una consulta, hace ya un par de dias que estoy tratando de hacer correr algo en struts2, y no puedo debido a un error
    HTTP Status 404 -

    type Status report

    message

    description The requested resource () is not available.
    Apache Tomcat/6.0.20

    ya apunte a todas las jsp del proyecto y es como si no estuvieran cargadas en el tomcat..
    alguna idea?

  14. yoyoooyoy dijo

    18 de November del 2009 a las 8:33 pm

    @ Mendez,

    vaya, siento ver ahora tu comentario. Sin más info no te sé decir. La gestión de los errores es parecida a la que se hace manualmente en Struts 1, a ver si saco tiempo para una entrada a parte.

    @ Nicolás,

    ese error me dio bastante a menudo cdo empezaba con Struts2. La mayoría de las veces era o directamente porque metía mal la dirección URL en el navegador (un acento mal puesto, un espacio donde no era, una letra de sobra o falta…) o escribía bien la dirección en el navegador pero mal en el struts.xml.

    Si estás intentando acceder directamente a las jsp’s sin pasar por Struts2 y te aparece ese error 404, puede que tengas mal construido o mal desplegado el war.

  15. jesus dijo

    10 de December del 2009 a las 5:11 pm

    Llevo unos días “hojeando” tu blog, y me está resultando la mar de útil. Con respecto a los ejemplos tengo algunos problemillas. Estoy montando una plataforma SOA y ando bastante perdido, no sé si puedo ponerme en contacto contigo a través de algún mail y preguntarte un par de dudas, me sería de mucha ayuda para conservar el empleo :) Gracias!

  16. Carla dijo

    12 de December del 2009 a las 10:00 pm

    Hola quiero saber si pueden subir el pryecto completo con todas las clases!!!!Por fis!!!

  17. yoyoooyoy dijo

    13 de December del 2009 a las 10:57 pm

    @Jesús
    Gracias majo. En la pestaña “Autor” está mi mail que no reproduzco aquí para evitar el spam, pero ya te advierto que he trabajado este finde…

    @Carla
    Está subido el war con los .class pero no los .java, pero puedes descompilar los .class. Cuando saque tiempo (sorry) intentaré volver a subir el war con los .java también.

  18. Cesar Noriega dijo

    3 de February del 2010 a las 7:04 am

    Buenas noches

    Soy nuevo en este framework.Segui su tutorial la pie de la letra y estiy usando como IDE Eclipse Galileo,apache Tomcat 6.0 como contenedor web y la version de Struts es

    Para desplegar el proyecto lo que hice fue exportarlo como .war y levantar el servidor pero tengo el siguiente error.

    GRAVE: Dispatcher initialization failed
    Unable to load configuration. – bean – jar:file:/C:/apache-tomcat-6.0.18/webapps
    /holamundoStruts2014/WEB-INF/lib/struts2-core-2.1.8.1.jar!/struts-default.xml:47
    :178
    at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(
    ConfigurationManager.java:58)
    at org.apache.struts2.dispatcher.Dispatcher.init_PreloadConfiguration(Di
    spatcher.java:374)
    at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:418)
    at org.apache.struts2.dispatcher.FilterDispatcher.init(FilterDispatcher.
    java:190)
    at org.apache.catalina.core.ApplicationFilterConfig.getFilter(Applicatio
    nFilterConfig.java:275)
    at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(Applica
    tionFilterConfig.java:397)
    at org.apache.catalina.core.ApplicationFilterConfig.(ApplicationFi
    lterConfig.java:108)
    at org.apache.catalina.core.StandardContext.filterStart(StandardContext.
    java:3709)
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4
    363)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase
    .java:791)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:77
    1)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:525)

    at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:830)

    at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:719
    )
    at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:490
    )
    at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1149)
    at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java
    :311)
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(Lifecycl
    eSupport.java:117)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)

    at org.apache.catalina.core.StandardHost.start(StandardHost.java:719)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)

    at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443
    )
    at org.apache.catalina.core.StandardService.start(StandardService.java:5
    16)
    at org.apache.catalina.core.StandardServer.start(StandardServer.java:710
    )
    at org.apache.catalina.startup.Catalina.start(Catalina.java:578)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
    Caused by: Unable to load bean: type:org.apache.struts2.dispatcher.multipart.Mul
    tiPartRequest class:org.apache.struts2.dispatcher.multipart.JakartaMultiPartRequ
    est – bean – jar:file:/C:/apache-tomcat-6.0.18/webapps/holamundoStruts2014/WEB-I
    NF/lib/struts2-core-2.1.8.1.jar!/struts-default.xml:47:178
    at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.reg
    ister(XmlConfigurationProvider.java:221)
    at org.apache.struts2.config.StrutsXmlConfigurationProvider.register(Str
    utsXmlConfigurationProvider.java:101)
    at com.opensymphony.xwork2.config.impl.DefaultConfiguration.reloadContai
    ner(DefaultConfiguration.java:169)
    at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(
    ConfigurationManager.java:55)
    … 30 more
    Caused by: java.lang.NoClassDefFoundError: org/apache/commons/fileupload/Request
    Context
    at java.lang.Class.getDeclaredConstructors0(Native Method)
    at java.lang.Class.privateGetDeclaredConstructors(Unknown Source)
    at java.lang.Class.getDeclaredConstructors(Unknown Source)
    at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.reg
    ister(XmlConfigurationProvider.java:211)
    … 33 more
    Caused by: java.lang.ClassNotFoundException: org.apache.commons.fileupload.Reque
    stContext
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoa
    der.java:1387)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoa
    der.java:1233)
    at java.lang.ClassLoader.loadClassInternal(Unknown Source)
    … 37 more
    03-feb-2010 1:25:40 org.apache.catalina.core.StandardContext start
    GRAVE: Error filterStart
    03-feb-2010 1:25:40 org.apache.catalina.core.StandardContext start
    GRAVE: Fall´┐¢ en arranque del Contexto [/holamundoStruts2014] debido a errores
    previos
    03-feb-2010 1:25:41 com.sun.faces.config.ConfigureListener contextInitialized
    INFO: Initializing Sun’s JavaServer Faces implementation (1.2_04-b07-FCS) for co
    ntext ‘/DISVEN’
    03-feb-2010 1:25:42 com.sun.xml.ws.transport.http.servlet.WSServletContextListen
    er contextInitialized
    INFO: WSSERVLET12: JAX-WS context listener initializing
    03-feb-2010 1:25:44 com.sun.xml.ws.transport.http.servlet.WSServletDelegate
    INFO: WSSERVLET14: JAX-WS servlet initializing
    03-feb-2010 1:25:44 com.sun.xml.ws.transport.http.servlet.WSServletContextListen
    er contextInitialized
    INFO: WSSERVLET12: JAX-WS context listener initializing
    03-feb-2010 1:25:46 com.sun.xml.ws.transport.http.servlet.WSServletDelegate
    INFO: WSSERVLET14: JAX-WS servlet initializing
    03-feb-2010 1:25:46 org.apache.coyote.http11.Http11Protocol start
    INFO: Arrancando Coyote HTTP/1.1 en puerto http-8082
    03-feb-2010 1:25:46 org.apache.jk.common.ChannelSocket init
    INFO: JK: ajp13 listening on /0.0.0.0:8009
    03-feb-2010 1:25:46 org.apache.jk.server.JkMain start
    INFO: Jk running ID=0 time=0/31 config=null
    03-feb-2010 1:25:46 org.apache.catalina.startup.Catalina start
    INFO: Server startup in 6347 ms

    Parece que no puede parsear el struts-default.xml pero no entiendo porque yo me fui al struts core y ese .xml se encuentra en dicho jar.

    Gracias por su atencio y espero su respuesra acerca de este inconvenient.

  19. yoyoooyoy dijo

    4 de February del 2010 a las 5:43 pm

    Hola César,

    primero te recomiendo que pruebes tus proyectos con el plugin que tiene eclipse para integrar los servidores de aplicaciones dentro del IDE, para no tener que exportar cada vez que quieras probar tu código.

    La razón del fallo es :
    Caused by: java.lang.ClassNotFoundException: org.apache.commons.fileupload.RequestContext

    Parece que te falta alguna dependencia o librería.

    Suerte

  20. Alex dijo

    5 de November del 2010 a las 7:34 pm

    hola quisiera por favor me envien el codigo a cualquiera q lo tenga se lo aagradeceria de sobre manera :)

  21. jose cordero dijo

    12 de September del 2011 a las 8:17 pm

    Hola yoyoooyoy, excelente blog, estoy entrando a este mundo del struts2 y te agradeceria mucho si podrias mandarme el .war de tu ejemplo. El link esta roto.

  22. yoyoooyoy dijo

    20 de September del 2011 a las 10:06 pm

    Hola Jose,

    estoy de vacaciones y el war lo tengo en el ordenador de casa. No estoy seguro de si tengo el código, pero si tienes prisa todo el código lo puedes recuperar siguiendo el tutorial paso a paso, y si te enganchas en un punto dame un toque y lo vemos.

    De todas foras te adelanto que quiero subir todos los códigos de los tutoriales (y nuevos que vendrán) a google source, así que sigue conectado al blog por RSS para enterarte!

    Gracias

  23. Miguel dijo

    20 de February del 2012 a las 8:16 pm

    Si alguno tuvo este problema o algo parecido

    SEVERE: Exception starting filter struts2
    java.lang.ClassNotFoundException: org.apache.struts2.dispatcher.FilterDispatcher
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:138

    o

    GRAVE: Excepción arrancando filtro action2
    java.lang.NoClassDefFoundError: com/opensymphony/xwork/config/ConfigurationException
    at org.apache.struts2.dispatcher.FilterDispatcher.init(FilterDispatcher.java:134)

    lo resolví de la siguiente forma. Me parece que es una desconfiguración del Apache-Tomcat por lo que hay que reiniciar el servidor sin el proyecto.

    http://molavec.blogspot.com/2012/02/javalangclassnotfoundexception.html

Comentarios RSS · TrackBack URI

Dejanos tu Comentario

Nombre: (Requerido)

E-Mail: (Requerido)

Sitio WEB:

Comentario:

Comenta