ServletConfig和ServletContext接口

news2024/11/26 20:02:28

一、ServletConfig接口详解

1、简介

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

2、ServletConfig 接口

        jakarta.servlet 包提供了一个 ServletConfig 接口,该接口中提供了以下方法:

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

3、获取 ServletConfig 对象

        获取 ServletConfig 对象一般有 2 种方式:

1)从带参的 init() 方法中获取

public class ServletConfigDemo extends HttpServlet {

	private static final long serialVersionUID = 1562778022508275850L;

	private ServletConfig servletConfig;

	@Override
	public void init(ServletConfig config) throws ServletException {
		// 从带参的init()方法中,获取ServletConfig对象
		this.servletConfig = config;
	}

	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		System.out.println(this.servletConfig.getServletName());
	}

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

}

2)调用 GenericServlet 提供的 getServletConfig() 方法获取

// 通过 GenericServlet 提供的 getServletConfig 方法获得 ServletConfig 对象
ServletConfig servletConfig = this.getServletConfig();

4、配置 Servlet 初始化参数

        配置 Servlet 的初始化参数有 2 种方式:

  • 在 web.xml 中配置初始化参数;
  • 在 @WebServlet 注解中配置初始化参数;

1)在 web.xml 中配置初始化参数

        在 web.xml 中可以使用一个或多个 <init-param> 元素为 Servlet 配置初始化参数,代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="https://jakarta.ee/xml/ns/jakartaee"
	xmlns:web="http://xmlns.jcp.org/xml/ns/javaee"
	xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd http://xmlns.jcp.org/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	id="WebApp_ID" version="5.0">
	<display-name>servletDemo</display-name>
	<servlet>
		<servlet-name>ServletConfigDemo</servlet-name>
		<servlet-class>com.hoperun.www.ServletConfigDemo</servlet-class>
		<!-- Servlet 初始化参数 -->
		<init-param>
			<param-name>name</param-name>
			<param-value>CSDN</param-value>
		</init-param>
		<init-param>
			<param-name>URL</param-name>
			<param-value>https://www.csdn.net</param-value>
		</init-param>
	</servlet>
	<servlet-mapping>
		<servlet-name>ServletConfigDemo</servlet-name>
		<url-pattern>/ServletConfigDemo</url-pattern>
	</servlet-mapping>
</web-app>

以上配置说明如下:

  • <init-param> 元素是 <servlet> 的子元素,需要在 <servlet> 元素内使用,表示只对当前 Servlet 有效;
  • <param-name> 子元素:表示参数的名称;
  • <param-value> 子元素:表示参数的值;

2)在 @WebServlet 注解中配置初始化参数

        通过 @WebServlet 注解的 initParams 属性也可以为 Servlet 设置初始化参数,代码如下:

@WebServlet(urlPatterns = { "/MyServlet" }, initParams = { @WebInitParam(name = "name", value = "CSDN"),
		@WebInitParam(name = "URL", value = "www.csdn.net") })
public class MyServlet extends HttpServlet {

	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
	}
}

5、示例

        下面我们通过一个示例演示如何通过 ServletConfig 对象读取 Servlet 的初始化参数。

package com.hoperun.www;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;

import jakarta.servlet.ServletConfig;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebInitParam;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

@WebServlet(urlPatterns = "/ReadServletConfigParam", initParams = { @WebInitParam(name = "name", value = "CSDN"),
		@WebInitParam(name = "URL", value = "www.csdn.net") })
public class ReadServletConfigParam extends HttpServlet {

	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		response.setContentType("text/html;charset=UTF-8");
		PrintWriter writer = response.getWriter();
		// 获取ServletConfig对象
		ServletConfig config = getServletConfig();
		// 获取ServletName
		String servletName = config.getServletName();
		writer.write("ServletName: " + servletName + "<br/>");
		// 返回 Servlet 的初始化参数的名称的集合
		Enumeration<String> initParameterNames = config.getInitParameterNames();
		// 遍历集合获取初始化参数名称
		while (initParameterNames.hasMoreElements()) {
			// 获取初始化参数名称
			String initParamName = initParameterNames.nextElement();
			// 获取相应的初始参数的值
			String initParamValue = config.getInitParameter(initParamName);
			// 向页面输出
			writer.write(initParamName + "  :  " + initParamValue + "<br/>");
		}
		// 关闭流
		writer.close();
	}

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

}

