tutorial mvc mediante libro framework espaƱol ejemplos desarrollo books aplicaciones java java-ee spring-mvc

mvc - spring java tutorial



Encontrar la URL de su aplicaciĆ³n con solo un ServletContext (5)

Estoy escribiendo una aplicación web Java usando Spring MVC. Tengo un proceso en segundo plano que pasa por la base de datos y encuentra notificaciones que deben enviarse por correo electrónico a mis usuarios. Estos mensajes de correo electrónico deben incluir hipervínculos a la aplicación. Esto parece un patrón bastante común para una aplicación web, pero estoy teniendo problemas.

¿Cómo obtengo la URL completamente calificada de mi aplicación, con el nombre del servidor y la ruta de contexto? No tengo acceso a ninguno de los métodos en HttpServletRequest porque estoy ejecutando esto como un proceso en segundo plano, no en respuesta a una solicitud web. Lo mejor que puedo hacer es tener acceso a ServletContext.

Actualmente estoy colocando la URL base en un archivo de configuración y leyéndola al inicio, pero esta aplicación se licenciará e implementará en los servidores de aplicaciones de los clientes, y si es posible, me gustaría que no tengan que configurarla manualmente.


¿Ha comprobado con un depurador si su ServletContext no es una instancia de HttpServletContext? Si es así, ejecútelo y obtenga la información de allí.


Creo que puedes usar algo como:

String host = InetAddress.getLocalHost().getCanonicalHostName(); String appUrl = String.format("http://%s:%s%s", host, port, contextPath);

con puerto y contextPath desde ServletContext.


No se recomienda preparar dinámicamente la URL en tiempo de ejecución, especialmente en función de ServletRequest. Esto se debe principalmente a que no tiene idea de la URL que los usuarios usarían para acceder a la aplicación: el servidor de aplicaciones podría estar detrás de un servidor web, un firewall o un equilibrador de carga. Para mantenerlo corto, uno no puede predecir las topologías de red.

Su técnica actual de recuperar el URL del archivo de propiedad es lo suficientemente buena para resolver dicho problema. Tal vez debería considerar proporcionar una consola administrativa para administrar la URL que aparece en los correos, especialmente si hay una consola de administración implementada, o si hay opciones relacionadas que deberían ir en una.

Editar: Mi último punto se hace eco de lo que Tony ha hablado.


Por qué no tener una página web de configuración que aparece la primera vez que se ejecuta la aplicación si el archivo de configuración no existe (en la carpeta WEB-INF, por ejemplo.) Usando ServletContext, puede llamar a getRealPath y obtener la ruta real de un archivo y ver si existe (). Si lo hace, redirija a la página de inicio de la aplicación, si no lo hace, abra la página de administración).

Lo mejor que puedes hacer con ServletContext es leer algunas configuraciones de web.xml y obtener la ruta de contexto, solo HttpRequest puede darte la URL de FQ.