ServletContext接口介绍和示例详解

  1. ServletContext接口
  2. ServletContext接口的用法
  3. ServletContext接口的方法
  4. 如何获取ServletContext的对象
  5. 在Context范围内提供初始化参数的语法
  6. 获取初始化参数的ServletContext示例
  7. 获取所有初始化参数的ServletContext示例

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

如果任何信息都共享给许多servlet, 则最好使用<context-param>元素从web.xml文件中提供信息。

ServletContext的优势

如果任何信息都共享给所有servlet, 则易于维护, 最好使其可用于所有servlet。我们从web.xml文件中提供此信息, 因此, 如果更改了信息, 则无需修改servlet。因此, 它消除了维护问题。

ServletContext接口的用法

ServletContext对象的用法很多。其中一些如下:

  1. ServletContext的对象提供了容器和Servlet之间的接口。
  2. ServletContext对象可用于从web.xml文件获取配置信息。
  3. ServletContext对象可用于设置, 获取或删除web.xml文件中的属性。
  4. ServletContext对象可用于提供应用程序间的通信。
ServletContext接口

ServletContext接口的常用方法

给出了ServletContext接口的一些常用方法。 public String getInitParameter(String name):返回指定参数名称的参数值。 public Enumeration getInitParameterNames():返回上下文的初始化参数的名称。 public void setAttribute(String name, Object object):在应用程序范围内设置给定的对象。 public Object getAttribute(String name):返回指定名称的属性。 public Enumeration getInitParameterNames():将上下文的初始化参数的名称作为String对象的Enumeration返回。 public void removeAttribute(String name):从Servlet上下文中删除具有给定名称的属性。

如何获取ServletContext接口的对象

  1. ServletConfig接口的getServletContext()方法返回ServletContext的对象。
  2. 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-app的context-param元素(子元素)用于在应用程序范围内定义初始化参数。 param-name和param-value是context-param的子元素。 param-name元素定义参数名称, 而param-value定义其值。
<web-app>
 ......
    
  <context-param>
    <param-name>parametername</param-name>
    <param-value>parametervalue</param-value>
  </context-param>
 ......
</web-app>

获取初始化参数的ServletContext示例

在此示例中, 我们从web.xml文件中获取初始化参数, 并打印该初始化参数的值。注意, ServletContext对象代表了应用程序范围。因此, 如果我们从web.xml文件中更改参数的值, 则所有servlet类都将获取更改后的值。因此, 我们不需要修改servlet。因此, 最好通过context-param元素在web.xml文件中具有大多数servlet的公共信息。让我们看一个简单的例子:

DemoServlet.java

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;


public class DemoServlet extends HttpServlet{
public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException
{
res.setContentType("text/html");
PrintWriter pw=res.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="+driverName);

pw.close();

}}

web.xml

<web-app>

<servlet>
<servlet-name>sonoojaiswal</servlet-name>
<servlet-class>DemoServlet</servlet-class>
</servlet>

<context-param>
<param-name>dname</param-name>
<param-value>sun.jdbc.odbc.JdbcOdbcDriver</param-value>
</context-param>

<servlet-mapping>
<servlet-name>sonoojaiswal</servlet-name>
<url-pattern>/context</url-pattern>
</servlet-mapping>

</web-app>

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

在此示例中, 我们从web.xml文件中获取所有初始化参数。为了获取所有参数, 我们在Servlet类中使用了getInitParameterNames()方法。

DemoServlet.java

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;


public class DemoServlet extends HttpServlet{
public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException
{
res.setContentType("text/html");
PrintWriter out=res.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

<web-app>

<servlet>
<servlet-name>sonoojaiswal</servlet-name>
<servlet-class>DemoServlet</servlet-class>
</servlet>

<context-param>
<param-name>dname</param-name>
<param-value>sun.jdbc.odbc.JdbcOdbcDriver</param-value>
</context-param>

<context-param>
<param-name>username</param-name>
<param-value>system</param-value>
</context-param>

<context-param>
<param-name>password</param-name>
<param-value>oracle</param-value>
</context-param>

<servlet-mapping>
<servlet-name>sonoojaiswal</servlet-name>
<url-pattern>/context</url-pattern>
</servlet-mapping>

</web-app>
微信公众号
手机浏览(小程序)
0
分享到:
没有账号? 忘记密码?