在Jetty和Java 7上找不到javax.el.ExpressionFactory.newInstance()

在Jetty和Java 7上找不到javax.el.ExpressionFactory.newInstance(),java,jsp,jetty,el,Java,Jsp,Jetty,El,我有一个JSP: <%@ page pageEncoding="UTF-8" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <c:set var="contextPath" value="http://localhost:8000/"/> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3

我有一个JSP:

<%@ page pageEncoding="UTF-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<c:set var="contextPath" value="http://localhost:8000/"/> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <meta http-equiv="X-UA-Compatible" content="IE=Edge" />

        <link type="text/css" rel="stylesheet" href="${contextPath}/css/styles.css"/>
</head>

<body>
    <!-- some html -->
</body>
执行此页面的环境是Java7和Jetty

如果我删除${contextPath}就可以了

为什么我会有这个错误


最好的问候

导致错误的原因是类路径中有两个不同的EL语言jar

  • EL 2.1版是您的Web应用程序正在积极使用的版本,也是导致错误的原因(EL 2.1中不存在该方法)
  • EL 2.2版是您的Web应用程序需要用于
    javax.EL.ExpressionFactory.newInstance()
    ,因为该方法是在EL 2.2中引入的
确保您使用的是正确版本的EL-lib,并且您的webapp中没有多个版本的EL-lib

还有,为什么不直接使用

<link type="text/css" rel="stylesheet"
      href="${pageContext.request.contextPath}/css/styles.css"/>


并跳过您正在使用的整个
?(无论如何,您选择完全限定的URI是个坏主意)

非常有效。问题是jsp库是像提供的那样添加的,jetty插件没有添加这个库
<link type="text/css" rel="stylesheet"
      href="${pageContext.request.contextPath}/css/styles.css"/>