Язык выражения в JSP не работает

Я новичок в 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 ответов

Я цитирую ответ, который я предоставил ранее, на проблему EL не работает:

Другими словами, выражение EL не оценивается? Это может иметь одну или несколько из следующих причин:

  1. Рассматриваемый сервер приложений не поддерживает JSP 2.0.
  2. web.xml не заявлен как Servlet 2.4 или выше.
  3. @page настроен с isELIgnored=true,
  4. Файл web.xml настроен с <el-ignored>true</el-ignored> в <jsp-config>,

В вашем конкретном случае EL работает в taglibs, но не в тексте шаблона, поэтому я подозреваю, что это вызвано пунктом 2. Убедитесь, что ваш web.xml объявляется как минимум Servlet 2.4. Поскольку Tomcat 6.0 поддерживает Servlet 2.5, я бы рекомендовал объявить web.xml как сервлет 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 в ваше веб-приложение WEB-INF/lib или, что еще хуже, JRE/lib,

Поскольку вы уже используете Eclipse и Tomcat, я бы рассмотрел этапы разработки, которые вы использовали для всего этого. Убедитесь, что вы используете "Eclipse для разработчиков Java EE ", интегрировали экземпляр Tomcat в представление " Серверы" Eclipse и создали динамический веб-проект со значением "Servlet 2.5", который использует экземпляр Tomcat. Таким образом, все должно происходить автоматически (Eclipse будет брать библиотеки appserver в самом пути сборки и автоматически генерировать Servlet 2.5-совместимый web.xml).

Обновление: согласно вашему обновлению: те com.servlet.El сервлеты выглядят подозрительно. Что именно они делают? Разбор EL? Удалите их и повторите попытку.

Настройка <% @ page isELIgnored = "false"%> мне помогла. Не знаю, почему это было корнем проблемы в моем случае. пока не понятно почему

В моем случае я сгенерировал веб-приложение с помощью генератора архетипов maven, я использую 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. по умолчанию затмевает сгенерированный jsp файл с заголовком:

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

Просто удали это.

BalusC покрывает это, но я добавлю эти комментарии:

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

Пространство имен TLD JSTL должно включать в себя "jsp" (как указано выше). Учитывая, что эта ошибка пространства имен может быть следствием следования старым инструкциям, проверьте самую последнюю документацию, чтобы убедиться, что вы не включили устаревшие библиотеки в WEB-INF/lib, Ряд технологий, которые раньше были отдельными, теперь включены в контейнер (язык EL - один).

Кроме того, я бы обычно использовал такие ключевые слова, как gt вместо > а также lt вместо < - это более дружественный к XML и тому подобное.

У меня была проблема, что с линией <!DOCTYPE html> в моем JSP кот, начатый с затмения, неправильно интерпретировал EL. Использование войны и копирование ее в webapps папку, а затем запуск tomcat с помощью командной строки сделал свою работу.

Поэтому очевидно, что у плагина eclipse tomcat есть проблема с <!DOCTYPE html>?!

Другие вопросы по тегам