1

美好的一天,我是学习 Jave EE 的初学者。我在 doGet 方法中创建了一个 servlet(控制器)VersionOverview.java,其中包含以下代码:

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>

当我打开页面 /versions(映射到上面的 servlet)时,似乎没有编译 organization-filter.jspf,因为我可以在其中看到以下文本,而不是名为 org_name 的空白输入字段:

<%= request.getAttribute(

如果我在 versions.jsp 中更改包含指令,如下所示,它将开始工作:

<div id="content">
  <%@include file="/WEB-INF/jspf/organization-filter.jspf" %>
  ...
</div>

请告知为什么当我使用 jsp:include 时它不起作用。先感谢您。沃杰科技

4

1 回答 1

3

jspf 文件是一个应该被静态包含的文件,使用 include 指令:

<%@ include file="someFile.jspf" %>

这就是JSP分段段是,并且由于它应该被静态包含,因此编译它没有意义。

这是规范所说的:

默认情况下,扩展名 .jsp 表示顶级 JSP 文件。我们建议但不强制区分顶级 JSP 文件(由客户端直接调用或由另一个页面或 servlet 动态包含)和静态包含的段,以便:

  • .jsp 扩展名仅用于与顶级 JSP 文件对应的文件,在处理时形成 JSP 页面。
  • 静态包含的段使用任何其他扩展。由于包含的段在本规范的过去版本中被称为“JSP 片段”,因此提供了扩展名 .jspf 作为建议。出于一致性原因,仍然建议使用此扩展,尽管它们现在称为“jsp 段”。

如果要动态包含它,则它必须具有.jsp扩展名。但在这种情况下,我不明白你为什么不使用静态包含。

于 2012-11-17T16:12:32.390 回答