1. 程式人生 > >web.xml載入順序

web.xml載入順序

1 順序

1、啟動一個WEB專案的時候,WEB容器會去讀取它的配置檔案web.xml,讀取<listener>和<context-param>兩個結點。 

2、建立一個ServletContext(servlet上下文),這個web專案的所有部分都將共享這個上下文。 

3、容器將<context-param>轉換為鍵值對,並交給servletContext。 

4、容器建立<listener>中的類例項,建立監聽器。 

context-param,它用於向 ServletContext提供鍵值對,即應用程式上下文資訊

context-param -> listener -> filter -> servlet

2 Load-on-startup

在servlet的配置當中,<load-on-startup>5</load-on-startup>的含義是: 標記容器是否在啟動的時候就載入這個servlet。 

當值為0或者大於0時,表示容器在應用啟動時就載入這個servlet; 當是一個負數時或者沒有指定時,則指示容器在該servlet被選擇時才載入。 正數的值越小,啟動該servlet的優先順序越高。 

3 java web的三大元件

1 servlet 

1 接收請求資料:我們都知道客戶端請求會被封裝成HttpServletRequest物件,裡面包含了請求頭、引數等各種資訊。
2 處理請求:通常我們會在service、doPost或者doGet方法進行接收引數,並且呼叫業務層(service)的方法來處理請求。
3 完成響應:處理完請求後,我們一般會轉發(forward)或者重定向(redirect)到某個頁面,轉發是HttpServletRequest中的方法,重定向是HttpServletResponse中的方法,兩者是有很大區別的。

servlet生命週期:

Servlet的生命週期方法:

> void init(ServletConfig)

servlet的初始化方法,只在建立servlet例項時候呼叫一次,Servlet是單例的,整個伺服器就只建立一個同類型Servlet

> void service(ServletRequest,ServletResponse)

servlet的處理請求方法,在servle被請求時,會被馬上呼叫,每處理一次請求,就會被呼叫一次。ServletRequest類為請求類,ServletResponse類為響應類

> void destory()

servlet銷燬之前執行的方法,只執行一次,用於釋放servlet佔有的資源,通常Servlet是沒什麼可要釋放的,所以該方法一般都是空的

Servlet的其他重要方法:

> ServletConfig getServletConfig()

獲取servlet的配置資訊的方法,所謂的配置資訊就是WEB-INF目錄下的web.xml中的servlet標籤裡面的資訊

> String getServletInfo()

獲取servlet的資訊方法

Servlet的配置:

        <servlet>
		<servlet-name>Dispatcher</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>classpath:dispatcher.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
		<multipart-config>

		</multipart-config>
		<!-- <multipart-config> <location>/tmp</location> <max-file-size>20848820</max-file-size>
			<max-request-size>418018841</max-request-size> <file-size-threshold>1048576</file-size-threshold>
			</multipart-config> -->
	</servlet>
	<servlet-mapping>
		<servlet-name>Dispatcher</servlet-name>
		<url-pattern>*.do</url-pattern>
	</servlet-mapping>

2 filter

(1)生命週期:init(),filter();destory();

(2)語法

         <filter>
            <filter-name>Filter的別名</filter-name>
            <filter-class>Filter的全類名</filter-class>
        </filter>
        <filter-mapping>
            <filter-name>別名</filter-name>
            <url-pattern>需要Filter攔截的資源地址</url-pattern>
        </filter-mapping>

