最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

struts2靜態(tài)資源映射代碼示例

 更新時間:2017年09月30日 14:29:18   作者:OkidoGreen  
這篇文章主要介紹了struts2靜態(tài)資源映射的相關(guān)內(nèi)容,涉及了具體代碼示例,具有一定參考價值,需要的朋友可以了解下。

在struts2框架中有一些它所需要的公共的靜態(tài)內(nèi)容,比如說js文件和一些css文件。當(dāng)框架需要這些靜態(tài)內(nèi)容的時候,F(xiàn)ilterDidpatcher會自動提供給我們。那么FilterDidpatcher是如何知道我們在請求靜態(tài)內(nèi)容的呢?任何請求只要以“/struts/”開頭,那么FilterDidpatcher就會認(rèn)為它是在請求靜態(tài)內(nèi)容。在識別出請求是請求靜態(tài)資源后FilterDidpatcher如何去匹配尋找靜態(tài)資源呢?這里有兩個關(guān)鍵點:

1.確定所要請求的資源路徑。FilterDidpatcher會截取/struts/后面的內(nèi)容作為所要請求的資源。比如說現(xiàn)在請求是/struts/xhtml/styles.css,那么FilterDidpatcher就會把xhtml/styles.css作為我們所要請求的資源的路徑:xhtml目錄下面的styles.css文件。

2.到哪兒去尋找所請求的靜態(tài)內(nèi)容。默認(rèn)情況下FilterDidpatcher會隨意的org.apache.struts2.static和template這兩個包中去尋找。如果我們還想在別的其它包中尋找靜態(tài)內(nèi)容的話,那就需要在web.xml配置中FilterDidpatcher時,給它添加一個參數(shù)”packages”,然后把它的值設(shè)置為一系列以逗號或者空格分隔的包名,如下面所示:

<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應(yīng)用下有一個目錄“static”,現(xiàn)在要訪問其中的“top.html”文件,即訪問“l(fā)ocalhost:8080/static/top.html”,服務(wù)器總是抱404錯誤。 

    原因:在struts2的FilterDispatcher類的doFilter方法中,如果請求的是靜態(tài)資源,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錯誤。 

總結(jié)

悲劇的錯誤,還以為是自己程序的bug,改了半天。需要加強對開源程序中具體實現(xiàn)的了解。 希望本文所述對大家有所幫助,感興趣的朋友可以參閱:Struts2 使用OGNL遍歷map方法詳解 、  Struts2 通過ognl表達式實現(xiàn)投影 、  Struts2修改上傳文件大小限制方法解析等,感謝朋友們對腳本之家網(wǎng)站的支持。

  • java中的匿名內(nèi)部類總結(jié)

    java中的匿名內(nèi)部類總結(jié)

    這篇文章主要介紹了 java中的匿名內(nèi)部類總結(jié)的相關(guān)資料,希望通過本文能幫助到大家,需要的朋友可以參考下
    2017-09-09
  • SpringBatch數(shù)據(jù)處理之ItemProcessor鏈與異常處理技巧

    SpringBatch數(shù)據(jù)處理之ItemProcessor鏈與異常處理技巧

    Spring Batch的ItemProcessor體系為批處理應(yīng)用提供了強大而靈活的數(shù)據(jù)處理能力,通過深入理解Spring Batch的ItemProcessor設(shè)計理念和應(yīng)用技巧,開發(fā)者可以充分發(fā)揮其潛力,滿足各類企業(yè)級批處理需求,感興趣的朋友一起看看吧
    2025-03-03
  • Java中wait()與sleep()兩者的不同深入解析

    Java中wait()與sleep()兩者的不同深入解析

    在Java多線程編程中,wait()和sleep()是控制線程執(zhí)行和等待的兩個關(guān)鍵方法,但它們在應(yīng)用場景和實現(xiàn)上有顯著差異,這篇文章主要介紹了Java中wait()與sleep()兩者的不同,需要的朋友可以參考下
    2024-11-11
  • SpringMVC中的HandlerAdapter解析

    SpringMVC中的HandlerAdapter解析

    這篇文章主要介紹了SpringMVC中的HandlerAdapter解析,HandlerAdapter是一個關(guān)鍵的組件,用于將請求與處理程序方法進行適配和調(diào)度,它充當(dāng)了控制器和處理程序之間的橋梁,負(fù)責(zé)將請求的參數(shù)和處理程序方法進行匹配,并將結(jié)果返回給前端,需要的朋友可以參考下
    2023-10-10
  • Java?guava框架LoadingCache及CacheBuilder本地小容量緩存框架總結(jié)

    Java?guava框架LoadingCache及CacheBuilder本地小容量緩存框架總結(jié)

    Guava?Cache本地緩存框架主要是一種將本地數(shù)據(jù)緩存到內(nèi)存中,但數(shù)據(jù)量并不能太大,否則將會占用過多的內(nèi)存,本文給大家介紹Java?guava框架?LoadingCache及CacheBuilder?本地小容量緩存框架總結(jié),感興趣的朋友一起看看吧
    2023-12-12
  • 解決java啟動時報線程占用報錯:Exception?in?thread?“Thread-14“?java.net.BindException:?Address?already?in?use:?bind

    解決java啟動時報線程占用報錯:Exception?in?thread?“Thread-14“?java.ne

    這篇文章主要給大家介紹了關(guān)于解決java啟動時報線程占用:Exception?in?thread?“Thread-14“?java.net.BindException:?Address?already?in?use:?bind的相關(guān)資料,文中將解決的辦法介紹的非常詳細(xì),需要的朋友可以參考下
    2023-04-04
  • Java中使用HashMap時指定初始化容量性能解析

    Java中使用HashMap時指定初始化容量性能解析

    這篇文章主要為大家介紹了Java中使用HashMap時指定初始化容量性能解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • 如何將Tomcat容器替換為Jetty容器

    如何將Tomcat容器替換為Jetty容器

    這篇文章主要介紹了如何將Tomcat容器替換為Jetty容器問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • Java中HashMap集合的6種遍歷方式詳解

    Java中HashMap集合的6種遍歷方式詳解

    這篇文章主要介紹了Java中HashMap集合的6種遍歷方式詳解,HashMap?基于哈希表的?Map?接口實現(xiàn),是以?key-value?存儲形式存在,即主要用來存放鍵值對,HashMap?的實現(xiàn)不是同步的,這意味著它不是線程安全的,我們來看一下其遍歷方式,需要的朋友可以參考下
    2023-12-12
  • 最新評論

    思茅市| 泰来县| 封丘县| 永登县| 松桃| 星座| 喀喇| 都安| 定边县| 阳泉市| 红桥区| 子长县| 达州市| 栾川县| 罗山县| 怀化市| 博湖县| 惠来县| 景德镇市| 汕头市| 尉氏县| 鹿泉市| 隆子县| 正安县| 安乡县| 莒南县| 延边| 卫辉市| 黔西| 沁阳市| 苗栗县| 池州市| 宁河县| 德安县| 连山| 玉山县| 鹿泉市| 莱芜市| 安宁市| 鞍山市| 英德市|