3

在一个 Java EE 项目中,我将所有库WAR/WEB-INF/libEAR/lib.

打开一个JSP,现在我得到这个错误:


Struts 检测到未处理的异常:
消息:
找不到文件“/struts-tags”
文件:org/apache/jasper/compiler/DefaultErrorHandler.java
行号:51

Stacktraces
org.apache.jasper.JasperException: File "/struts-tags" not found
...........
...........

如何解决这个问题?

4

1 回答 1

5

将库从 WAR 移动到 EAR 可能非常有用,例如,如果您在一个 EAR 中有多个 WAR*,以避免库的冗余。
* 注意:Struts2 中存在多个 WAR,在某些应用服务器中可能会遇到问题:更多信息请阅读官方文档


要使Skinny WAR(没有库的 WAR)工作,条件是:

  1. WARMETA-INF/MANIFEST.MF必须包含链接您的库的 Class-Path 属性:

    Class-Path: lib/struts2-core-2.3.15.2.jar 
                lib/xwork-core-2.3.15.2.jar     
                lib/all_your_libraries_here...
    
  2. EARapplication.xml必须包含:

    <library-directory>lib</library-directory>.

在 Maven 上实现这个条件,不需要在 EAR 的 POM.xml 中声明每个 WAR 的 POM.xml 库的依赖关系,就可以使用这个神奇的技巧

也就是说,问题中报告的问题是由于TLD仅在 WAR 上执行查找,EAR 超出范围 (AFAIK,无法在 EAR 中查找 TLD,但我想被证明是错误的)

解决方案:

提取struts-tags.tldfrom struts2-core-2.3.x.x.jar,并将其放在(每个)WAR/WEB-INF 文件夹下。 这与 JAR 中的任何类型的 TLD 文件有关,不仅与 Struts2 有关。

在 JSP 中:

<%@ taglib prefix="s" uri="/WEB-INF/struts-tags.tld" %>
于 2013-10-15T12:12:35.867 回答