Struts2 sj:head 与 scriptPath

Struts2 sj:head with scriptPath

我有一个用 Struts2 制作的网络应用程序。 我正在使用 struts2-Jquery 插件。

在 jsp 头部部分使用此设置:

   <%@ taglib prefix="sj" uri="/struts-jquery-tags" %>
   <head>
   <sj:head/>
   </head>

一切正常,生成的 HTML 代码如下所示:

<script src="/MyContextRoot/struts/js/base/jquery-1.10.0.min.js" type="text/javascript">

关于 API: https://code.google.com/p/struts2-jquery/wiki/HeadTag 如果我将 sj:head 更改为:

<sj:head scriptPath="/MyContextRoot/MySubDir/struts/"/>

然后生成的代码将如下所示(如预期):

<script src="/MyContextRoot/MySubDir/struts/js/base/jquery-1.10.0.min.js" type="text/javascript">

但是这个请求给我一个来自服务器的 404 错误。

我可以创建目录,并放入所需的 js 文件,但我希望 Struts 能够满足这些请求。因为它在第一种情况下有效。

我的 Struts2 过滤器映射到:/*

<filter-mapping>
 <filter-name>struts2</filter-name>
 <url-pattern>/*</url-pattern>
</filter-mapping>

有什么想法吗?

谢谢, zsom

我找到了解决方案。

我扩展了 org.apache.struts2.dispatcher.DefaultStaticContentLoader class,并且在我将常量放入 struts.xml 之后,使用我的 class 进行静态内容加载.

首先创建您的加载程序。您必须覆盖两个方法:canHandle 和 findStaticResource。

public class MyStaticLoader extends DefaultStaticContentLoader{
 ...
 public boolean canHandle(String resourcePath) {
   return superCanHandle || resourcePath.contains("MySubDir/struts");
 }

 public void findStaticResource(String path, HttpServletRequest request, HttpServletResponse response) throws IOException {
     if(path != null && path.startsWith("/MySubDir/struts")){
        path = path.substring(9);
     }
     super.findStaticResource(path, request, response); 
 }
}

在 struts.xml 中只需将此 class 添加为 staticContentLoader。

<constant name="struts.staticContentLoader" value="hu.nebih.hfnyportal.util.HFNyPublicStaticLoader"/>

就这些了。

对我来说已经足够了。