[ServletJSP] 初识ServletConfig

2024-06-05 08:38

本文主要是介绍[ServletJSP] 初识ServletConfig,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

每个Servlet都必须在web.xml中设置,由web容器读取Servlet设置、初始化等,才可以真正成为一个Servlet。在web.xml中对于每个Servlet的设置,web容器会为其生成一个ServletConfig作为代表对象,你可以从该对象取得设置在web.xml中的Servlet初始参数,以及代表整个web应用程序的ServletContext对象。

Servlet生命周期

在Servlet接口上,定义了与Servlet生命周期及请求服务相关的init()service()destroy()是三个方法。在web容器启动后,会读取web.xml的设置,根据其中每个Servlet的设置,将Servlet类加载并实例化,并为每个Servlet的设置生成一个ServletConfig对象,而后调用Servlet接口的init()方法,将产生的ServletConfig对象当做参数传入。

GenericServlet同时实现了Servlet及ServletConfig,GenericServlet的主要目的就是将初始Servlet调用init()方法所传入的ServletConfig封装起来。GenericServlet在实现Servlet的init()方法时,也调用了灵感而无参数的init()方法,基本上在编写Servlet时,如果有一些初始时所要执行的操作,则可以重写这个无参数的init()方法,而不是直接重写有ServletConfig参数的init()方法。

GenericServlet也包括了Servlet与ServletConfig所定义方法的简单实现,实现内容主要是通过ServletConfig来取得一些相关信息,例如:

  /*** Returns a <code>String</code> containing the value of the named* initialization parameter, or <code>null</code> if the parameter does not* exist. See {@link ServletConfig#getInitParameter}.* <p>* This method is supplied for convenience. It gets the value of the named* parameter from the servlet's <code>ServletConfig</code> object.** @param name*            a <code>String</code> specifying the name of the*            initialization parameter* @return String a <code>String</code> containing the value of the*         initialization parameter*/@Overridepublic String getInitParameter(String name) {return getServletConfig().getInitParameter(name);}/*** Returns the names of the servlet's initialization parameters as an* <code>Enumeration</code> of <code>String</code> objects, or an empty* <code>Enumeration</code> if the servlet has no initialization parameters.* See {@link ServletConfig#getInitParameterNames}.* <p>* This method is supplied for convenience. It gets the parameter names from* the servlet's <code>ServletConfig</code> object.** @return Enumeration an enumeration of <code>String</code> objects*         containing the names of the servlet's initialization parameters*/@Overridepublic Enumeration<String> getInitParameterNames() {return getServletConfig().getInitParameterNames();}/*** Returns this servlet's {@link ServletConfig} object.** @return ServletConfig the <code>ServletConfig</code> object that*         initialized this servlet*/@Overridepublic ServletConfig getServletConfig() {return config;}/*** Returns a reference to the {@link ServletContext} in which this servlet* is running. See {@link ServletConfig#getServletContext}.* <p>* This method is supplied for convenience. It gets the context from the* servlet's <code>ServletConfig</code> object.** @return ServletContext the <code>ServletContext</code> object passed to*         this servlet by the <code>init</code> method*/@Overridepublic ServletContext getServletContext() {return getServletConfig().getServletContext();}/*** Returns information about the servlet, such as author, version, and* copyright. By default, this method returns an empty string. Override this* method to have it return a meaningful value. See* {@link Servlet#getServletInfo}.** @return String information about this servlet, by default an empty string*/@Overridepublic String getServletInfo() {return "";}

所以当在继承HttpServlet实现Servlet时,就可以通过这些方法来取得所要的相关信息,而不用直接意识到ServletConfig的存在。

Servlet初始参数的设置和取得

ServletConfig相当于web.xml中个别Servlet的设置代表对象,这意味着可以从ServletConfig中取得Servlet设置信息。ServletConfig定义了getInitParameter()getInitParameterNames()方法,可以让你取得设置Servlet时的初始参数。
若要在web.xml中设置个别Servlet的初始参数,可以在<servlet>标签之中,使用<init-param>进行设置。例如:

<servlet><servlet-name>SomeServlet</servlet-name><servlet-class>club.chuxing.SomeServlet</servlet-class><init-param><param-name>PARAM1</param-name><param-value>VALUE1</param-value></init-param><init-param><param-name>PARAM2</param-name><param-value>VALUE2</param-value></init-param>
</servlet>

对于上述的例子,只要取得对应SomeServlet设置的ServletConfig实例,就可以通过geInitParameter()并指定<param-name>的名称来取得<param-value>的值。例如:

public class AddMessage extends HttpServlet {private String PARAM1;private String PARAM2;public void init() throws ServletException {super.init();PARAM1 = getServletConfig().getInitParameter("PARAM1");PARAM2 = getServletConfig().getInitParameter("PARAM2");}
}

由于ServletConfig必须在Web容器将Servlet实例化后,调用有参数的init()方法再将之传入,是与Web应用程序资源相关的对象,所以在继承HttpServlet后,通常会重写无参数的init()方法以取得Servlet的初始参数。由于GenericServlet定义了一些方法将ServletConfig封装起来,便于取得设置信息,以上代码可改写为:

