Servlet ServletContext配置信息

广告位

ServletContext的对象由Web容器在部署项目时创建。 该对象可用于从web.xml文件获取配置信息…

ServletContext的对象由Web容器在部署项目时创建。 该对象可用于从web.xml文件获取配置信息。 每个Web应用程序只有一个ServletContext对象。

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

ServletContext的优点

如果有任何信息要共享给所有的servlet使用,并且要让它容易维护,最好的办法就是在web.xml文件中提供这些信息,所以如果信息要更改直接在web.xml中修改,而不需要修改servlet代码。

ServletContext接口的使用

有很多ServletContext对象可以使用。 其中一些如下:

  • ServletContext对象提供容器和servlet之间的接口。
  • 使用ServletContext对象在web.xml文件获取配置信息。
  • ServletContext对象可用于设置,获取或删除web.xml文件中属性。
  • ServletContext对象可用于提供应用程序间通信。

参考以下示意图 –

Servlet ServletContext配置信息

常用的ServletContext接口方法

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

序号 方法 描述
1 public String getInitParameter(String name) 返回指定参数名称的参数值。
2 public Enumeration getInitParameterNames() 返回上下文的初始化参数的名称。
3 public void setAttribute(String name,Object object) 在应用程序范围内设置给定的对象。
4 public Object getAttribute(String name) 返回指定名称的属性。
5 public Enumeration getInitParameterNames() 返回上下文的初始化参数的名称,作为String对象的枚举。
6 public void removeAttribute(String name) 从servlet上下文中删除给定名称的属性。

如何获取ServletContext接口的对象?

  • 通过ServletConfig接口的getServletContext()方法返回ServletContext对象。
  • 通过GenericServlet类的getServletContext()方法返回ServletContext对象。

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范围内提供初始化参数的语法

Web应用程序的context-param元素的子元素用于定义应用程序范围中的初始化参数。 参数名称和参数值是context-param的子元素。param-name元素定义参数名称,param-value定义其值。参考以下配置代码片段 –

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

获取初始化参数的ServletContext示例

这个例子中,从web.xml文件获取初始化参数并打印初始化参数的值。请注意,ServletContext的对象表示应用程序范围。所以如果从web.xml文件中更改参数的值,所有的servlet类都将获得更改的值。所以不需要修改每个servlet中的值。最好通过web.xml文件中的context-param元素为多个servlet提供公共信息。下面来看一个简单的例子:

打开Eclipse,创建一个动态Web项目,其项目结构如下所示 –

以下是几个主要的代码文件 –

文件: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>  

在编写完成上述代码后,部署这个Web应用,打开浏览器访问URL: ,如果程序没有错误,应该会看到以下结果 –

Servlet ServletContext配置信息

获取所有初始化参数的ServletContext示例

在这个例子中,我们将从web.xml文件中获取所有初始化参数。要获取所有参数,需要在servlet类中使用getInitParameterNames()方法。

在上面项目中,新建一个名称为: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>  

在编写完成上述代码后,部署这个Web应用,打开浏览器访问URL: ,如果程序没有错误,应该会看到以下结果 –

Servlet ServletContext配置信息

贺, 贺朝

关于作者: 贺朝

为您推荐