我正在寻找使用等效的 PHP 包含 + 开关功能创建简单 JSP 网站的帮助/建议。
目标是我希望能够在一个主页中的多个 JSP 包含页面之间切换。
上述“功能”的最简单形式是什么?
我正在寻找使用等效的 PHP 包含 + 开关功能创建简单 JSP 网站的帮助/建议。
目标是我希望能够在一个主页中的多个 JSP 包含页面之间切换。
上述“功能”的最简单形式是什么?
那里你有<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
仅返回部分内容(待定包含的页面)。
希望这可以帮助。
尝试
<% if ( expression1 ) { %>
<%@ include file="file1.jspf" %>
<% } else if(expression2) { %>
<%@ include file="file2.jspf" %>
<% } %>
或者,如果您可以选择,请查看 JSF2 和/或 Facelets。它具有更强大的模板功能。