Servlet-04ServletConfig和ServletContext

一.ServletConfig

1.概述

ServletConfig 是 Java Servlet 规范中的一个接口,它为 Servlet 提供了初始化信息 。当 Servlet 容器(如 Tomcat)创建一个 Servlet 实例时,它会传递一个 ServletConfig 对象给 Servlet 的 init 方法ServletConfig 对象包含了 Servlet 配置信息,这些信息主要来自于 Web 应用的部署描述符(web.xml 文件)。

java 复制代码
public interface ServletConfig {
    String getServletName();
    ServletContext getServletContext();
    String getInitParameter(String var1);
    Enumeration<String> getInitParameterNames();
}

总结:

  • 为Servlet提供初始配置参数的一种对象,每个Servlet都有自己独立唯一的ServletConfig对象
  • 容器会为每个Servlet实例化一个ServletConfig对象,并通过Servlet生命周期的init方法传入给Servlet作为属性

2.配置文件

我们可以在web.xml 文件为Servlet配置相关信息,如初始化参数(执行init会使用),映射路径等信息。

xml 复制代码
<servlet>
    <servlet-name>MyServlet</servlet-name>
    <servlet-class>com.example.MyServlet</servlet-class>
    <init-param>
        <param-name>dbUrl</param-name>
        <param-value>jdbc:mysql://localhost:3306/mydb</param-value>
    </init-param>
    <init-param>
        <param-name>dbUser</param-name>
        <param-value>root</param-value>
    </init-param>
    <init-param>
        <param-name>dbPassword</param-name>
        <param-value>password</param-value>
    </init-param>
</servlet>

<servlet-mapping>
    <servlet-name>MyServlet</servlet-name>
    <url-pattern>/myServlet</url-pattern>
</servlet-mapping>

当然也可以用注解@WebServlet来进行配置

java 复制代码
@WebServlet(value="/myServlet",initParams = {@WebInitParam(name="dbUser",value = "root"),@WebInitParam(name="dbPassword",value = "password")})

根据@WebServlet注解中的WebInitParam[] initParams() default {}可知,我们需要传递一个WebInitParam类型,而WebInitParam实际上是一个注解,如下

java 复制代码
public @interface WebInitParam {
    String name();

    String value();

    String description() default "";
}

3.具体使用

ServletConfig接口中有如下几个方法

方法名 作用
getServletName() 获取在标签中定义的Servlet名称
getServletContext() 获取ServletContext对象
getInitParameter() 获取配置Servlet时设置的『初始化参数』,根据名字获取值
getInitParameterNames() 获取所有初始化参数名组成的Enumeration对象

例子

java 复制代码
@WebServlet(value = "/s1",initParams = {@WebInitParam(name="key",value = "value1")})
public class UserServlet extends HttpServlet {
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取ServletConfig对象,这个方法在父类HttpServlet中定义
        ServletConfig servletConfig = getServletConfig();
        //获取所有的参数名,放到Enumeration对象中(相当于一个迭代器,可以依次遍历其中的值)
        Enumeration<String> initParameterNames = servletConfig.getInitParameterNames();
        //这个方法是判断是否有下一个,相当于游标
        while (initParameterNames.hasMoreElements()) {
            //取出下一个的值
            String s = initParameterNames.nextElement();
            System.out.println(servletConfig.getInitParameter(s));
        }

    }
}

二.ServletContext

1.概述

ServletContext 是 Java Servlet 规范中的一个重要接口,它代表了整个 Web 应用的上下文环境。每个 Web 应用在启动时都会有一个唯一ServletContext 实例,该实例在整个应用的生命周期内都是有效的。

ServletContext代表应用,所以ServletContext域也叫作应用域,是webapp中最大的域,可以在本应用内实现数据的共享和传递

ServletContext 提供了多种功能,使得 Servlet 和 JSP 页面能够访问 Web 应用的全局信息、配置参数以及共享数据。如:

  • 获取初始化参数
  • 获取资源
  • 属性管理
  • 访问 Web 应用的信息
  • 日志记录

2.相关配置

我们可以在web.xml文件中进行配置

xml 复制代码
<context-param>
        <param-name>username</param-name>
        <param-value>zhangsan</param-value>
    </context-param>
    <context-param>
        <param-name>password</param-name>
        <param-value>123456</param-value>
</context-param>

所有的Servlet对象都可以通过ServletContext对象访问该数据,且整个web应用只有一个ServletContext的实例

3.常用API介绍

  • 获取资源的真实路径

    java 复制代码
     String realPath = servletContext.getRealPath("资源在web目录中的路径");
  • 获取项目的上下文路径

    java 复制代码
     String contextPath = servletContext.getContextPath();
  • 通过域进行数据共享

    java 复制代码
    void setAttribute(String key,Object value); //向域中存储/修改数据 
    Object getAttribute(String key); //获得域中的数据 
    void removeAttribute(String key); //移除域中的数据 

三.注意事项

每个Servlet对象都有一个专有的ServletConfig对象,而所有Servlet对象共用一个ServletContext对象。

相关推荐
周全全1 分钟前
Spring Boot + Vue 基于 RSA 的用户身份认证加密机制实现
java·vue.js·spring boot·安全·php
AiFlutter44 分钟前
Java实现简单的搜索引擎
java·搜索引擎·mybatis
飞升不如收破烂~1 小时前
Spring boot常用注解和作用
java·spring boot·后端
秦老师Q1 小时前
Java基础第九章-Java集合框架(超详细)!!!
java·开发语言
计算机毕设源码qq-38365310411 小时前
(附项目源码)Java开发语言,215 springboot 大学生爱心互助代购网站,计算机毕设程序开发+文案(LW+PPT)
java·开发语言·spring boot·mysql·课程设计
ashane13141 小时前
Java list
java·windows·list
袁庭新1 小时前
Cannal实现MySQL主从同步环境搭建
java·数据库·mysql·计算机·java程序员·袁庭新
无尽的大道1 小时前
深入理解 Java 阻塞队列:使用场景、原理与性能优化
java·开发语言·性能优化
何遇mirror1 小时前
云原生基础-云计算概览
后端·云原生·云计算
岁岁岁平安2 小时前
springboot实战(15)(注解@JsonFormat(pattern=“?“)、@JsonIgnore)
java·spring boot·后端·idea