【问题标题】:How do struts2 plugins workstruts2 插件是如何工作的
【发布时间】:2012-03-16 08:52:51
【问题描述】:

我们目前在我们的网络应用程序中使用struts2-jquery 插件。这个插件很好用,但我对 struts2 插件的内部工作有一些疑问。

我们将插件添加到类路径中,并且可以使用 taglib 中定义的标签。当我查看生成页面的源代码时,我可以看到正确包含了资源:

<script type="text/javascript" src="/struts/js/base/jquery-1.x.x.min.js"></script>
<script type="text/javascript" src="/struts/js/base/jquery-ui.min.js"></script>
...

第一个问题是:我们的网络应用程序如何知道/struts/ 指向jquery 插件。我们没有为此定义任何东西。 似乎来自DefaultStaticContentLoader 类。有这样的方法:

public boolean canHandle(String resourcePath) {
    return serveStatic && (resourcePath.startsWith("/struts/") || resourcePath.startsWith("/static/"));
}

第二个问题是,当我们调用像 /struts//struts/themes/ 这样的 url 时,应用程序会从插件中以八位字节流的形式下载文件(最终结果似乎是一个包含 css、js 和图像的 zip 文件文件)。为什么要这样做,有没有办法防止这种情况发生。

第二个问题比第一个更重要。

谢谢,汤姆。

编辑:问题一已回答。

【问题讨论】:

    标签: java web-applications plugins struts2


    【解决方案1】:

    Well Plugin 由 S2 提供,用于扩展其功能并改变 S2 在某些用例中的工作方式。 Struts 2 插件包含扩展、替换或添加到现有 Struts 框架功能的类和配置。插件应包含 struts-plugin.xml 文件以告诉 S2 哪个是插件的入口点。

    所以当 S2 启动时,它会以特定的方式和顺序加载配置。

    1. struts-default.xml
    2. struts-plugin.xml
    3. struts.xml

    因此,作为插件 (jar) 一部分的 struts-plugin.xml 将由 S2 加载,并将向其自身注册它的存在。

    更多详情请参考官方文档

    struts-plugin.xml 文件中 JQuery 插件的典型条目是

    <struts>
        <bean type="org.apache.struts2.views.TagLibrary" name="sj" class="com.jgeppert.struts2.jquery.views.JqueryTagLibrary" />
    </struts>
    

    告诉S2JqueryTagLibrary是插件的入口点。你提到的加载静态内容的那个是默认的S2处理机制,直到我们不提供任何标准机制。

    Struts 提供了一个默认的 StaticContentLoader 实现,即org.apache.struts2.dispatcher.DefaultStaticContentLoader。此加载程序将处理以“/static/”开头的 url。 有关 S2 如何从插件和得分 jar 中提供静态内容的详细信息,请参阅文档

    【讨论】:

    • 感谢您的回答。这让我找到了 struts url 的来源。
    【解决方案2】:

    第二个问题的答案也来自DefaultStaticContentLoader类。 findStaticResource 方法在文件夹或文件之间没有区别,因此即使它是文件夹也会打开给定 url 的流。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-29
      • 2017-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-09
      相关资源
      最近更新 更多