2012-03-16 75 views
1

我們目前在我們的網絡應用程序中使用struts2-jquery插件。該插件工作得很好,但我有一些關於struts2插件的內部工作的問題。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> 
... 

第一個問題是:如何我們的web應用程序知道 /struts/指向jQuery插件。我們沒有爲此定義任何內容。 似乎來自DefaultStaticContentLoader類。有這樣的方法:

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

第二個問題是,當我們調用諸如/struts//struts/themes/的URL應用程序下載從插件作爲一個字節流的文件(最終的結果似乎是一個zip文件包含css,js和圖像文件)。它爲什麼這樣做,是否有辦法防止這種情況發生。

第二個問題比第一個更重要。

謝謝,湯姆。

編輯:問題一被回答。

回答

2

S2提供插件以擴展其功能並改變S2在特定用例中的工作方式。 Struts 2插件包含擴展,替換或添加到現有Struts框架功能的類和配置.Plugin應該包含struts-plugin.xml文件來告訴S2哪個是插件的入口點。

所以當S2啓動時,它會以特定的方式和順序加載配置。

  1. 支柱-default.xml中
  2. 支柱-plugin.xml的
  3. struts.xml中

所以支柱-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> 

告訴S2是JqueryTagLibrary是插件的入口點。您提到的關於加載靜態內容的一個是默認的S2處理機制,直到我們不提供任何標準機制。

Struts提供了StaticContentLoader的默認實現,它是org.apache.struts2.dispatcher.DefaultStaticContentLoader。該加載器將處理以「/static/」開頭的網址。 詳情如何靜態內容是由S2從插件服務,並從中得分罐子參考文檔

+0

謝謝你的回答。這指出了我的struts網址的來源。 – tom 2012-03-16 10:10:57

0

回答第二個問題也來自於類DefaultStaticContentLoaderfindStaticResource方法在文件夾或文件之間沒有區別,因此即使它是文件夾,也會爲給定url打開流。