EL выражения не будут выполняться в Tomcat 5.5, но работают в Tomcat 6.0.20

Я разрабатываю свое приложение, используя spring-web-mvc...

Теперь в моем контроллере он возвращается так:

  public class InterfacesManageController implements Controller {
    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception  {

    Map<String, Object> myModel = new HashMap<String, Object>();

    myModel.put("interfacesList", this.interfacesSecurityProcessor.findByAll(0, null, null, null));

    return new ModelAndView("common", "model", myModel);
}

Теперь мой JSP содержит следующий код:

<c:forEach items="${model.interfacesList}" var="prod">
     <c:out value="${prod.id}"/> <c:out value="${prod.name}"/><br><br>
</c:forEach>

Теперь, когда я выполняю это на платформе Windows, где у меня есть Tomcat 6.0.20, ognl 2.6.11, он дает мне точный вывод, который я хочу, как:

117 eth1

118 eth1

119 eth0

Но когда я развертываю war-файл на платформе Unix (Cent OS), где у меня есть tomcat 5.5, выражение ognl не выполняется и дает мне вывод, например:

${prod.id} ${prod.name}

Кто-нибудь может иметь решение, в чем должна быть проблема с версией ognl expression и tomcat version?

Заранее спасибо...

3 ответа

Решение

Но когда я развертываю war-файл на платформе Unix (CentOS), где у меня есть Tomcat 5.5, выражение EL не выполняется и выдает мне вывод, например:

${prod.id} ${prod.name}

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

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

Tomcat 5.5 - это Servlet 2.4/JSP 2.0, поэтому № 1 можно поцарапать. Я полагаю, что вы ничего не меняли в веб-приложении перед развертыванием, так что № 3 и № 4 могут быть поцарапаны. Теперь осталось #2. Возможно, вы объявили его Servlet 2.5 для Tomcat 6.0, в то время как Tomcat 5.5 понимает только Servlet 2.4. Таким образом, все превратится в беспорядок, так как Tomcat откажется от режима наименьшей совместимости. Вы должны переопределить web.xml как сервлет 2.4, чтобы он работал как в Tomcat 5.5, так и в 6.0. Декларация должна выглядеть так:

<web-app
    xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
    version="2.4">

    <!-- Here you go. -->

</web-app>

Вы уверены, что включили библиотеку JSTL либо в Tomcat, либо в папку lib своего веб-приложения?

Эти ссылки помогут вам:

Как настроить Tomcat для работы с JSTL

Как ссылаться и использовать jstl в вашем веб-приложении

Спасибо BalusC за отличный ответ. У меня была та же самая проблема, которую он диагностировал выше, и его решение помогло мне в этом. Однако я также должен был убедиться, что различные зависимости JSP и JSTL моего приложения были совместимы. В частности, я ссылался на JSTL 1.2, и эта проблема не исчезла, пока я не изменил эту зависимость на JSTL 1.1.2 (после чего мне пришлось также добавить явную зависимость от taglibs.standard:1.1.2).

Следующее сообщение в блоге предоставляет гораздо больше информации о совместимости между различными версиями: http://www.mularien.com/blog/2008/04/24/how-to-reference-and-use-jstl-in-your-web-application/

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