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对象可用于提供应用程序间通信。
参考以下示意图 –
常用的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: ,如果程序没有错误,应该会看到以下结果 –
获取所有初始化参数的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: ,如果程序没有错误,应该会看到以下结果 –