¿Cuáles son los pros y los contras de los distintos marcos web de Java? [cerrado]

85

Estoy considerando crear mi propio sitio web usando Java y estoy tratando de decidir qué marco usar. Sin embargo, si hace una búsqueda rápida de marcos de trabajo Java, obtendrá más de 50 para elegir.

Mi sitio web solo va a ser para mi propio disfrute de construirlo al principio, pero si se vuelve popular, sería bueno que tuviera algo de escalabilidad, o al menos poder rediseñarlo.

¿Cuáles son las principales diferencias entre los marcos más populares? ¿Hay casos en los que uno supera significativamente a los demás? Por ejemplo, aplicaciones empresariales de alto tráfico frente a pequeñas aplicaciones de bajo tráfico. También me pregunto si algunos son mucho más fáciles de aprender y usar que otros.

¿Hay alguien que tenga experiencia con algunos de estos marcos y pueda hacer una recomendación? ¿La gran cantidad de opciones solo sirve como una advertencia temprana para evitar el desarrollo web basado en Java siempre que sea posible?

Aaron
fuente
Hasta cierto punto, esto es como decir "hacer una búsqueda rápida de herramientas da como resultado más de 50 para elegir; ¿debo elegir un martillo, un destornillador o unos alicates?" Aún así, con las subpreguntas, esta es una pregunta "buena subjetiva" decente.
Pops
"Divertido" como siempre, preguntas y respuestas extremadamente útiles (acabo de encargar un libro sobre Wicket, gracias a todos), pero la publicación completa está cerrada por no ser constructiva. "Esta pregunta PROBABLEMENTE" - y este hecho seco, nada especulativo, oh ironía ...
greenoldman

Respuestas:

59

He usado Tapestry 3 , Wicket , Echo y JSF bastante extensa. Realmente te recomiendo que los revises y elijas el que te parezca más fácil y que se ajuste mejor a tu forma de trabajar.

De ellos, el más cómodo para mí para trabajar fue Wicket , debido a la naturaleza liviana de la construcción de componentes y la simplicidad de las plantillas de página. Eso es doblemente válido si está utilizando su propio código de base de datos en lugar de Hibernate o algún otro marco (nunca estuve completamente satisfecho con Wicket Hibernate o Spring Integration).

Echo es genial si no te importa escribir todo tu diseño en Java. Sé que ahora es diferente, pero sigo pensando que ese producto sirve a un nicho bastante estrecho. También parece que cambian el modelo de desarrollo con cada lanzamiento importante.

Tapestry es un gran producto, pero obviamente es muy diferente de los demás en términos de modelo de desarrollo, ya que está dirigido principalmente por un tipo. Howard Lewis Ship es sin duda bastante inteligente, pero estoy decepcionado con su decisión de básicamente olvidar la compatibilidad con versiones anteriores de cada lanzamiento. Una vez más, sin embargo, para sus necesidades, esto puede no importar, y siempre me ha gustado trabajar con los productos Tapestry.

JSF ha estado disponible durante años y todavía se siente como algo que Struts tipo de construyó para solucionar todos los problemas de Struts. Sin entender realmente todos los problemas con Struts. Todavía tiene una sensación de inacabado, aunque el producto es obviamente muy flexible. Lo uso y le tengo algo de cariño, con grandes esperanzas en su futuro. Creo que la próxima versión (2.0) que se entregará en JEE6 realmente lo traerá por sí solo, con una nueva sintaxis de plantilla (similar a Facelets) y un modelo de componente simplificado (componentes personalizados en solo 1 archivo ... finalmente).

Y, por supuesto, hay un millón de marcos y herramientas más pequeños que obtienen sus propios seguidores ( Velocity para necesidades básicas, JSP sin procesar , Struts, etc.). Sin embargo, generalmente prefiero los marcos orientados a componentes.

Al final, recomendaría simplemente echar un vistazo a Tapestry, Wicket y JSF y elegir el que se sienta mejor para usted. Probablemente encontrará rápidamente uno que se adapte a su forma de trabajar.

jsight
fuente
Si su aplicación web está basada en contenido como un sistema de foros, le sugiero que use GWT y Ext-js. Si su aplicación web se parece más a una aplicación de escritorio como un terminal ERP, le sugiero que use ZK, Echo3, Vaddin y GWT. No sugeriré ninguna solución JSF porque sin el hecho de "Es estándar JEE" no encontré ningún beneficio para usarlos.
Zanyking
1
@Zanyking - Si su foro necesita SEO, encontrará difícil GWT, en mi opinión.
jsight
3
JSF es algo excesivo para un sitio web, en lugar me gustaría ir a los marcos más productivas, el desarrollo ... deben quedarse en la diversión, y JSF no ha sido construida con la 'diversión' en mente :)
HeDinges
1
Tapestry, Wicket, JSF y Echo están todos orientados a componentes y GWT, Ext-js y Vaadin están orientados a Javascript. No olvide echar un vistazo a todos los maravillosos frameworks MVC "clásicos" como Spring MVC, Play framework, Grails y Stripes. Tienen un modelo de programación muy diferente de los anteriores, pero tienen otros puntos clave (por eso hay tantos marcos: diferentes propósitos, necesidades y gustos requieren diferentes herramientas).
DaGGeRRz
39

