專攻知識小點——回顧JavaWeb中的servlet(二)

IT鹹魚網發表於2020-10-27

續前篇...

ServletConfig物件

  1. Servlet的配置物件,ServletConfig物件作用域只能在一個Servlet類中使用。每個Servlet類都維護一個ServletConfig物件。它的常用方法如下:

a) public String getInitParameter (String name): 返回包含指定初始化引數的值的 String,如果引數不存在,則返回 null。

b) public java.util.Enumeration getInitParameterNames ():以 String 物件的 Enumeration 的形式返回 servlet 的初始化引數的名稱,如果 servlet 沒有初始化引數,則返回一個空的 Enumeration。

c) public String getServletName():返回撥用該方法的Servlet的例項的名稱。該Servlet例項的名稱可能是伺服器通過web應用web.xml來進行分配,或者沒有分配的話,那麼該名稱就是Servlet的類名稱。

d) public ServletContext getServletContext():返回一個ServletContext物件。

  1. 引數的初始化的作用在於Servlet啟動時需要的引數配置資訊。ServletConfig的在web應用中的web.xml配置是,哪個Servlet需要進行引數初始化,就在哪個標籤裡配置。配置如下:
<servlet>    <servlet-name>ConfigServletDemo</servlet-name>    <servlet-class>com.lsh.servletconfig.demo.ConfigServletDemo</servlet-class>    <!-- 以下初始化引數可以多配置 -->    <init-param>      <param-name>who</param-name>      <param-value>Tom</param-value>    </init-param>    <init-param>      <param-name>xixi</param-name>      <param-value>abc</param-value>    </init-param>  </servlet>

在Servlet中呼叫該初始化引數的程式碼如下:

@Overridepublic void init(ServletConfig config) throws ServletException {//物件是Sevlet容器給的。this.config=config;}public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//通過指定初始化引數的name獲得value值String value=config.getInitParameter("who");System.out.println(value);//列印Tom//獲得所有的初始化引數的value值Enumeration<String> enums=config.getInitParameterNames();while(enums.hasMoreElements()){String name=enums.nextElement();System.out.println(name+"::"+config.getInitParameter(name));}//獲得Servlet的名稱String serName=config.getServletName();System.out.println(serName);//}}

**IT鹹魚

**

微訊號|mu99908888

ServletContext物件

1. ServletContext物件:

  • 在應用在被伺服器載入時就建立了一個ServletContext物件,每一個Web應用都有唯一的一個ServletContext物件。

  • 即隨著伺服器的載入而出現,隨著伺服器的關閉而消失。

  • 每次過程都是一個新的ServletContext物件。

    2. ServletContext物件的獲得:

  • ServletContext物件是通過ServletConfig的getServletContext方法來獲得或者是通過父類的靜態方法getServletContext()方法直接獲得,建議使用這一種。

  • 其實在ServletContext中是維護了一個Map<String,Object>物件(域物件)。

    3. ServletConytext常用的方法如下

  • a) public Object getAttribute (String name) : 返回具有給定名稱的 servlet 容器屬性,如果不具有該名稱的屬性,則返回 null。

    b) public void removeAttribute(String name) : 從 servlet 上下文中移除具有給定名稱的屬性。

    c) public void setAttribute(String name, Object object):

  • 將物件繫結到此 servlet 上下文中的給定屬性名稱。

  • 如果已將指定名稱用於某個屬性,則此方法將使用新屬性替換具有該名稱的屬性。

  • 如果值設定的是null,等同於removeAttribute()方法。

    d) public String getRealPath(String path):

  • 為給定虛擬路徑返回包含實際路徑的 String。

  • 比如例如,可以通過對 "http://host/contextPath/index.html" 的請求使路徑 "/index.html" 返回伺服器檔案系統上(即JavaWeb應用的目錄層次)的絕對檔案路徑,其中 contextPath 是此 ServletContext 的上下文路徑。

  • 找不到則此方法返回 null。

4.在Web應用中在web.xml的根元素下配置應用的全域性引數。配置內容如下:

<context-param>     <param-name>encoding</param-name> <param-value>GBK</param-value> </context-param>
在Servlet中獲得全域性引數的值的程式碼如下:
public class ServletContextDemo1 extends HttpServlet {    @Override    protected void doGet(HttpServletRequest req, HttpServletResponse resp)            throws ServletException, IOException {        //獲得ServletContext物件        ServletContext context=getServletContext();        //獲得web.xml中配置的全域性引數的值        String value1=context.getInitParameter("encoding");        System.out.println(value1);    }}

5.多個Servlet之間的資料共享的實現,是通過ServletConext的兩個方法來實現的。資料共享即就是一個Servlet設定完資料後,另一個Servlet通過鍵來獲得值。

首先在一個Servlet設定整個web應用的共享資料,程式碼如下:

public class ServletContextSetData extends HttpServlet {    @Override    protected void doGet(HttpServletRequest req, HttpServletResponse resp)            throws ServletException, IOException {        //獲得ServletContext物件        ServletContext context=getServletContext();        //設定應用的共享資料        context.setAttribute("name", "lisi");        resp.getOutputStream().write("put success".getBytes());    }}

設定完之後,我們就可以通過另一個Servlet類來獲取我們需要的共享資料的值,程式碼如下:

public class ServletContextSetData extends HttpServlet {    @Override    protected void doGet(HttpServletRequest req, HttpServletResponse resp)            throws ServletException, IOException {        //獲得ServletContext物件        ServletContext context=getServletContext();        //設定應用的共享資料        context.setAttribute("name", "lisi");        resp.getOutputStream().write("put success".getBytes());    }}

如果看到這裡,說明你喜歡這篇文章,請 轉發、點贊。同時 標星(置頂)本公眾號可以第一時間接受到博文推送。

我知道你 “在看”

關注公眾號“IT鹹魚”學習更多有關知識。
獲取方法:
1、掃描下方二維碼並關注:IT鹹魚
2、在IT鹹魚對話方塊回覆關鍵詞:"資料" 一併奉上。
3、也可直接新增小編微信:mu99908888 領取

相關文章