當前位置:首頁 » 網頁前端 » webxmlspring配置詳解
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

webxmlspring配置詳解

發布時間: 2023-07-14 03:29:08

A. 「spring boot」框架的「web.xml」文件怎麼配置

首先我們先配置welcomefile-list

我們先聲明一個類繼承WebMvcConfigurerAdapter重寫如下方法即可

註解不能忘

@Configuration@EnableWebMvc@ComponentScan(basePackages =

@Overridepublic void addViewControllers(ViewControllerRegistry registry){

registry.addViewController("/").setViewName("forward:/login.html");}
配置controller類返回至指定目錄,需要重寫如下方法

@Beanpublic ViewResolver viewResolver() {

InternalResourceViewResolver resolver = new InternalResourceViewResolver(); resolver.setPrefix("/WEB-INF/view/"); resolver.setSuffix(".jsp"); resolver.(true); return resolver;}

我們把另一個類用於配置監聽事件編碼

Configurationpublic class WebInitializer extends {

getRootConfigClasses 用於配置最先執行的一些配置文件,如RootConfig.java 比如自定義的filter

getServletConfigClasses 這個文件是用於配置welcomefilelist 前置目錄+後綴 error-page等

B. 從源碼理解總結web容器、spring容器、spring mvc容器三者關系

本篇,我打算從springMVC項目的web.xml的配置文件入手,通過部分源碼逐步去理解解釋三個容器的關系以及調用順序,因為是基於我個人的理解,可能有所不足。

一般web.xml文件里會有如下兩段配置信息:

我們先了解下web.xml,以下引用自 《web.xml文件是什麼?有什麼用?--詳解》 :

然後結合我們上面的web.xml中關於spring和spring mvc的配置信息來進入話題:

    首先,啟動web容器的時,會先生成對應項目的ServelContent對象,這個是每個項目的上下文,這個ServelContent可以管理所有的servlet,並將我們web.xml中設置的<context-param>內容作為鍵值對交給這個對象。

    然後載入<listener>標簽內容,這個時候就會產生org.springframework.web.context.ContextLoaderListener。

spring的這個 ContextLoaderListener 在接下來的過程中很重要,我們來看一下源碼

首先,可以看出它繼承了ContextLoader類,並實現了ServletContextListener介面。

這里再直接引用他人的結論   《Spring中ContextLoaderListener作用》

好了,人家說法中回到我們的起點了,我們基本都被人告知「ContextLoaderListener的作用是創建並初始化spring容器」

那我們就可以深入進去看看,到底哪裡做了這一步:

首先,我們知道了ServletContextListene是ServletContext的監聽者,監聽器的響應動作就是在伺服器啟動時contextInitialized會被調用,關閉的時候contextDestroyed被調用,這個好理解,那我們就來看一下ContextLoaderListener重寫的contextInitialized方法到底做了什麼。

我們再進入觀察initWebApplicationContext方法細看

我因為自己消化過一遍,直接給出關鍵位置的方法說明——

1、首先是278行:創建了WebApplicationContext,我們可以理解為spring容器的殼子有了

2、其次是288和289行:對ApplicationContext載入了配置文件,並設置servletContext為WebApplicationContext的parent,到這一步,可以理解為我們的spring容器也就差不多成型了

3、接下來是294行:把ApplicationContext對象以鍵值對的形式存到servletContext中,這一步很關鍵,就是因為servletContext中存在這個鍵值對,所以其他內部成員可以通過servletContext訪問到ApplicationContext,當然也能使用其管理的bean,而spring mvc則沒有這樣存在servletContext,所以我覺得正是這一步決定了子容器springmvc可以取用父容器內的bean,反著則不然。

接下來直到輪到我們的springmvc容器<servlet>標簽內容

會生成控制org.springframework.web.servlet.DispatcherServlet,這是一個前端控制器,主要的內容我之前也有一篇文章做過自我記錄

《Spring MVC的工作機制簡單理解》

我們可以看到設置的

<load-on-startup>1</load-on-startup>

這個標簽大概意思就是:

1、load-on-startup 元素標記容器是否應該在web應用程序啟動的時候就載入這個servlet,(實例化並調用其init()方法)。

2、它的值必須是一個整數,表示servlet被載入的先後順序。

3、如果該元素的值為負數或者沒有設置,則容器會當Servlet被請求時再載入。

4、如果值為正整數或者0時,表示容器在應用啟動時就載入並初始化這個servlet,值越小,servlet的優先順序越高,就越先被載入。值相同時,容器就會自己選擇順序來載入。

在DispatcherServlet的時候就根據springMVC容器容器的配置文件生成。

比如我這邊就是

那順序確定了,我們再看一下spring和spring mvc的父子關系哪裡確定:

我們可以從下面3個截圖看到dispatcherServlet的繼承關系,同時,init方法用的是dispatcherServlet父類的父類的方法。

重點在於initServletBean()方法,經過追蹤,我們找到該方法的最終實現又是在dispatcherServlet的父類FrameworkServlet中

其中涉及父子關系的實際是在219行的initWebApplicationContext()方法

initWebApplicationContext()方法主要用於創建或刷新WebApplicationContext實例,並對Servlet功能所使用的變數進行初始化。

從238行源碼就可以看到,它獲得ContextLoaderListener中初始化的rootContext,

在246行設置了父子關系的引用,也就是從這一點我們看到了spring和springMVC的父子關系!

並且,可以看到這只是一條單向的引用,spring中沒有引用直接指向springMVC,也就是子類能找到父類,然而父類都不知道這個子類,父子容器之間內部對象調用關系更明了。

再通過構造函數和Servlet的contextAttribute屬性查找ServletContext來進行webApplicationContext實例的初始化,最終。

這個方法內263行源碼onRefresh(wac)方法是FrameworkServlet提供的模板方法,在子類,也就是我們的DispatcherServlet的onRefresh()方法中進行了重寫。而在onRefresh()方法中調用了initStrategies()方法來完成初始化工作,初始化Spring MVC的9個組件。

1、Tomcat在啟動時給每個Web應用創建一個全局的上下文環境,這個上下文就是ServletContext,其為後面的Spring容器提供環境。

2、Tomcat在啟動過程中觸發容器初始化事件,Spring的ContextLoaderListener會監聽到這個事件,它的contextInitialized方法會被調用,在這個方法中,Spring會初始化全局的Spring根容器,這個就是Spring的IoC容器,IoC容器初始化完畢後,Spring將其存儲到ServletContext中,便於以後來獲取。

3、Tomcat在啟動過程中還會掃描Servlet,一個Web應用中的Servlet可以有多個,以SpringMVC中的DispatcherServlet為例,這個Servlet實際上是一個標準的前端控制器,用以轉發、匹配、處理每個Servlet請求。

4、Servlet會在容器啟動時載入或延遲載入(根據啟動級別設置數字)。延遲載入時,當第一個請求達到時,serlet容器發現對應Servlet還沒有被實例化,就調用Servlet的init方法。

在spring MVC里

        DispatcherServlet在初始化的時候會建立自己的容器,叫做SpringMVC 容器,用來持有Spring MVC相關的Bean。同時,Spring MVC還會通過ServletContext拿到Spring根容器,並將Spring根容器設為SpringMVC容器的父容器,請注意,Spring MVC容器可以訪問父容器中的Bean,但是父容器不能訪問子容器的Bean, 也就是說Spring根容器不能訪問SpringMVC容器里的Bean。

        說的通俗點就是,在Controller里可以訪問Service對象,但是在Service里不可以訪問Controller對象。

C. 在idea中怎麼快速配置spring

在web.xml中配置SpringMVC攔截路徑並指定SpringMVC.xml的位置 不指定的話默認為:servlet.xml
在applicationContext.xml中加入引用
在SpringMVC.xml中加入相同的引用 加入Spring註解驅動 加入Controller的包
指定SpringMVC.xml的視圖解析器 返回前綴 後綴

D. spring配置文件在web.xml中怎麼配的

<context-param>標簽的意思當然是初始化啟動了.
classpath:applicationContext.xml的意思就是從classpath:路徑中找到SPRING的配置文件並載入上..classpath:也可以改成/WEB-INF/.就看配置文件放哪了
監聽器會幫你新建BeanFactory介面的實例.然後就可以大膽的用IOC了.SPRING中配置的依賴關系都會生效.