JaveWeb学习之Servlet(二):ServletConfig和ServletContext
原文同步發(fā)表至個(gè)人博客【夜月歸途】
原文鏈接:http://www.guitu18.com/se/java/2018-07-26/20.html
作者:夜月歸途出處:http://www.guitu18.com/
本博客中未標(biāo)明轉(zhuǎn)載的文章歸作者夜月歸途和博客園所有。 歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁(yè)面明顯位置給出原文連接,否則保留追究法律責(zé)任的權(quán)利。
ServletConfig
繼續(xù)查看ServletConfig源碼:
package javax.servlet; public interface ServletConfig {public String getServletName();public ServletContext getServletContext();public String getInitParameter(String name);public Enumeration<String> getInitParameterNames(); }?
getServletName();
getServletName方法用于獲取當(dāng)前Servlet名稱(chēng),這個(gè)是在xml中配置的:<servlet-name>springmvcdemo</servlet-name>;
getServletContext();
getServletContext方法用于獲取代表當(dāng)前web應(yīng)用的ServletContext對(duì)象;
getInitParameter(String name);
getInitParameter方法用于獲取當(dāng)前Servlet指定名稱(chēng)的初始化參數(shù)的值;
getInitParameterNames();
getInitParameterNames獲取當(dāng)前Servlet所有初始化參數(shù)的名字枚舉集合;
Servlet容器初始化時(shí)每一個(gè)Servlet對(duì)象時(shí),會(huì)為其創(chuàng)建一個(gè)ServletConfig對(duì)象,通過(guò)Servlet的init方法,會(huì)把ServletContext對(duì)象傳遞給當(dāng)前Servlet:
public void init(ServletConfig config) throws ServletException;?
之后使用this.getServletConfig()對(duì)象獲取當(dāng)前Servlet的ServletConfig對(duì)象;
ServletConfig servletConfig = getServletConfig();?
我們?cè)趚ml中配置Servlet時(shí),還可以配置Servlet初始化參數(shù)信息:
<servlet><servlet-name>Servlet_1</servlet-name><servlet-class>com.guitu.servlet.Servlet_1</servlet-class><init-param><param-name>username</param-name><param-value>zhangkuan</param-value></init-param> </servlet>?
之后可以通過(guò)servletConfig獲取InitParameter參數(shù);
Enumeration<String> initParameterNames = servletConfig.getInitParameterNames();?
獲得的是一個(gè)參數(shù)名字的枚舉集合,在調(diào)用getInitParameter(String name)即可獲得參數(shù)的值:
String initParameter = servletConfig.getInitParameter(parameterName);?
ServletContext
Servlet容器啟動(dòng)后,會(huì)為每一個(gè)獨(dú)立的Web應(yīng)用創(chuàng)建一個(gè)ServletContext實(shí)例,代表當(dāng)前Web應(yīng)用;
ServletContext由所有Servlet共享,所以ServletContext中的參數(shù)所有Servlet都能夠獲取,多個(gè)web組件之間使用它實(shí)現(xiàn)數(shù)據(jù)共享;
ServletContext常用方法:
getAttribute(String name);
獲取ServletContext中存儲(chǔ)的數(shù)據(jù);
setAttribute(String name, Object obj);
向ServletContext中存儲(chǔ)數(shù)據(jù);
getInitParameter(String name);
獲取<context-param>標(biāo)簽中為整個(gè)Web應(yīng)用配置的初始化參數(shù);
getInitParameterNames();
一次性獲取<context-param>里所有的初始化參數(shù)名的枚舉;
getRealPath(String path);
獲取應(yīng)用程序內(nèi)指定資源的絕對(duì)路徑;
getResource(String parh);
path必須是/開(kāi)頭,代表當(dāng)前web應(yīng)用程序的根目錄。返回一個(gè)代表某個(gè)資源的URL對(duì)象;
getResoutceAsStream(String parh);
可以使用相對(duì)于根目錄的路徑訪(fǎng)問(wèn)到web目錄下的所有文件,而不必知道絕對(duì)路徑,返回文件流;
ServletConfig、ServletContext測(cè)試Demo
1、Servlet_1:
package com.guitu.servlet;import java.io.IOException; import java.util.Enumeration;import javax.servlet.ServletConfig; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;public class Servlet_1 extends HttpServlet {protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {ServletConfig servletConfig = getServletConfig();Enumeration<String> initParameterNames = servletConfig.getInitParameterNames();System.out.println("=====Servlet_1.ServletConfig.InitParameter=====");while (initParameterNames.hasMoreElements()) {String parameterName = initParameterNames.nextElement();String initParameter = servletConfig.getInitParameter(parameterName);System.out.println(parameterName + ":" + initParameter);}System.out.println("=====Servlet_1.ServletContext.InitParameter=====");ServletContext servletContext = getServletContext();Enumeration<String> contextInitParameters = servletContext.getInitParameterNames();while (contextInitParameters.hasMoreElements()) {String parameterName = contextInitParameters.nextElement();String initParameter = servletContext.getInitParameter(parameterName);System.out.println(parameterName + ":" + initParameter);}servletContext.setAttribute("message", "Hello World !");}protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}}?
2、Servlet_2:
package com.guitu.servlet;import java.io.IOException; import java.util.Enumeration;import javax.servlet.ServletConfig; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;public class Servlet_2 extends HttpServlet {protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {ServletConfig servletConfig = getServletConfig();Enumeration<String> initParameterNames = servletConfig.getInitParameterNames();System.out.println("=====Servlet_2.ServletConfig.InitParameter======");while (initParameterNames.hasMoreElements()) {String parameterName = initParameterNames.nextElement();String initParameter = servletConfig.getInitParameter(parameterName);System.out.println(parameterName + ":" + initParameter);}System.out.println("=====Servlet_2.ServletContext.InitParameter=====");ServletContext servletContext = getServletContext();Enumeration<String> contextInitParameters = servletContext.getInitParameterNames();while (contextInitParameters.hasMoreElements()) {String parameterName = contextInitParameters.nextElement();String initParameter = servletContext.getInitParameter(parameterName);System.out.println(parameterName + ":" + initParameter);}System.out.println("=====servletContext.getAttribute=====");Object object = servletContext.getAttribute("message");System.out.println("message:" + object);}protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}}?
3、web.xml配置:
<context-param><param-name>domain</param-name><param-value>guitu18.com</param-value> </context-param> <context-param><param-name>name</param-name><param-value>夜月歸途</param-value> </context-param> <servlet><servlet-name>Servlet_1</servlet-name><servlet-class>com.guitu.servlet.Servlet_1</servlet-class><init-param><param-name>username</param-name><param-value>zhangkuan</param-value></init-param> </servlet> <servlet-mapping><servlet-name>Servlet_1</servlet-name><url-pattern>/Servlet_1</url-pattern> </servlet-mapping> <servlet><servlet-name>Servlet_2</servlet-name><servlet-class>com.guitu.servlet.Servlet_2</servlet-class><init-param><param-name>password</param-name><param-value>Guitu18</param-value></init-param> </servlet> <servlet-mapping><servlet-name>Servlet_2</servlet-name><url-pattern>/Servlet_2</url-pattern> </servlet-mapping>?
在Servlet1和Servlet2中,分別獲得了ServletConfig對(duì)象和ServletContext對(duì)象;
在web.xml中,也分別為他們配置了不同的初始化參數(shù),同時(shí)配置了一個(gè)context級(jí)的初始化參數(shù);
之后分別在兩個(gè)Servlet中獲取ServletConfig和ServletContext的InitParamer參數(shù);
在Servlet1中還通過(guò)setAttribute向ServletContext域中保存了一條消息message,在Servlet2中,便可以通過(guò)getAttribute獲取這條消息;
4、訪(fǎng)問(wèn)兩個(gè)Servlet,先訪(fǎng)問(wèn)Servlet_1:
=====Servlet_1.ServletConfig.InitParameter===== username:zhangkuan =====Servlet_1.ServletContext.InitParameter===== domain:guitu18.com name:夜月歸途?
再訪(fǎng)問(wèn)Servlet_2:
=====Servlet_2.ServletConfig.InitParameter===== password:Guitu18 =====Servlet_2.ServletContext.InitParameter===== domain:guitu18.com name:夜月歸途 =====servletContext.getAttribute===== message:Hello World !?
可以看到,每個(gè)Servlet擁有自己ServletConfig對(duì)象,數(shù)據(jù)不互通,而ServletContext中的初始化參數(shù)和context域中的參數(shù),是所有Servlet共享的,可以使用context域?qū)崿F(xiàn)數(shù)據(jù)共享;
轉(zhuǎn)載于:https://www.cnblogs.com/guitu18/p/10224653.html
總結(jié)
以上是生活随笔為你收集整理的JaveWeb学习之Servlet(二):ServletConfig和ServletContext的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。