中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用struts2怎么對靜態資源進行映射

發布時間:2020-12-08 15:56:03 來源:億速云 閱讀:286 作者:Leah 欄目:編程語言

這篇文章給大家介紹使用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怎么對靜態資源進行映射就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

庆城县| 仪陇县| 达拉特旗| 平昌县| 永胜县| 名山县| 丰都县| 河间市| 中山市| 禹州市| 潞西市| 邢台市| 贵溪市| 喀什市| 勃利县| 姜堰市| 临城县| 邳州市| 浮梁县| 安溪县| 南通市| 海淀区| 施甸县| 织金县| 滨州市| 高碑店市| 油尖旺区| 盐边县| 勃利县| 三江| 株洲县| 镇江市| 遵化市| 湖南省| 禄劝| 通河县| 丰顺县| 阿图什市| 平和县| 昭觉县| 昌平区|