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 вообще не оценивается и отображается как обычный текст? Это может иметь одну или несколько из следующих причин:
- Рассматриваемый сервер приложений не поддерживает 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 можно поцарапать. Я полагаю, что вы ничего не меняли в веб-приложении перед развертыванием, так что № 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 своего веб-приложения?
Эти ссылки помогут вам:
Спасибо 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/