ServletConfig类和ServletContext类

1.ServletConfig类

1什么是ServletConfig?

ServletConfig 类从类名上来看,就知道是 Servlet 程序的配置信息类
Servlet 程序默认是第一次访问的时候创建, ServletConfig 是每个 Servlet 程序创建时,就创建一个对应的 ServletConfig
象。

2.ServletConfig类的三大作用?

1 、可以获取 Servlet 程序的别名 servlet-name 的值
2 、获取初始化参数 init-param
3 、获取 ServletContext 对象
web.xml 中的配置:
<!-- servlet 标签给 Tomcat 配置 Servlet 程序 -->
<servlet>
<!--servlet-name 标签 Servlet 程序起一个别名(一般是类名) --><servlet-name>HelloServlet</servlet-name>
<!--servlet-class 是 Servlet 程序的全类名--><servlet-class>com.atguigu.servlet.HelloServlet</servlet-class>
<!--init-param 是初始化参数-->
<init-param>
<!--是参数名--><param-name>username</param-name>
<!--是参数值--><param-value>root</param-value>
</init-param>
<!--init-param 是初始化参数-->
<init-param>
<!--是参数名--><param-name>url</param-name>
<!--是参数值--><param-value>jdbc:mysql://localhost:3306/test</param-value>
</init-param>
</servlet>
<!--servlet-mapping 标签给 servlet 程序配置访问地址-->
<servlet-mapping>
<!--servlet-name 标签的作用是告诉服务器,我当前配置的地址给哪个 Servlet 程序使用--><servlet-name>HelloServlet</servlet-name>
<!--
url-pattern 标签配置访问地址 <br/>
/ 斜杠在服务器解析的时候,表示地址为:http://ip:port/工程路径 <br/>
/hello 表示地址为:http://ip:port/工程路径/hello <br/>
--><url-pattern>/hello</url-pattern>
</servlet-mapping>

servlet中的代码:

    @Overridepublic void init(ServletConfig servletConfig) throws ServletException {System.out.println("2 init 初始化方法");
// 1、可以获取 Servlet 程序的别名 servlet-name 的值System.out.println("HelloServlet 程序的别名是:" + servletConfig.getServletName());
// 2、获取初始化参数 init-paramSystem.out.println("初始化参数 username 的值是;" +     servletConfig.getInitParameter("username"));System.out.println("初始化参数 url 的值是;" + servletConfig.getInitParameter("url"));
// 3、获取 ServletContext 对象System.out.println(servletConfig.getServletContext());
}

2.ServletContext类

1.什么是ServletContext?

1 ServletContext 是一个接口,它表示 Servlet 上下文对象
2 、一个 web 工程,只有一个 ServletContext 对象实例。
3 ServletContext 对象是一个域对象。
4 ServletContext 是在 web 工程部署启动的时候创建。在 web 工程停止的时候销毁。
什么是域对象?
域对象,是可以像 Map 一样存取数据的对象,叫域对象。
这里的域指的是存取数据的操作范围,整个 web 工程。
存数据                        取数据                       删除数据
Map     :      put()                           get()                         remove()
域对象  :     setAttribute()              getAttribute()            removeAttribute();

2.ServletContext类的四个作用?

1 、获取 web.xml 中配置的上下文参数 context-param
2 、获取当前的工程路径,格式 : / 工程路径
3 、获取工程部署后在服务器硬盘上的绝对路径
4 、像 Map 一样存取数据

 ServletContext演示代码:

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
// 1、获取 web.xml 中配置的上下文参数 context-paramServletContext context = getServletConfig().getServletContext();String username = context.getInitParameter("username");System.out.println("context-param 参数 username 的值是:" + username);System.out.println("context-param 参数 password 的值是:" +context.getInitParameter("password"));
// 2、获取当前的工程路径,格式: /工程路径System.out.println( "当前工程路径:" + context.getContextPath() );
// 3、获取工程部署后在服务器硬盘上的绝对路径
/**
* / 斜杠被服务器解析地址为:http://ip:port/工程名/ 映射到 IDEA 代码的 web 目录<br/>
*/System.out.println("工程部署的路径是:" + context.getRealPath("/"));System.out.println("工程下 css 目录的绝对路径是:" + context.getRealPath("/css"));System.out.println("工程下 imgs 目录 1.jpg 的绝对路径是:" +                 context.getRealPath("/imgs/1.jpg"));
}

