JaveWeb学习之Servlet(二):ServletConfig和ServletContext
原文同步發表至個人博客【夜月歸途】
原文鏈接:http://www.guitu18.com/se/java/2018-07-26/20.html
作者:夜月歸途出處:http://www.guitu18.com/
本博客中未標明轉載的文章歸作者夜月歸途和博客園所有。 歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。
ServletConfig
繼續查看ServletConfig源碼:
package javax.servlet; public interface ServletConfig {public String getServletName();public ServletContext getServletContext();public String getInitParameter(String name);public Enumeration<String> getInitParameterNames(); }?
getServletName();
getServletName方法用于獲取當前Servlet名稱,這個是在xml中配置的:<servlet-name>springmvcdemo</servlet-name>;
getServletContext();
getServletContext方法用于獲取代表當前web應用的ServletContext對象;
getInitParameter(String name);
getInitParameter方法用于獲取當前Servlet指定名稱的初始化參數的值;
getInitParameterNames();
getInitParameterNames獲取當前Servlet所有初始化參數的名字枚舉集合;
Servlet容器初始化時每一個Servlet對象時,會為其創建一個ServletConfig對象,通過Servlet的init方法,會把ServletContext對象傳遞給當前Servlet:
public void init(ServletConfig config) throws ServletException;?
之后使用this.getServletConfig()對象獲取當前Servlet的ServletConfig對象;
ServletConfig servletConfig = getServletConfig();?
我們在xml中配置Servlet時,還可以配置Servlet初始化參數信息:
<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>?
之后可以通過servletConfig獲取InitParameter參數;
Enumeration<String> initParameterNames = servletConfig.getInitParameterNames();?
獲得的是一個參數名字的枚舉集合,在調用getInitParameter(String name)即可獲得參數的值:
String initParameter = servletConfig.getInitParameter(parameterName);?
ServletContext
Servlet容器啟動后,會為每一個獨立的Web應用創建一個ServletContext實例,代表當前Web應用;
ServletContext由所有Servlet共享,所以ServletContext中的參數所有Servlet都能夠獲取,多個web組件之間使用它實現數據共享;
ServletContext常用方法:
getAttribute(String name);
獲取ServletContext中存儲的數據;
setAttribute(String name, Object obj);
向ServletContext中存儲數據;
getInitParameter(String name);
獲取<context-param>標簽中為整個Web應用配置的初始化參數;
getInitParameterNames();
一次性獲取<context-param>里所有的初始化參數名的枚舉;
getRealPath(String path);
獲取應用程序內指定資源的絕對路徑;
getResource(String parh);
path必須是/開頭,代表當前web應用程序的根目錄。返回一個代表某個資源的URL對象;
getResoutceAsStream(String parh);
可以使用相對于根目錄的路徑訪問到web目錄下的所有文件,而不必知道絕對路徑,返回文件流;
ServletConfig、ServletContext測試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對象和ServletContext對象;
在web.xml中,也分別為他們配置了不同的初始化參數,同時配置了一個context級的初始化參數;
之后分別在兩個Servlet中獲取ServletConfig和ServletContext的InitParamer參數;
在Servlet1中還通過setAttribute向ServletContext域中保存了一條消息message,在Servlet2中,便可以通過getAttribute獲取這條消息;
4、訪問兩個Servlet,先訪問Servlet_1:
=====Servlet_1.ServletConfig.InitParameter===== username:zhangkuan =====Servlet_1.ServletContext.InitParameter===== domain:guitu18.com name:夜月歸途?
再訪問Servlet_2:
=====Servlet_2.ServletConfig.InitParameter===== password:Guitu18 =====Servlet_2.ServletContext.InitParameter===== domain:guitu18.com name:夜月歸途 =====servletContext.getAttribute===== message:Hello World !?
可以看到,每個Servlet擁有自己ServletConfig對象,數據不互通,而ServletContext中的初始化參數和context域中的參數,是所有Servlet共享的,可以使用context域實現數據共享;
轉載于:https://www.cnblogs.com/guitu18/p/10224653.html
總結
以上是生活随笔為你收集整理的JaveWeb学习之Servlet(二):ServletConfig和ServletContext的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 软件工程基本原理
- 下一篇: 抖音很火的存钱计划,让python告诉你