小编典典

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

jsp

运行时错误:

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. 找不到类型为org.apache.el.E​​xpressionFactoryImpl <-的ExpressionFactory,这是什么意思?

这就是我所拥有的

  • 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没什么问题,但是如果您需要我发布它,请告诉我。


阅读 864

收藏
2020-06-10

共1个答案

小编典典

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

你应该 不是 在你的web应用程序的任何servletcontainer特定的JAR文件/WEB- INF/lib。特定于Servlet容器的JAR文件应该已经由Servlet容器本身提供了。

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

因此,如果您在中摆脱了特定于servlet容器的JAR /WEB-INF/lib,那么一切应该都很好。本/WEB-INF/lib应包含
是特定的web应用程序本身,而不是已经被servletcontainer提供的库。

2020-06-10