前言:

    Servlet 容器初始化 Servlet 时,会为这个 Servlet 创建一个 ServletConfig 对象,并将 ServletConfig 对象作为参数传递给 Servlet 。通过 ServletConfig 对象即可获得当前 Servlet 的初始化参数信息。
一个 Web 应用中可以存在多个 ServletConfig 对象,一个 Servlet 只能对应一个 ServletConfig 对象,即 Servlet 的初始化参数仅对当前 Servlet 有效。

返回值类型 方法 功能描述
String getInitParameter(String name) 根据初始化参数名 name,返回对应的初始化参数值。
Enumeration<String> getInitParameterNames() 返回 Servlet 所有的初始化参数名的枚举集合,如果该 Servlet 没有初始化参数,则返回一个空的集合。
ServletContext getServletContext() 返回一个代表当前 Web 应用的 ServletContext 对象。
String getServletName() 返回 Servlet 的名字,即 web.xml 中 <servlet-name> 元素的值。

一、配置servlet 初始化 有两种 

  1. 使用 web.xml 配置初始化参数。
  2. 使用 @WebServlet 配置初始化参数。

(1)、配置 web.xml 文件

  使用标签初始化的参数是被应用程序中所有的servlet所共享。但是有时候我们需要为某一个特定的servlet配置参数,这个时候我们就需要使用servlet初始化参数。

  在web.xml文件中为当前web应用添加三个名为 admin-email、admin-name和admin-password 的ServletConText 初始化参数,在Select中获取这三个参数。

  xml部分:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0"> <!-- 配置 Servlet类 路径 -->
<servlet>
<servlet-name>Servlet</servlet-name>
<servlet-class>main.java.com.Servlet</servlet-class>
</servlet> <!-- 配置整个web应用的初始化参数 -->
<context-param>
<param-name>admin-email</param-name>
<param-value>123456@qq.com</param-value>
</context-param>
<context-param>
<param-name>admin-name</param-name>
<param-value>xiaoxi</param-value>
</context-param>
<context-param>
<param-name>admin-password</param-name>
<param-value>123456</param-value>
</context-param> <!-- 配置 Servlet 映射 -->
<servlet-mapping>
<servlet-name>Servlet</servlet-name>
<url-pattern>/Servlet</url-pattern>
</servlet-mapping>
</web-app>

Servlet部分:

使用  ServletConfig 接口的 getServletConfig() 的方法 获取Config ,  再通过getServletContext() 获取 ServletContext对象 最后通过getInitParameter(String name)方法,根据 配置的param-name名称返回 param-value

package main.java.com;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException; @WebServlet(name = "Servlet", value = "/Servlet")
public class Servlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
ServletConfig config = this.getServletConfig(); ServletContext servletContext = config.getServletContext();
String adminEmail = servletContext.getInitParameter("admin-email");//利用名字获取值
String adminName = servletContext.getInitParameter("admin-name");//利用名字获取值
String password = servletContext.getInitParameter("admin-password");//利用名字获取值
response.getWriter().println("admin-email: " + adminEmail);
response.getWriter().println("admin-name: " + adminName);
response.getWriter().println("admin-password: " + password);
} @Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response); // 使用doGet
}
}

最后的输结果是:

当然了 xml 中可以 配置web 全局的 Servlet 初始化参数,也可以 使用<init-param> 配置 当前 Servlet的初始化参数

以下配置说明:

  1. <init-param> 元素是 <servlet> 的子元素, 需要在 <servlet> 元素内使用,表示只对当前 Servlet 有效 。
  2. <param-name> 子元素表示参数的名称。
  3. <param-value> 子元素表示参数的值。
<servlet>
<servlet-name>MyServlet</servlet-name>
<servlet-class>java.com.MyServlet</servlet-class>
<!-- Servlet 初始化参数 -->
<init-param>
<param-name>name</param-name>
<param-value>xiaoxi</param-value>
</init-param>
<!-- Servlet 初始化参数 -->
<init-param>
<param-name>admin</param-name>
<param-value>xiaoxi</param-value>
</init-param>
</servlet>

(2)、在 @WebServlet注释中  添加 @WebInitParam 注释 配置初始化参数

package main.java.com;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration; @WebServlet(
name = "helloServlet",
value = "/helloServlet", //这里加上逗号
initParams = { //添加一个 initParams 属性
@WebInitParam( // 再使用 @WebInitParam 注解 携带 name和value 的属性和属性值 多个参数可以用逗号隔开 再次使用@WebInitParam注解
name = "name",
value = "测试"),
@WebInitParam(
name = "Admin",
value = "123456")
})
public class helloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8"); // 设置编码集为 utf-8
PrintWriter writer = response.getWriter(); // 创建一个Writer流
ServletConfig config = getServletConfig(); // 获取ServletConfig对象
String servletName = config.getServletName();// 获取servletName
Enumeration<String> initParameterNames = config.getInitParameterNames();// 返回 servlet 的初始化参数的名称的集合
while (initParameterNames.hasMoreElements()) { // 遍历集合获取初始化参数名称
String initParamName = initParameterNames.nextElement(); // 获取初始化参数名称
String initParamValue = config.getInitParameter(initParamName); // 获取相应的初始参数的值
writer.write(initParamName + " : " + initParamValue + "<br/>"); // 向页面输出
}
// 关闭流
writer.close();
} @Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}
}