(3)url-pattern匹配語法
        1.精確匹配:只有當目標資源的地址和url-pattern的地址一模一樣時,Filter才會攔截資源
        例子:/2.jsp , 只有當瀏覽器訪問專案根目錄下的2.jsp時,才會呼叫Filter

        2.路徑匹配:當訪問的資源在url-pattern配置的路徑下時,Filter就會攔截資源。
        例子1:/hello/* , 只要訪問專案根目錄下hello下的資源,就會呼叫Filter。
        例子2:/* , 會攔截專案根目錄下所有資源

        3.字尾匹配:只要訪問的資源地址和url-pattern的字尾一樣就會呼叫Filter
         例子:*.jsp 只要是以jsp結尾的請求都會攔截

(4)主要作用

//依賴於servlet容器,基於filter介面中的doFilter回撥函式,interceptor則基於Java本身的反射機制;

比如編碼過濾;

3 listener

可以監聽Application、Session、Request物件,當這些物件發生變化就會呼叫對應的監聽方法。 

(1)生命週期監聽:ServletContextListener,它有兩個方法,一個在出生時呼叫,一個在死亡時呼叫;

void contextInitialized(ServletContextEvent sce):建立Servletcontext時

void contextDestroyed(ServletContextEvent sce):銷燬Servletcontext時

(2)屬性監聽:ServletContextAttributeListener,它有三個方法,一個在新增屬性時呼叫,一個在替換屬性時呼叫,最後一個是在移除屬性時呼叫。

void attributeAdded(ServletContextAttributeEvent event):新增屬性時;

void attributeReplaced(ServletContextAttributeEvent event):替換屬性時;

void attributeRemoved(ServletContextAttributeEvent event):移除屬性時;

(3) HttpSession(Session監聽)

       生命週期監聽:HttpSessionListener,它有兩個方法,一個在出生時呼叫,一個在死亡時呼叫;

voidsessionCreated(HttpSessionEvent se):建立session時

void sessionDestroyed(HttpSessionEvent se):銷燬session時

(4)屬性監聽:HttpSessioniAttributeListener,它有三個方法,一個在新增屬性時呼叫,一個在替換屬性時呼叫,最後一個是在移除屬性時呼叫。

(5)ServletRequest(監聽Request)

    生命週期監聽:ServletRequestListener,它有兩個方法,一個在出生時呼叫,一個在死亡時呼叫;

voidrequestInitialized(ServletRequestEvent sre):建立request時

void requestDestroyed(ServletRequestEvent sre):銷燬request時

(6) 屬性監聽:ServletRequestAttributeListener,它有三個方法,一個在新增屬性時呼叫,一個在替換屬性時呼叫,最後一個是在移除屬性時呼叫。

voidattributeAdded(ServletRequestAttributeEvent srae):新增屬性時

void attributeReplaced(ServletRequestAttributeEvent srae):替換屬性時

void attributeRemoved(ServletRequestAttributeEvent srae):移除屬性時

監聽例項:可以監聽線上使用者數

/**
 * HttpSessionListener 監聽器
 */
@WebListener
public class MyHttpSessionListener implements HttpSessionListener{
    //當前使用者數
    private int userCounts=0;
    @Autowired
    CustomUserDetailService customUserDetailService;
    @Autowired
    SessionRegistry sessionRegistry;

    @Override
    public void sessionCreated(HttpSessionEvent se) {
        //sessionCreated  使用者數+1
        userCounts++;
        //重新在servletContext中儲存userCounts
        se.getSession().getServletContext().setAttribute("userCounts", userCounts);
    }
    @Override
    public void sessionDestroyed(HttpSessionEvent se) {
        //sessionDestroyed  使用者數-1
        userCounts--;
        //重新在servletContext中儲存userCounts
        se.getSession().getServletContext().setAttribute("userCounts", userCounts);

        ArrayList<User> userList=(ArrayList<User>) se.getSession().getServletContext().getAttribute("userList");
        String sessionId=se.getSession().getId();
        //如果當前使用者在userList中  在session銷燬時  將當前使用者移出userList
        User remove = SessionUtil.getUserBySessionId(userList, sessionId);
        if(remove!=null){
            userList.remove(remove);
        }
//        將userList集合  重新儲存到servletContext
        se.getSession().getServletContext().setAttribute("userList", userList);
        sessionDestroyed(se);
    }

}

相關推薦

web.xml載入順序

1 順序 1、啟動一個WEB專案的時候,WEB容器會去讀取它的配置檔案web.xml,讀取<listener>和<context-param>兩個結點。  2、建立一個ServletContext(servlet上下文),這個web專案的所有部分都

JAVA Web.xml 載入順序

轉自:http://blog.163.com/qulei_lei/blog/static/186144231201141945740356/web.xml載入過程(步驟): 1.啟動WEB專案的時候,容器(如:Tomcat)會去讀它的配置檔案web.xml.讀兩個

WEB容器啟動之Web.xml載入順序

web.xml檔案載入順序 一、      1 、啟動一個 WEB 專案的時候, WEB 容器會去讀取它的配置檔案 web.xml ,讀取 <listener> 和 <context-param> 兩個結點。      2 、緊急著,容建立一個 ServletConte

web專案載入順序

@WEB web專案執行順序 現在主流的web開發框架一般都是基於Spring開發的,Spring生態圈量級非常之大,功能非常強大。今天講述一下普通的web專案載入順序。 雖然專案大部分都在使用SpringBoot、SpringCloud等微服務的架構來搭建專案,基本不會在進行這

JAVA WEB專案載入順序

