包含无效的表达式:javax.el.E​​LException:

时间:2013-07-31 19:37:48

标签: java jsp jstl el

运行时错误:

index.jsp(12,8) PWC6038: "${sqlStatement == null}" contains invalid expression(s):
javax.el.ELException: Unable to find ExpressionFactory of type:
    org.apache.el.ExpressionFactoryImpl
    org.apache.jasper.JasperException: : javax.el.ELException: Unable to find ExpressionFactory of type: org.apache.el.ExpressionFactoryImpl

问题:

  1. 我该如何调试?
  2. 找不到类型的ExpressionFactory:org.apache.el.E​​xpressionFactoryImpl< - 这是什么意思?
  3. 这就是我所拥有的

    • NetBeans IDE 7.3
    • Tomcat 7.0
    • MySql连接

    这是Murach的书中的一个简单的SQL网关

    的index.jsp

    <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 
    
        <c:if test="${sqlStatement == null}">
            <c:set var="sqlStatment" value="select * from User" />
        </c:if>
    
        <h1>The SQL Gateway</h1>
        <p>Enter an SQL statement and click the execute button. Then, information about the<br/>
        statement will appear at the bottom of this page.
        </p>
    
        <p><b>SQL Statement:</b></p>
    
        <form action="SqlGateway" method="POST">
    
            <textarea name="sqlStatement" cols="60" rows="8">${sqlStatement}</textarea>
            <br/><br/>
            <input type="submit" value="Execute">
    
        </form>
    
        <p><b>SQL result:</b></p>
        <p>${sqlResult}</p>
    

    的web.xml

        <servlet>
        <servlet-name>SqlGatewayServlet</servlet-name>
        <servlet-class>sql.SqlGatewayServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>SqlGatewayServlet</servlet-name>
        <url-pattern>/SqlGateway</url-pattern>
    </servlet-mapping>
    

    我认为servlet没有任何问题,但是如果你需要我发布它,请告诉我。

1 个答案:

答案 0 :(得分:1)

  

我的el-api.jar文件可能有问题吗

您应该在您的webapp /WEB-INF/lib中包含任何特定于servletcontainer的JAR文件。特定于Servletcontainer的JAR文件应该由servlet-container本身提供。

查看Tomcat的/lib文件夹,它已经提供了内部库,JSP,Servlet和EL库。您无需通过您的webapp提供任何服务。如果仍然这样做,运行时类路径可能最终会出现灾难,因为存在重复的不同版本库。在您的特定情况下,您可能通过webapp提供了一个随机下载的EL API,它与运行时类路径中找到的EL impl不匹配,因此无法通过抽象工厂模式找到正确的impl。

因此,如果您在/WEB-INF/lib中删除了特定于servletcontainer的JAR,那么一切都应该很好。 /WEB-INF/lib应包含库,这些库特定于webapp本身,并且尚未由servletcontainer提供。

另见: