Quels fichiers XHTML dois-je mettre dans /WEB-INF et lesquels pas?

après ces questions:

que j'ai tout écrit pour résoudre un problème "stupide" pour le cadre JSF2, le fait que je ne peux pas lier directement à une page stockée dans un sous-dossier /WEB-INF . Après cela, j'ai fait quelques recherches sur Google et Stackoverflow, je saurais une chose: Comment puis-je structurer un projet web JSF2?

en particulier, où mettre exactement les pages XHTML?

53
demandé sur Community 2012-01-27 14:21:16
la source

1 ответов

Les fichiers

du dossier /WEB-INF ne sont en effet pas accessibles au public par enduser. Donc vous ne pouvez pas avoir quelque chose comme http://localhost:8080/contextname/WEB-INF/some.xhtml . Ce serait un risque de sécurité que l'utilisateur pourrait voir entre autres /WEB-INF/web.xml et ainsi de suite.

vous pouvez cependant utiliser le dossier /WEB-INF pour mettre des fichiers de modèles maîtres, inclure des fichiers et des fichiers de balises. Par exemple, le client de modèle suivant page.xhtml qui est placé à l'extérieur de /WEB-INF et est accessible par 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>

l'avantage de placer des modèles maîtres et inclure des fichiers dans /WEB-INF est que l'utilisateur final ne sera pas en mesure de les ouvrir directement en entrant/deviner son URL dans la barre d'adresse du navigateur. Les pages normales et les modèles de clients qui sont destinés à être consultés directement ne doivent pas être placés dans le dossier /WEB-INF .

soit dit en passant, les fichiers de composants composites ne sont pas censés être elles sont accessibles au public, mais elles doivent obligatoirement être placées dans le dossier /resources qui est par défaut accessible au public. Si vous vous assurez que vous accédez à toutes les ressources en utilisant les pour les composants fournis de sorte qu'elles ne soient jamais accessibles par /resources dans L'URL (mais plutôt par /javax.faces.resource ), alors vous pouvez ajouter la contrainte suivante à web.xml pour bloquer tout accès public au dossier /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> 
115
répondu BalusC 2017-05-23 14:54:16
la source

Autres questions sur jsf jsf-2 facelets web-inf