【发布时间】:2014-06-26 15:33:35
【问题描述】:
在 Servlet 3.0、Struts 2 和 Tiles 2 应用程序中使用 JSTL 是否存在任何已知问题?
考虑以下 sn-p:
<tiles:useAttribute id="list" name="importCss" classname="java.util.List" />
<c:forEach var="item" items="${list}">
<link rel="stylesheet" type="text/css" href="${item}.css" media="all"/>
</c:forEach>
这将导致生成一个 CSS 链接列表,只要我们的 web.xml 将应用程序定义为 Servlet 2.4 应用程序,它就可以正常工作。
但是,当更改为使用 Servlet 3.0 时,我们在访问页面时会收到以下错误:
JBWEB000236: Servlet.service() for servlet default threw exception: java.io.FileNotFoundException: \
JBWEB000088: The requested resource (/application/WEB-INF/jsp/templates/${item}) is not available
这意味着在 <link rel="stylesheet" type="text/css" href="${item}.css" media="all"/> 中,表达式 ${item} 没有得到解决,所以我假设使用表达式或 JSTL 已从 Servlet 2.4 更改为 3.0,或者存在库/配置问题。
有什么想法或建议可以解决这个问题吗?
工作配置:
- JBoss 7.2.0
- Struts 2.3.16.x
- 瓷砖 2.2.2
- JSTL 1.2
- Servlet/WebApp 2.4
损坏的配置:
- JBoss 7.2.0
- Struts 2.3.16.x
- 瓷砖 2.2.2
- JSTL 1.2
- Servlet/WebApp 3.0(唯一改变的东西)
根据要求提供的附加信息:它似乎可以在 Windows 上运行(到目前为止,Servlet 2.4 和 3.0 都没有错误),但在 Linux 上却不行(2.4 可以工作,3.0 不行)。
根据要求,这里是 Servlet 3.0 的 web.xml 的头部:
<web-app
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="Webapp_ID" version="3.0">
更新:
进一步的测试似乎暗示了打包,即当应用程序被部署为打包的 ear 文件时,它不起作用 - 无论是在 Windows 上还是在 Linux 上 - 在将应用程序部署为爆炸的 ear 时,它至少可以工作在 Windows 上。
更新 2 [解决方案]:
原来我们的构建过程在构建打包的应用程序时包含了一个JSP预编译任务(应用程序已经从JBoss 4.2.3迁移到了7.2.0)。到目前为止,JBoss 没有抱怨预编译的 JSP,但似乎 JBoss 6+ (https://community.jboss.org/message/735536) 既不需要也不支持预编译 JSP,而且我们的 JspC 任务使用了旧的 Tomcat 5 JspC 实现,它自然不支持 Servlet 3.0 .
【问题讨论】:
-
你的操作系统是什么? Windows 还是 Linux?也请指定。你确定你的 web.xml 文件
-
@Erhun 是的,我确定,我明天可以发布相关部分。我也会添加操作系统。