Выражения 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?
Спасибо заранее...
Ответы
Ответ 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>
Ответ 2
Вы уверены, что вы включили библиотеку JSTL в Tomcat или в папку вашего веб-приложения lib?
Эти ссылки помогут вам:
Как настроить Tomcat для работы с JSTL
Как ссылаться и использовать jstl в своем веб-приложении
Ответ 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/