web.xml中的配置:

<!--context-param 是上下文参数(它属于整个 web 工程)-->
<context-param><param-name>username</param-name><param-value>context</param-value>
</context-param>
<!--context-param 是上下文参数(它属于整个 web 工程)-->
<context-param><param-name>password</param-name><param-value>root</param-value>
</context-param>

ServletContext向Map一样存数据:

public class ContextServlet1 extends HttpServlet {protected void doGet(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {// 获取 ServletContext 对象ServletContext context = getServletContext();System.out.println(context);System.out.println("保存之前: Context1 获取 key1 的值是:"+ context.getAttribute("key1"));context.setAttribute("key1", "value1");System.out.println("Context1 中获取域数据 key1 的值是:"+ context.getAttribute("key1"));}
}

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

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

相关文章

编程笔记 html5cssjs 076 Javascript 表达式

编程笔记 html5&css&js 076 Javascript 表达式 一、JavaScript表达式二、示例总结 在JavaScript中&#xff0c;表达式是一种可以计算出值的结构。它可以是一个简单的字面量&#xff08;如数字或字符串&#xff09;&#xff0c;一个变量名&#xff0c;或者更复杂的结构&…

Python3 交叉编译 numpy pandas scipy scikit-learn

1. 概述 由于需要将Python3.7 和一些软件包交叉编译到 armv7 平台硬件&#xff0c;如果是arm64位的系统&#xff0c;很多包都有预编译好的版本&#xff0c;可直接下载。本文主要在基于 crossenv(https://github.com/benfogle/crossenv)环境下交叉编译。 2. 编译环境搭建 创建…

Node.js-1

Node.js 简介 定义&#xff1a;Node.js 是一个跨平台 JavaScript 运行环境&#xff0c;使开发者可以搭建服务器端的 JavaScript 应用程序 为什么 Node.js 能执行 JS 代码&#xff1a; Chrome 浏览器能执行 JS 代码&#xff0c;依靠的是内核中的 V8引擎&#xff08;即&#x…

2024PMP考试新考纲-近年真题练一练和很详细解析(1)

前面的几十篇文章中&#xff0c;华研荟主要从PMP相关的教材&#xff08;PMBOK第六版、PMBOK第七版和敏捷实践指南》出发&#xff0c;分类介绍了相关的考试真题&#xff0c;并逐一作了比较详细的解析&#xff0c;部分典型题目还做了提醒和拓展&#xff0c;帮助大家做题的时候知其…

Leetcode的AC指南 —— 栈与队列 :1047.删除字符串中的所有相邻重复项

摘要&#xff1a; **Leetcode的AC指南 —— 栈与队列 &#xff1a;1047.删除字符串中的所有相邻重复项 **。题目介绍&#xff1a;给出由小写字母组成的字符串 S&#xff0c;重复项删除操作会选择两个相邻且相同的字母&#xff0c;并删除它们。 在 S 上反复执行重复项删除操作&a…

面试常问的-React 18的新特性

2022年3月发布的React 18带来了一系列新特性和更新,极大地增强了React应用程序的功能和性能。这个版本为并发渲染奠定了基础,这是React未来更新的基石。下面我们来深入了解React 18的关键特性和变化,包括技术细节和代码示例。 升级到React 18 要开始使用React 18,请使用npm或…

MATLAB计算多边形质心/矩心

前言&#xff1a;不规则四边形的中心 不规则四边形的出心有多种定义&#xff0c;以下是最常见的三种&#xff1a; 1.重心&#xff1a;重心是四边形内部所有顶点连线交点的平均位置。可以通过求解四个顶点坐标的平均值来找到重心。 2.质心&#xff1a;质心是四边形内部所有质点…

242. Valid Anagram(有效的字母异位词)

问题描述 给定两个字符串 s 和 t &#xff0c;编写一个函数来判断 t 是否是 s 的字母异位词。 注意&#xff1a;若 s 和 t 中每个字符出现的次数都相同&#xff0c;则称 s 和 t 互为字母异位词。 问题分析 此问题与383. Ransom Note(赎金信)类似&#xff0c;只是字符变为了…

Python入门指北二十三

Python中有哪些常用的ORM框架&#xff1f;它们的特点是什么&#xff1f; Python中有多个常用的ORM框架&#xff0c;每个框架都有其独特的特点和适用场景。以下是其中几个常用的ORM框架&#xff1a; SQLAlchemy&#xff1a;SQLAlchemy是Python中一个非常流行的ORM框架&#xf…

Qt多语言翻译

Qt多语言翻译概述 Qt提供了非常简单易用的多语言翻译机制&#xff0c;其核心类为QTranslator.概括来说就是利用Qt的lupdate工具将项目中所有tr函数包裹的字符串提取到.ts文件中&#xff0c;然后使用Qt Linguist由专门的翻译人员对提取的.ts文件进行逐个单词短语的翻译工作. 翻译…

Qt中的线程与信号槽

小实践 mainwindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H // #pragma once #include <QMainWindow> #include"zthread.h"QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACEclass ZThread;class MainWindow : public QMainWin…

docker入门教程之将应用程序容器化

将应用程序容器化 在本指南的其余部分中&#xff0c;您将使用在 Node.js 上运行的简单待办事项列表管理器。如果您不熟悉 Node.js&#xff0c;请不要担心。本指南不需要任何 JavaScript 经验。 先决条件 您已安装最新版本的 Docker Desktop。您已经安装了 Git 客户端。您可以…

突破编程_C++_基础教程(指针(一))

1 指针的基础概念 指针是 C 的核心之一&#xff0c;使用 C 语言构建的程序之所以性能强悍&#xff0c;有很大部分原因是体现在使用指针直接操作内存。当然这样的工具是一把双刃剑&#xff0c;错误的指针操作可能会导致程序崩溃或者数据损坏。 指针主要有四个方面的用途&#x…

java05 数组

一 概念介绍 指的是一种容器&#xff0c;可以同来存储同种数据类型的多个值。 但是数组容器在存储数据的时候&#xff0c;需要结合隐式转换考虑。 比如&#xff1a; 定义了一个int类型的数组。那么boolean。double类型的数据是不能存到这个数组中的&#xff0c; 但是byte类…

Java线程同步的方法和例子

在Java中&#xff0c;线程同步是一种机制&#xff0c;用于确保多个线程可以安全地访问共享资源&#xff0c;而不会发生数据不一致或数据损坏的情况。线程同步的主要方法包括&#xff1a; synchronized关键字&#xff1a;这是Java中最常用的线程同步方法。它用于方法或代码块&a…

Orange3数据预处理(分组组件)

Group By是Orange3中一个非常有用的组件&#xff0c;它允许用户对数据集进行聚合操作&#xff0c;类似于SQL中的GROUP BY语句或Pandas库中的groupby方法。以下是Group By组件的一些核心功能介绍&#xff1a; 1. Mean (平均数): 数据值的总和除以数据项的数量&#xff0c;显示数…

Megatron-LM源码系列(七):Distributed-Optimizer分布式优化器实现Part2

1. 使用入口 DistributedOptimizer类定义在megatron/optimizer/distrib_optimizer.py文件中。创建的入口是在megatron/optimizer/__init__.py文件中的get_megatron_optimizer函数中。根据传入的args.use_distributed_optimizer参数来判断是用DistributedOptimizer还是Float16O…

【持续学习系列(九)】《Continual Learning with Pre-Trained Models: A Survey》

一、论文信息 1 标题 Continual Learning with Pre-Trained Models: A Survey 2 作者 Da-Wei Zhou, Hai-Long Sun, Jingyi Ning, Han-Jia Ye, De-Chuan Zhan 3 研究机构 National Key Laboratory for Novel Software Technology, Nanjing University; School of Artifici…

C#,雅各布斯塔尔—卢卡斯(Jacobsthal Lucas Number)的算法与源代码

1 雅各布斯塔尔序列 雅各布斯塔尔序列是一个与斐波那契序列类似的加法序列&#xff0c;由递归关系JnJn-12Jn-2定义&#xff0c;初始项J00&#xff0c;J11。序列中的一个数字称为雅可布沙尔数。它们是卢卡斯序列Un&#xff08;P&#xff0c;Q&#xff09;的一种特殊类型&#x…

股票交易

这里尝试利用单调队列优化&#xff0c;这里不好直接用单调队列的原因是因为(以买为例)\(-ap[i]*k_1\)不是只与下标有关的 所以解决方案一&#xff1a;我们将下标变成一个整体&#xff0c;再把后面的代价换掉然后将与下标无关的直接提出去 解决方案二&#xff1a;利用“蚯蚓”那…