que - spring jsp
JSP/servlet leen los parĂ¡metros desde el archivo de propiedades? (4)
Sin entrar en la discusión de dónde está la mejor ubicación para almacenar datos específicos del entorno (pista: desde luego, no archivos de propiedad), me limitaría a lo básico:
Las páginas JSP renderizan datos; no lo alcanzan Si en algún momento, más tarde, obtiene propiedades de otro lugar que no sea un archivo de propiedad, su JSP, suponiendo que su aplicación esté bien diseñada, no debería cambiar.
Por lo tanto, el primer enfoque que mencionó tiene sentido (suponiendo, una vez más, que le gustaría seguir leyendo la información específica del entorno de los archivos de propiedades).
Mis páginas JSP necesitan mostrar información diferente según el entorno en el que se encuentren (desarrollo, producción, espacio aislado, etc.). Quiero tener un archivo de propiedades para cada uno de estos entornos que contengan todos los parámetros que puedan necesitar. ¿Cómo puedo hacer referencia a las propiedades de este archivo en una página JSP?
Mis pensamientos son:
- Haga que un servlet alimente las propiedades en forma de un objeto modelo a todas las páginas JSP para que pueda hacer referencia a ellas como $ {properties.propertyName}
- De alguna manera, haga referencia a este archivo de propiedades en el archivo web.xml; luego, ¿puedo llamar a algo como $ {context.properties.propertyName}?
- En lugar de un archivo de propiedades, enumere los parámetros en web.xml y haga referencia a esos en las páginas JSP. No estoy seguro de cómo hacer esto, pero preferiría un archivo de propiedades más simple.
ACTUALIZACIÓN - Debería haber mencionado que estoy usando Spring 3.0 y Spring webmvc. Entonces, si hay algunas mejores prácticas para hacer esto usando Spring, ¡eso es ideal!
- Coloque el archivo de propiedades en una ubicación conocida dentro de su proyecto. Por ejemplo: /WEB-INF/config/environment.properties.
- Cree una clase de bean Java simple que tenga getters (acceso si lo desea) exponiendo cada una de las propiedades deseadas (me referiré a esto como la clase PropertyExposer). Por ejemplo: PropertyExposer.getEnvironmentName ()
- En una clase de inicio (quizás un SessionContextListener o un servlet con un valor bajo de <load-on-startup>) cargue las propiedades, cree su objeto PropertyExposer y guárdelo en el ámbito de la sesión (o la aplicación según sus necesidades).
Después de hacer lo anterior, sus propiedades estarán disponibles para sus archivos JSP.
Si se inicializa usando un SessionContextListener (este no es un código válido, pero el punto está hecho):
SessionContextListenser.contextInitialized(ServletContextEvent event)
{
event.getServletContext().setAttribute(); // set application scope value.
}
Si se inicializa con un servlet (suponiendo que extienda GenericServlet):
YourServletClass.init()
{
getServletContext().setAttribute(); // set application scope value.
}
Yo tuve el mismo problema. Pude resolverlo exponiendo el archivo de configuración en mi archivo webmvc-config.xml usando un paquete de recursos:
<bean class="org.springframework.context.support.ReloadableResourceBundleMessageSource" id="messageSource" p:basenames="classpath:META-INF/spring/config" p:fallbackToSystemLocale="false"/>
Luego pude usarlo en mis JSP usando una etiqueta <spring: message />:
<spring:message code="reactor.appKey" var="reactorAppKey" />
<scrip data-app-key="${reactorAppKey}"></script>
Puede cargar las propiedades usando
java.util.Properties
(o commons-configuration ) en el métodocontextInitialized(..)
ServletContextListener
.registrar el oyente con
<listener>
en web.xmlA continuación, almacena las
Properties
en elServletContext
(puede obtenerlo del evento) (ctx.setAttribute("properties", properties)
luego acceda a las propiedades usando
${applicationScope.properties.propName}
(como señaló BalusC,applicationScope
es opcional)
Actualizar:
Inicialmente pensé que la primavera tenía algunas instalaciones listas para usar, pero resulta que no es exactamente el caso. Tienes dos opciones:
este artículo explica algo similar a mi sugerencia anterior, pero utilizando
PropertyPlaceholderConfigurer
de Springesta respuesta y esta respuesta le permiten exponer todos sus beans, incluido un
PropertyPlaceholderConfigurer
al contexto del servlet.