Spring mvc中的web.xml如何進行配置?相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
在說明web.xml配置之前我們先來了解一下需要配置的配置項的作用。
1、監聽器(listener)
事件監聽,js里應用廣泛,各種事件函數的實現,Android和java se也是廣泛的應用,各種點擊事件的監聽。當觸發某個事件時,會觸發監聽在該事件上的所有監聽器。spring 的 org.springframework.web.context.ContextLoaderListener
就是實現了 ServletContextListener 接口的監聽器,該監聽器會在容器(tomcat,jetty)啟動的時候觸發,然后就可以啟動 spring 相應的配置信息。
2、過濾器(filter)
一個HTTP請求就是一次瀏覽器客戶端與服務器的交互,在這次交互中有瀏覽器向服務器發送數據的過程,還有服務器接收到請求數據后處理完將處理結果返回的過程,當返回結果成功就完成了一次HTTP請求(其中的握手,路由等就不細說了)。在瀏覽器與服務器一來一回的過程中我們可以做一些事情,例如將請求數據編碼方式統一,添加IP校驗,session校驗等相關servlet處理前的工作,在servlet處理后響應給瀏覽器客戶端的過程中我們也可以進行過濾工作。spring 的org.springframework.web.filter.CharacterEncodingFilter
就是一個過濾器,它在請求未到達servlet之前將請求編碼轉換為我們在 <param-value>UTF-8</param-value>
中配置的編碼方式,過濾的路徑是 filter-mapping 的 url-pattern 配置的路徑。
3、處理請求(servlet )
一個HTTP請求路徑根據web.xml配置的攔截路徑匹配后會被相應的servlet處理(在處理之前會被配置的過濾器處理),在這個servlet中能夠拿到請求的數據信息,然后進行相應的處理,處理完成后再響應給瀏覽器。 spring 的org.springframework.web.servlet.DispatcherServlet
就是一個 servlet,不過這個 servlet 是 spring 自己實現的,它處理的請求路徑在 servlet-mapping 下的 url-pattern 中進行配置,配置完成后會將所有該配置攔截到的請求交給 spring 的 DispatcherServlet 進行處理,這個 spring 核心的 servlet 我將它理解為一個路由的作用,它會將攔截到的請求根據請求路徑和請求方式進一步的分發下去,分發到 spring 的 @Controller 下的@RequestMapping(value={"/xxx"}, method=RequestMethod.xox )
下的方法下進行處理。
詳細配置如下
4、spring容器的初始化
<!-- 上下文配置文件位置 --> <context-param> <param-name>contextConfigLocation</param-name> <!-- spring 配置文件所在位置,啟動 spring 時會去該路徑下查找該配置文件 --> <param-value>classpath*:spring/spring-config.xml</param-value> </context-param> <!-- spring 上下文監聽器,初始化啟動容器時啟動 spring --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener- class> </listener>
spring的上下文監聽器配置,ContextLoaderListener
實現了ServletContextListener
接口,當容器加載時啟動spring容器。ServletContextListener
在contextInitialized
方法中初始化spring容器。有幾種辦法可以加載spring容器,通過在web.xml的<context-param>
標簽中配置spring的applicationContext.xml路徑,文件名可以任意取,如果沒有配置,將在/WEB-INF/路徑下查找默認的applicationContext.xml文件。
5、spring容器的核心servlet,攔截的請求路徑
<!-- spring 核心轉發器,攔截指定目錄下的請求,分配到配置的攔截路徑下處理 --> <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/META-INF/spring-servlet.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcher</servlet-name> <!-- --> <url-pattern>/</url-pattern> </servlet-mapping>
spring的核心servlet配置,該servlet會將在這里配置攔截的路徑轉發到spring的controller攔截的路徑進行處理,這個servlet相當于一個spring的路由中心,將spring攔截的請求對應的轉發下去進行處理。
6、spring的編碼過濾器
<!-- spring 編碼過濾器 --> <filter> <filter-name>characterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <!-- 編碼過濾器過濾的路徑 --> <filter-mapping> <filter-name>characterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
spring的編碼過濾器,將該過濾器配置的路徑的數據格式統一編碼
7、url-pattern配置講解
在 servlet 和 filter 中我們都需要配置 url-pattern,但這個配置的解析規則有哪幾種我們接下來就詳細的說一下。
1、精確匹配:如 /xxx.html 就只會匹配 xxx.html。
2、路徑匹配:如 /xxx/ 會匹配以 xxx 為前綴的 url。
3、后綴匹配:如 .html 會匹配所有以 html 為后綴的 url。
但是對于 url-pattern 的匹配來說可能會存在沖突的情況,這種情況下就需要排個優先級了,以上三者的優先級為 精確匹配 > 路徑匹配 > 后綴匹配 。
看完上述內容,你們掌握Spring mvc中的web.xml如何進行配置的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。