我们正在尝试将我们的Java Web应用程序从Tomcat 5.5服务器迁移到更现代的Tomcat 6.0.24服务器,但我们在使用JSP EL时遇到了一些问题。
服务器无法识别XML标记文件中的表达式,只是将它们呈现为文本(如下例所示)。 有什么想法吗?
<object id="${id}"
classid="java:${code}.class"
type="application/x-java-applet;version=1.5"
archive="${archive}" codebase="${codebase}"
height="${height}" width="${width}" >
<param name="code" value="${code}" />
<param name="codebase" value="${codebase}" />
<param name="archive" value="${archive}" />
<param name="type" value="application/x-java-applet;version=1.5"/>
<param name="mayscript" value="true" />
<param name="cache_archive" value="wetorrent.jar,weupnp.jar" />
<param name="cache_version" value="0.0.0.17,0.0.0.17" />
<strong>
<span style="cursor: pointer" onclick="window.open('http://www.java.com/','_blank','toolbar=1,scrollbars=1,location=1,statusbar=1,menubar=1,resizable=1');">
This browser does not have a Java Plug-in.<br />
Get the latest Java Plug-in here.</span>
</strong>
</object>
奇怪的是,在包含标签EL表达式的JSP中,表现非常完美。
我甚至尝试在.tag文件中设置isELIgnored="false"
属性,但是我收到了这个错误:
Tag指令:使用不同的值多次出现isELIgnored非法(old:true,new:false)
旧的(真实)价值来自哪里?我们从未指明过。
其他一些信息:
始终包含taglib(在.jsp和.tag文件中) &lt;%@ taglib uri =“http://java.sun.com/jsp/jstl/core”prefix =“c”%&gt;
我们将standard.jar
和jstl.jar
放在服务器的lib/
目录中。
web.xml
从以下行开始:
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
答案 0 :(得分:4)
Tomcat 6.0是一个Servlet 2.5&amp; JSP 2.1容器。首先,尝试使用以下<web-app>
开始标记:
<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">
此外,如果您正在使用JSTL,请不要在Tomcat的lib
目录中安装JAR,将它们保存在应用程序的WEB-INF\lib
目录中。顺便说一句,从JSP 2.0开始,EL是JSP本身的一部分,因此评估时不需要JSTL。
答案 1 :(得分:3)
由于它适用于JSP但不适用于标记,因此如果你有jsp-version元素可能是原因,你也可以检查.tld:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee" version="2.0">
<tlib-version>2.0</tlib-version>
<jsp-version>1.2</jsp-version>
只需删除jsp-version元素。
答案 2 :(得分:2)
这是Tomcat中的一个错误。我在这里提交了一个错误报告:https://issues.apache.org/bugzilla/show_bug.cgi?id=52931
要解决此问题,只需将属性“jspversion”留空,就像@Ceren建议的那样。
答案 3 :(得分:0)
你确定你有JSTL 1.2罐吗?您需要使用该版本来识别${foo}
而不考虑我认为的<c:out/>
。