JSP中的表达式语言不起作用

时间:2010-01-30 18:04:07

标签: java jsp el

我是JSP新手并使用表达式语言。我正在使用Eclipse Galileo 2.5版和Tomcat 6服务器。我只是想问一下,我的简单表达式语言不打印如果我写${1>2}假设给出错误但是只有在呈现页面时才显示${1>2}。但是当我使用<c:out value="${1>2}"/>时,它正确地打印错误。我认为标签库存在问题。请建议我这样做的原因我为此提供一个示例代码,以便您可以了解我的错误: -

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
                                 "http://www.w3.org/TR/html4/loose.dtd">


<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Expression Language Example</title>
</head>
<body>

Is 1 greater than 2 using cout  :<c:out value="${1>2}"/>

Is 1 greater than 2 without using cout: ${1>2}
</body>
</html> 
根据答案

更新,以下是更多信息:

我正在显示web.xml它的样子:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:jsp="http://java.sun.com/xml/ns/javaee/jsp" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>ScriptLessJsp</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>

  <servlet>
    <description></description>
    <display-name>ElServlet</display-name>
    <servlet-name>ElServlet</servlet-name>
    <servlet-class>com.servlet.El.ElServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>ElServlet</servlet-name>
    <url-pattern>/ElServlet</url-pattern>
  </servlet-mapping>
  <servlet>
    <description></description>
    <display-name>Collections</display-name>
    <servlet-name>Collections</servlet-name>
    <servlet-class>com.servlet.El.Collections</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>Collections</servlet-name>
    <url-pattern>/go</url-pattern>
  </servlet-mapping>
</web-app>

在我的lib文件夹中,我只添加了jstl.jar,以便我可以使用<c:out>标记来显示,但我的EL模板文本无效。

5 个答案:

答案 0 :(得分:52)

我引用我之前提供的answer来解决EL无法正常工作的问题:

  

换句话说,EL表达式没有得到评估?这可能有以下一个或多个原因:

     
      
  1. 有问题的应用程序服务器不支持JSP 2.0。
  2.   
  3. web.xml未声明为Servlet 2.4或更高版本。
  4.   
  5. @page配置了isELIgnored=true
  6.   
  7. web.xml在<el-ignored>true</el-ignored>中配置了<jsp-config>
  8.   

在您的特定情况下,EL在taglib中工作,但不在模板文本中工作,所以我怀疑它是由第2点引起的。确保您的web.xml被声明为至少 Servlet 2.4 。由于Tomcat 6.0支持Servlet 2.5,我建议您将web.xml声明为Servlet 2.5:

<web-app 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    id="Your_WebApp_ID"
    version="2.5">

    <!-- Here you go. -->

</web-app>

我在此看到的另一个罕见原因是在类路径中与EL JAR发生冲突。确保您将任何特定于应用服务器的JAR文件复制到您的网络应用WEB-INF/lib中,或者更糟糕的是,JRE/lib

由于您已经在使用Eclipse和Tomcat,因此我将查看您用于此目的的开发步骤。确保您使用的是“Eclipse for Java EE 开发人员”,并且已经在Eclipse的 Servers 视图中集成了Tomcat实例,并且您已经创建了动态Web项目设置为“Servlet 2.5”,它使用Tomcat实例。这样一切都应该自动化(Eclipse将在构建路径本身中使用appserver的库并自动生成符合Servlet 2.5的web.xml)。

根据您的更新

更新:这些com.servlet.El个servlet看起来很可疑。他们究竟做了什么?解析EL?删除它们并重试。

答案 1 :(得分:11)

设置&lt;%@ page isELIgnored =“false”%&gt;帮助了我。在我的案例中,不知道为什么它是问题的根源。尚不清楚为什么呢

答案 2 :(得分:10)

在我的例子中,我使用maven archetype生成器生成了一个webapp,我使用了maven-archetype-webapp。我需要改变两件事:

    在web.xml中
  1. ,将头改为:

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns="http://java.sun.com/xml/ns/javaee" 
      xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
      xsi:schemaLocation="http://java.sun.com/xml/ns/javaee  http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
      version="2.5">
    
  2. 默认情况下,eclipse生成了带头的jsp文件:

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    
  3. 删除它。

答案 3 :(得分:4)

BalusC covers it,但我会添加以下评论:

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

JSTL TLD命名空间应包含“jsp”(如上所述)。鉴于此命名空间错误可能是由于遵循旧指令,请检查最新文档以确保您未在​​WEB-INF/lib中包含任何过时的库。过去分离的许多技术现在都包含在容器中(EL语言就是其中之一)。

顺便说一句,我通常会使用像gt instead of > and lt instead of <这样的关键字 - 这对XML及其类似的更友好。

答案 4 :(得分:0)

我遇到的问题是,在我的JSP中使用行<!DOCTYPE html>,使用eclipse启动的tomcat没有正确解释EL。使用war并将其复制到webapps文件夹,然后使用命令行启动tomcat完成了这项工作。

很明显,eclipse tomcat插件存在 <!DOCTYPE html> 的问题?!​​