为什么/ WEB-INF文件夹中的JSP页面没有编译?

时间:2012-11-17 16:01:02

标签: jsp java-ee jspinclude

美好的一天,我是初学者,学习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

1 个答案:

答案 0 :(得分:3)

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

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

这就是JSP 片段段的内容,因为它应该是静态包含的,所以编译它没有意义。

以下是规范的说法:

  

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

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

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