web-dev-qa-db-ger.com

Ausdruckssprache in JSP funktioniert nicht

Ich bin neu in JSP und verwende die Ausdruckssprache. Ich benutze Eclipse Galileo mit Version 2.5 und Tomcat 6 Server. Ich möchte nur darum bitten, dass meine einfache Ausdruckssprache nicht das Vale druckt, wie wenn ich ${1>2} schreibe, die falsch geben soll, aber ${1>2} nur dann anzeigt, wenn die Seite gerendert wird. Aber wenn ich <c:out value="${1>2}"/> verwende, wird falsch gedruckt. Ich denke, es gibt ein Problem mit der Tag-Bibliothek. Bitte schildern Sie mir bitte den Grund dafür. Ich gebe dafür einen Beispielcode, damit Sie verstehen können, wo ich falsch liege: -

<%@ 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> 

Update Wie die Antworten zeigen, gibt es hier weitere Informationen:

Ich zeige meinen web.xml wie es aussieht:

<?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>

Und in meinem lib-Ordner habe ich nur jstl.jar hinzugefügt, sodass ich <c:out>-Tag zur Anzeige verwenden kann, aber meine EL für Vorlagentext funktioniert nicht. 

29
user262577

Ich zitiere aus einer Antwort , die ich zuvor für das Problem angegeben habe, dass EL nicht funktioniert:

Mit anderen Worten wird der EL-Ausdruck nicht ausgewertet? Dies kann eine oder mehrere der folgenden Ursachen haben:

  1. Der betreffende Anwendungsserver unterstützt JSP 2.0 nicht.
  2. Der web.xml ist nicht als Servlet 2.4 oder höher deklariert.
  3. Der @page ist mit isELIgnored=true konfiguriert.
  4. Die web.xml ist mit <el-ignored>true</el-ignored> in <jsp-config> konfiguriert.

In Ihrem speziellen Fall arbeitet EL in Taglibs, aber nicht im Vorlagentext. Daher vermute ich, dass dies durch Punkt 2 verursacht wird. Stellen Sie sicher, dass Ihr _ web.xml als mindestens Servlet 2.4 deklariert ist. Da Tomcat 6.0 Servlet 2.5 unterstützt, würde ich empfehlen, Ihren web.xml als Servlet 2.5 zu deklarieren:

<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>

Eine weitere seltene Ursache, die ich dabei gesehen habe, ist die Kollision mit EL JARs im Klassenpfad. Stellen Sie sicher, dass Sie not keine appserver-spezifischen JAR-Dateien in den WEB-INF/lib Ihrer Webapp kopiert haben, oder, noch schlimmer, den JRE/lib.

Da Sie bereits Eclipse und Tomcat verwenden, würde ich die Entwicklungsschritte überprüfen, die Sie für all dies verwendet haben. Stellen Sie sicher, dass Sie "Eclipse für Java EE - Entwickler" verwenden und die Tomcat-Instanz in die Eclipse-Ansicht Servers integriert haben und dass Sie ein Dynamic Web) erstellt haben Projekt auf "Servlet 2.5" gesetzt, wodurch die Tomcat-Instanz verwendet wird. Auf diese Weise sollte alles automatisch ablaufen (Eclipse nimmt die Bibliotheken von appserver in den Erstellungspfad selbst ein und generiert automatisch ein Servlet 2.5-kompatibles web.xml).

Update: gemäß Ihrem Update: Diese com.servlet.El-Servlets sehen verdächtig aus. Was genau machen sie? EL analysieren? Entfernen Sie sie und versuchen Sie es erneut.

51
BalusC

die Einstellung <% @ page isELIgnored = "false"%> hat mir geholfen. Ich weiß nicht, warum es in meinem Fall die Wurzel des Problems war. Noch nicht klar warum

11
Ilya Yevlampiev

.__ In meinem Fall habe ich eine Webapp mit dem Maven-Archetyp-Generator generiert, ich verwende Maven-Archetyp-Webapp. Ich muss zwei Dinge ändern:

  1. Ändern Sie in web.xml den Kopf in:

    <?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 erzeugte standardmäßig eine JSP-Datei mit dem Kopf:

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

Entferne es einfach.

9
Jimmy

BalusC deckt es ab , aber ich füge folgende Kommentare hinzu:

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

Der JSTL TLD Namespace sollte ein "jsp" (wie oben) enthalten. Da dieser Namespace-Fehler möglicherweise auf alte Anweisungen zurückzuführen ist, überprüfen Sie die neueste Dokumentation, um sicherzustellen, dass Sie keine veralteten Bibliotheken in WEB-INF/lib enthalten. Eine Reihe von Technologien, die zuvor separat waren, ist jetzt im Container enthalten (die EL-Sprache ist eine).

Ansonsten würde ich im Allgemeinen Schlüsselwörter wie gt ANSTELLE VON > UND lt ANSTELLE VON < - verwenden.

4
McDowell

Ich hatte das Problem, dass der Tomcat mit Eclipse mit der Zeile <!DOCTYPE html> in meiner JSP die EL nicht richtig interpretierte. Verwenden Sie den Krieg und kopieren Sie ihn in den Ordner webapps und starten Sie dann Tomcat mit der Befehlszeile.

Das Eclipse Tomcat-Plugin hat also ein Problem mit<!DOCTYPE html>?!

0
Niklas P