启动 Tomcat 服务器,在地址栏输入 http://localhost:8080/servletDemo/ReadServletConfigParam,访问 ReadServletConfigParam,结果如下图:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/4086.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微电网优化调度(风、光、储能、柴油机)(Python代码实现)

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️❤️&#x1f4a5;&#x1f4a5;&#x1f4a5; ​ &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻…

【Linux命令】文件和目录权限

【Linux命令】文件和目录权限 权限查看 众所周知&#xff0c;可以使用 ls -l 来查看文件和目录的详细信息&#xff0c;那么输出的东西是什么呢&#xff1f; 我们先来看 文件类型&#xff1a; -&#xff1a;普通文件&#xff1b;d&#xff1a;目录文件&#xff1b;b&#xff…

网络协议:TCP三次握手与四次挥手

本篇内容包括&#xff1a;TCP/IP 传输协议&#xff08;TCP/IP 传输协议简介&#xff0c;IP 协议&#xff0c;UDP 协议&#xff0c;TCP 协议介绍&#xff09;&#xff0c;TCP 的三次握手、TCP 的四次挥手 以及 TCP 协议是怎么保证有效传输等内容。 一、TCP/IP 传输协议 1、TCP/…

【仿牛客网笔记】 Redis,一站式高性能存储方案——Redis入门

Redis可以开发对性能要求较高的功能。还可以利用Redis重构我们现有的功能。 NoSQL关系型数据库之外的统称。 快照有称为RDB 以快照的形式 不适合实时的去做&#xff0c;适合一段时间做一次。 日志又称AOF 以日志的形式每执行一次就存入到硬盘中&#xff0c;可以做到实时的存储以…

JAVA外卖订餐系统毕业设计 开题报告

本文给出的java毕业设计开题报告&#xff0c;仅供参考&#xff01;&#xff08;具体模板和要求按照自己学校给的要求修改&#xff09; 选题目的和意义 目的&#xff1a;本课题主要目标是设计并能够实现一个基于java的外卖点菜系统&#xff0c;管理员通过后台添加菜品&#xf…

卷积神经网络CNN

卷积神经网络CNN CNN通常用于影像处理 为什么需要CNN 为什么需要CNN&#xff0c;我用普通的fully connected的反向传播网络进行图像训练会怎样 需要过多参数 假设一张彩色的图为100100的&#xff0c;那么像素点就是1001003&#xff0c;那么输入层为三万维 假设下一层隐含层有…

移动Web:Less 预处理及Koala工具

css 预处理器&#xff0c;后缀名为 .less。 less 代码无法被浏览器识别&#xff0c;实际开发需要转换成 css&#xff0c;使用 liink 标签引入 css 文件。 插件工具 Easy Less VS Code 内置插件&#xff08;less 文件保存自动生成 css 文件&#xff09; 更改编译后 css 存储路径…

华清远见11.7

系统移植开发阶段部署 1.准备文件&#xff0c;由于内核只支持安全的启动模式&#xff0c;要准备u-boot镜像文件u-boot-stm32mp157a-fsmp1a-trusted.stm32 TF-A镜像文件tf-a-stm32mp157a-fsmp1a-trusted.stm32 linux内核镜像文件uImage和stm32mp157a-fsmp1a.dtb 根文件系统r…

QT 中多线程实现方法总结

第一&#xff1a; 用QtConcurrentRun类&#xff0c;适合在另一个线程中运行一个函数。不用继承类&#xff0c;很方便 第二&#xff1a;用QRunnable和QThreadPool结合。继承QRunnable&#xff0c;重写run函数&#xff0c;然后用QThreadPool运行这个线程。缺点是不能使用信号和槽…

html5 -- canvas使用(1)

canvas 设置canvas标签 添加宽高 默认单位为px <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta http-equiv"X-UA-Compatible" content"IEedge" /><meta name"viewport&…

