美好的一天,我是初学者,学习Jave EE。我创建了一个servlet(控制器)VersionOverview.java,它在doGet方法中包含以下代码:
RequestDispatcher view = request.getRequestDispatcher("WEB-INF/jsp/versions.jsp");
view.forward(request, response);
文件WEB-INF / jsp / versions.jsp包含以下行:
<div id="content">
<jsp:include page="/WEB-INF/jspf/organization-filter.jspf" />
...
</div>
文件/WEB-INF/jspf/organization-filter.jspf包含以下行:
<form name="organization-filter" action="versions">
<input type="text" id="org_name" name="org_name" value="<%= request.getAttribute("org_name") %>">
<br>
<input type="hidden" id="org_id" name="org_id" value="<%= request.getAttribute("org_id") %>">
<br>
<input type="submit" name="submit" value="Submit"/>
</form>
当我打开页面/版本(映射到上面的servlet)时,似乎没有编译organization-filter.jspf,因为而不是名为org_name的空白输入字段,我可以在其中看到此文本:
<%= request.getAttribute(
如果我在versions.jsp中更改include指令,如下所示,它开始工作:
<div id="content">
<%@include file="/WEB-INF/jspf/organization-filter.jspf" %>
...
</div>
当我使用jsp:include时,请告知为什么它不起作用。先感谢您。 Vojtech
答案 0 :(得分:3)
jspf文件是一个应该静态包含的文件,使用include指令:
<%@ include file="someFile.jspf" %>
这就是JSP 片段段的内容,因为它应该是静态包含的,所以编译它没有意义。
以下是规范的说法:
默认情况下,扩展名.jsp表示顶级JSP文件。我们 建议,但不要求,区分顶级JSP 文件(由客户端直接调用或动态包含 另一个页面或servlet)和静态包含的段,以便:
- .jsp extension仅用于与顶级JSP文件对应的文件, 在处理时形成JSP页面。
- 静态包含的细分使用 任何其他扩展。包含的片段称为“JSP片段” 在本规范的过去版本中,扩展名为.jspf 作为建议提供。仍然建议使用此扩展名 一致性原因,尽管它们现在被称为'jsp segment'。
如果要动态包含它,则必须具有.jsp
扩展名。但在这种情况下,我不明白为什么你不会使用静态包含。