2010-10-13 18 views
7

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?Parámetros de lectura JSP/servlet del archivo de propiedades?

Mis pensamientos son:

  • Tener un servlet alimentar a las propiedades en la forma de un objeto de modelo a todas las páginas JSP, por lo que puedo hacer referencia a ellos como $ {} properties.propertyName
  • referencia alguna manera esta propiedad archivo en el web.xml, entonces tal vez llamo 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 - Yo he mencionado que estoy usando Spring 3.0 y webmvc primavera. Entonces, si hay algunas mejores prácticas para hacer esto usando Spring, ¡eso es ideal!

+0

primavera hubiera sido muy útil aquí – Bozho

+0

Uso Spring !!! ¿Cómo ayuda eso? –

Respuesta

9
  • Puede cargar las propiedades utilizando java.util.Properties (o commons-configuration) en un contextInitialized(..) método ServletContextListener 's.

  • registrar el detector con <listener> en web.xml

  • A continuación, guarde el Properties en el ServletContext (se puede obtener desde el evento) (ctx.setAttribute("properties", properties)

  • continuación, acceda a las propiedades utilizando ${applicationScope.properties.propName} (como se ha señalado BalusC, applicationScope es opcional)

Actualización:

Al principio pensé que la primavera había alguna instalación lista para su uso para eso, pero resulta que no es exactamente el caso. Tiene dos opciones:

  • this article explica algo similar a mi sugerencia anterior, pero utilizando de PropertyPlaceholderConfigurer

  • this answer y this answer primavera permiten exponer todos sus granos, incluyendo un PropertyPlaceholderConfigurer al contexto servlet.

+2

Para el caso no está claro para el OP: la parte 'applicationScope' en EL es opcional. – BalusC

+1

las 2 respuestas en su actualización fueron exactamente lo que estaba buscando. Gracias. –

0

Sin entrar en la discusión de cuál es el mejor lugar para almacenar datos específicos del entorno (pista: ciertamente no archivos de propiedades), que se pegaba a lo básico: páginas

JSP representar datos ; no lo alcanzan Si en algún momento, más adelante, obtiene propiedades de otro lugar que no sea un archivo de propiedad, su JSP, suponiendo que su aplicación esté bien diseñada, debe cambiar no.

Por lo tanto, el primer enfoque que mencionó tiene sentido (asumiendo, una vez más, que le gustaría seguir leyendo la información específica del entorno de los archivos de propiedades).

+0

¿dónde sugieres almacenar datos específicos del entorno? –

+1

Después de pasar meses y meses investigando todas las alternativas, llegué a la conclusión de que el uso de las entradas de entorno de recursos es, con mucho, el enfoque más flexible. Su programa nunca cambiará como parte de los cambios ambientales. Obtenga más información sobre las entradas del entorno de recursos y sobre cómo usarlas aquí: http://www.ibm.com/developerworks/websphere/library/techarticles/0611_totapally/0611_totapally.html. Habla sobre WebSphere, pero el concepto de ResEnvEntries es J2EE-standard. y cada servidor de aplicaciones que conozco lo admite. – Isaac

0
  1. Coloque el archivo de propiedades en una ubicación conocida dentro de su proyecto. Por ejemplo: /WEB-INF/config/environment.properties.
  2. Crea una clase de bean Java simple que tenga getters (acceso si lo deseas) exponiendo cada una de las propiedades deseadas (me referiré a esto como la clase PropertyExposer). Por ejemplo: PropertyExposer.getEnvironmentName()
  3. En una clase de inicio (tal vez un SessionContextListener o un servlet con un > de bajo carga al iniciarse) cargue las propiedades, cree su objeto PropertyExposer y guárdelo en sesión (o aplicación según sus necesidades) alcance.

Después de hacer lo anterior, sus propiedades estarán disponibles para sus archivos JSP.

Si inicializa utilizando una SessionContextListener (esto no es un código válido, pero el punto está hecho):

 

SessionContextListenser.contextInitialized(ServletContextEvent event) 
{ 
    event.getServletContext().setAttribute(); // set application scope value. 
} 
 

Si inicializa utilizando un servlet (suponiendo que extender GenericServlet):

 

YourServletClass.init() 
{ 
    getServletContext().setAttribute(); // set application scope value. 
} 
 
+0

¿Cómo guardo y acceso a propertyExposer en el alcance de la aplicación? Me gusta la idea, especialmente si puedo sondear el archivo periódicamente con mi bean. –

0

Tuve el mismo problema. Yo era capaz de resolverlo mediante la exposición del archivo de configuración en mi archivo webmvc-config.xml utilizando un paquete de recursos:

<bean class="org.springframework.context.support.ReloadableResourceBundleMessageSource" id="messageSource" p:basenames="classpath:META-INF/spring/config" p:fallbackToSystemLocale="false"/> 

entonces yo era capaz de utilizarlo en mis páginas JSP utilizando un <primavera:> etiqueta/mensajes :

<spring:message code="reactor.appKey" var="reactorAppKey" /> 
<scrip data-app-key="${reactorAppKey}"></script> 
Cuestiones relacionadas