在浏览器中输入 地址 最后结果是:

ServletConfig接口介绍的更多相关文章

  1. Java EE javax.servlet中的ServletConfig接口

    ServletConfig接口 public interface ServletConfig 实现类:GenericServlet.HttpServlet 一.介绍 一个供servlet容器使用配置对 ...

  2. ServletConfig接口默认是哪里实现的?

    问题:Servlet接口默认是哪里实现的? 答:GenericServlet 1.结构 2.ServletConfig.GenericServlet.HttpServlet的关系如下: public ...

  3. Hive 接口介绍(Web UI/JDBC)

    Hive 接口介绍(Web UI/JDBC) 实验简介 本次实验学习 Hive 的两种接口:Web UI 以及 JDBC. 一.实验环境说明 1. 环境登录 无需密码自动登录,系统用户名shiyanl ...

  4. SSH动态查询封装接口介绍

    SSH动态查询封装接口介绍 1.查询记录总条数 public int count(Class c,Object[][] eq,Object[][] like,String[] group,String ...

  5. 【百度地图API】如何在地图上添加标注?——另有:坐标拾取工具+打车费用接口介绍

    原文:[百度地图API]如何在地图上添加标注?--另有:坐标拾取工具+打车费用接口介绍 摘要: 在这篇文章中,你将学会,如何利用百度地图API进行标注.如何使用API新增的打车费用接口. ------ ...

  6. 如何删除要素类 IFeatureWorkspace 接口介绍(1)

    如何删除要素类 要想删除一个要素类,那么必须先得到这个,在得到这个要素类的时候,我们要学习一个新的接口IFeatureWorkspace. IFeatureWorkspace  接口介绍 这个接口主要 ...

  7. Redis --> Redis的接口介绍及使用

    Redis的接口介绍及使用 Redis是一个远程内存数据库,它不仅性能强劲,而且还具有复制特性以及为解决问题而生的独一无二的数据模型.Redis提供了5种不同类型的数据结构,各式各样的问题都可以很自然 ...

  8. iic接口介绍

    最近遇到一个BUG,跟IIC通信有关,所以借这个机会总结一下IIC总线协议 1.引脚接口介绍 1.A0,A1,A2为24LC64的片选信号,IIC总线最多可以挂载8个IIC接口器件,通过对A0,A1, ...

  9. Spring之InstantiationAwareBeanPostProcessor接口介绍

      InstantiationAwareBeanPostProcessor接口是BeanPostProcessor的子接口,通过接口字面意思翻译该接口的作用是感知Bean实例话的处理器.实际上该接口的 ...

  10. Servlet(7)—ServletConfig接口和SevletContext接口

    ServletConfig接口 1. 可以获取当前Servlet在web.xml中的配置信息(用的不多) 2. 在不使用"硬编码"的情况下,将部署状态信息传递给Servlet.这个 ...

随机推荐

  1. 2022-04-25内部群每日三题-清辉PMP

    1.项目章程批准之后,项目经理开始使用储备分析进行预算工作.哪些文件支持这项工作? A.项目资金需求.成本基准和项目储备计划 B.范围基准.风险登记册和项目进度计划 C.质量管理计划.项目资金需求和风 ...

  2. leetCode 您正在爬楼梯。它需要n步才能到达顶部。每次您可以爬1或2步。您可以通过几种不同的方式登顶?

    找抄的,不明白!!! public static int climbStairs(int n) { return climb_Stairs(0, n); } public static int cli ...

  3. cmd 备份 oracle 数据 dmp文件

    语法 :     exp 用户名/密码@数据库地址/数据库名 file=文件导出地址/文件名.dmp 实例:exp develop/123@localhost/orcl file=e:/2019-02 ...

  4. uniapp滚动组件scroll-view

    //scroll-x="true"  || scroll-y="true" <view class="scroll-view"> ...

  5. Pytest Fixture(一)

    Fixture 是一些函数,pytest 会在执行测试函数之前(或之后)加载运行它们.我们可以用它做一些事情,比如数据库的链接操作之类的 import pytest @pytest.fixture() ...

  6. Java 多线程 术语

    并行和并发:并发偏重于多个任务交替执行.并行是真正意义上的"同时执行".但两者的最终效果是一样的: 同步和异步:同步是指在同一时间里,一个同步方法调用后需要返回后,才能继续后续的行 ...

  7. Delphi中纤程的使用

    首先我们来看看纤程的定义 纤程(来自百科): 纤程是Windows为了将Unix服务程序更好的移植到Windows上而创建的, 线程是在Windows内核中实现的,纤程是在用户模式下实现的,内核对纤程 ...

  8. Win10解决无法访问其他机器共享的问题【转】

    你不能访问此共享文件夹,因为你组织的安全策略阻止未经身份验证的来宾访问.这些策略可帮助保护你的电脑免受网络上不安全设备或恶意设备的威胁.管理员身份执行sc.exe config lanmanworks ...

  9. 显式等待(一)WebDriverWait类、until()方法

    转自: https://blog.csdn.net/zyooooxie/article/details/84422924

  10. vue后台管理系统——商品管理模块

    电商后台管理系统的功能--商品管理模块 商品管理概述 商品管理模块用于维护电商平台的商品信息,包括商品的类型.参数.图片.详情等信息. 通过商品管理模块可以实现商品的添加.修改.展示和删除等功能. 1 ...