【问题标题】:Servlet 3.0 + JSTL + Struts 2 + Tiles 2 issuesServlet 3.0 + JSTL + Struts 2 + Tiles 2 问题
【发布时间】: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

这意味着在 &lt;link rel="stylesheet" type="text/css" href="${item}.css" media="all"/&gt; 中,表达式 ${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 是的,我确定,我明天可以发布相关部分。我也会添加操作系统。

标签: java servlets jstl tiles


【解决方案1】:

这应该是权限问题,如果它适用于 Windows 而不是 Linux,请确保您具有读取 WEB-INF/lib(chmod) 或 JSTL jars 的权限。

【讨论】:

  • 我不确定是权限问题,因为我们正在部署一个包含 JSTL jar 的打包耳朵,并且使用 Servlet 2.4 似乎没有权限问题。
【解决方案2】:

使用此代码可以正常工作..

<tiles:importAttribute name="css" />
<!-- Css of specific jsp -->
<c:forEach items="${css}" var="cssfile">
    <link rel="stylesheet" href="${cssfile}">
</c:forEach>

【讨论】:

  • 感谢您的信息。但是,我猜这个代码(与我的类似)不会很好用,因为正如我在第二次更新中所说的那样,真正的问题在其他地方。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-17
  • 1970-01-01
  • 2014-06-11
  • 1970-01-01
  • 1970-01-01
  • 2011-11-17
  • 2011-05-18
相关资源
最近更新 更多