Struts 2

Struts 2 es, como el nombre sugiere, la nueva versión del popular framework de desarrollo web en Java Apache Struts. Sin embargo, contrariamente a lo que cabría esperar, el código de ambos tiene poco que ver, dado que Struts 2 no se basa en el código de Struts 1.x, sino en el de otro framework de desarrollo web en Java llamado WebWork, un framework que el creador de Struts consideraba superior a Struts 1.x en varios aspectos.

Struts 2 está basado en el patrón MVC (Modelo-Vista-Controlador), una arquitectura que busca reducir el acoplamiento dividiendo las responsabilidades en 3 capas claramente diferenciadas:

  • El modelo, que hace referencia a los datos que maneja la aplicación y las reglas de negocio que operan sobre ellos y que se traducen en Struts 2 en las acciones.
  • La vista, encargada de generar la interfaz con la que la aplicación interacciona con el usuario. En Struts 2 equivale a los resultados.
  • El controlador, que comunica la vista y el modelo respondiendo a eventos generados por el usuario en la vista, invocando cambios en el modelo, y devolviendo a la vista la información del modelo necesaria para que pueda generar la respuesta adecuada para el usuario. El controlador se implementa en Struts 2 mediante el filtro FilterDispatcher

Por supuesto, podríamos utilizar JSP y servlets para crear una aplicación utilizando el patrón MVC: en una aplicación con JSP y servlets clásica se suelen utilizar páginas JSP para la vista, un servlet como controlador (patrón front controller) y POJOs (Plain Old Java Objects) para el modelo. El modelo, a su vez, suele estar dividido en dos subcapas siguiendo el patrón DAO (Data Access Object).

Sin embargo no tiene sentido reinventar la rueda cuando podemos recurrir a un framework, como Struts 2, para que se encargue de obtener y transformar los parámetros de las peticiones del cliente, validar los datos, buscar qué acción se debe realizar en el modelo según la petición, buscar la página a mostrar al usuario según la respuesta del modelo, proporcionar los datos del modelo a la vista, ocuparse de la internacionalización, etc.

Veamos cómo crear un pequeño “Hola mundo” con Struts 2. O mejor aún: un hola algo.

Como IDE utlizaremos Eclipse. También necesitaremos un servidor de aplicaciones o un contenedor web, como Tomcat. Para ver cómo integrar tu servidor en Eclipse puedes consultar la entrada Eclipse y Tomcat, adaptando los pasos necesarios en caso de utilizar un servidor distinto.

Por supuesto también necesitaremos descargar Struts 2 desde su página web. En principio basta con descargar las librerías que componen Struts 2 y sus dependencias (Essential Dependencies Only) aunque también os puede interesar descargar la versión completa (Full Distribution) que incluye además la documentación, el código fuente, y distintas aplicaciones de ejemplo.

En todo caso una vez hemos descargado Struts 2, Eclipse y Tomcat ya está todo listo para comenzar a trabajar.

Abrimos Eclipse y nos dirigimos a File -> New -> Dynamic Web Project para crear un nuevo proyecto para web dinámica. En Project name introducimos el nombre que queramos utilizar para el proyecto, por ejemplo, hola. Pulsamos Finish.

Copiamos las librerías básicas a la carpeta WebContent\WEB-INF\lib. Estas son commons-fileupload, commons-logging, freemarker, ognl, struts2-core y xwork. Hacemos clic con el botón derecho sobre el proyecto, y seleccionamos Refresh para que Eclipse las vea.

Editamos el descriptor de despliegue (web.xml) para añadir el filtro que sirve a Struts 2 a modo de punto de entrada a la aplicación: FilterDispatcher. Hacemos doble clic sobre “Deployment Descriptor: hola” y sustituimos el contenido por el siguiente:

<?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>hola</display-name>

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

    <filter>
        <filter-name>struts</filter-name>
        <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
    </filter>

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

Como vemos lo único que estamos haciendo es indicar al contenedor web (Tomcat en este caso) que toda petición, tenga esta la URL que tenga, debe pasar por el filtro FilterDispatcher. FilterDispatcher es en realidad el controlador de nuestra aplicación; nosotros sólo tendremos que ocuparnos de la vista y el modelo, llamados resultados y acciones en la terminología de Struts 2.