public class AddMessage extends HttpServlet {private String PARAM1;private String PARAM2;public void init() throws ServletException {super.init();PARAM1 = getInitParameter("PARAM1");PARAM2 = getInitParameter("PARAM2");}
}

Servlet初始参数通常作为常数来设置,可以将一些Servlet程序中不想写死的信息放到初始参数中,之后若想更改这些信息,则只修改web.xml中的设置,而不用修改源代码、重新编译或部署。

这篇关于[ServletJSP] 初识ServletConfig的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1032601

相关文章

Linux操作系统 初识

在认识操作系统之前,我们首先来了解一下计算机的发展: 计算机的发展 世界上第一台计算机名叫埃尼阿克,诞生在1945年2月14日,用于军事用途。 后来因为计算机的优势和潜力巨大,计算机开始飞速发展,并产生了一个当时一直有效的定律:摩尔定律--当价格不变时,集成电路上可容纳的元器件的数目,约每隔18-24个月便会增加一倍,性能也将提升一倍。 那么相应的,计算机就会变得越来越快,越来越小型化。

docker学习系列(一)初识docker

在第一版本上线之后公司,我们决定将之前使用的开源api文档项目转移到本公司的服务器之上,之前用的是showdoc,showdoc利用的是php技术,作为java程序员表示需要快速部署php环境以及apach容器都需要时间,所以采用第二种方法,即利用docker进行快速部署(虽然学习成本也不比php少)。 一、docker简介 docker的官网是https://www.docker.com,

框架template初识

框架初识 框架就是一个别人帮我们搭好的舞台,造好了很多现成的工具供我们使用,让开发过程更快速、简洁。 Gin框架介绍 Gin 是一个用 Go (Golang) 编写的 HTTP Web 框架。 Gin是一个用Go语言编写的web框架。它是一个类似于martini 但拥有更好性能的API框架, 由于使用了 httprouter,速度提高了近40倍。 第一个Gin示例 package mai

【数据结构】--初识泛型

1. 包装类 在Java中,由于基本类型不是继承自Object,为了在泛型代码中可以支持基本类型,Java给每个基本类型都对应了一个包装类型。 1.1 基本数据类型和对应的包装类 除了 Integer 和 Character, 其余基本类型的包装类都是首字母大写。 1.2 (自动)装箱和(自动)拆箱 装箱(装包): 把 基本数据类型 变为 包装类类型 的过程 叫做装箱。 反汇编指

初识Linux · 进度条

目录 前言: 1 缓冲区和回车换行 2 进度条 前言: 我们目前学习了些许知识,已经足够支持我们写一个非常非常小的项目了,即进度条,相信大家都有过下载游戏,等待游戏更新完成的时候,那么此时就有一个进度条,代表着游戏的更新进度,那么我们今天就来模拟实现这个过程,在此之前,我们需要一些预备知识。 1 缓冲区和回车换行 回车换行?是的,你没有看错,相信不少人对换行有一定的误解,我们

Linux初识线程

前言 前面在介绍进程的时候,说过进程的内核表述是"进程是承担资源分配的基本实体",但是我们至今都没有介绍如何理解他?本期我们就会介绍! 目录 前言 一、再谈地址空间和页表 1、OS对物理内存的管理 • 为什么4KB是OS进行I/O的基本单位? 2、再谈页表 • 二级页表 • 如何找到一个变量的所有字节? • 虚拟地址是如何转为物理地址的? • 理解动态内存管理 • 为什么对

初识命名空间

1.创建两个命名空间 ip netns add host1 ip netns add host2 2.  查看命名空间 ip netns ls 3 、 创建veth ip -netns host1 link add veth0 type veth peer name host1-peer 4、 查看命名空间接口  ip -netns host1 address 5、 把hos

Linux进程初识:OS基础、fork函数创建进程、进程排队和进程状态讲解

目录 1、冯诺伊曼体系结构 问题一:为什么在体系结构中存在存储器(内存)? 存储单元总结: 问题二:为什么程序在运行的时候,必须把程序先加载到内存? 问题三:请解释,从你登录上qq开始和某位朋友聊天开始,数据的流动过程。 2、操作系统 2.1操作系统的概念: 我们首先要明白什么是管理: 2.2为什么要有操作系统? 2.3操作系统如何保证稳定和安全呢?(利用系统调用函数解决)

初识string(一)and内存管理

对类和对象的补充:缺省参数在函数定义中从右向左依次赋值,如果从右向左有一个参数没有赋值缺省参数,则左边的变量就不能在赋缺省参数,类中的变量可以赋缺省参数并且没有限制。 在类定义中我们总是看到函数后加const。这其实是调用常量类对象或类对象的意思。 一、引言 俗话说“工欲善其事,必先利其器。”一门语言创造的初衷一定是为了交流和记录重要的事。计算机语言肯定也不例外,虽然计算机语言创造的初衷单纯

数据可视化01-初识echart

1、echart官网 http://echarts.baidu.com/index.html 2、echart特性 ECharts,一个使用 JavaScript 实现的开源可视化库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Firefox,Safari等),底层依赖轻量级的矢量图形库 ZRender,提供直观,交互丰富,可高度个性