2

我正在寻找使用等效的 PHP 包含 + 开关功能创建简单 JSP 网站的帮助/建议。

目标是我希望能够在一个主页中的多个 JSP 包含页面之间切换。

上述“功能”的最简单形式是什么?

4

2 回答 2

5

那里你有<jsp:include>。您可以使用EL来指定page属性。

创建一个/WEB-INF/main.jsp如下所示的文件:

<!doctype html>
<html lang="en">
    <head>
        <title>Title</title>
    </head>
    <body>
        <jsp:include page="${page}" />
    </body>
</html>

您可以在${page}页面控制器 servlet 的帮助下控制该值。就像是:

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);
    }

}

将此 servlet 映射web.xml如下:

<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>

通过这种方式,servlet 可以通过访问http://example.com/context/page/foo.jsp,在这个 URL 示例中,它将/foo.jsp从 pathinfo 中获取,从而设置page属性的值/WEB-INF/foo.jsp,以便它在 EL 中可用,${page}以便jsp:include知道它应该包含什么。不需要讨厌的 scriptlet 或 switch 语句。

在中,/WEB-INF/foo.jsp您可以只写下 HTML,就好像它放在 HTML<body>标记内一样。

请注意,JSP 文件放置在 中/WEB-INF,这样做是为了防止通过 URL 直接访问,以便用户在不通过页面控制器的情况下无法请求它们,例如http://example.com/context/foo.jsp仅返回部分内容(待定包含的页面)。

希望这可以帮助。

于 2009-12-19T00:12:42.580 回答
1

尝试

<%  if ( expression1 ) { %>
    <%@ include file="file1.jspf" %>
<% } else if(expression2) { %>
    <%@ include file="file2.jspf" %>
<% } %>

或者,如果您可以选择,请查看 JSF2 和/或 Facelets。它具有更强大的模板功能。

于 2009-12-19T00:05:27.740 回答