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

2022-09-01 08:00:19

我是JSP的新手,使用表达式语言。我正在将Eclipse Galileo与2.5版本和Tomcat 6服务器一起使用。我只想问我的简单表达式语言不是像我写的那样打印vale,假设给出假,但它仅在呈现页面时才显示。但是当我使用它时,它正在正确打印错误。我认为标签库存在问题。请向我推荐原因,我为此提供一个示例代码,以便您可以了解我出错的地方:-${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文件夹中,我添加只是为了让我可以使用标签来显示,但我的EL模板文本不起作用。jstl.jar<c:out>


答案 1

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

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

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

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

<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 应用程序中,或者更糟糕的是,将 .WEB-INF/libJRE/lib

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

更新:根据您的更新:这些 servlet 看起来很可疑。他们到底是做什么的?解析 EL?请将其删除,然后重试。com.servlet.El


答案 2

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