鍍金池/ 教程/ Linux/ Servlet ServletContext配置信息
Servlet web.xml welcome-file-list
Servlet從數(shù)據(jù)庫讀取記錄性能優(yōu)化
Servlet URL重寫帶參數(shù)
War文件
Web技術(shù)基礎(chǔ)
Servlet GenericServlet類
Servlet API
Servlet ServletInputStream類
使用MyEclipse創(chuàng)建Servlet
Servlet增刪改查
Servlet ServletConfig配置信息
Servlet Cookies
Servlet重定向
Servlet生命周期
Servlet HttpSession會(huì)話
Servlet HttpServlet類
Servlet注冊(cè)表單示例
Servlet表單隱藏字段
Servlet下載文件
Servlet教程
Servlet身份驗(yàn)證過濾器
Servlet ServletOutputStream類
Servlet HttpSession登錄注銷實(shí)例
Servlet啟動(dòng)時(shí)加載
Servlet事件和監(jiān)聽器
使用Eclipse創(chuàng)建Servlet
Servlet ServletContextEvent事件
Servlet HttpSessionEvent統(tǒng)計(jì)在線用戶數(shù)實(shí)例
Servlet RequestDispatcher請(qǐng)求轉(zhuǎn)發(fā)
Servlet使用注釋
Servlet過濾器示例
Servlet過慮器
Servlet ServletContext配置信息
Servlet登錄注銷Cookies實(shí)例
Servlet工作流程
Servlet會(huì)話跟蹤
Servlet登錄實(shí)例
Servlet ServletRequest接口
Servlet ServletRequestEvent類和接口
Servlet入門程序
Servlet查詢搜索數(shù)據(jù)示例
Servlet FilterConfig應(yīng)用示例
Servlet顯示所有頭信息
Servlet屬性設(shè)置
使用NetBeans創(chuàng)建Servlet
Servlet接口實(shí)現(xiàn)
Servlet上傳文件

Servlet ServletContext配置信息

ServletContext的對(duì)象由Web容器在部署項(xiàng)目時(shí)創(chuàng)建。 該對(duì)象可用于從web.xml文件獲取配置信息。 每個(gè)Web應(yīng)用程序只有一個(gè)ServletContext對(duì)象。

如果有信息要共享給多個(gè)servlet使用,最好在web.xml文件中使用<context-param>元素提供它。

ServletContext的優(yōu)點(diǎn)

如果有任何信息要共享給所有的servlet使用,并且要讓它容易維護(hù),最好的辦法就是在web.xml文件中提供這些信息,所以如果信息要更改直接在web.xml中修改,而不需要修改servlet代碼。

ServletContext接口的使用

有很多ServletContext對(duì)象可以使用。 其中一些如下:

  • ServletContext對(duì)象提供容器和servlet之間的接口。
  • 使用ServletContext對(duì)象在web.xml文件獲取配置信息。
  • ServletContext對(duì)象可用于設(shè)置,獲取或刪除web.xml文件中屬性。
  • ServletContext對(duì)象可用于提供應(yīng)用程序間通信。

參考以下示意圖 -

常用的ServletContext接口方法

給出了一些常用的ServletContext接口方法。

序號(hào) 方法 描述
1 public String getInitParameter(String name) 返回指定參數(shù)名稱的參數(shù)值。
2 public Enumeration getInitParameterNames() 返回上下文的初始化參數(shù)的名稱。
3 public void setAttribute(String name,Object object) 在應(yīng)用程序范圍內(nèi)設(shè)置給定的對(duì)象。
4 public Object getAttribute(String name) 返回指定名稱的屬性。
5 public Enumeration getInitParameterNames() 返回上下文的初始化參數(shù)的名稱,作為String對(duì)象的枚舉。
6 public void removeAttribute(String name) 從servlet上下文中刪除給定名稱的屬性。

如何獲取ServletContext接口的對(duì)象?

  • 通過ServletConfig接口的getServletContext()方法返回ServletContext對(duì)象。
  • 通過GenericServlet類的getServletContext()方法返回ServletContext對(duì)象。

getServletContext()方法的語法

public ServletContext getServletContext()

getServletContext()方法的示例

//We can get the ServletContext object from ServletConfig object  
ServletContext application=getServletConfig().getServletContext();  

//Another convenient way to get the ServletContext object  
ServletContext application=getServletContext();

在Context范圍內(nèi)提供初始化參數(shù)的語法

Web應(yīng)用程序的context-param元素的子元素用于定義應(yīng)用程序范圍中的初始化參數(shù)。 參數(shù)名稱和參數(shù)值是context-param的子元素。param-name元素定義參數(shù)名稱,param-value定義其值。參考以下配置代碼片段 -