Mi favorito es Spring Framework. Con 2.5 Spring MVC es tan increíble, con nuevas anotaciones, convención sobre características de configuración, etc.

Si solo está haciendo algo súper simple, también podría intentar usar la API de Servlet normal y no molestarse con un marco.

bpapa
fuente
1
Voto a favor de mencionar el uso de la API de Servlet normal para algo simple.
lsiu
1
Evitaría cualquier marco 'web mvc', por los motivos descritos en el primer capítulo (gratuito) de Wicket In Action. Además, evitaría usar la API de Servlet directamente a menos que tenga una aplicación de una sola página o esté buscando escribir su propio marco desde cero.
Eelco
3
También me gusta Spring, pero descubrí que toda la configuración solo vale la pena si estás escribiendo una aplicación mahoosive.
Leonard Ehrenfried
1
Apenas hay configuración mediante anotaciones.
bpapa
1
@bpapa Las anotaciones simplemente colocan la configuración en sus clases java en lugar de xml.
Steven
25

Recomiendo el marco Wicket orientado a componentes . Le permite escribir su aplicación web en un código Java antiguo y sencillo, puede usar POJO como modelo para todos los componentes y no necesita perder el tiempo con archivos de configuración XML enormes.

¡Había desarrollado con éxito una aplicación de banca en línea con Struts cuando descubrí Wicket y vi lo fácil que puede ser el desarrollo de aplicaciones web!

Johannes K. Lehnert
fuente
17

Recientemente comencé a usar Stripes Framework . Si está buscando un marco basado en solicitudes que sea realmente fácil de usar, pero que no imponga ningún límite a lo que está haciendo, lo recomiendo encarecidamente.

Es similar a los struts, pero va mucho más allá. Incluso hay algunos proyectos de complementos que le permiten usar hibernate o jpa con muy poca configuración.

Hay muchos marcos buenos por ahí, aunque he escuchado que wicket también es bueno, pero no lo he usado.

ScArcher2
fuente
16

No lo he probado yo mismo, pero creo que

http://www.playframework.org/

Tiene mucho potencial...

viniendo de php y asp clásico, es el primer framework web java que me suena prometedor ...

abre como
fuente
2
Es curioso que sea la quinta vez que veo "No lo he usado, pero recomiendo jugar" aquí en stackoverflow.
Marko
11

ACTUALIZACIÓN: Tapestry 5.2 está disponible, por lo que no está abandonado, como parecía estarlo anteriormente. Mi experiencia es con Tapestry 4, no con 5, por lo que su kilometraje puede variar. Mi opinión sobre Tapestry ha cambiado a lo largo de los años; He modificado esta publicación para reflejarlo.

Ya no puedo recomendar Tapestry como lo hacía anteriormente. Tapestry 5 parece ser una mejora significativa, pero mi principal problema con Tapestry no es la plataforma en sí; es con la gente que está detrás.

Históricamente, cada actualización importante de la versión de Tapestry ha roto la compatibilidad con versiones anteriores con prejuicios extremos, mucho más de lo que cabría esperar. Esto parece deberse a la incorporación de nuevas técnicas o tecnologías de codificación que requieren reescrituras importantes.

Howard Lewis Ship (el autor principal de Tapestry) es sin duda un desarrollador brillante, pero no puedo decir que me preocupe por su gestión del proyecto Tapestry. El desarrollo de Tapestry 5 comenzó casi inmediatamente después del envío de Tapestry 4. Por lo que puedo decir, Ship prácticamente se dedicó a eso, dejando Tapestry 4 en manos de otros colaboradores, que creo que no son tan capaces como Ship. Después de haber hecho el doloroso cambio de Tapestry 3 a Tapestry 4, sentí que me habían abandonado casi de inmediato.

Por supuesto, con el lanzamiento de Tapestry 5, Tapestry 4 se convirtió en un producto heredado. No tendría ningún problema con esto si la ruta de actualización no fuera tan brutal nuevamente . Así que ahora nuestro equipo de desarrollo se encuentra en una posición poco envidiable: podríamos seguir usando una plataforma web esencialmente abandonada (Tapestry 4), hacer la atroz actualización a Tapestry 5 o renunciar a Tapestry por completo y reescribir nuestra aplicación usando otra plataforma. Ninguna de estas opciones es muy atractiva.