web.xml載入過程(步驟):        1.啟動WEB專案的時候,容器(如:Tomcat)會去讀它的配置檔案web.xml.讀兩個節點:       <listener></listener> 和 <context-param&g

web應用載入順序

1.啟動WEB專案的時候,容器(如:Tomcat)會去讀它的配置檔案web.xml.讀兩個節點:    <listener></listener> 和 <context-param></context-param> 2.緊接著,容器建立一個ServletC

web.xml檔案載入順序

web.xml 中的listener、 filter、servlet 載入順序及其詳解 一、概述 1、啟動一個WEB專案的時候,WEB容器會去讀取它的配置檔案web.xml,讀取<listener>和<context-param>兩個結點。  2、緊急著

web.xml載入順序和過程

Web.xml配置詳解之context-param <context-param> <param-name>contextConfigLocation</param-name> <param-value>contextConfigLocat

tomcat 中 web.xml 中的listener、 filter、servlet 載入順序及其詳解

在專案中總會遇到一些關於載入的優先順序問題,剛剛就遇到了一個問題,由於專案中使用了quartz任務排程,quartz在web.xml中是使用listener進行監聽的,使得在tomcat啟動的時候能馬上檢查資料庫檢視那些任務未被按時執行,而資料庫的配置資訊在是在web.xml中使用servlet配置

web.xml 中的listener、 filter、servlet 載入順序及其詳解

一、概述 1、啟動一個WEB專案的時候,WEB容器會去讀取它的配置檔案web.xml,讀取<listener>和<context-param>兩個結點。  2、緊急著,容建立一個ServletContext(servlet上下文),這個web專案的

web.xml中的listener、filter、servlet 載入順序及其詳解

轉發:https://www.cnblogs.com/shenliang123/p/3344555.html 在專案中總會遇到一些關於載入的優先順序問題,剛剛就遇到了一個問題,由於專案中使用了quartz任務排程,quartz在web.xml中是使用listener進行監聽的,使得在tomcat

JavaWeb(十二)---web.xml 中的listener、 filter、servlet 載入順序及其詳解

一、建立順序   1、web.xml檔案中的載入順序為:listener-filter-servlet   2、如果web.xml中配置了<context-param>,初始化順序:       context-param > Listener > Filter

web.xml被檔案載入過程,各節點載入順序總結

web.xml載入過程(步驟):1.啟動WEB專案的時候,容器(如:Tomcat)會去讀它的配置檔案web.xml.讀兩個節點:   <listener></listener> 和 <context-param></context-

讀Tomcat原始碼確定載入web.xml中節點元素的順序

有時候面試時會被問tomcat啟動時web.xml中節點(類似listener,filter等)被載入的順序,死記硬背那多沒品,正好手裡有tomcat7的原始碼,找了點時間翻了翻。 讓我們先來喵一眼tomcat的架構,大致瞭解下tomcat啟動的順序,那我們目前關心

伺服器啟動時Webapp的web.xml中配置的載入順序(轉

一 1、啟動一個WEB專案的時候,WEB容器會去讀取它的配置檔案web.xml,讀取<listener>和<context-param>兩個結點。 2、緊急著,容建立一個ServletContext(servlet上下文),這個web專案的所有部分都

web.xml檔案載入順序 一、 1 、啟動一個 WEB 專案的時候, WEB 容器會去讀取它的配置檔案 web.xml ,讀取 和

web.xml 中的listener、 filter、servlet 載入順序及其詳解 一、概述 1、啟動一個WEB專案的時候,WEB容器會去讀取它的配置檔案web.xml,讀取<listener>和<context-param>兩個結點。 

web容器中web.xml中Servlet、Filter、context-param、listener的載入順序

  web容器在啟動web專案的時候,會根據專案中的web.xml配置檔案進行專案的初始化操作, 通過對web容器的原始碼分析和專案實踐,我們可以大致得出以下載入順序: 1)、載入<contex

web.xml的context-param不僅配路徑也配資料夾/配置檔案的載入順序

<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/

web.xml檔案中配置(servlet, spring, filter, listenr)的載入順序 研究

發現引起bug的原因是web.xml的下面幾行:    <filter-mapping>        <filter-name>SecurityFilter</filter-name>        <url-pattern>*.do</url-patt

Tomcat原始碼研究之web.xml中元素的載入順序

本文主所關注的是web.xml檔案各類元素的解析載入順序。 2018/11/15 因為CSDN改良了markdown語法,進行重新排版。 1. 前言 等不及的可以直接拖到最後看總結。 在Tomcat中,web.xml對應於Tomcat中的WebXm