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

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

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

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

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

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

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

    原因:在struts2的FilterDispatcher類(lèi)的doFilter方法中,如果請(qǐng)求的是靜態(tài)資源,struts2會(huì)判斷該請(qǐng)求是否可以處理,這里的代碼如下:

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類(lèi)的canHandle方法中會(huì)對(duì)請(qǐng)求路徑進(jìn)行判斷:

Java代碼

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

這里,serveStatic的值為true,再加上要訪問(wèn)的資源以“/static”開(kāi)頭,所以這里返回true。 

    然后,會(huì)進(jìn)入DefaultStaticContentLoader類(lèi)的findStaticResource方法,該方法的第一行語(yǔ)句是:   

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”截掉了,這樣,后面再進(jìn)行解析的時(shí)候,就變成了解析對(duì)“/top.html”的請(qǐng)求,所以會(huì)報(bào)404錯(cuò)誤。 

總結(jié)

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

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

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

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

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

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

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

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

    SpringMVC中的HandlerAdapter解析

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

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

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

    解決java啟動(dòng)時(shí)報(bào)線(xiàn)程占用報(bào)錯(cuò):Exception?in?thread?“Thread-14“?java.ne

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

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

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

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

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

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

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

    通许县| 太仆寺旗| 高青县| 中卫市| 新龙县| 安化县| 启东市| 台南县| 迭部县| 卓尼县| 个旧市| 巴塘县| 湖州市| 扎鲁特旗| 三门县| 绩溪县| 昌江| 尼木县| 海阳市| 澄城县| 长垣县| 东城区| 历史| 汕尾市| 探索| 安阳县| 忻州市| 泌阳县| 攀枝花市| 南陵县| 阳朔县| 阿拉善右旗| 义马市| 城固县| 景东| 色达县| 永清县| 福州市| 惠来县| 平泉县| 连山|