El tapiz 5 supuestamente está escrito para reducir la probabilidad de que se rompa la actualización a partir de este momento. Un buen ejemplo son las clases de página: en encarnaciones anteriores, las clases de página descendían de una clase base proporcionada por Tapestry; Los cambios de API incompatibles en esta clase fueron la causa de una gran cantidad de problemas de compatibilidad con versiones anteriores. En Tapestry 5, las páginas son POJO que se mejoran en tiempo de ejecución con el "polvo mágico del tapiz" a través de anotaciones. Por lo tanto, siempre que se mantenga el contrato para las anotaciones, los cambios en Tapestry no afectarán las clases de su página.

Si esto es correcto, entonces escribir una nueva aplicación usando Tapestry 5 podría resultar bien. Pero personalmente, no tengo ganas de volver a poner la mano en el quemador.

Robert J. Walker
fuente
Actualización: Con el paso del tiempo, el proyecto Tapestry parece haber sido abandonado. No ha habido lanzamientos de Tapestry 5 desde abril de 2009, y Tapestry 4, todavía con un montón de errores pendientes en su JIRA, no ha tenido una actualización desde el 2008. Debido a esto, ya no puedo recomendar Tapestry como una opción viable para un marco de aplicación web.
Robert J. Walker
El tapiz no se ha abandonado. La rama Tapestry 5 está bastante activa con 5.1 como la opción estable y 5.2 próximamente.
Timo Westkämper
Tienes razón. De hecho, Tapestry 5.2 se ha lanzado desde entonces. Actualicé la publicación para reflejar mi opinión actualizada de Tapestry.
Robert J. Walker
9

Descargo de responsabilidad: trabajo en Vaadin (anteriormente IT Mill)

Si está haciendo algo RIAish, es posible que desee echar un vistazo a Vaadin . Es un marco de trabajo AJAX orientado a la interfaz de usuario de código abierto que, para mí, es agradable de usar (yo mismo provengo de PHP).

Hay un estudio de caso que compara hacer la misma aplicación (es decir, dos aplicaciones con el mismo conjunto de características) en Icefaces y Vaadin. En pocas palabras, afirma que el desarrollo de la interfaz de usuario fue considerablemente más rápido.

Aunque el estudio está alojado en la wiki de la empresa, puedo asegurar que es objetivo, genuino y veraz, aunque no puedo obligarlos a creerme.

Henrik Paul
fuente
+1 La estructura se renombra como vaadin (anteriormente ITMill). Tengo que decir que vaadin es un framework web muy atractivo y nada más que Java. Lo encuentro muy productivo.
Fmucar
7

Después de un largo tiempo de probar varias soluciones, para mí resultó ser:

  • Spring MVC para la capa de presentación y controlador (sin embargo, NO Spring Webflow, porque mis flujos se basan en ajax)

  • jQuery para todas las cosas del lado del cliente

  • Spring Security para el, bueno, aspecto de seguridad

  • Hibernar / JPA2

  • Embarcadero por el bien de las continuaciones (cometa)

Un mes de una curva de aprendizaje extraordinariamente empinada, pero ahora estoy feliz.

También me gustaría mencionar que estaba a un pequeño paso de saltarme todas esas cosas de Java y aprender Scala / LIFT en su lugar. En lo que a mí respecta, todo en Java que esté relacionado con el desarrollo web de vanguardia (cometa, comunicación asíncrona, seguridad (sí, ¡incluso con Spring Security!)) Todavía es un truco (prueba que estoy equivocado con evidencia, por favor !). Para mí, Scala / LIFT parece ser una solución más lista para usar y todo en uno.

La razón por la que finalmente decidí no ir con Scala es

  • Como líder de proyecto, debo considerar que los recursos humanos y los desarrolladores de Java son mucho más fáciles de encontrar que los desarrolladores de Scala.

  • para la mayoría de los desarrolladores de mi equipo, el concepto funcional de Scala, tan excelente como es, es difícil de entender

Saludos Er

Ta Sas
fuente
Todo esto es bueno. Buena elección de primavera MVC, mantente en el lado seguro (y sabio).
Victor Ionescu
5

También he escuchado cosas buenas sobre Spring Framework. Sin embargo, en general, la mayoría de los marcos web de Java que he visto no me han impresionado (especialmente Struts).

Para una aplicación simple, definitivamente consideraría usar servlets y JSP "sin procesar" y no me preocuparía por adoptar un marco. Si los servlets están bien escritos, debería ser sencillo en el futuro migrar a un marco si es necesario cuando la aplicación crezca en complejidad.

