您好,登錄后才能下訂單哦!
這篇文章給大家介紹使用struts2怎么對靜態資源進行映射,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
在struts2框架中有一些它所需要的公共的靜態內容,比如說js文件和一些css文件。當框架需要這些靜態內容的時候,FilterDidpatcher會自動提供給我們。那么FilterDidpatcher是如何知道我們在請求靜態內容的呢?任何請求只要以“/struts/”開頭,那么FilterDidpatcher就會認為它是在請求靜態內容。在識別出請求是請求靜態資源后FilterDidpatcher如何去匹配尋找靜態資源呢?這里有兩個關鍵點:
1.確定所要請求的資源路徑。FilterDidpatcher會截取/struts/后面的內容作為所要請求的資源。比如說現在請求是/struts/xhtml/styles.css,那么FilterDidpatcher就會把xhtml/styles.css作為我們所要請求的資源的路徑:xhtml目錄下面的styles.css文件。
2.到哪兒去尋找所請求的靜態內容。默認情況下FilterDidpatcher會隨意的org.apache.struts2.static和template這兩個包中去尋找。如果我們還想在別的其它包中尋找靜態內容的話,那就需要在web.xml配置中FilterDidpatcher時,給它添加一個參數”packages”,然后把它的值設置為一系列以逗號或者空格分隔的包名,如下面所示:
<filter> <filter-name>Struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class> <init-param> <param-name>packages</param-name> <param-value>com.mangocity.static,hust.cm</param-value> </init-param> </filter> <filter-mapping> <filter-name>Struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
描述:web應用下有一個目錄“static”,現在要訪問其中的“top.html”文件,即訪問“localhost:8080/static/top.html”,服務器總是抱404錯誤。
原因:在struts2的FilterDispatcher類的doFilter方法中,如果請求的是靜態資源,struts2會判斷該請求是否可以處理,這里的代碼如下:
Java代碼
String resourcePath = RequestUtils.getServletPath(request); if ("".equals(resourcePath) && null != request.getPathInfo()) { resourcePath = request.getPathInfo(); } if (staticResourceLoader.canHandle(resourcePath)) { staticResourceLoader.findStaticResource(resourcePath, request, response); } else { // this is a normal request, let it pass through chain.doFilter(request, response); } // The framework did its job here return;
其中,在DefaultStaticContentLoader類的canHandle方法中會對請求路徑進行判斷:
Java代碼
public boolean canHandle(String resourcePath) { return serveStatic && (resourcePath.startsWith("/struts") || resourcePath.startsWith("/static")); }
這里,serveStatic的值為true,再加上要訪問的資源以“/static”開頭,所以這里返回true。
然后,會進入DefaultStaticContentLoader類的findStaticResource方法,該方法的第一行語句是:
Java代碼
String name = cleanupPath(path);
這里,cleanupPath方法的定義如下:
Java代碼
/** * @param path requested path * @return path without leading "/struts" or "/static" */ protected String cleanupPath(String path) { //path will start with "/struts" or "/static", remove them return path.substring(7); }
struts2把“/static”截掉了,這樣,后面再進行解析的時候,就變成了解析對“/top.html”的請求,所以會報404錯誤。
關于使用struts2怎么對靜態資源進行映射就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。