jsf - ejemplo - ¿Qué archivos XHTML necesito poner/WEB-INF y cuáles no?
ui define (1)
Los archivos en la carpeta /WEB-INF
no son públicamente accesibles por el usuario final. Por lo tanto, no puede tener algo como http://localhost:8080/contextname/WEB-INF/some.xhtml
. Eso sería un potencial agujero de seguridad ya que el usuario final podría verlo entre otros /WEB-INF/web.xml
etc.
Sin embargo, puede usar la carpeta /WEB-INF
para colocar archivos de plantillas maestras, incluir archivos y archivos de etiquetas. Por ejemplo, la siguiente plantilla cliente page.xhtml
que se encuentra fuera /WEB-INF
y es accesible desde http://localhost:8080/contextname/page.xhtml
:
<ui:composition template="/WEB-INF/templates/template.xhtml"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
>
<ui:define name="content">
...
<ui:include src="/WEB-INF/includes/include.xhtml" />
...
</ui:define>
</ui:composition>
La ventaja de colocar plantillas maestras e incluir archivos en /WEB-INF
es que el usuario final no podrá abrirlas directamente ingresando / adivinando su URL en la barra de direcciones del navegador. Las páginas normales y los clientes de plantilla que se pretende acceder directamente no se deben colocar en la carpeta /WEB-INF
.
Dicho sea de paso, tampoco se supone que los archivos de componentes compuestos sean de acceso público, sin embargo, por su especificación, se requiere que se coloquen en /resources
carpeta /resources
que de forma pública es accesible por defecto. Si se asegura de que tiene acceso a todos los recursos utilizando los componentes proporcionados para que nunca sean accedidos por /resources
en URL (sino en lugar de / /javax.faces.resource
), puede agregar la siguiente restricción a web.xml
para bloquear todo el acceso público a la carpeta /resources
:
<security-constraint>
<display-name>Restrict direct access to the /resources folder.</display-name>
<web-resource-collection>
<web-resource-name>The /resources folder.</web-resource-name>
<url-pattern>/resources/*</url-pattern>
</web-resource-collection>
<auth-constraint />
</security-constraint>
Después de estas preguntas:
- https://stackoverflow.com/questions/8589315/jsf2-dynamic-template
- Ui dinámico: incluir
- ¿Cómo puedo recuperar un objeto en @WindowScoped?
- ¿Cómo puedo verificar si un objeto almacenado con @WindowScoped está almacenado correctamente?
- Caras de ICE y error en la creación de un bean en WindowScoped
que escribí todo para resolver un problema "estúpido" para el marco JSF2, el hecho de que no puedo vincular directamente a una página almacenada en una subcarpeta /WEB-INF
. Después de eso investigué un poco sobre Google y Stackoverflow, sabría algo: ¿cómo estructurar un proyecto web JSF2?
En particular, ¿dónde exactamente pongo las páginas XHTML?