ServletConfig和ServletContext接口以及使用案例

本文详细介绍了ServletConfig和ServletContext接口在Java Web开发中的作用。ServletConfig主要用于获取Servlet在web.xml中的配置信息,而ServletContext则代表Web应用,提供获取初始化参数、读取资源文件等方法。通过实例展示了如何使用这两个接口来读取参数和资源文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ServletConfig 和 ServletContext 两个接口:
首先先说ServletConfig:
ServletConfig接口:
ServletConfig 接口中定义了一系列获取配置信息的方法,如表所示。

1)创建Servlet
在 Servlet.gyf.Two02 包中创建一个名称为 TestServlet03 的 Servlet 类,并在类中编写用于读取 web.xml 文件中参数信息的代码,如下所示:

package Servlet.gyf.Two02;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

//@WebServlet("/TestServlet03")
public class TestServlet03 extends HttpServlet {
    //ServletConfig的使用
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        PrintWriter out = response.getWriter();
        ServletConfig config = this.getServletConfig();
        String param = config.getInitParameter("encoding");
        out.println("encoding="+param);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request,response);
    }
}

2)配置参数信息
在 web.xml 文件中为 Servlet 配置一些参数信息,具体的配置代码如下所示:

<!--  ServletConfig的使用web.xml配置-->
  <servlet>
    <servlet-name>TestServlet03</servlet-name>
    <servlet-class>Servlet.gyf.Two02.TestServlet03</servlet-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
  </servlet>
  <servlet-mapping>
    <servlet-name>TestServlet03</servlet-name>
    <url-pattern>/TestServlet03</url-pattern>
  </servlet-mapping>

在上面的参数信息中, 节点表示要设置的参数,该节点中的 表示参数的名称, 表示参数的值,在 节点中为 TestServlet03 配置了一个名为 encoding 的参数,并设置其参数的值为 UTF-8。

3)运行项目并查看结果
启动 Tomcat 服务器,在浏览器的地址栏中输入地址 :
http://localhost:9999/Servlet/TestServlet03
在这里插入图片描述
这是运行结果
通过 ServletConfig 对象可以获得 web.xml 文件中的参数信息
ServletContext接口
当 Tomcat 启动时,Tomcat 会为每个 Web 应用创建一个唯一的 ServletContext 对象代表当前的 Web 应用,该对象封装了当前 Web 应用的所有信息。可以利用该对象获取 Web 应用程序的初始化信息、读取资源文件等

1. 获取 Web 应用程序的初始化参数
在 web.xml 文件中,不仅可以配置 Servlet 的映射信息,还可以配置整个 Web 应用的初始化信息。Web 应用初始化参数的配置方式具体如下所示:

<!--初始化信息-->
<context-param>
    <param-name>aaa</param-name>
    <param-value>bbb</param-value>
</context-param>
<context-param>
    <param-name>ccc</param-name>
    <param-value>ddd</param-value>
</context-param>

元素位于根元素 中,它的子元素 和 分别用于指定参数的名字和参数值。要想获取这些参数名和参数值的信息,可以使用 ServletContext 接口中定义的 getInitParameterNames() 和 getInitParameter(String name)方法分别获取

1)在 servletDemo04 项目的 web.xml 文件中配置初始化参数信息和 Servlet 信息,其代码如下所示:

<!-- ServletContext的使用web.xml配置-->
  <!--预存信息-->
  <context-param>
    <param-name>username</param-name>
    <param-value>admin</param-value>
  </context-param>
  <context-param>
    <param-name>password</param-name>
    <param-value>1234</param-value>
  </context-param>

  <servlet>
    <servlet-name>TestServlet04</servlet-name>
    <servlet-class>Servlet.gyf.Two02.TestServlet04</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>TestServlet04</servlet-name>
    <url-pattern>/TestServlet04</url-pattern>
  </servlet-mapping>

2)在项目的Servlet.gyf.Two02 包中创建一个名称为 TestServlet04 的类,该类中使用 ServletContext 接口获取 web.xml 中的配置信息,如下所示。

package Servlet.gyf.Two02;

import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;

//@WebServlet("/TestServlet04")
public class TestServlet04 extends HttpServlet {
    //ServletContext的使用
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
       response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();
        //得到ServletContext对象
        ServletContext context = this.getServletContext();
        //得到包含所有初始化参数名的Enumeration对象
        Enumeration<String> paramNames = context.getInitParameterNames();
        //遍历所有的初始化参数名,得到相应的参数值并打印
        while(paramNames.hasMoreElements()){
            String name = paramNames.nextElement();
            String values = context.getInitParameter(name);
            out.println(name+":"+values);
            out.println("<br/>");
        }
        //
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request,response);
    }
}

当通过 this.getServletContext() 方法获取到 ServletContext 对象后,首先调用 getInitParameterNames() 方法,获取到包含所有初始化参数名的 Enumeration 对象,然后遍历 Enumeration 对象,根据获取到的参数名,通过 getInitParamter(String name)方法得到对应的参数值。

3)启动 Tomcat 服务器,在浏览器的地址栏中输入地址
:http://localhost:9999/Servlet/TestServlet04
在这里插入图片描述
web.xml 文件中配置的信息被读取了出来。由此可见,通过 ServletContext 对象可以获取 Web 应用的初始化参数

2. 读取 Web 应用下的资源文件
有时会需要读取 Web 应用中的一些资源文件,如配置文件和日志文件等。为此,在 ServletContext 接口中定义了一些读取 Web 资源的方法,这些方法是依靠 Servlet 容器实现的。Servlet 容器根据资源文件相对于 Web 应用的路径,返回关联资源文件的 I/O 流或资源文件在系统的绝对路径等

Set getResourcePaths(String path):暂时未补充

String getRealPath(String path) :

URL getResource(String path):

InputStream getResourceAsStream(String path):

演示如何使用 ServletContext 对象读取资源文件
1)在src 目录中创建一个名称为 itcast.properties 的文件,在创建好的文件中输入如下所示的配置信息:

username=admin
password=1234

2)在Servlet.gyf.Two02 包中创建一个名称为 TestServlet05 的 Servlet 类,使用该类读取 itcast.properties 资源文件的内容,其实现代码如下所示。

package Servlet.gyf.Two02;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.Properties;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class TestServlet05 extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
        response.setContentType("text/html;charset=utf-8");
        ServletContext context = this.getServletContext();
        PrintWriter out = response.getWriter();
        // 获取相对路径中的输入流对象
        InputStream in = context
            .getResourceAsStream("/WEB-INF/classes/itcast.properties");
        Properties pros = new Properties();
        pros.load(in);
        out.println("username=" + pros.getProperty("username") + "<br/>");
        out.println("password=" + pros.getProperty("password") + "<br/>");
    }
    public void doPost(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
        this.doGet(request, response);
    }
}

在上述代码中,使用 ServletContext 的 getResourceAsStream(String path)方法获得了关联 itcast.properties 资源文件的输入流对象,其中的 path 参数必须以正斜线(/)开始,表示 itcast.properties 文件相对于 Web 应用的相对路径

3)启动 Tomcat 服务器,在浏览器的地址栏中输入地址 :

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值