ServletConfig和ServletContext接口

news/2024/5/20 23:51:41/文章来源:https://blog.csdn.net/weixin_42051619/article/details/127740005

一、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;@Overridepublic 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();// 获取ServletNameString 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.luyixian.cn/news_show_223728.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

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

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

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

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

【Unity3D】游戏物体操作 ④ ( 选中多个游戏物体操作 | 复制选中物体 | 聚焦选中物体 | 激活、禁用选中物体 | 对齐选中物体 )

文章目录一、选中多个游戏物体操作1、Scene 场景窗口选中多个物体2、Hierarchy 层级窗口选中多个物体二、复制选中物体1、使用 " Ctrl D " 快捷键复制物体2、使用 右键菜单 | Duplicate 选项复制三、聚焦选中物体四、激活、禁用选中物体五、对齐选中物体一、选中多个…

计算机组成原理浮点数表示

浮点数表示 浮点数的表示分为阶码和尾数&#xff1b; 比如3.026*1011;阶码是11;尾数是3.026&#xff1b; 对于阶码&#xff1a; 阶符为正&#xff0c;小数点向后移n位&#xff08;n表示阶的大小&#xff09;; 阶符为负&#xff0c;小数点向前移n位&#xff08;n表示阶的大小&a…

AttributeError: ‘bytes‘ object has no attribute ‘encode‘异常解决方案

AttributeError: bytes object has no attribute encode是&#xff1a;“字节”对象没有属性的编码的意思。 很明显&#xff0c;是编码格式的问题&#xff0c;例如&#xff1a;已经是byte格式的字符串类型&#xff0c;二次进行encode的时候就会出现这个bug&#xff0c;示例如下…

【猿创征文】Vue3 企业级优雅实战 - 组件库框架 - 1 搭建 pnpm monorepo

前两篇文章分享了基于 vite3 vue3 的组件库基础工程 vue3-component-library-archetype 和用于快速创建该工程的工具 yyg-cli&#xff0c;但在中大型的企业级项目中&#xff0c;通常会自主搭建这些脚手架或加速器。优雅哥希望每位前端伙伴能知其所以然&#xff0c;故接下来的文…

基础IO(下)——Linux

文章目录1. 理解文件系统1.2 背景知识1.2 inode vs 文件名1.3 软硬链接2. 动态库和静态库2.1 静态库.a2.1.1 如果想写一个库&#xff1f;&#xff08;编写库的人的角度&#xff09;2.1.2如果我把库给别人&#xff0c;别人怎么用呢&#xff1f;&#xff08;使用库的人的角度&…

中医-通过舌象判断身体状况

本文分享通过舌象判断身体的整体状况&#xff08;中医角度&#xff09;&#xff0c;得出一个可供辨证的参考&#xff0c;并且可以根据舌象做出相关的饮食调整&#xff0c;本文主讲理论&#xff0c;相关舌象图片易引人不适&#xff0c;如需找相关图片&#xff0c;可根据本文中的…

git rebase实战

例如&#xff0c; 在B分支上做rebase。 git rebase 之前确保当前分支是最新的。 切换到B分支&#xff1a; 1.git rebase origin/master(以origin/master分支为基线&#xff0c;合入master分支的修改到origin/master)此时会提示冲突文件 2.对冲突文件进行修改 3.git add 4.git …

网络面试-ox07http中的keep-alive以及长/短连接

非Keep-Alive: 早起HTTP1.0, 浏览器发起http请求需要与服务器建立新的TCP连接&#xff0c;请求处理后连接立即关闭。 缺点&#xff1a;每个这样的连接&#xff0c;客户端与服务器都要分配TCP的缓冲区和变量&#xff0c;这给服务器带来严重的负担。 Keep-Alive: 默认持久连接&am…

上海亚商投顾:沪指录得6连阳 两市成交再度破万亿

上海亚商投顾前言&#xff1a;无惧大盘大跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 市场情绪 三大指数今日横盘震荡&#xff0c;收盘集体小幅上扬&#xff0c;日K线均录得6连阳。虚拟现实概念股集体拉升&#…

最详细、最全面的【Java日志框架】介绍,建议收藏,包含JUL、log4j、logback、log4j2等所有主流框架

前言 本文为 【Java日志框架】 相关知识&#xff0c;之前已经介绍了Java日志框架的发展历史&#xff1a;Java日志框架的发展历史。 这篇文章将对日志的概念与作用&#xff0c;JUL日志框架&#xff0c;Log4j日志框架&#xff0c;Logback日志框架&#xff0c;Log4j2日志框架&…

详谈一下:Java中的基本类型变量(8种)与引用类型变量的区别

对于Java语言中的基本类型&#xff0c;不知道各位老铁是否还能全能说出来&#xff01;&#xff01; Java语言中的8种基本类型&#xff1a; byteshortintlongfloatdoublecharbollen 上面8种Java语言中的基本类型&#xff0c;所对应的变量&#xff0c;就是基本类型变量&#xf…

【代码随想录】二刷-字符串

字符串 代码随想录如果想让这套题目有意义&#xff0c;就不要申请额外空间。 344.反转字符串 双指针 // 时间复杂度O(n),执行n/2次交换 // 空间复杂度O(1) class Solution { public:void reverseString(vector<char>& s) {int n s.size();for(int left 0,right n-…

浅谈CAD如何精准导入图新地球并应用在工程行业

摘要&#xff1a;本文以重庆九建某某高校施工项目前期准备和施工验证工作为依托&#xff0c;以图新地球精准导入CAD为研究对象&#xff0c;总结了一套相对成熟且完善的应用技术。该应用技术能在实际地形和现状数据中迅速找到施工点的大致位置&#xff0c;为前期工程勘测争取足够…

22下半年软考集成广东卷(中项)真题在线估分

22年下半年广东软考也已经落下帷幕了&#xff0c;整理的2022年下半年软考集成广东卷答案已经出炉&#xff01; 在线估分预测一下分数~ 大家锦鲤附身&#xff01;都能过&#xff01; 第5题 ”十四五"规划和2035远景目标纲要就打造&#xff08; &#xff09;新优势、加快&a…

5. 凸集和凸函数

凸集和凸函数1.仿射集2.凸集3.向量范数4.凸集的性质5.凸函数6.凸函数的一阶二阶条件7. 保凸运算8.凸函数和凸集的关系1.仿射集 2.凸集 仿射集 -------> 凸集 凸集 ----//----> 仿射集 3.向量范数 4.凸集的性质 5.凸函数 6.凸函数的一阶二阶条件 7. 保凸运算 凸函数的性…

海外拼多多Temu最新动态,怎么快速提升销量和权重?(测评补单)

上线一个多月后&#xff0c;拼多多跨境业务Temu的日均GMV突破了150万美元&#xff0c;入驻商家数量近3万个&#xff0c;SKU在30-40万&#xff0c;涵盖了24个一级类目。 据报道&#xff0c;目前Temu的日活成交用户在6万左右&#xff0c;下载用户接近80万&#xff0c;30天的复购…

vue3与vue2的不同内容

一、main.js入口文件的不同 // 引入的不再是构造函数&#xff0c;引入了一个名为creacteApp的工厂函数 import { createApp } from vue import ./style.css import App from ./App.vue // 创建应用示例对象--->app const app createApp(App) //把组件APP挂载到#app节点上 …

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

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