Manejo de referencias de ruta de contexto al migrar el sitio "/" al empaquetado de Java EE

StackOverflow https://stackoverflow.com/questions/142965

  •  02-07-2019
  •  | 
  •  

Pregunta

Un sitio Java existente está diseñado para ejecutarse en " / " en Tomcat y hay muchas referencias específicas a rutas absolutas fijas como " / dir / dir / page " ;.

Quiere migrar esto al empaquetado de Java EE, donde el sitio tendrá que ejecutarse bajo una raíz de contexto, por ejemplo. " / dir / dir / page " se convierte en " / mi-contexto-raíz / dir / dir / page "

Ahora, la raíz de contexto puede ser fácilmente con ServletRequest.getContextPath (), pero eso todavía significa muchos cambios de código para migrar una base de código grande. La mayoría de estas referencias están en HTML literal.

He experimentado con el uso de filtros de servlet para hacer reescrituras en el código HTML oubound, y eso parece funcionar bien. Pero sí introduce algo de sobrecarga, y no lo vería como una solución permanente. (vea EnforceContextRootFilter-1.0-src.zip para el enfoque de filtro de servlet).

¿Hay mejores enfoques para resolver este problema? ¿Algo obvio que me falta? Todos los comentarios son apreciados!

¿Fue útil?

Solución

Vea una pregunta relacionada

También considere URLRewriteFilter

Otra cosa (sigo editando esta maldita publicación). Si está utilizando JSP (en comparación con HTML estático o algo más), también podría crear un archivo de etiqueta para reemplazar las etiquetas html comunes con enlaces (en particular, un formulario img). Así que < a href = " / root / path " > link < / a > puede convertirse en < t: a href = " / root / path " > link < / t: a > ;. Entonces la etiqueta puede hacer la traducción por usted.

Este cambio se puede hacer fácilmente " en masa " ;, usando algo como sed.

sed -e 's/<a/<t:a/g' -e 's/<\/a>/<\/t:a>/g' old/x.jsp > new/x.jsp

Las acciones de formulario pueden ser un poco más complicadas que sed, pero entiendes la idea.

Otros consejos

el mundo de apache usó Redirecciones (mod_rewrite) para hacer lo mismo.

El mundo de Servlet comenzó a usar filtros

El mundo de rubíes (o el RoR) hace más de lo mismo y lo llaman enrutamiento.

Por lo tanto, no hay forma de evitarlo (a menos que desee utilizar la expresión regular inteligente a través de fuera, lo que se ha intentado y funciona bien).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top