Estoy tratando de encontrar la forma óptima de desarrollar y lanzar una aplicación web bastante simple, y me estoy enfrentando a varios problemas. Esbozaré las decisiones que tomé, porque en algún lugar claramente me he salido de la pista. ¡Enormemente agradecido por cualquier ayuda!mejores prácticas de la aplicación web java
Tengo lo que creo que es una aplicación web bastante simple. Contiene un par de jsps que hacen referencia a un par de beans Java, y los habituales html, js, css e imágenes estáticos.
Decisión 1) Quería tener un procedimiento de liberación claro y limpio, de modo que pudiera desarrollar en mi máquina local y luego liberar confiablemente a una máquina de producción. Por lo tanto, tomé la decisión de empaquetar la aplicación en un archivo de guerra (incluidos todos los recursos estáticos), para minimizar los bits y piezas independientes que tendría que liberar. ¿Hasta aquí todo bien?
Decisión 2) Quería que las cosas en mi máquina local fueran lo más similares posible al entorno de producción. Por lo tanto, en mi html, por ejemplo, puedo tener una referencia a un archivo estático como http://static.foo.com/file. Para que este código funcione a la perfección en dev y prod, decidí poner static.foo.com en mi/etc/hosts cuando me desarrollo localmente, para que todas las direcciones URL funcionen correctamente sin cambiar nada.
Decisión 3) Decidí usar eclipse y maven para darme un entorno de mejores prácticas para la administración y construcción de mi proyecto.
Así que tengo una buena apretada establecido ahora, excepto que:
Cada vez que quiero cambiar nada en el desarrollo, como una línea en un archivo html, tengo que reconstruir todo el proyecto y luego esperar Tomcat para cargar la guerra antes de que pueda ver si es lo que quería. Entonces mis preguntas son:
1) ¿Hay alguna manera de conectar el eclipse y el gato para que no tenga que reconstruir la guerra cada vez? es decir, ¿Tomcat está mirando directamente a mi espacio de trabajo real para servir los archivos estáticos?
2) Creo que estoy haciendo las cosas más difíciles utilizando/etc/hosts para reflejar las direcciones de producción: ¿hay una forma mejor que no implique el cambio manual de URL (las URL relativas están bien, por supuesto, pero donde usted tiene muchos subdominios, digamos uno para archivos estáticos y uno para dinámico, ¿tiene que escribir la ruta completa, seguramente?)
3) ¿Es esta la mejor práctica? ¿Cómo se configuran las cosas para que equilibren los requisitos de un proceso de compilación automatizado que lo abarque todo, por un lado, y la velocidad y flexibilidad para poder desarrollar javascript y html y css rápidamente, tan rápido como si uno acaba de señalar Apache en el directorio y desarrollado en vivo? ¿Qué encuentra la gente que funciona?
¡Muchas gracias!
Edit: ¡Gracias a todos por sus excelentes respuestas! Si pudiera marcarlos bien, lo haría ... Esto realmente me ha ayudado. Lo que estoy escuchando es que la mejor práctica es conservar la estructura de la aplicación web en desarrollo y ejecutarla en un entorno lo más cercano posible a la producción. Parece que las diferencias entre las personas son la medida en que las personas están dispuestas a implementar recursos en caliente en el contenedor de servlets, eludiendo el proceso de compilación para un poco de velocidad o conveniencia extra. Eso tiene sentido. Gracias de nuevo.
Gracias Whaley.Así que estoy claro, ¿está confirmando que incluso si quiero, por ejemplo, poner una alerta rápida en una línea de javascript, o corregir un error tipográfico en algún texto en un archivo html, tendré que esperar a que termine la guerra? reconstruir y luego ser desplegado (incluso si es automáticamente) a mi contenedor de servlets de desarrollo, y solo entonces puedo ver el resultado de mi cambio? Si es así, eso se siente muy forzado en comparación con la eficiencia de tener algo apuntando directamente a los archivos del proyecto. ¿He entendido bien o me estoy perdiendo algo? – Jeremy
Eso es precisamente lo que estoy sugiriendo. Si su despliegue de producción consiste en reducciones de .war, así es como debería verse su implementación de desarrollo. Los webapps de Java están destinados a ser agrupados y desplegados como de guerra. Encuentro que la vida siempre es mucho más fácil cuando no intentas evitar esa convención. – whaley
Al usar la edición webtools/EE de Eclipse, puede "vincular" su proyecto con una instalación local de tomcat (u otro contenedor), de modo que pueda obtener una vista previa de pequeños cambios sin esperar la generación/implementación de guerra. – agnul