前言
前面我介紹了一下什么是servlet,它的生命周期,執行過程和它的原理。這里我們做一個簡單的回顧!
什么是Servlet?
servlet 是運行在 Web 服務器中的小型 Java 程序(即:服務器端的小應用程序)。servlet 通常通過 HTTP(超文本傳輸協議)接收和響應來自 Web 客戶端的請求。
執行過程:
生命周期:
實例化-->初始化-->服務->銷毀
出生:(實例化-->初始化)第一次訪問Servlet就出生(默認情況下)
活着:(服務)應用活着,servlet就活着
死亡:(銷毀)應用卸載了servlet就銷毀。
如何讓servlet在服務器啟動時就創建:
在web.xml中的servlet標簽里面配置一個load-on-startup來設置
一、Servlet規范核心類圖
接下來我們要說的是Servlet的四個類:
ServletConfig對象,ServletContext對象、request對象,response對象
從圖中我們可以知道這幾個對象之間的聯系!
一、ServletConfig對象
1.1、獲取ServletConfig對象
1)使用初始化方法獲得一個ServletConfig對象
2)通過繼承父類(GenericServlet)的方法得到一個ServletConfig對象
ServletConfig config = this.getServletConfig();
1.2、ServletConfig對象作用
1)getServletName(); //獲取servlet的名稱,也就是我們在web.xml中配置的servlet-name
2)getServletContext(); //獲取ServletContext對象,該對象的作用看下面講解
3)getInitParameter(String); //獲取在servlet中初始化參數的值。這里注意與全局初始化參數的區分。這個獲取的只是在該servlet下的初始化參數
4)getInitParameterNames(); //獲取在Servlet中所有初始化參數的名字,也就是key值,可以通過key值,來找到各個初始化參數的value值。注意返回的是枚舉類型
在Servlet類中
結果
注意:在上面我們所分析的源碼過程中,我們就知道,其實可以不用先獲得ServletConfig,然后在獲取其各種參數,可以直接使用其方法,比如上面我們用的ServletConfig().getServletName();
可以直接寫成getServletName();而不用在先獲取ServletConfig();了,原因就是在GenericServlet中,已經幫我們獲取了這些數據,我們只需要直接拿就行。
String value = this.getInitParameter("wolf");
二、ServletContext
2.1、獲取ServletContext對象
1)getServletContext();
2)getServletConfig().getServletContext();
這兩種獲取方式的區別就跟上面的解釋一樣,第一種是直接拿,在GenericServlet中已經幫我們用getServletConfig().getServletContext();拿到了ServletContext。
我們只需要直接獲取就行了,第二種就相當於我們自己在獲取一遍,兩種讀是一樣的。
2.2、ServletContext對象作用
tomcat為每個web項目都創建一個ServletContext實例,tomcat在啟動時創建,服務器關閉時銷毀,在一個web項目中共享數據,管理web項目資源,
為整個web配置公共信息等,通俗點講,就是一個web項目,就存在一個ServletContext實例,每個Servlet讀可以訪問到它。
1)web項目中共享數據
在一定范圍內(當前應用),使多個Servlet共享數據
getAttribute(String name)、setAttribute(String name, Object obj)、removeAttribute(String name)
1.1)setAttribute(String name, Object obj) 在web項目范圍內存放內容,以便讓在web項目中所有的servlet讀能訪問到
1.2)getAttribute(String name) 通過指定名稱獲得內容
1.3)removeAttribute(String name) 通過指定名稱移除內容
實例:
我們在Servlet_demo_0010中寫:
this.getServletContext().setAttribute("bang", "adc");
然后我們在Servlet_demo_0020中看能不能獲取到:
結果:
得到了adc
2)獲取全局配置信息
整個web項目初始化參數 (這個就是全局初始化參數,每個Servlet中都能獲取到該初始化值)
2.1)getInitPatameter(String name) //通過指定名稱獲取初始化值
2.2)getInitParameterNames() //獲得枚舉類型
web.xml 配置 整個web項目的初始化
結果:
3)獲取web項目資源
3.1)獲取web項目下指定資源的路徑:getServletContext().getRealPath("/WEB-INF/web.xml")
String getRealPath(String path);//根據資源名稱得到資源的絕對路徑
結果:
應用:
3.2)獲取web項目下指定資源的內容,返回的是字節輸入流。InputStream getResourceAsStream(java.lang.String path)
結果的一部分:
3.3)getResourcePaths(java.lang.String path) 指定路徑下的所有內容。
結果:
3.4)實現servlet的轉發
RequestDispatcher getRequestDispatcher(String path) ;//參數表示要跳轉到哪去