当前位置: 首页 > 工具软件 > JSP Layout > 使用案例 >

jsp includ总结 javax.servlet.ServletException: File amp;quot;/demo/header.jsp" not found

楚嘉
2023-12-01

javax.servlet.ServletException: File amp;quot;/demo/header.jsp" not found

错误原因

<jsp:include page="${ctx}/header.jsp"></jsp:include>
${ctx}是项目名,在登录页设置<c:set var="ctx" scope="application" value="${pageContext.request.contextPath}"/>
注意:使用idea部署时不指定项目名是可以访问成功的,即${ctx}="/"

解决

使用<%@include file="/header.jsp"%>替换<jsp:include page="${ctx}/header.jsp"/>

为什么

jsp前台显示时会先转译成Servlet,然后使用javax.servlet.http.HttpServletResponse response进行前台展示

<jsp:include page="${ctx}/header.jsp"/>

<jsp:include/>使用流程

  1. 当有jsp使用<jsp:include page="${ctx}/header.jsp"></jsp:include>时,把使用者转成Servlet
  2. header.jsp先转译成Servlet
  3. 使用者Servlet中配置header.jspServlet

验证
在Tomcat下\work\Catalina\localhost下可以找到header_jsp.java文件,使用者也有对应的文件,打开可以看到

 org.apache.jasper.runtime.JspRuntimeLibrary.include(request, response, (java.lang.String) org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate("${ctx}/header.jsp", java.lang.String.class, (javax.servlet.jsp.PageContext)_jspx_page_context, null, false), out, false);

在Servlet中引用header.jsp
<%@include%>引进的是代码,把代码包含进来,而新进JSP时,会默认生成

<%@include file="/header.jsp"%>

<%@include%>使用流程

  1. jsp文件中引入header.jsp
  2. 使用者转译Servlet

查看jsp转译的文件,发现没有header_jsp.java,在使用者者中可以看到

	  out.write("\r\n");
	  ···
	  ···
	  ···
     /**
     *  header.jsp文件中的内容
     */
      out.write("</head>");

总结

区别includejsp:include
执行时间翻译阶段在请求处理阶段执行
引入的内容引入静态文本,先包含,后编译引入执行页面或servlet所生成的应答文本. 被包含的文件先编译,后包含进来,然后显示

翻译阶段:

jsp页面不能原封不动地被传送给浏览器,全部的jsp元素都必须首先由服务器进行处理。这是通过将jsp页面转达化成servlet,然后执行这个servlet来结束的。服务器需要一个jsp容器来处理jsp页面。jsp容器平常以servlet的形式来实现,这个servlet经过配置,可以处理对jsp页面的全部请求。
Jsp容器同时将jsp页面转化成servlet(称为jsp页面实现类—JSP Page implementation class),并编译这个servlet。这两步就组成了翻译阶段.

请求处理阶段:

Jsp容器除了上面提到的同时将jsp页面转化成servlet外,还同时调用jsp页面实现类以处理每个请求并产生应答.这个阶段我们就称为请求处理阶段.请求处理阶段仅执行类文档.

 类似资料: