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

Java SpringMVC 集成靜態(tài)資源的方式你了解嗎

 更新時間:2021年10月26日 15:32:22   作者:路人甲Java  
本篇文章主要介紹了SpringMVC集成靜態(tài)資源的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

1、本文內(nèi)容

  • 靜態(tài)資源 & jsp 是被誰處理的?
  • 如何讓 springmvc 處理所有請求?
  • springmvc 如何處理靜態(tài)資源?
  • springmvc 處理靜態(tài)資源的 2 種方案、區(qū)別、原理詳解

2、靜態(tài)資源 & jsp 是被誰處理的?

不知大家是否注意了一個問題,我們將 web 項目發(fā)布到 tomcat 后,可以直接訪問 jsp 后綴的文件,或者直接訪問項目中的靜態(tài)資源(js/css/圖片之類的文件),只要路徑寫的沒有問題,都可以正常在瀏覽器中顯示,大家是否思考過,是誰在處理這個請求呢?

tomcat 是一個 servlet 容器,servlet 容器中通常有 servlet 來處理各種請求,那么當(dāng)我們訪問靜態(tài)資源或者 jsp 的時候,當(dāng)然也是由 servlet 來處理這些請求的,但是我們并沒有在 web.xml 中配置由哪個 servlet 來處理這些請求啊,這是因為 tomcat 中自動幫我們配置了一些默認(rèn)的 servlet 來處理這類的請求。

tomcat 的安裝目錄中有個 web.xml 文件,位于(apache-tomcat-9.0.46\conf\web.xml),這個文件相當(dāng)于對發(fā)布到 tomcat 中的所有 web 項目的默認(rèn)配置,我們來看一下這個文件,有幾個重要的 servlet 配置信息,這些 servlet 可以用來處理 jsp 后置的文件或者靜態(tài)資源,抽取部分配置如下

<servlet>
 <servlet-name>defaultservlet-name>
 <servlet-class>org.apache.catalina.servlets.DefaultServletservlet-class>
 <load-on-startup>1load-on-startup>
servlet>
<servlet>
 <servlet-name>jspservlet-name>
 <servlet-class>org.apache.jasper.servlet.JspServletservlet-class>
 <load-on-startup>3load-on-startup>
servlet>
<servlet-mapping>
 <servlet-name>defaultservlet-name>
 <url-pattern>/url-pattern>
servlet-mapping>
<servlet-mapping>
 <servlet-name>jspservlet-name>
 <url-pattern>*.jspurl-pattern>
 <url-pattern>*.jspxurl-pattern>
servlet-mapping>

配置中主要定義了 2 個 servlet

JspServlet 用來處理 jsp 文件

DefaultServlet 會處理/開頭的請求,這里重點(diǎn)說下這個 servlet 的處理邏輯,它會處理所有其他 servlet 不匹配的請求,當(dāng)一個請求過來之后,會先去匹配其他的 servlet,當(dāng)找不到匹配的 servlet 的時候,才會走 DefaultServlet

我們可以在項目中的 web.xml 中對 tomcat/config/web.xml 中的配置進(jìn)行覆蓋,即項目中的 web.xml 相對于 tomcat 中的 web.xml 有更高的優(yōu)先級。

3、如何讓 springmvc 處理所有請求?

如果我們想讓 springmvc 來處理所有的請求,怎么做呢?只需修改 web.xml 中的配置,將 springmvc 這個 servlet 的 url-pattern 的值設(shè)置為/就可以了,此時所有的請求都會被 springmvc 處理,即所有的請求都會被DispatcherServlet處理。

4、問題來了:靜態(tài)資源 404 了

當(dāng)我們將上面 springmvc 的 url-pattern 改為/時,大家可以自己去試試,此時再訪問靜態(tài)資源的時候,如下圖,會報 404,這個請求被 DispatcherServlet 接收了,但是這個 servlet 默認(rèn)情況下并沒有處理靜態(tài)資源的能力,即找不到請求的資源,所以才會報 404

springmvc 提供了 2 種解決方案,來看下。

5、方案 1:使用

在 springmvc 的配置文件中添加下面配置

<mvc:annotation-driven/>
<mvc:default-servlet-handler/>

這里說一下原理

1、加入配置后,框架會創(chuàng)建DefaultServletHttpRequestHandler對象,這個對象會將請轉(zhuǎn)發(fā)給 tomcat 的 default 這個 servlet 處理,所以靜態(tài)資源就可以正常訪問了

2、注意:配置中的第 1 行也必須加上,如果不加上,@RequestMapping 的請求就無法處理了

3、這種用法有個前提是,web 容器中需要有 default 這個 servlet,且這個 servlet 可以處理靜態(tài)資源

6、方案 2:使用

從 spring3.0 版本后,spring 定義了專門處理靜態(tài)資源訪問請求的處理器ResourceHttpRequestHandler,并且添加了標(biāo)簽,用來處理靜態(tài)資源無法訪問的問題。

需要在 springmvc 配置文件中添加如下配置

<mvc:annotation-driven/>
<mvc:resources mapping="/imgs/**" location="/static/imgs/"/>
<mvc:resources mapping="/css/**" location="/static/css/"/>
<mvc:resources mapping="/js/**" location="/static/js/"/>

mvc:resource 標(biāo)簽用來指定請求的靜態(tài)資源的 url 和本地地址的映射關(guān)系