Russell alcalde
fuente
1
+1 para "Si los servlets están bien escritos ..."
Chris
5

¡Mi elección es Wicket!

Franklin
fuente
4

Todos ellos, ese es el problema ;-)


fuente
3

Creo que para sus modestos requisitos, solo necesita codificar servlets o páginas jsp simples que puede servir desde el servidor Tomcat. No creo que necesite ningún tipo de marco web (como struts) para los datos personales del sitio web


fuente
3

Decir "use JSF" es un poco demasiado simple. Cuando decida usar JSF, debe elegir una biblioteca de componentes encima. ¿Utilizará MyFaces Tomahawk, Trinidad, Tobago ( http://myfaces.apache.org/ )? ¿O tal vez ICEfaces ( http://www.icefaces.org/ )? Ah, y si usa ICEfaces, ¿usará JSP o Facelets para sus vistas?

En mi opinión, es muy difícil de decir. Nadie tiene tiempo para evaluar todas las alternativas prometedoras, al menos en los proyectos en los que trabajo, porque no son lo suficientemente grandes como para hacer fases de evaluación de tres meses. Sin embargo, debe buscar algunos que tengan una comunidad grande y activa y que no desaparezcan en un año. JSF existe desde hace algún tiempo, y dado que es empujado por el sol, seguirá existiendo por un tiempo más. No puedo decir si es la mejor opción, pero será buena.

Tim Büthe
fuente
Jsp fue una molestia para mí al hacer una aplicación web que vendemos. Una actualización considerará facelets en su lugar.
Thorbjørn Ravn Andersen
Ya, en este momento estoy bastante seguro: use facelets en lugar de JSP. Es mucho mejor y no veo ninguna (gran) desventaja.
Tim Büthe
3

Para sitios de alto tráfico, usaría un marco que no administra el estado del cliente en el servidor: Wicket, JSF y Tapestry administran el estado del cliente en el servidor. Solo usaría esos marcos (Wicket es mi favorito) si la aplicación se parece más a una aplicación de escritorio. Pero trataría de usar un enfoque REST + AJAX más escalable y simple.

Spring MVC sería un candidato, pero desde Spring MVC 3 tiene un extraño modelo de programación sobrecargado de anotaciones que no utiliza los beneficios de la escritura estática. Hay otras cosas desagradables como los parámetros de salida en los métodos combinados con un retorno habitual, por lo que hay dos canales de salida de un método. Spring MVC también tiende a reinventar la rueda y tendrá más que configurar en comparación con otros marcos. Realmente no puedo recomendar Spring MVC aunque tiene algunas buenas ideas.

Grails es una forma conveniente de usar Spring MVC y otros marcos establecidos como Hibernate. Codificar es divertido y verá resultados rápidamente.

Y no olvide que la API de Servlet con algunos pequeños ayudantes como FreeMarker para crear plantillas es muy poderosa.

demonio
fuente
3

He evaluado bastantes marcos y Vaadin ( http://vaadin.com/home ) se ha filtrado hasta la cima.

Debería al menos darle una breve evaluación.

¡Salud!

Gilles
fuente
2

Mi elección sería Wicket (para proyectos grandes y una base de usuarios predecible), GWT (para proyectos grandes que son en su mayoría públicos) o simplemente un marco de servicio (como Jersey / JAXRS) junto con un kit de herramientas JavaScript (para proyectos pequeños y medianos) .

Eelco
fuente
2

Recomiendo Seam, especialmente si necesitas persistencia.

Navi
fuente
1

Para una GUI rápida y elegante , puede usar JSF con la biblioteca Richfaces . Los componentes de la interfaz de usuario de Richfaces son fáciles de usar y tienen referencias prácticas disponibles con demostración de código en el sitio de demostración. Probablemente más adelante, cuando su sitio tenga más datos que manejar y mucha información tenga que ser procesada en la base de datos, podrá conectar cualquier marco de acceso a la base de datos (ORM).

usuario709798
fuente
0

No puedo creer que nadie haya mencionado a GWT

Kevin Wong
fuente
Realmente no consideraría a GWT como un marco de aplicación web (es más como un kit de herramientas web, de ahí el nombre). Sin embargo, GWT es genial y va bien con Spring, por ejemplo.
stian
marco o conjunto de herramientas, ¿cuál es realmente la diferencia concreta? La codificación con GWT se siente tan bien trabajando con un marco como con las otras opciones.
Eelco
0

Mi forma favorita de elegir aplicaciones realmente simples es Apache VelocityTools (VelocityLayoutServlet) con Velosurf ( http://velosurf.sourceforge.net ).

Para aplicaciones más complejas, Spring MVC o Struts 2.

Nathan Bubna
fuente