jsp:包括不使用Expression Language(JSP版本2.5,启用EL)

mas*_*san 3 jsp expression include

我读过: JSP中的表达式语言无法正常工作, 但略有不同.

使用EL进行引用文件的工作原理如下.

   <link rel="stylesheet" type="text/css" 
href="${pageContext.request.contextPath}/css/global.css"/>
Run Code Online (Sandbox Code Playgroud)

但是当尝试使用带有EL表达式的JSP include标记时:

<jsp:include page="${pageContext.request.contextPath}/header.jsp" />
Run Code Online (Sandbox Code Playgroud)

这将返回http 500.

org.apache.jasper.JasperException: javax.servlet.ServletException: File &quot;/head_first/header.jsp&quot; not found
 org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:527)
 org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:401)
 org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
 org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
 javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
Run Code Online (Sandbox Code Playgroud)

我也确保启用EL.

<%@ page isELIgnored ="false" %>
Run Code Online (Sandbox Code Playgroud)

我的tomcat版本是6.0,web.xml定义JSP是2.5

<web-app xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    version="2.5">
Run Code Online (Sandbox Code Playgroud)

有没有人知道为什么EL在jsp:include标签中使用时不能正常工作?

Bal*_*usC 6

EL工作正常.上下文路径已打印.但是您不需要jsp:include page具有上下文路径的前缀.它已经隐含地相对于上下文路径.它是不可能包含来自其他上下文的文件.您的方法最终会/head_first/head_first/include.jsp被包含在文件中,因此不存在.