mapping:用來指定請求的地址的,比如/imgs/**:可以匹配任何以 imgs 開頭的 url,如:/imgs/1.jpg、/imgs/2.jpg、/imgs/order/3.jpg

location:用來指定靜態(tài)資源所在項目中的目錄

注意:配置中的第 1 行也必須加上,如果不加上,@RequestMapping 的請求就無法處理了

這種用法不依賴于 web 容器,所以比第一種方案要好一些,也建議大家用這種方案。

上面代碼中配置了 3 行 mvc:resources,可以優(yōu)化下,如下

<mvc:resources mapping="/static/**" location="/static/"/>
</mvc:resources mapping=

7、總結(jié)

tomcat 默認(rèn)能夠處理 jsp 和靜態(tài)資源,是因為 tomcat 中默認(rèn)有 2 個 servlet:default jsp

到此我們已經(jīng)知道如何讓 springmvc 來處理所有請求了,只需要在 web.xml 中調(diào)整一下 url-pattern 的值為/就可以了

默認(rèn)情況下,springmvc 無法處理靜態(tài)資源,本文介紹了 2 種方式,大家可以回頭在再去看看,第一種需要依賴于 web 容器中的 default 這個 servlet,使用上面對 web 容器有依賴作用;而第 2 種方式是 springmvc 推薦的方式,更好一些,對 web 容器沒有依賴

不管用那種方式,都不要忘記了這個注解,否則咱們自定義的 controller 中的@RequestMapping 就無效了

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • springboot如何重定向攜帶數(shù)據(jù) RedirectAttributes

    springboot如何重定向攜帶數(shù)據(jù) RedirectAttributes

    這篇文章主要介紹了springboot如何重定向攜帶數(shù)據(jù) RedirectAttributes,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • 詳解如何將Spring Boot應(yīng)用跑在Docker容器中

    詳解如何將Spring Boot應(yīng)用跑在Docker容器中

    這篇文章主要介紹了詳解如何將Spring Boot應(yīng)用跑在Docker容器中,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • Java中Final關(guān)鍵字的使用技巧及其性能優(yōu)勢詳解

    Java中Final關(guān)鍵字的使用技巧及其性能優(yōu)勢詳解

    這篇文章主要介紹了Java中Final關(guān)鍵字的使用技巧及其性能優(yōu)勢詳解,Java中的final關(guān)鍵字用于修飾變量、方法和類,可以讓它們在定義后不可更改,從而提高程序的穩(wěn)定性和可靠性,此外,final關(guān)鍵字還有一些使用技巧和性能優(yōu)勢,需要的朋友可以參考下
    2023-10-10
  • JFreeChart插件實(shí)現(xiàn)的折線圖效果實(shí)例

    JFreeChart插件實(shí)現(xiàn)的折線圖效果實(shí)例

    這篇文章主要介紹了JFreeChart插件實(shí)現(xiàn)的折線圖效果,結(jié)合實(shí)例形式分析了基于JFreeChart繪制折線圖的相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2016-08-08
  • 淺談Java 并發(fā)的底層實(shí)現(xiàn)

    淺談Java 并發(fā)的底層實(shí)現(xiàn)

    這篇文章主要介紹了淺談Java 并發(fā)的底層實(shí)現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-12-12
  • Window搭建部署RocketMQ步驟詳解

    Window搭建部署RocketMQ步驟詳解

    這篇文章主要介紹了Window搭建部署RocketMQ步驟詳解,RocketMq是一個由阿里巴巴開源的消息中間件,脫胎去阿里每部使用的MetaQ,在設(shè)計上借鑒了Kafka。,需要的朋友可以參考下
    2019-06-06
  • 關(guān)于java自定義線程池的原理與實(shí)現(xiàn)

    關(guān)于java自定義線程池的原理與實(shí)現(xiàn)

    本文介紹了如何自定義線程池和阻塞隊列,包括阻塞隊列的實(shí)現(xiàn)方法,線程池的構(gòu)建以及拒絕策略的應(yīng)用,詳細(xì)闡述了線程池中任務(wù)的提交和執(zhí)行流程,以及如何處理任務(wù)超出隊列容量的情況
    2022-04-04
  • Eclipse引用XSD實(shí)現(xiàn)XML配置文件提示標(biāo)簽的方法

    Eclipse引用XSD實(shí)現(xiàn)XML配置文件提示標(biāo)簽的方法

    今天小編就為大家分享一篇關(guān)于Eclipse引用XSD實(shí)現(xiàn)XML配置文件提示標(biāo)簽的方法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • Struts1簡介和入門_動力節(jié)點(diǎn)Java學(xué)院整理

    Struts1簡介和入門_動力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要為大家詳細(xì)介紹了Struts1簡介和入門的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • Java9垃圾回收方法finalize() 原理解析

    Java9垃圾回收方法finalize() 原理解析

    這篇文章主要介紹了Java9垃圾回收方法finalize() 原理解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-02-02

最新評論

黄山市| 饶阳县| 泸水县| 兴海县| 永德县| 乐清市| 新化县| 华阴市| 满城县| 临清市| 紫阳县| 侯马市| 黑山县| 舟山市| 垫江县| 东安县| 遂宁市| 临武县| 勐海县| 车险| 金华市| 汉中市| 石林| 敖汉旗| 米泉市| 白玉县| 柯坪县| 遂平县| 平舆县| 昌图县| 安宁市| 万州区| 陆河县| 贵港市| 高雄县| 吉木乃县| 姜堰市| 扎兰屯市| 固镇县| 江华| 巢湖市|