Skip to main content

moregeek program

javaweb核心之servletconfig_紫轩蝶泪的博客-多极客编程

2 ServletConfig


2.1 ServletConfig概述


2.1.1 基本概念


它是Servlet的配置参数对象,在Servlet规范中,允许为每个Servlet都提供一些初始化配置。所以,每个Servlet都一个自己的ServletConfig。它的作用是在Servlet初始化期间,把一些配置信息传递给Servlet。


2.1.2 生命周期


由于它是在初始化阶段读取了web.xml中为Servlet准备的初始化配置,并把配置信息传递给Servlet,所以生命周期与Servlet相同。这里需要注意的是,如果Servlet配置了<load-on-startup>1</load-on-startup>,那么ServletConfig也会在应用加载时创建。


2.2 ServletConfig的使用


2.2.1 如何获取


首先,我们要清楚的认识到,它可以为每个Servlet都提供初始化参数,所以肯定可以在每个Servlet中都配置。那是配置在Servlet的声明部分,还是映射部分呢?我们接下来先准备一个Servlet,然后给同学们揭秘。


/**
* 演示Servlet的初始化参数对象
*/
public class ServletDemo8 extends HttpServlet {

//定义Servlet配置对象ServletConfig
private ServletConfig servletConfig;

/**
* 在初始化时为ServletConfig赋值
* @param config
* @throws ServletException
*/
@Override
public void init(ServletConfig config) throws ServletException {
this.servletConfig = config;
}

/**
* @param req
* @param resp
* @throws ServletException
* @throws IOException
*/
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//输出ServletConfig
System.out.println(servletConfig);
}

/**
* 调用doGet方法
* @param req
* @param resp
* @throws ServletException
* @throws IOException
*/
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req,resp);
}
}

<!--配置ServletDemo8-->
<servlet>
<servlet-name>servletDemo8</servlet-name>
<servlet-class>com.itheima.web.servlet.ServletDemo8</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>servletDemo8</servlet-name>
<url-pattern>/servletDemo8</url-pattern>
</servlet-mapping>

2.2.2 如何配置


在上一小节中,我们已经准备好了Servlet,同时也获取到了它的ServletConfig对象,在本小节中我们将告诉同学们如何配置初始化参数,它需要使用<servlet>标签中的<init-param>标签来配置。这也就揭秘上一小节的悬念,Servlet的初始化参数都是配置在Servlet的声明部分的。并且每个Servlet都支持有多个初始化参数,并且初始化参数都是以键值对的形式存在的。接下来,我们看配置示例:


<!--配置ServletDemo8-->
<servlet>
<servlet-name>servletDemo8</servlet-name>
<servlet-class>com.itheima.web.servlet.ServletDemo8</servlet-class>
<!--配置初始化参数-->
<init-param>
<!--用于获取初始化参数的key-->
<param-name>encoding</param-name>
<!--初始化参数的值-->
<param-value>UTF-8</param-value>
</init-param>
<!--每个初始化参数都需要用到init-param标签-->
<init-param>
<param-name>servletInfo</param-name>
<param-value>This is Demo8</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>servletDemo8</servlet-name>
<url-pattern>/servletDemo8</url-pattern>
</servlet-mapping>

2.2.3 常用方法


在这里插入图片描述


/**
* 演示Servlet的初始化参数对象
*/
public class ServletDemo8 extends HttpServlet {

//定义Servlet配置对象ServletConfig
private ServletConfig servletConfig;

/**
* 在初始化时为ServletConfig赋值
* @param config
* @throws ServletException
*/
@Override
public void init(ServletConfig config) throws ServletException {
this.servletConfig = config;
}

/**
* doGet方法输出一句话
* @param req
* @param resp
* @throws ServletException
* @throws IOException
*/
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1.输出ServletConfig
System.out.println(servletConfig);
//2.获取Servlet的名称
String servletName= servletConfig.getServletName();
System.out.println(servletName);
//3.获取字符集编码
String encoding = servletConfig.getInitParameter("encoding");
System.out.println(encoding);
//4.获取所有初始化参数名称的枚举
Enumeration<String> names = servletConfig.getInitParameterNames();
//遍历names
while(names.hasMoreElements()){
//取出每个name
String name = names.nextElement();
//根据key获取value
String value = servletConfig.getInitParameter(name);
System.out.println("name:"+name+",value:"+value);
}
//5.获取ServletContext对象
ServletContext servletContext = servletConfig.getServletContext();
System.out.println(servletContext);
}

/**
* 调用doGet方法
* @param req
* @param resp
* @throws ServletException
* @throws IOException
*/
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req,resp);
}
}

在这里插入图片描述
这是对servletConfig的详细解释,后续会继续更新后续。


©著作权归作者所有:来自51CTO博客作者紫轩蝶泪的原创作品,请联系作者获取转载授权,否则将追究法律责任

【服务器数据恢复】服务器误删除导致邮件数据丢失的数据恢复案例_sun的博客-多极客编程

服务器数据恢复环境: 8块盘组成的RAID5磁盘阵列; EXT3文件系统。 服务器故障: 由于误删除导致文件系统中的邮件丢失。 服务器数据恢复过程: 一、服务器数据恢复工程师为每块磁盘做镜像, 后续所有的数据恢复操作都在镜像盘上进行, 不会对原始磁盘数据造成二次破坏。 二、分析数据在硬盘中分布的规律,获取RAID类型、RAID条带大小、每块磁盘的顺序等RAID信息。根据获取到的RAID信息重新组建

