javax.servlet.ServletException: File "/xml/hyperLinkList.jsp" not found

报错信息如下:大家集思广益

后来我找到报错的原因了:

<jsp:include page="${pageContext.request.contextPath}/hyperLinkList.jsp"></jsp:include>这句话导致的报错,原因就是这里使用了EL表达式,${pageContext.request.contextPath}这个EL表达式导致报错的,因为<jsp:include page="${pageContext.request.contextPath}/hyperLinkList.jsp"></jsp:include>这句话是写在home.jsp页面中的,


而我们知道jsp最终会转译成一个Servlet,我们可以去看看home.jsp页面转译后的Servlet。在tomcat目录\work\Catalina\localhost\你的项目名称\org\apache\jsp目录下,可以找到home.jsp页面转译后的这个Servlet,名字叫home_jsp.java。


打开home_jsp.java这个文件,可以看到下面的代码,home.jsp页面中的<jsp:include page="${pageContext.request.contextPath}/hyperLinkList.jsp"></jsp:include>这句话被转译就会下面的这行代码,如图:用的是PageContextImpl.proprietaryEvaluate(

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


所以说我猜测,应该是这个${pageContext.request.contextPath}导致的报错,我估计是在把home.jsp转译成Servlet的时候,只要是出现了EL表达式的地方,最终解析完成后都会给出现了EL表达式的地

方的2边都加上双引号(&quot;) ,这才导致了File &quot;/xml/hyperLinkList.jsp&quot; not found文件路径找不到的问题。${pageContext.request.contextPath}这句话是得到项目名称,你也可以理解成项目的根目录,有些人叫虚拟路径。

我的这个项目名称叫做xml,所以${pageContext.request.contextPath}这句话就得到了/xml ,所以${pageContext.request.contextPath}/hyperLinkList.jsp这句话最终转译就是/xml/hyperLinkList.jsp

就像我上面猜测的那样,

在把home.jsp转译成Servlet的时候,只要是出现了EL表达式的地方,最终解析完成后都会给出现了EL表达式的地

方的2边都加上双引号(&quot;) ,所以最终就转译成了&quot;/xml/hyperLinkList.jsp&quot;这个路径了,而我们项目中根本就没有叫&quot;/xml/hyperLinkList.jsp&quot;这个名字的页面!这就是报错的原因,这是我的猜测!不一定就是这样,还请高手指教!谢谢!

接下来我们要做的就是,去掉${pageContext.request.contextPath}这个EL表达式,OK,我们改成

<jsp:include page="/hyperLinkList.jsp"></jsp:include>


转译后如下图:很明显啊,去掉${pageContext.request.contextPath}这个EL表达式后,转译之后用的类都不同了,

如下图用的是JspRuntimeLibrary.include(


然后我们再在浏览器中打开home.jsp页面就不会报错了!


注意:
include指令不支持EL表达式- <%@include file="${pageContext.request.contextPath}/hyperLinkList.jsp"%>
种写法不支持,
会报错HTTP Status 500 - /testInclude.jsp (line: 50, column: 2) 

File "${pageContext.request.contextPath}/hyperLinkList.jsp" not found

include动作使用EL表达式容易出错,-
<jsp:include page="${pageContext.request.contextPath}/hyperLinkList.jsp"></jsp:include>这
种写法会报错HTTP Status 500 - javax.servlet.ServletException: 
File &quot;/xml/hyperLinkList.jsp&quot; not found


include动作(jsp:include)是支持EL表达式的写法的,但
<jsp:include page="${pageContext.request.contextPath}/SaveData2"></jsp:include>这种写Servlet路径的写法解析后会多
出一个项目名路径出来,java.io.FileNotFoundException: 
The requested resource (/xml/xml/SaveData2) is not available 最终导致找不到文件

include动作(jsp:include)的page属性支持jsp,html和Servlet路径写法
而include指令(@include)的file属性只支持jsp,html这种页面,不支持Servlet路径,也不支持EL表达式的写法

include(包含)中使用EL表达式,大家一定要多加注意和小心

type Exception report

message javax.servlet.ServletException: File &quot;/xml/hyperLinkList.jsp&quot; not found

description The server encountered an internal error that prevented it from fulfilling this request.

exception

org.apache.jasper.JasperException: javax.servlet.ServletException: File &quot;/xml/hyperLinkList.jsp&quot; not found
	org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:585)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:455)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
	org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

