33

我是 JSP 新手并使用表达式语言。我正在使用带有 2.5 版和 Tomcat 6 服务器的 Eclipse Galileo。我只是想问一下,我的简单表达式语言不会像我写的那样打印 vale ${1>2},假设它会给出 false,但它 ${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 不起作用。

4

5 回答 5

55

我引用了我之前提供的关于 EL 不起作用的问题的答案:

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

  1. 有问题的应用程序服务器不支持 JSP 2.0。
  2. web.xml声明为 Servlet 2.4 或更高版本。
  3. 配置@pageisELIgnored=true.
  4. web.xml 配置为<el-ignored>true</el-ignored>in <jsp-config>

在您的特定情况下,EL 在标记库中工作,但不在模板文本中,所以我怀疑它是由第 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 发生冲突。确保您没有将任何特定于 appserver 的 JAR 文件复制到您的 webappWEB-INF/lib或者更糟糕的JRE/lib.

由于您已经在使用 Eclipse 和 Tomcat,我将回顾一下您用于这一切的开发步骤。确保您使用的是“Java EE开发人员的 Eclipse”,并且您已经将 Tomcat 实例集成到 Eclipse 的服务器视图中,并且您已经创建了一个设置为“Servlet 2.5”的动态 Web 项目,它使用了 Tomcat 实例。这样,一切都应该自动进行(Eclipse 将在构建路径本身中获取 appserver 的库并自动生成符合 Servlet 2.5 的web.xml)。

更新:根据您的更新:那些com.servlet.Elservlet 看起来很可疑。他们具体是做什么的?解析EL?删除它们并重试。

于 2010-01-30T18:44:03.377 回答
24

<%@ page isELIgnored="false" %>页面顶部的设置对我有帮助。不知道为什么这是我的问题的根源。尚不清楚为什么

于 2015-11-15T17:55:09.533 回答
12

就我而言,我通过 maven 原型生成器生成了一个 webapp,我使用 maven-archetype-webapp。我需要改变两件事:

  1. 在 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: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生成带有head的jsp文件:

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

只需将其删除。

于 2014-04-12T09:11:32.670 回答
4

BalusC 涵盖了它,但我将添加以下评论:

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

JSTL TLD命名空间应该包括一个“ jsp”(如上)。鉴于此命名空间错误可能是由于遵循旧的说明,请检查最新的文档以确保您没有在WEB-INF/lib. 许多过去是独立的技术现在都包含在容器中(EL 语言就是其中之一)。

顺便说一句,我通常会使用诸如gt代替>lt代替之<类的关键字——这对 XML 及其同类更友好。

于 2010-01-30T18:50:07.733 回答
0

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

那么显然eclipse tomcat插件有问题<!DOCTYPE html>?!

于 2015-09-07T19:52:33.203 回答