pg-日常运维_mysql dba攻坚之路的博客-多极客编程

VACUUM表膨胀是什么有效数据量不变,表越来越大,扫描的效率变低。是因为PG的MVCC写数据时,旧数据不删除,把新数据插入,将旧数据标记为无效,清理之前一直占用空间。执行update的话就是insert+delete的原理,依然会导致表膨胀。vacuum的作用磁盘清理dead tuple ;更新统计信息;重组数据;解决事务ID回卷问题。vacuum : 不要求获得排它锁,找到那些旧的“死”数据

百度交易中台之资产系统架构浅析_百度geek说的博客-多极客编程

作者 | 小黑哥导读:百度交易中台资产系统是基于百度收银台和交易系统下,对公司内C端个人现金、虚拟类资产(虚拟币等)业务进行收拢、管理,提供安全可靠且符合国家清算规范的用户资产管理能力。交易中台资产系统基于现有交易中台部分能力,一站式解决业务方对用户资产管理、平台分账、对账、财报等问题,快速支持资产类业务发展。全文5085字,预计阅读时间13分钟。一、系统介绍百度交易中台支持百度集团内部的代收代付

数据中台与业务中台的区别与联系_枫叶飘飘的博客-多极客编程

业务中台更多偏向于业务流程管控,将业务流程中共性的服务抽象出来,形成通用的服务能力。比如电商平台,有C2C、B2C、C2B、B2B四种模式,其中订单、交易、商品管理、购物车等模块都是有共性的。将这些组件沉淀出来,形成电商行业的业务中台,再基于这些业务中台组件的服务能力,可以快速搭建前台应用,譬如C2C模式的淘宝、B2C模式的天猫、B2B模式的1688、C2B模式的聚划算,用户通过这些前台业务触点使

pg--扫描方式_mysql dba攻坚之路的博客-多极客编程

CTID是什么CTID是一个系统列,用于标识某一元组位于哪个位置,由(block number + 块内的偏移量offset)组成和oracle的rowid十分类似select attname from pg_attribute where attrelid='test2'::regclass; attname ---------- cmax cmin ctid 类似oracle的r

由《羊了个羊》想到的高并发架构之路_13043917的博客-多极客编程

前言     要说最近一段时间最火的话题是什么,那必定是《羊了个羊》,频频冲上微博热搜第一。因访问量骤增,大量玩家涌入进来,高并发流量导致游戏服务器被接连击穿。《羊了个羊》服务器几天内就出现了多次异常,无法登录游戏。 问题思考     我想这其中多次崩溃的原因可能很多:可能是高并发流量导致服务器负载打满,引发宕机;可能是数据库查询量较大,出现性能瓶颈;也可能是高并发访问将缓存击穿;还有可能是受到d

go语言之大数_zzxiaoma的博客-多极客编程

计算机编程经常需要权衡利弊,做相应的取舍,例如浮点数可以存储任意大小的数字,但是会不精确,整数虽然准确,但是取值范围受到限制。go中有个big包可以存储大数据,big.Int存储整数,big.Float存储浮点数,big.Rat存储分数。 创建big.Int使用NewInt函数 abc := big.NewInt(54232432)cde := big.NewInt(43222233)但是如果数

mysql--gtid是什么_mysql dba攻坚之路的博客-多极客编程

GTID作用主从环境中主库的dump线程可以直接通过GTID定位到需要发送的binary log的位置,而不需要指定binary log的文件名和位置,因而切换极为方便。GTID实际上是由UUID+TID (即transactionId)组成的。其中UUID(即server_uuid) 产生于auto.conf文件(cat /data/mysql/data/auto.cnf),是一个MySQL实例

结构体+联合体 详解_萌新的日常的博客-多极客编程

(文章目录) 一、结构体 1.结构体变量 struct s { char name[20]; int age; }p1,p2; int main() { struct s p3; return 0; } p1,p2,p3都是结构体变量 但由于p1,p2在main外部定义 是全局变量 p3是局部变量 2.特殊声明 声明的时候 不完全声明 为匿名结构体类型 注意匿名结构体类型只

源码角度了解concurrenthashmap_周杰伦本人的博客-多极客编程

源码角度了解ConcurrentHashMap ConcurrentHashMap大家都知道,它的数据结构前期是链表后期是红黑树,我们通过节点类型是Node节点和TreeNode节点可以知道它目前的结构是链表还是红黑树,ConcurrentHashMap为什么使用红黑树呢?说白了,当元素变多的时候,红黑树能有更好的查询和更新速度,还能解决Hash冲突的问题 ConcurrentHashMap是使用

go语言之nil_zzxiaoma的博客-多极客编程

在go语言中,nil是一个零值,如果我们在声明整数的时候没有为变量赋值,那么该整数的值默认是0,如果是一个指针没有明确的指向,它的值就是nil,除了指针,nil还标识切片、映射和接口的零值。 如果对一个指针进行解引用程序会崩溃 var abc *intfmt.Println(*abc)为了避免程序崩溃,需要通过对nil判断进行避免 if(abc != nil){ fmt.Println(

golang:第四章 golang 项目管理_彭世瑜的博客-多极客编程

go项目管理工具 version < golang1.11: gopath version >= golang1.11:gomod 第三方:govendor 编写go代码 # 初始化项目 go mod init <projectName> # eg: $ go mod init demo $ tree . ├── go.mod ├── main.go └── us