<web-app>  
 ......  
  <context-param>  
    <param-name>parameter_name</param-name>  
    <param-value>parameter_value</param-value>  
  </context-param>
 ......  
</web-app>

獲取初始化參數(shù)的ServletContext示例

這個(gè)例子中,從web.xml文件獲取初始化參數(shù)并打印初始化參數(shù)的值。請(qǐng)注意,ServletContext的對(duì)象表示應(yīng)用程序范圍。所以如果從web.xml文件中更改參數(shù)的值,所有的servlet類都將獲得更改的值。所以不需要修改每個(gè)servlet中的值。最好通過web.xml文件中的context-param元素為多個(gè)servlet提供公共信息。下面來看一個(gè)簡(jiǎn)單的例子:

打開Eclipse,創(chuàng)建一個(gè)動(dòng)態(tài)Web項(xiàng)目,其項(xiàng)目結(jié)構(gòu)如下所示 -

以下是幾個(gè)主要的代碼文件 -

文件:ContextServlet.java -

package com.yiibai;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class ContextServlet
 */
public class ContextServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
     *      response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // TODO Auto-generated method stub
        response.setContentType("text/html");
        PrintWriter pw = response.getWriter();

        // creating ServletContext object
        ServletContext context = getServletContext();

        // Getting the value of the initialization parameter and printing it
        String driverName = context.getInitParameter("dname");
        pw.println("driver name is = <b>'" + driverName+"'</b>");

        pw.close();
    }

}

文件:web.xml -

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
    id="WebApp_ID" version="3.1">
    <display-name>ServletContext</display-name>
    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
    </welcome-file-list>
    <servlet>
        <servlet-name>ContextServ</servlet-name>
        <servlet-class>com.yiibai.ContextServlet</servlet-class>
    </servlet>

    <context-param>
        <param-name>dname</param-name>
        <param-value>com.mysql.jdbc.Driver</param-value>
    </context-param>
    <servlet-mapping>
        <servlet-name>ContextServ</servlet-name>
        <url-pattern>/context</url-pattern>
    </servlet-mapping>
</web-app>

在編寫完成上述代碼后,部署這個(gè)Web應(yīng)用,打開瀏覽器訪問URL: http://localhost:8080/ServletContext/context ,如果程序沒有錯(cuò)誤,應(yīng)該會(huì)看到以下結(jié)果 -

獲取所有初始化參數(shù)的ServletContext示例

在這個(gè)例子中,我們將從web.xml文件中獲取所有初始化參數(shù)。要獲取所有參數(shù),需要在servlet類中使用getInitParameterNames()方法。

在上面項(xiàng)目中,新建一個(gè)名稱為:ContextServletAll.java 的Servlet,其代碼如下 -

package com.yiibai;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class ContextServletAll
 */
public class ContextServletAll extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
     *      response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // TODO Auto-generated method stub
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();

        ServletContext context = getServletContext();
        Enumeration<String> e = context.getInitParameterNames();
        String str = "";
        while (e.hasMoreElements()) {
            str = e.nextElement();
            out.print("<br> " + context.getInitParameter(str));
        }
    }

}

文件:web.xml -

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
    id="WebApp_ID" version="3.1">
    <display-name>ServletContext</display-name>
    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
    </welcome-file-list>
    <servlet>
        <servlet-name>ContextServ</servlet-name>
        <servlet-class>com.yiibai.ContextServlet</servlet-class>
    </servlet>
    <context-param>
        <param-name>dname</param-name>
        <param-value>com.mysql.jdbc.Driver</param-value>
    </context-param>
    <servlet-mapping>
        <servlet-name>ContextServ</servlet-name>
        <url-pattern>/context</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>ContextServAll</servlet-name>
        <servlet-class>com.yiibai.ContextServletAll</servlet-class>
    </servlet>
    <context-param>
        <param-name>dname</param-name>
        <param-value>com.mysql.jdbc.Driver</param-value>
    </context-param>
    <context-param>
        <param-name>username</param-name>
        <param-value>root</param-value>
    </context-param>

    <context-param>
        <param-name>password</param-name>
        <param-value>mypasswd</param-value>
    </context-param>
    <servlet-mapping>

        <servlet-name>ContextServAll</servlet-name>
        <url-pattern>/contextall</url-pattern>
    </servlet-mapping>
</web-app>

在編寫完成上述代碼后,部署這個(gè)Web應(yīng)用,打開瀏覽器訪問URL: http://localhost:8080/ServletContext/contextall ,如果程序沒有錯(cuò)誤,應(yīng)該會(huì)看到以下結(jié)果 -