荧光标记氨基酸:荧光标记DL-天门冬氨酸,荧光标记甘氨酸-DL-天冬氨酸,DL aspartic acid labeled

产品名称&#xff1a;荧光标记甘氨酸-DL-天冬氨酸&#xff0c;DL aspartic acid labeled 甘氨酸-DL-天冬氨酸是一种化学物质&#xff0c;化学式是C6H10N2O5&#xff0c;分子量是208.17。 DL-天门冬氨酸(DL-Asp)在医药方面有着重要的用途,可用于合成DL-天门冬氨酸钾镁盐(脉安定…

云原生之K8s—yaml文件

目录 一、K8S支持的文件格式 1、yaml和json的主要区别 二、YAML 2.1、查看API资源版本标签 2.2、编写资源配置清单 编写nginx-test.yaml资源配置清单 创建资源对象 查看创建的pod资源 创建资源对象 网页访问一下 K8S中的port概述 创建yaml文件模板 查看生成yaml格式…

【python的静态方法,classmethod方法和__call___魔法方法】

classmethod魔法方法和staticmethodstaticmethod&#xff0c;静态方法classmethod&#xff0c;绑定类方法__call__&#xff0c;可调用类类方法staticmethod&#xff0c;静态方法 在python中&#xff0c;使用静态方法可以实现不需要实例化对象的绑定就可以直接调用的函数&#…

Linux系统编程·进程概念

你好&#xff0c;我是安然无虞。 文章目录自学网站上文回顾进程控制块—PCB查看进程初识系统调用初始fork函数练习题自学网站 推荐给老铁们两款学习网站&#xff1a; 面试利器&算法学习&#xff1a;牛客网 风趣幽默的学人工智能&#xff1a;人工智能学习 首个付费专栏&…

添加滚动彩色提醒通知公告代码

分享一个动态的滚动多样化的彩色提醒通知公告&#xff0c;代码是自适应的&#xff0c;放在很多地方都可以用&#xff0c;在wordpress、emlog等建站cms中&#xff0c;都可以在自定义侧边栏中&#xff0c;用来网站、博客的美化也是非常不错的选择。 使用说明: wordpress&#xff…

网络编程04-UDP的广播、组播

目录 一、UDP广播通信 1、什么是广播 2、特点 3、广播地址 4、实现广播的过程&#xff08;一定是使用UDP协议&#xff09; 广播发送端 广播接收方 练习1&#xff1a; 把广播通信进行实现 发送端 接收端 二、UDP组播&#xff08;群聊&#xff09; 1、概念 2、组播特…

(最新版2022版)剑指offer之动态规划题解

&#xff08;最新版2022版&#xff09;剑指offer之动态规划题解[剑指 Offer 42. 连续子数组的最大和][剑指 Offer 47. 礼物的最大价值][剑指 Offer 46. 把数字翻译成字符串][剑指 Offer 48. 最长不含重复字符的子字符][剑指 Offer 48. 矩形覆盖][剑指 Offer 买卖股票的最好时机…

小侃设计模式(五)-建造者模式与模板方法模式

1.概述 建造者模式&#xff08;Builder Pattern&#xff09;又叫生成器模式&#xff0c;是一种对象构建模式&#xff0c;它可以将复杂对象的建造过程抽象出来&#xff08;抽象类别&#xff09;&#xff0c;这个抽象过程的不同实现方法可以构造出不同表现&#xff08;属性&…

家庭主妇问题

一 问题描述 X 村的人们住在美丽的小屋里。若两个小屋通过双向道路连接&#xff0c;则可以说这两个小屋直接相连。X 村非常特别&#xff0c;可以从任意小屋到达任意其他小屋&#xff0c;每两个小屋之间的路线都是唯一的。温迪的孩子喜欢去找其他孩子玩&#xff0c;然后打电话给…

C++中TCP socket传输文件

在两个文件中都定义文件头和用到的宏&#xff1a; #define MAX_SIZE 10 #define ONE_PAGE 4096 struct FileHead {char str[260];int size; }; 在客户端发送接收阶段&#xff1a; //1.发送文件头char path[260] {0};cout<<"请输入文件路径"<<endl;cin…