visualizador usar tipos son que para los ejecutar descargar con como archivos archivo abrir java java-ee web-applications jar web-content

java - usar - Almacenar contenido web en un archivo JAR



tipos de archivos jar (6)

Un archivo de etiqueta es como un fragmento JSP que se puede colocar en un contenedor. Usar archivos de etiquetas puede ser útil, pero nunca he intentado usar imágenes, CSS, etc. en un contenedor.

¿Es posible almacenar contenido web (como JSP, HTML, imágenes, CSS, etc.) en un archivo JAR?

He estado buscando varias opciones para modularizar nuestras aplicaciones web y esta es una posibilidad.

Actualmente estamos utilizando JSF y Facelets para nuestra tecnología de visualización. Estoy pensando que es posible escribir algún tipo de resolución de vista personalizada que examine la ruta de clase en lugar de un directorio del sistema de archivos, pero no estoy seguro de que esto funcione.

¡Cualquier idea sería apreciada! :)

Actualización: probablemente debería aclarar. ¿Cómo se obtiene el contenedor web (como Tomcat) para cargar recursos de un archivo JAR? Por ejemplo, despliegue un archivo .war con mi aplicación web. Si accedo a /index.jsp, el contenedor intentará buscar en el directorio de contenido web un archivo llamado index.jsp.

¿Existe una manera fácil de configurar su propio cargador de recursos usando Tomcat o similar para que busque tanto en el classpath como en el sistema de archivos?


Absolutamente. Diablos, puede almacenar contenido directamente en un archivo WAR, que es básicamente un archivo JAR con algunos bits adicionales. Sí, es posible que necesite escribir una resolución personalizada para usar ClassLoader.getResourceAsStream, pero básicamente, dado que tiene la capacidad de generar el contenido como desee, buscarlo de un archivo jar parece perfectamente razonable. Sin embargo, querrás asegurarte de que solo obtenga un conjunto muy específico de extensiones :)


También puede usar el proyecto weblets (consulte https://weblets.dev.java.net/ ).

Almacena algunos recursos en una biblioteca JAR (como imágenes, css, javascript ...) y escribe un weblet-config.xml realmente simple. Luego, en la página JSF, puede referirlos directamente con esta sintaxis:

<h:graphicImage src="weblet://some-name/images/someimage.jpg" .../>


Si está utilizando Maven para construir su aplicación web, puede construir una GUERRA de sus recursos y superponer esa GUERRA a su WAR de la aplicación web en el momento de la construcción.

La GUERRA de recursos que contiene todos tus JSP, imágenes, CSS, etc. se conoce como "superposición", y es simplemente una dependencia en tu aplicación de web objetivo con el tipo establecido en "guerra".

Cuando empaqueta su aplicación web, el recurso WAR solo copiará sobre archivos que no estén en conflicto. Por lo tanto, si tiene un index.jsp exclusivo en su proyecto y desea usarlo en lugar de index.jsp en la superposición, simplemente inclúyalo en su aplicación web objetivo, y Maven no copiará ese recurso.

Más información sobre la página del plugin de Maven War sobre superposiciones .


Sí, es posible almacenar archivos, por ejemplo, propiedades, xml, xslt, imagen, etc. en un archivo JAR (o WAR) y extraerlos en tiempo de ejecución.

Para cargar un recurso desde su jar de despliegue, use el siguiente código.

this.getClass().getClassLoader().getResourceAsStream( filename ) ;

En un proyecto de maven, las carpetas y los archivos incluidos en los recursos se incluyen en el contenedor. El nombre de archivo es relativo a la raíz del archivo jar, por lo que "./filename.xml" coincidiría con el archivo filename.xml ubicado en "/ src / java / resources".


En Core JavaServer Faces, 3ª edición, en "Componentes compuestos de empaque en JAR" en la pág. 382, habla de empaquetar componentes compuestos en archivos JAR.

"Todo lo que tiene que hacer es colocar su componente compuesto y sus artefactos, como JavaScript, hojas de estilo o archivos de propiedades, bajo un directorio META-INF en el JAR, como se muestra en la Figura 9-14."

components.jar +-- META-INF +-- resources +-- css | +-- styles.css +-- images | +-- back.png +-- util +-- icon.xhtml +-- login.js +-- login.properties

No estoy seguro de cuán fácilmente se puede acceder a estos recursos directamente desde otras aplicaciones en comparación con los componentes compuestos contenidos.