Pregunta
Estoy en busca de ayuda / consejo con la creación de sitio web sencillo utilizando JSP equivalente de PHP include + función de interruptor.
El objetivo es que quiero ser capaz de cambiar entre múltiples JSP incluyen páginas en una página principal.
¿Cuál sería la forma más simple posible de 'función' de arriba?
Solución
No tienes la <jsp:include>
. Puede usar EL para especificar el atributo page
.
Crear un archivo /WEB-INF/main.jsp
que se parecen a:
<!doctype html>
<html lang="en">
<head>
<title>Title</title>
</head>
<body>
<jsp:include page="${page}" />
</body>
</html>
Puede controlar el valor ${page}
con la ayuda de un servlet controlador página. Algo así como:
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);
}
}
Ubicación del servlet en web.xml
de la siguiente manera:
<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 esta manera el servlet es accesible a través de http://example.com/context/page/foo.jsp
y en este ejemplo URL será a continuación, obtener /foo.jsp
del pathinfo y así establecer el atributo page
con el valor /WEB-INF/foo.jsp
de modo que está disponible en EL como ${page}
para que el jsp:include
sabe lo que se Debería incluir. No hay necesidad de scriptles desagradables o sentencias switch.
En el /WEB-INF/foo.jsp
puede simplemente escribir HTML como si se coloca dentro de la etiqueta HTML <body>
.
Tenga en cuenta que los archivos JSP se colocan en /WEB-INF
, esto se hace para impedir el acceso directo por la URL para que los usuarios no pueden solicitarlos sin pasar por el controlador de la página, como por ejemplo http://example.com/context/foo.jsp
que sólo devolver el contenido parcial ( la página a ser incluido-).
Espero que esto ayude.
Otros consejos
Trate
<% if ( expression1 ) { %>
<%@ include file="file1.jspf" %>
<% } else if(expression2) { %>
<%@ include file="file2.jspf" %>
<% } %>
O, si usted tiene la opción, echa un vistazo a JSF2 y / o Facelets. Tiene capacidades de plantillas mucho más potentes.