一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java SpringMVC 集成靜態資源的方式你了解嗎

Java SpringMVC 集成靜態資源的方式你了解嗎

2022-03-01 11:55路人甲Java Java教程

本篇文章主要介紹了SpringMVC集成靜態資源的方法,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

1、本文內容

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

 

2、靜態資源 & jsp 是被誰處理的?

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

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

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

<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 會處理/開頭的請求,這里重點說下這個 servlet 的處理邏輯,它會處理所有其他 servlet 不匹配的請求,當一個請求過來之后,會先去匹配其他的 servlet,當找不到匹配的 servlet 的時候,才會走 DefaultServlet

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

 

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

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

Java SpringMVC 集成靜態資源的方式你了解嗎

 

4、問題來了:靜態資源 404 了

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

Java SpringMVC 集成靜態資源的方式你了解嗎

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

 

5、方案 1:使用

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

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

這里說一下原理

1、加入配置后,框架會創建DefaultServletHttpRequestHandler對象,這個對象會將請轉發給 tomcat 的 default 這個 servlet 處理,所以靜態資源就可以正常訪問了

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

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

 

6、方案 2:使用

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

需要在 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 標簽用來指定請求的靜態資源的 url 和本地地址的映射關系

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

location:用來指定靜態資源所在項目中的目錄

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

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

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

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

 

7、總結

tomcat 默認能夠處理 jsp 和靜態資源,是因為 tomcat 中默認有 2 個 servlet:default 和 jsp

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

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

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

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關注服務器之家的更多內容!

原文鏈接:https://blog.csdn.net/likun557/article/details/119582956

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产精品免费精品自在线观看 | 91sao国产在线观看 | 久久精品成人免费网站 | 草莓香蕉绿巨人丝瓜榴莲污在线观看 | 国产亚洲女人久久久久久 | 国产东北3p真实在线456视频 | 大学第一次基本都没了 | 亚洲H成年动漫在线观看不卡 | 高贵女王调奴vk | 精品视频在线观看免费 | 草嫩社区 | 精品久久久久久久久久久久久久久 | 性一交一无一伦一精一品 | 国产亚洲精品一区久久 | 羞羞私人影院可以直接免费观影吗 | 深夜影院深a | 日本无卡码一区二区三区 | 十大网站免费货源 | 亚洲国产成人精品不卡青青草原 | 亚洲丰满女人ass硕大 | 修修视频在线观看 | 国产目拍亚洲精品一区二区三区 | 波多野结衣教师未删减版 | 久久香蕉国产免费天天 | 男人把大ji巴放进男人免费视频 | 99ri精品| 亚洲视频在线一区二区 | 国产成人免费观看在线视频 | 色久久一个亚洲综合网 | 国产精品1024永久免费视频 | 成年人在线免费看 | 五月色天在线视频综合观看 | 亚洲国产麻豆 | 黄+色+性+人免费 | 国产毛片在线高清视频 | 欧美精品99久久久久久人 | 亚洲免费黄色网 | 538亚洲欧美国产日韩在线精品 | 性欧美videofree中文字幕 | 91高清在线视频 | 99视频全部免费 |