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

Выражения 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

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

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

У кого-нибудь есть решение, какова должна быть проблема с версией выражения ognl и версией tomcat?

Спасибо заранее...

4b9b3361

Ответ 1

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

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

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

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

Tomcat 5.5 - Servlet 2.4/JSP 2.0, поэтому # 1 можно поцарапать. Вы ничего не меняете в webapp перед развертыванием, я предполагаю, поэтому # 3 и # 4 могут быть поцарапаны. Теперь осталось # 2. Возможно, вы объявили его Servlet 2.5 для Tomcat 6.0, в то время как Tomcat 5.5 понимает только с помощью Servlet 2.4. Таким образом, все станет беспорядком, потому что Tomcat тогда отступит к наименее совместимому модусу. Вам необходимо обновить web.xml как Servlet 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>

Ответ 3

Спасибо 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/