Servlet 3.0 + JSTL + Struts 2 + Tiles 2问题

时间:2014-06-26 15:33:35

标签: java servlets jstl tiles

在Servlet 3.0,Struts 2和Tiles 2应用程序中使用JSTL是否存在任何已知问题?

请考虑以下代码段:

<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>

只要我们的web.xml将应用程序定义为Servlet 2.4应用程序,这将导致生成CSS链接列表并正常工作。

但是,当更改为使用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}表达式<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"> 没有得到解决,所以我假设使用表达式或JSTL已经从Servlet 2.4更改为3.0或者是库/配置问题。

如何解决该问题的任何想法或建议?

工作配置:

  • JBoss 7.2.0
  • Struts 2.3.16.x
  • Tiles 2.2.2
  • JSTL 1.2
  • Servlet / WebApp 2.4

配置损坏:

  • JBoss 7.2.0
  • Struts 2.3.16.x
  • Tiles 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的负责人:

{{1}}

更新

进一步的测试似乎暗示了包装,即当应用程序被部署为打包的ear文件时,它在Windows和Linux上都不起作用 - 同时将应用程序部署为爆炸的耳朵它可以工作至少在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实现,这自然不会#&# 39; t支持Servlet 3.0。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

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