Question
Je suis à la recherche de l'aide / conseils à la création de site JSP simple en utilisant équivalent de PHP include + fonction de commutation.
Le but est que je veux être en mesure de basculer entre plusieurs JSP comprend des pages dans une page principale.
Quelle serait la forme ci-dessus « fonction » la plus simple possible?
La solution
Il vous <jsp:include>
. Vous pouvez utiliser EL pour spécifier l'attribut page
.
Créez un fichier /WEB-INF/main.jsp
qui ressemble à:
<!doctype html>
<html lang="en">
<head>
<title>Title</title>
</head>
<body>
<jsp:include page="${page}" />
</body>
</html>
Vous pouvez contrôler la valeur ${page}
avec l'aide d'un servlet contrôleur de page. Quelque chose comme:
public class PageController extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setAttribute("page", "/WEB-INF" + request.getPathInfo());
request.getRequestDispatcher("/WEB-INF/main.jsp").forward(request, response);
}
}
Plan du servlet web.xml
comme suit:
<servlet>
<servlet-name>pageController</servlet-name>
<servlet-class>com.example.PageController</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>pageController</servlet-name>
<url-pattern>/page/*</url-pattern>
</servlet-mapping>
De cette façon, le servlet est accessible par http://example.com/context/page/foo.jsp
et dans cet exemple URL il sera alors obtenir /foo.jsp
du pathinfo et définir ainsi l'attribut page
avec la valeur /WEB-INF/foo.jsp
afin qu'il soit disponible en ELAS ${page}
afin que le jsp:include
sait ce qu'il devrait inclure. Pas besoin de scriptlets désagréables ou des instructions switch.
Dans le /WEB-INF/foo.jsp
vous pouvez simplement écrire HTML comme s'il est placé dans la balise HTML <body>
.
Notez que les fichiers JSP sont placés dans /WEB-INF
, cela se fait de manière à empêcher un accès direct par URL afin que les utilisateurs ne peuvent pas les demander sans passer par le contrôleur de la page, comme par exemple http://example.com/context/foo.jsp
qui renvoie uniquement le contenu partiel ( la page à être-inclus).
Hope this helps.
Autres conseils
Essayez
<% if ( expression1 ) { %>
<%@ include file="file1.jspf" %>
<% } else if(expression2) { %>
<%@ include file="file2.jspf" %>
<% } %>
Ou, si vous avez la possibilité, consultez JSF2 et / ou Facelets. Il a des capacités de création de modèles beaucoup plus puissants.