在Java EE项目中,我将所有库从WAR/WEB-INF/lib
移动到EAR/lib
。
打开JSP,现在我收到此错误:
Struts检测到未处理的异常:
消息:
文件“/ struts-tags”未找到
文件:org / apache / jasper / compiler / DefaultErrorHandler.java
行号:51Stacktraces org.apache.jasper.JasperException: File "/struts-tags" not found ........... ...........
如何解决此问题?
答案 0 :(得分:3)
将库从WAR移到EAR可能非常有用,例如如果在一个EAR中有多个WAR *,则为了避免库的冗余。
*注意:在Struts2中使用多个WAR时,可能在某些应用程序服务器中遇到问题:read more on the official documentation。
要使Skinny WAR(没有库的WAR)工作,条件是:
WAR的META-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...
EAR的application.xml
必须包含:
<library-directory>lib</library-directory>
。
要在Maven上实现这一条件,而不需要在EAR的POM.xml中声明WAR的POM.xml的每个库的依赖关系,您可以使用this amazing trick。
也就是说,问题中报告的问题是由TLD
查找仅在WAR上执行,EAR超出范围的事实
(AFAIK,无法在EAR中查找TLD,但我希望被证明是错误的)。
解决方案:
从struts-tags.tld
中提取struts2-core-2.3.x.x.jar
,并将其放在(每个)WAR/WEB-INF
文件夹下。 这是与JAR中的任何类型的TLD文件相关,而不仅仅是Struts2。
在JSP中:
<%@ taglib prefix="s" uri="/WEB-INF/struts-tags.tld" %>