javax.el.ExpressionFactory.newInstance() 在 Jetty 上找不到,Java 7
javax.el.ExpressionFactory.newInstance() not found on Jetty and Java 7
我有这个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>
当我导航到此页面时,出现下一个错误:
java.lang.NoSuchMethodError: javax.el.ExpressionFactory.newInstance()Ljavax/el/ExpressionFactory;
at org.apache.jasper.compiler.JspUtil.getExpressionFactory(JspUtil.java:1182)
at org.apache.jasper.compiler.JspUtil.validateExpressions(JspUtil.java:644)
at org.apache.jasper.compiler.Validator$ValidateVisitor.visit(Validator.java:752)
at org.apache.jasper.compiler.Node$ELExpression.accept(Node.java:946)
at org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2291)
at org.apache.jasper.compiler.Node$Visitor.visitBody(Node.java:2341)
at org.apache.jasper.compiler.Node$Visitor.visit(Node.java:2347)
at org.apache.jasper.compiler.Node$Root.accept(Node.java:498)
at org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2291)
[...]
执行此页面的环境是Java7和Jetty。
如果我删除 ${contextPath} 工作正常。
为什么我有这个错误?
此致
错误的原因是类路径中有 2 个不同的 EL 语言 jar。
- EL 版本 2.1 是您的 Web 应用程序正在积极使用的版本,也是导致错误的原因(该方法在 EL 2.1 中不存在)
- EL 2.2 版是您的网络应用程序需要为
javax.el.ExpressionFactory.newInstance()
使用的版本,因为该方法是在 EL 2.2 中引入的
确保您使用的是正确版本的 EL 库,并且您的网络应用程序中没有多个版本
此外,为什么不直接使用...
<link type="text/css" rel="stylesheet"
href="${pageContext.request.contextPath}/css/styles.css"/>
并跳过您正在使用的整个 <c:set>
? (无论如何,您选择完全限定的 URI 是个坏主意)
我有这个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>
当我导航到此页面时,出现下一个错误:
java.lang.NoSuchMethodError: javax.el.ExpressionFactory.newInstance()Ljavax/el/ExpressionFactory;
at org.apache.jasper.compiler.JspUtil.getExpressionFactory(JspUtil.java:1182)
at org.apache.jasper.compiler.JspUtil.validateExpressions(JspUtil.java:644)
at org.apache.jasper.compiler.Validator$ValidateVisitor.visit(Validator.java:752)
at org.apache.jasper.compiler.Node$ELExpression.accept(Node.java:946)
at org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2291)
at org.apache.jasper.compiler.Node$Visitor.visitBody(Node.java:2341)
at org.apache.jasper.compiler.Node$Visitor.visit(Node.java:2347)
at org.apache.jasper.compiler.Node$Root.accept(Node.java:498)
at org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2291)
[...]
执行此页面的环境是Java7和Jetty。
如果我删除 ${contextPath} 工作正常。
为什么我有这个错误?
此致
错误的原因是类路径中有 2 个不同的 EL 语言 jar。
- EL 版本 2.1 是您的 Web 应用程序正在积极使用的版本,也是导致错误的原因(该方法在 EL 2.1 中不存在)
- EL 2.2 版是您的网络应用程序需要为
javax.el.ExpressionFactory.newInstance()
使用的版本,因为该方法是在 EL 2.2 中引入的
确保您使用的是正确版本的 EL 库,并且您的网络应用程序中没有多个版本
此外,为什么不直接使用...
<link type="text/css" rel="stylesheet"
href="${pageContext.request.contextPath}/css/styles.css"/>
并跳过您正在使用的整个 <c:set>
? (无论如何,您选择完全限定的 URI 是个坏主意)