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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top