Ahora vamos a crear la página de inicio de nuestra aplicación. Como en el descriptor de despliegue hemos indicado que index.jsp es uno de los “archivos de bienvenida” (welcome-file), cuando en la URL no se especifique el archivo a mostrar dentro del directorio se mostrará por defecto index.jsp; de esta forma tanto http://localhost:8080/hola/index.jsp como http://localhost:8080/hola/ mostrarán nuestra nueva página.

Hacemos clic con el botón derecho sobre WebContent y seleccionamos New -> JSP, en File name escribimos index.jsp y pulsamos Finish. El contenido de la página será el siguiente:

<%@ taglib uri="/struts-tags" prefix="s" %>

<html>
<body>
<s:form action="Hola">
<s:textfield name="nombre" label="Nombre"/>
<s:submit/>
</s:form>
</body>
</html>

Como vemos se utiliza la directiva taglib de JSP para indicar al contenedor que queremos usar la librería de etiquetas struts-tags, para las que se usará el prefijo “s”. Los nombres de las etiquetas de struts-tags que utilizamos son bastante descriptivos: estamos creando un formulario (<s:form></s:form>) con un campo de texto (<s:textfield/>) y un botón de enviar (<s:submit/>), que mandará los datos a la acción Hola (campo action del formulario).

Veamos ahora el código de la acción Hola. Las acciones en Struts 2 son clases Java que suelen implementar la interfaz Action o extender la clase ActionSupport (suelen, porque no es obligatorio). Creamosla haciendo clic con el botón derecho sobre Java Resources:src y seleccionando New -> Class; en Name, introducimos Hola y pulsamos Finish. Al crear el WAR de la aplicación el archivo .class acabará en WebContent/WEB-INF/classes. El código de la acción es el siguiente:

import com.opensymphony.xwork2.ActionSupport;

@SuppressWarnings("serial")
public class Hola extends ActionSupport {
    private String nombre;

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public String execute() {
        System.out.println(nombre);
        return SUCCESS;
    }
}

El código a ejecutar por nuestra acción está contenido en un método execute(). Como vemos la funcionalidad es bastante pobre, una simple excusa para utilizar una acción, ya que podríamos haber prescindido totalmente de ella. Sin embargo este código tan sencillo, que imprime en la consola el nombre que el usuario introdujo en el formulario, pone de manifiesto algo bastante interesante y es que no aparece por ningún lado un objeto HttpServletRequest ni similar del que obtener el valor del parámetro nombre del formulario, luego, ¿de dónde sale la propiedad nombre?

Lo cierto es que Struts 2 (o más bien el interceptor param de Struts 2) nos tiene preparada una sorpresa, y es que basta con crear getters y setters con los nombres de los campos de los formularios para que estos se rellenen auto mágicamente, incluso aunque las propiedades no sean cadenas y sea necesaria una sencilla conversión. Este es el trabajo del interceptor param, como hemos dicho.

Los interceptores son unos de los elementos más importantes de Struts 2. Se trata de objetos que ejecutan código antes y después de una cierta acción, de forma que podamos añadir nueva funcionalidad no relacionada directamente con el modelo de forma modular. Tenemos interceptores para logging, para validación, para capturar excepciones, etc.

Como vemos el método execute devuelve un string indicando el resultado de la acción. En este caso se devuelve SUCCESS, que es una constante proveniente de la clase que extendemos, ActionSupport, y cuyo valor es “success”. ¿Y de qué sirve esto? Pues para que Struts 2 sepa a qué página redirigir, según el mapping que definimos en el archivo de configuración de Struts 2 struts.xml.

Vamos a crear este archivo. Hacemos clic con el botón derecho sobre Java Resources:src, seleccionamos New -> XML, pulsamos Next y seleccionamos como nombre struts.xml y como directorio de destino src. Este archivo acabará en WebContent/WEB-INF/classes al crear el WAR de la aplicación. Su contenido debe ser el siguiente:

<?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="mi-paquete" extends="struts-default">
        <action name="Hola" class="Hola">
            <result name="success">/hola.jsp</result>
        </action>
    </package>
</struts>

En este caso lo que estamos haciendo es indicar al framework que queremos que se ejecute el código de la clase Hola cuando llegue una petición a Hola.action, y que se muestre la página hola.jsp como resultado cuando el valor devuelto sea “success”.

Vamos a ver por último el código de hola.jsp. Hacemos clic con el botón derecho sobre WebContent y seleccionamos New -> JSP; en File name escribimos hola.jsp y pulsamos Finish. El contenido del archivo es el siguiente:

<%@ taglib uri="/struts-tags" prefix="s" %>

<html>
<body>
Hola <s:property value="nombre"/>
</body>
</html>

En esta página lo único que hacemos es utilizar la etiqueta <s:property/> para mostrar la propiedad nombre de la acción, que se toma de una pila de valores llamada ValueStack.

Solo resta probar el código de nuestra aplicación. Arrastramos el proyecto sobre nuestra instancia de Tomcat en la pestaña Servers, e iniciamos el servidor haciendo clic con el botón derecho sobre él y seleccionando Start. Si abrimos la URL http://localhost:8080/hola/ en nuestro navegador y todo funciona correctamente, deberíamos ver algo como esto:

Struts 2 ejemplo




Comentarios
  1. A mi me costó un tiempo empezar a utilizar Struts1, luego quise ponerme con Struts2 pero como tú bien dices.. no se parecen en nada!! me dio pereza .-p, me quedé en la rama 1 🙂

    Responder

    • Yo creo que le pasa lo mismo a la mayoría. Pero merece la pena, ¿eh? 🙂

      Responder

  2. ¿Java para aplicaciones web? No, gracias.

    Responder

    • @Blaxter bueno, tiene sus cosas buenas y sus cosas malas, como todo.

      ¿Tú que utilizas? ¿PHP, Python, Ruby, ASP, …?

      Responder

    • Lo que no entiendo de Blaxter es su logica. Hay que ser Statico Abstracto y Final para leerse un manual de PM sobre Struts2 y luego soltar en plan nenaza ñoña “Java en Web no gracias”. Por no entrar en el tema que, con semejante afirmacion te intuyo un experto que te haces necesidades en GWBasic con largos años de experiencia en el MKDIR, a pesar de que nunca dominaste demasiado bien el CD ni el RD. En definitiva, a alguien tan Extend como para realizar semejante comentario solamente le puedo asignar por cerebro una Interface vacia y sin fundamento, gracias a Dios no le aplicaria la clausula Final, es tu dia de suerte AbstractBoy.

      Responder

    • Geek

      .NET no?¿?¿

      Me parto y me mondo xD

      Responder

    • Lacho

      jajaja pinche Indio

      Responder

    • bits

      son puros giles pa contestar, esas gueas de ruby and rails php y todo lo que no es java son buenos pero preguntense por que las empresas grandes no los usan y usan java por soporte nada mas qeu por eso toda la otra huea es una mierda sirve para cosas pero finalmente tenis que subencionarlos con maquinas escalamientos horizontales verticales paos lesos, se nota que hacen aplicaciones culias rascas q soportan un par de registros, pero no sistemas distribuidos, en donde prima lo convencional, y spring sea roo puro la huea que sea, no tiene soporte mas que ungrupo de hueones que programa y si los llamas con raja los encontrai si en las comunidades pero no dedicados al 100% en cambio JEE J2ee en base a ORACLE O WEbSpehere IBM deberia ser lo estandar no lo mejor pero lo estandar GILES todo eso que hablan de configuraciones inyecciones y no se cuanta guea es pura mierda por que lo demas lo hace la herramienta ahora lo importante es la arquitectura y casos que pueden hacer mierda la session y ser fino y elegante con patrones de diseño que ademas ya viene incluido en Struts parte WEB MVC Y PABAJOO PAL NEGOCIO EJB Spring la huea que querai pero con patrones PARA LOS CAMINOS COMUNES Y NESECIDADES DIFERENTES GILES NERD!!

      Responder

  3. @Blaxter.. yo monté todo el software jurídico de mi empresa con Java como tecnología para la web.. y vamos.. super mantenible.. 🙂
    A día de hoy.. si tuviera que empezar otro mega-proyecto volvería a usar JSP. Para webs normalitas… siempre PHP..

    Responder

  4. jose

    ya empezamos con el viejo mito de que php no es potente…

    Responder

    • Anónimo

      claro php es una porqueria y no es un mito es algo comprobado NO SIRVE

      Responder

      • ReSCueR

        Jaja madre mia como sois los fanboys. Yo pensaba que esto solo pasaba con las videoconsolas y demás donde hay mucho niño suelto. Sin menospreciar en absoluto el desarrollo web en Java a quien diga que PHP no es potente le diría que un lenguaje de programación es tan potente como lo sea el cerebro del que lo utiliza. Es cierto que crear un framework PHP5 bien hecho no es trivial pero hay empresas, como por ejemplo Softonic que son lideres en su sector y cuentan en decenas de millones las visitas que obtienen mensualmente. Ah y eso Utilizando MySQL en vez de Oracle que ya es decir. Además es un milagro lo bien que va PHP teniendo en cuenta lo flexible que es (Java está super tipado y, aunque eso en realidad es bueno porque obliga a hacer las cosas bien…a veces desespera un poco a los que no somos muy buenos programadores).

        Responder

  5. blu

    Todo lo que comentas lo puedes hacer también con spring mvc, lo que yo no entiendo es porque existen proyectos que utilizan spring + struct2…!

    ¿Que ventajas puede tener utilizar spring + struct2 en lugar de utilizar todas las ventajas de spring (IoC, AOP) con spring mvc?

    Responder

    • Lacho

      es más sencillo configurar el VC de struts2 que el VC de spring, el mvc tiene acceso “Directo” a los objetos HttpServletRequest el struts2 te los encapsula, cada uno tiene sus bondades y no no hay ningún limitante para usar todo lo que dices de Spring la “suite” completa, pero es según requerimientos y comodidad

      Responder

  6. @blu yo Struts lo suelo utilizar con Spring IoC para la inyección de dependencias. Cada uno tiene sus ventajas y sus desventajas, pero es lo único que le echo en falta a Struts respecto de Spring.

    Responder

  7. @jose, para gustos los colores.. pero para mi.. los frameworks de PHP.. dejan bastante que desear…

    Responder

  8. blu

    @Zootropo pero a la conclusión a la que quiero llegar (debido a que nunca he utilizado struts y lo desconozco) es porque uno decide utilizar strut2 junto con spring, en lugar de emplear un solo framework (ya que spring aporta de un modo equivalente la funcionalidad que comentas en este post).

    Dicho de otro modo, hay algo que aporte la inclusión de struts2 cuando ya se está utilizando spring porque spring tenga carencias que son suplidas por struts o se reduce más a una cuestión de gustos.

    Responder

  9. Para mi, para aplicaciones web, nada mejor q ruby on rails

    Responder

    • Lacho

      Es muy bueno!!, pero lamentablemente no todos lo usan y por lo tanto no tienen tanto soporte, ya ves que eso preocupa regularmente “ay! y el soporte???”, y esta genialisisisimo ese ruby

      Responder

  10. @blu en realidad yo creo que es más una cuestión de gustos. Y que Struts 1 estaba en el lugar adecuado en el momento adecuado.

    Responder

  11. @Ecarrion ¡y Django! 😛

    Responder

  12. ElleDriver

    Gracias Zootropo por este post! Esta es una de las mil cosas que tengo entre manos y me ha venido muy bien! 🙂

    Responder

  13. antoniosanct

    Lo he probado con Netbeans 6.5 con Tomcat usando Maven y funciona a la perfección. Buen aporte. Un saludo!

    Responder

  14. […] Struts 2 […]

    Responder

  15. […] Struts 2 proporciona una librería de etiquetas que facilitan, entre otras, las tareas de validación e internacionalización. Estas etiquetas, cuyo TLD podemos encontrar en META-INF/struts-tags.tld, en el jar de struts2-core, pueden utilizarse tanto con JSP como con Velocity o FreeMarker. […]

    Responder

  16. @Zootropo, actualmente ruby o python.

    Java sería una de mis últimas elecciones como lenguaje (y tengo bastantes decenas de miles de líneas escritas en él) y desde luego ni siquiera una opción para apps web.

    Responder

    • Uhuru

      Primera persona que conozco que haya podido programar en java y dice que no le gusta…. pongo en duda que hayas podido hacerlo.

      Responder

    • Comentarios todas ellas, por supuesto.

      Sino no me lo explico, bueno si, quizas caligrafia o mecanografia de codigos fusilados.

      Responder

  17. jab66

    No se en que se basan para decir que Java sería una de las últimas elecciones para desarrollar una aplicacion web. Dejando de lado la perfomance (que depende del application server elegido y configurado), Java está por arriba del resto en lo que se refiere a portabilidad. El diseño de objetos es un mundo complejo y hay que saber mucho de el antes de escribir una linea de codigo en Java.

    Responder

    • German

      estoy deacuerdo con vos yo hace ya un año y medio que programo con Java y me parece que es espectacular no he conocido otro lenguaje en donde se puedan hacer todas las cosas que se hacen con java PHP seria la ultima eleccion que tomaria para realizar cualquier aplicacion sea web o no me parece mu vulnerable

      Responder

  18. Manu

    ¿Alguien a probado el ejemplo?. Yo lo he hecho tal y como viene y no me muestra el nombre. No se si a alguien le ocurre lo mismo. Soy novato en esto y me gustaría poder hacerlo correctamente. Gracias y un saludo a todos.

    Responder

  19. xel

    Struts 2 es muy potente!! yo les diria que vale la pena que den el salto!! puedes manejar facilmente la internacionalizacion, request,session… y sus etiquetas para jsp son muy buenas!! ademas lo puedes conectar con todo (ajax ,flex,tiles).

    saludos..

    pd. php es potente.. pero es muy cohino comparado con java

    Responder

    • xel, puedes añadir tambien a SAP, ya que la unica opcion posible de conexion seria y eficaz por medio de ABAP IV es JAVA.

      Responder

  20. xel que despectivo XD

    Responder

  21. @Manu ¿te da algún mensaje de error?

    Responder

  22. dandar

    @Manu He seguido varios manuales parecidos a este y ESTE es el unico que me ha funcionado, ademas con el codigo completo que introducir en cada archivo de configuracion y con un seguimiento al detalle.

    Prueba a empezar completamente de nuevo… ;).

    Responder

  23. Rocky

    Estoy leyendo el libro de Struts 2 de anaya Multimedia y el ejemplo que me dieron esta muy basico y claro, me ayudo ,mucho gracias!!!!

    Responder

  24. Rocky

    tendras algun ejemplo pero con base de datos???

    Responder

  25. pablo

    A mi me aparece este mensaje de error

    type Informe de estado

    mensaje

    descripci�n El recurso requerido () no est� disponible.

    A que puede deberse

    Responder

    • German

      Pablo el problema que tienes es que tu Struts-config-xml no esta tomando el camino que estas inçdicando en el action de tu form por lo tanto no entiende donde debe ir a buscar el action es por eso que te dice que no esta disponible muestrame tu codigo y con gusto te ayudo

      Responder

  26. Danisaurus

    Funciona!!!

    Responder

  27. Optimus

    muchas gracias por el ejemplo, estoy muy interesado en realizar aplicaciones web bajo la plataforma de java y con este ejemplo sencillo y basico empiezo con el pie derecho en el mundo de la programacion. XD

    Responder

  28. onil

    Gracias por el ejemplo, en eclipse no he tenido ningún problema, pero he intentado pasarlo a jdevelopper y aunque parte me funciona, ahora intento crearme un submit en una jsp y no me redirecciona al action del struts.xml, es decir, los que tenía creados antes si pero lo que me creo nuevos no los interpreta, es un poco raro no??, sabría alguién que puede estar pasando??.
    Muchas gracias, saludos

    Responder

  29. Antonio

    MMM pues no le hagan al cuento programen en lo que se necesite php jsp con los framework que se adapten que si uno es mejor ,muchos de ustedes no han manejado mas de un entorno de desarrollo , y esa que dice que java no sirve o que seria su ultima opcion vamos chaval ahi se ve lo poco que conoces nunca subestimes a un lenguaje java es mas de que puedes saber son dos grandes mundos mejor conocelo primero y despues opina.

    Responder

  30. eder

    es muy interesante lo de struts2 me podrian dar tutorial sobre el tema, se lo agradeceria….

    Responder

  31. Jon

    Hola, alguien me podria pasar un manual para manejar struts2, la verdad soy nuevo en esto, perdonen las molestias

    Responder

  32. Medina

    Hola, una pregunta, estoy intentando integrar ajax y struts 2, y me da problemas que todos los actions tengan un result a una jsp, ya que se me recarga la página entera y usar ajax entonces no es interesante. Se que se puede redirigir a otro action, pero no veo que solucione mi problema. Tienes alguna idea de como montarlo?. ¿Hay alguna manera de hacer que un action no redirija a “nada”?

    Gracias, el tutorial muy completo. Saludos.

    Responder

    • gambit0

      Un action siempre ha de dirigirte a algo. Para que funcione Ajax con Struts2, debes tener una página superior, que llamaremos “padre”, y otra que la llamaremos “hija”.
      La página “padre” ha de tener una llamada a esa capa “hija”. Una vez estés trabajando en la capa hija, aquellas acciones que quieras que se recarguen solo la capa “hija”, en el target has de poner el nombre del div de la capa hija.
      Es un poco lioso, pero si estás interesado puedo explciartelo.

      Responder

  33. alex

    Me sale este error
    :
    30-ago-2009 23:07:12 com.opensymphony.xwork2.util.logging.commons.CommonsLogger warn
    ADVERTENCIA: Could not find action or result
    There is no Action mapped for namespace / and action name . – [unknown location]
    at com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:177)

    Responder

  34. jsf

    java server faces !!!!

    Responder

  35. zack de la rocha

    Alguien que le diga al Blaxter que empresas como ORACLE e IBM usan la tecnologia de JAVA para crear grandes aplicaciones empresariales.

    Ademas, programadores de PHP muchos… de Java pocos pero son mejor pagados. Abusados !

    Responder

  36. Rem
  37. Lucho

    Como decia antonio creo que no es neceario decidir cual es mejor o peor tecnología pues la mayoria de nosotros somos programadores que nos mandarán a la guerra en cualquier lenguaje, yo en particular domino muchos lenguajes y tecnologias, creo que lo realmente importante son los conceptos de OO que nos sirven para cualquier lenguaje, esto mas el uso de patrones de diseño no ayudan a realizar codigos de calidad. Actualmente trabajo en c#, no me gusta .Net, de hecho vengo del mundo de Java (tb pase por php), creo que me demoré 1 dia en cambiarme de java a c#, el codigo es muy parecido, lo importante es la OO, lo mismo me paso con flex (ActionScript3) no tenia idea del lenguaje, pero la OO ayuda a salir de los problemas.
    Saludos

    Responder

  38. DonSegua

    ¡No es el pincel, sino la mano del artista!

    Responder

  39. Ricardo

    !!!!Excelente!!!!

    Responder

  40. […] rápido de MySQL Tutorial rápido de Struts 2 Etiquetas de Struts 2 Revistas gratis Los artistas más vendidos de la historia en Spotify […]

    Responder

  41. Ibai

    Para que me funcionara tuve que incluir mas jars que los mencionados

    Responder

  42. Chivis

    Hola solo tengo una pregunta que diferencia existe entre usar los componentes que struts ofrece para el diseño de la pagina y componentes input normales de html?

    Responder

  43. Anónimo

    Uhuru programar en python da gusto.

    Seguro que no lo has probado.

    Sin embargo:

    “¿Java para aplicaciones web? No, gracias.”

    Me parece una tolonteria… Java es un lenguaje de programacion cojonudo y esta muy evolucionado. Y lo peor es brutalmente mas eficaz que python o ruby.

    Otra cosa es que se haga mierda, generalmente, en java, que es cierto o que python o ruby no valgan, que no lo es.

    Yo preferiria programar en python las webs, pero java esta mucho mas extendido….

    Responder

  44. mingui

    Muy bueno, y muy agradecido.
    me ha funcionado en eclipse y con tomcat 5.5

    Saludos,
    Jose Antonio.

    Responder

  45. Diego

    Muchas gracias por el tutorial. Clarísimo.

    Responder

  46. anonimo

    @Blaxter
    No has usado Java en tu vida, estoy convencido de ello. Y ruby y phyton lo habrás buscado en google, para quedar bien aquí…

    Responder

  47. Athlit

    Interesante tutorial, muy bien explicado y muy entendible para los que queremos iniciarnos en los frameworks de Java.

    Responder

  48. Alejandro Díaz

    Si saben inglés, este tutorial está muy bueno. Yo inicié de cero, sabiendo nada de struts y me pareció bueno, muy completo y sencillo.

    http://www.roseindia.net/struts/struts2/index.shtml

    Responder

  49. Cóndor

    Estoy iniciándome en el uso de framework para las aplicaciones Web por lo que este pequeño ejemplo me ayudó mucho y Gracias por eso… ademas de ser algo simple para muchos, creo yo que es mas valorado que una aplicación y/o sistema mucho mas elaborado debido al aporte que brinda

    Responder

  50. yomismo

    jodo que panda de frikis… y además prepotentes, la peor mezcla que hay en el mundo de la informática. Blaster trankilo, tu no les sigas que no merece la pena, entre uno que se pone anonimo y otro MadreDelTopo, seguro que ni salen de casa y son de echarles de comer a parte. Ala! que sigais bien en vuestros mundos de frikilandia.

    Responder

Deja un comentario