root cause

javax.servlet.ServletException: File &quot;/xml/hyperLinkList.jsp&quot; not found
	org.apache.jasper.servlet.JspServlet.handleMissingResource(JspServlet.java:412)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:379)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
	org.apache.jasper.runtime.JspRuntimeLibrary.include(JspRuntimeLibrary.java:954)
	org.apache.jsp.home_jsp._jspService(home_jsp.java:246)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
	org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

note The full stack trace of the root cause is available in the Apache Tomcat/7.0.53 logs.


Apache Tomcat/7.0.53


  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 这是一个Java异常,表示找不到javax.servlet.jsp.jstl.core.LoopTag类。这通常是由于缺少相关的JAR文件或类路径配置错误引起的。需要检查项目的依赖项和类路径配置,确保所有必需的类和库都正确地包含在项目中。 ### 回答2: 这个错误提示是网页上出现的常见问题,其中javax.servlet.ServletException是一个Java程序的概念,是Servlet类库(Java EE)中的一部分。而java.lang.NoClassDefFoundError则是Java语言中的一个异常,意思是找不到指定的类。在这种情况下,指的是缺少javax.servlet.jsp.jstl.core.LoopTag,这是JavaServer Pages标准标记库(JSTL)的一部分,用于在JSP页面上执行循环操作。如果Servlet引擎(比如Tomcat)无法找到这个JSTL类,就会报错。 有可能原因是JSTL包没有正确地添加到项目中。要在程序中正常使用JSTL,需要先引入和配置相应的库文件。一般来说,将JSTL包复制到Web应用程序的WEB-INF/lib目录下,可以让Servlet引擎在启动时自动加载和注册JSTL标记库。如果没有在项目中正确地添加JSTL,就会导致找不到相应的类,从而报错。 另一个可能的原因是版本不兼容。如果程序使用了过时的JSTL版本,或者JSTL版本与Web应用程序使用的Servlet容器不兼容,都有可能导致类无法找到。为了避免这种问题,可以在使用JSTL之前,查看Java EE和Servlet容器的兼容性,以确保使用的是正确的JSTL版本。 总之,如果遇到javax.servlet.ServletException: java.lang.NoClassDefFoundError: javax/servlet/jsp/jstl/core/LoopTag这样的错误,要先检查相应的JSTL库文件是否正确安装和配置,以及JSTL版本与Servlet容器的兼容性是否正确。只要解决了这些问题,就可以顺利运行程序。 ### 回答3: 该错误提示通常出现在 Java Web 应用程序中,它表示在尝试使用 JSTL Core 标签库时,出现了未找到该类的错误。这通常是因为在应用程序部署时,没有正确地配置或添加必要的 JSTL Core 标签库所需的 jar 文件。 为了解决这个问题,可以遵循以下步骤: 1. 查看运行环境中是否存在必要的 JSTL Core jar 文件,如果没有,则需要下载并添加到项目的 classpath 中。可以从官方网站上下载 JSTL Core jar 文件。 2. 检查项目的 web.xml 文件是否已正确地配置了 JSTL Core 标签库。确保在该文件中包含以下代码: <web-app> ... <jsp-config> <taglib> <taglib-uri>http://java.sun.com/jsp/jstl/core</taglib-uri> <taglib-location>/WEB-INF/lib/jstl-core-1.2.jar</taglib-location> </taglib> </jsp-config> ... </web-app> 3. 检查 JSTL Core 标签库是否被正确地包含在 JSP 页面中。可以使用以下代码确保其正确包含: <%@ taglib prefix=&quot;c&quot; uri=&quot;http://java.sun.com/jsp/jstl/core&quot; %> 4. 检查项目的类路径是否正确设置。如果没有正确地配置类路径,也会导致找不到 JSTL Core 类的错误。可以使用以下命令来检查类路径: echo $CLASSPATH 如果类路径未正确设置,则需要手动设置类路径,或使用 IDE 工具来完成。 最后,如果以上步骤均未解决问题,则可以尝试卸载和重新安装 Web 服务器,并确保正确配置和部署应用程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值