首页 > 其他分享 >ServletConfig接口介绍

ServletConfig接口介绍

时间:2023-03-08 20:22:52浏览次数:35  
标签:初始化 name admin ServletConfig 介绍 servlet 参数 接口 Servlet

前言:

    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>[email protected]</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);
    }
}

 

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

 总结:

  1. 使用xml 既可以全局配置 Servlet 的初始化参数 可以针对当前的Servlet 生效
  2. 使用注解方式 只对当前的Servlet生效

 

标签:初始化,name,admin,ServletConfig,介绍,servlet,参数,接口,Servlet
From: https://www.cnblogs.com/xiaoxiblog/p/17195823.html

相关文章

  • ES6-ES11 Map的介绍与API
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>Map</t......
  • 虚拟化系列-VMware篇-Horizon介绍
    虚拟化系列-VMware篇-Horizon介绍徐建强发布时间:   2021-04-0814:49:23浏览量:   1074评论:   11点赞:   11云桌面网络应用服务存储计算......
  • delphi 报表控件介绍
    报表控件介绍FastReportVCL概述用于生成报告和文档的VCL组件集。它提供可视化模板设计器、对最流行数据源的访问、报告引擎、预览、导出过滤器到30多种格式,以及部署......
  • ZLMediakit独家特性介绍
    1、先播放后推流痛点:推流成功前不能提前播放场景介绍:有些及时推流的场景,存在推流和播放同时发生的场景,这种场景一般是一对一的,譬如说基于rtmp推流的行车记录仪,用户在调......
  • redis之列表、redis之hash、redis其他操作、redis 管道、django中使用redis、celery介
    目录1redis之列表2redis之hash3redis其他操作4redis管道5django中使用redis5celery介绍和安装6celery快速使用7celery包结构#1登录注册前端 -登录 -手......
  • CIFAR100数据集介绍及使用方法
    一、CIFAR100概述CIFAR100数据集有100个类。每个类有600张大小为32×3232\times3232×32的彩色图像,其中500张作为训练集,100张作为测试集。对于每一张图像,它有fine_labe......
  • instanceof简单介绍
    官方说明是:判断左边的对象是不是右边对象类的实例   意思是说条件操作数类型int和int不兼容   instanceof左边不能是基本类型,需要是引用类型publicclass......
  • 接口自动化–自动编写自动化case
    接口自动化–自动编写自动化case工作以来遇到和接触到很多的自动化测试框架。无论是什么样的自动化测试框架或者是自动化测试平台原理是基本是一致的。都是通过驱动测试用......
  • jeecg-boot中分页接口用自定义sql和list实现
    1、controller中@ApiOperation(value="分析仪工作状态和报警-3列-分页",notes="分析仪工作状态和报警状态-分页")@ApiImplicitParams({@ApiImpli......
  • typescript 接口demo
    https://www.runoob.com/typescript/ts-interface.html......