Подтвердить что ты не робот

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

Я новичок в JSP и использую язык Expression. Я использую Eclipse Galileo с версией 2.5 и сервером Tomcat 6. Я просто хочу спросить, что мой простой язык выражений не печатает vale, как если бы я писал ${1>2}, который предположил бы дать false, но он отображает ${1>2} только тогда, когда он отображает страницу. Но когда я использую <c:out value="${1>2}"/>, он корректно печатает false. Я думаю, что есть проблема с библиотекой тегов. Пожалуйста, предложите мне причину этого. Я даю образец кода для этого, чтобы вы могли понять, в чем я ошибаюсь: -

<%@ 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 для текста шаблона не работает.

4b9b3361

Ответ 1

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

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

  • Сервер приложений, о котором идет речь, не поддерживает JSP 2.0.
  • web.xml не объявляется как Servlet 2.4 или выше.
  • @page настроен с помощью isELIgnored=true.
  • Web.xml настроен с <el-ignored>true</el-ignored> в <jsp-config>.

В вашем конкретном случае 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 файлы, зависящие от приложений, в ваш webapp WEB-INF/lib или, что еще хуже, JRE/lib.

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

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

Ответ 2

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

Ответ 3

В моем случае я сгенерировал webapp генератором архетипа maven, я использую maven-archetype-webapp. Мне нужно изменить две вещи:

  • в web.xml, измените голову на:

    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd "version =" 2.5" >

  • по умолчанию, eclipse сгенерировал файл jsp с головой:

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

Просто удалите его.

Ответ 4

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

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

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

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

Ответ 5

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

Итак, очевидно, что плагин tomclat eclipse имеет проблемы с <!DOCTYPE html>?!