JaveWeb学习之Servlet(二):ServletConfig和ServletContext
原文同步发表至个人博客【夜月归途】
原文链接:http://www.guitu18.com/se/java/2018-07-26/20.html
出处:http://www.guitu18.com/
本博客中未标明转载的文章归作者夜月归途和博客园所有。
欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
ServletConfig
继续查看ServletConfig源码:
package javax.servlet;
public interface ServletConfig {
public String getServletName();
public ServletContext getServletContext();
public String getInitParameter(String name);
public Enumeration<String> getInitParameterNames();
}
getServletName();
getServletName方法用于获取当前Servlet名称,这个是在xml中配置的:<servlet-name>springmvcdemo</servlet-name>;
getServletContext();
getServletContext方法用于获取代表当前web应用的ServletContext对象;
getInitParameter(String name);
getInitParameter方法用于获取当前Servlet指定名称的初始化参数的值;
getInitParameterNames();
getInitParameterNames获取当前Servlet所有初始化参数的名字枚举集合;
Servlet容器初始化时每一个Servlet对象时,会为其创建一个ServletConfig对象,通过Servlet的init方法,会把ServletContext对象传递给当前Servlet:
public void init(ServletConfig config) throws ServletException;
之后使用this.getServletConfig()对象获取当前Servlet的ServletConfig对象;
ServletConfig servletConfig = getServletConfig();
我们在xml中配置Servlet时,还可以配置Servlet初始化参数信息:
<servlet>
<servlet-name>Servlet_1</servlet-name>
<servlet-class>com.guitu.servlet.Servlet_1</servlet-class>
<init-param>
<param-name>username</param-name>
<param-value>zhangkuan</param-value>
</init-param>
</servlet>
之后可以通过servletConfig获取InitParameter参数;
Enumeration<String> initParameterNames = servletConfig.getInitParameterNames();
获得的是一个参数名字的枚举集合,在调用getInitParameter(String name)即可获得参数的值:
String initParameter = servletConfig.getInitParameter(parameterName);
ServletContext
Servlet容器启动后,会为每一个独立的Web应用创建一个ServletContext实例,代表当前Web应用;
ServletContext由所有Servlet共享,所以ServletContext中的参数所有Servlet都能够获取,多个web组件之间使用它实现数据共享;
ServletContext常用方法:
getAttribute(String name);
获取ServletContext中存储的数据;
setAttribute(String name, Object obj);
向ServletContext中存储数据;
getInitParameter(String name);
获取<context-param>标签中为整个Web应用配置的初始化参数;
getInitParameterNames();
一次性获取<context-param>里所有的初始化参数名的枚举;
getRealPath(String path);
获取应用程序内指定资源的绝对路径;
getResource(String parh);
path必须是/开头,代表当前web应用程序的根目录。返回一个代表某个资源的URL对象;
getResoutceAsStream(String parh);
可以使用相对于根目录的路径访问到web目录下的所有文件,而不必知道绝对路径,返回文件流;
ServletConfig、ServletContext测试Demo
1、Servlet_1:
package com.guitu.servlet; import java.io.IOException;
import java.util.Enumeration; import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class Servlet_1 extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { ServletConfig servletConfig = getServletConfig();
Enumeration<String> initParameterNames = servletConfig.getInitParameterNames();
System.out.println("=====Servlet_1.ServletConfig.InitParameter=====");
while (initParameterNames.hasMoreElements()) {
String parameterName = initParameterNames.nextElement();
String initParameter = servletConfig.getInitParameter(parameterName);
System.out.println(parameterName + ":" + initParameter);
} System.out.println("=====Servlet_1.ServletContext.InitParameter=====");
ServletContext servletContext = getServletContext();
Enumeration<String> contextInitParameters = servletContext.getInitParameterNames();
while (contextInitParameters.hasMoreElements()) {
String parameterName = contextInitParameters.nextElement();
String initParameter = servletContext.getInitParameter(parameterName);
System.out.println(parameterName + ":" + initParameter);
} servletContext.setAttribute("message", "Hello World !"); } protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
} }
2、Servlet_2:
package com.guitu.servlet; import java.io.IOException;
import java.util.Enumeration; import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class Servlet_2 extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { ServletConfig servletConfig = getServletConfig();
Enumeration<String> initParameterNames = servletConfig.getInitParameterNames();
System.out.println("=====Servlet_2.ServletConfig.InitParameter======");
while (initParameterNames.hasMoreElements()) {
String parameterName = initParameterNames.nextElement();
String initParameter = servletConfig.getInitParameter(parameterName);
System.out.println(parameterName + ":" + initParameter);
} System.out.println("=====Servlet_2.ServletContext.InitParameter=====");
ServletContext servletContext = getServletContext();
Enumeration<String> contextInitParameters = servletContext.getInitParameterNames();
while (contextInitParameters.hasMoreElements()) {
String parameterName = contextInitParameters.nextElement();
String initParameter = servletContext.getInitParameter(parameterName);
System.out.println(parameterName + ":" + initParameter);
} System.out.println("=====servletContext.getAttribute=====");
Object object = servletContext.getAttribute("message");
System.out.println("message:" + object);
} protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
} }
3、web.xml配置:
<context-param>
<param-name>domain</param-name>
<param-value>guitu18.com</param-value>
</context-param>
<context-param>
<param-name>name</param-name>
<param-value>夜月归途</param-value>
</context-param>
<servlet>
<servlet-name>Servlet_1</servlet-name>
<servlet-class>com.guitu.servlet.Servlet_1</servlet-class>
<init-param>
<param-name>username</param-name>
<param-value>zhangkuan</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>Servlet_1</servlet-name>
<url-pattern>/Servlet_1</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>Servlet_2</servlet-name>
<servlet-class>com.guitu.servlet.Servlet_2</servlet-class>
<init-param>
<param-name>password</param-name>
<param-value>Guitu18</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>Servlet_2</servlet-name>
<url-pattern>/Servlet_2</url-pattern>
</servlet-mapping>
在Servlet1和Servlet2中,分别获得了ServletConfig对象和ServletContext对象;
在web.xml中,也分别为他们配置了不同的初始化参数,同时配置了一个context级的初始化参数;
之后分别在两个Servlet中获取ServletConfig和ServletContext的InitParamer参数;
在Servlet1中还通过setAttribute向ServletContext域中保存了一条消息message,在Servlet2中,便可以通过getAttribute获取这条消息;
4、访问两个Servlet,先访问Servlet_1:
=====Servlet_1.ServletConfig.InitParameter=====
username:zhangkuan
=====Servlet_1.ServletContext.InitParameter=====
domain:guitu18.com
name:夜月归途
再访问Servlet_2:
=====Servlet_2.ServletConfig.InitParameter=====
password:Guitu18
=====Servlet_2.ServletContext.InitParameter=====
domain:guitu18.com
name:夜月归途
=====servletContext.getAttribute=====
message:Hello World !
可以看到,每个Servlet拥有自己ServletConfig对象,数据不互通,而ServletContext中的初始化参数和context域中的参数,是所有Servlet共享的,可以使用context域实现数据共享;
JaveWeb学习之Servlet(二):ServletConfig和ServletContext的更多相关文章
- Servlet、ServletConfig、ServletContext深入学习
1.Servlet学习 1.Servlet生命周期 Servlet 加载—>实例化—>服务—>销毁. init(servletConfig):(经过自己的测试发现会先调用这个而不是i ...
- JavaWeb学习 (六)————Servlet(二)
一.ServletConfig讲解 1.1.配置Servlet初始化参数 在Servlet的配置文件web.xml中,可以使用一个或多个<init-param>标签为servlet配置一些 ...
- JavaWeb之Servlet中ServletConfig和ServletContext
[声明] 欢迎转载,但请保留文章原始出处→_→ 文章来源:http://www.cnblogs.com/smyhvae/p/4140877.html [正文] 一.ServletConfig:代表当前 ...
- JaveWeb学习之Servlet(一):Servlet生命周期和加载机制
原文同步发表至个人博客[夜月归途] 原文链接:http://www.guitu18.com/se/java/2018-07-22/19.html 作者:夜月归途 出处:http://www.guitu ...
- Servlet学习笔记(二)之Servlet路径映射配置、Servlet接口、ServletConfig、ServletContext
Servlet路径映射配置 要使Servlet对象正常的运行,需要进行适当的配置,以告诉Web容器哪个请求调用哪个Servlet对象处理,对Servlet起到一个注册的作用.Servlet的配置信息包 ...
- JavaWeb学习总结(四)—ServletConfig和ServletContext
一.ServletConfig 1. ServletConfig介绍: ServletConfig是Servlet中的init()方法的参数类型,服务器会在调用init()方法时传递ServletCo ...
- JavaWeb之Servlet: ServletConfig 与 ServletContext
ServletConfig对象 什么是ServletConfig对象 ServletConfig对象,叫Servlet配置对象.主要用于加载配置文件的初始化参数. 创建时机 ServletConfig ...
- Servlet容器模型(四)ServletConfig、ServletContext
这两天刚刚回顾了一下servlet中的配置对象ServletConfig.上下文对象ServletContext.多线程相关的知识点,做了一下笔记,如下: 一.Servlet配置对象(ServletC ...
- day05 Servlet 开发和 ServletConfig 与 ServletContext 对象
day05 Servlet 开发和 ServletConfig 与 ServletContext 对象 1. Servlet 开发入门 - hello world 2. Servlet 的调用过程和生 ...
随机推荐
- Python使用ProtoBuffer
Python使用ProtoBuffer Protocol Buffers,是Google公司开发的一种数据描述语言,类似于XML能够将结构化数据序列化,可用于数据存储.通信协议等方面. 就可读性而言感 ...
- docker 数据卷管理
在生产环境中使用docker,往往需要对数据进行持久化,或者需要在多个容器之间进行数据共享,这涉及到容器对数据管理的操作 容器对数据的管理主要有两种方式: 数据卷(Data Volumes): 容器内 ...
- LSI IBM服务器阵列卡操作经历
说明:因为服务器的一个磁盘坏了,因为没有经验不敢操作.正好有一台撤下来的相同服务器,所以查找了各种教程,研究了一下各种操作.记录在这里,防止忘记.一.概念说明raid(自己百度)阵列卡组(group) ...
- 小程序wx:for循环列表数量的限制
数据有100条,我们只要页面显示一部分,就要通过index来限制.index<3,就是显示序列0,1,2这三条数据.具体写法: <block wx:for='{{list}}' wx:ke ...
- HBuilder git使用-环境配置
HBuilder中使用的是Egit插件,但提供的相关资料太少,这是目前遇到的一些问题的总结 1. 安装好egit插件后,本机需要安装Git windows的安装程序,并配置好相关的环境变量(理论上是自 ...
- 动态添加echarts
本次只贴js和jsp代码 jsp只需添加一个div即可, <div class="fLayout-right-box"> <hy:layoutArea width ...
- 一个开源的,跨平台的.NET机器学习框架ML.NET
微软在Build 2018大会上推出的一款面向.NET开发人员的开源,跨平台机器学习框架ML.NET. ML.NET将允许.NET开发人员开发他们自己的模型,并将自定义ML集成到他们的应用程序中,而无 ...
- 常见的java设计模式
单例模式 简单点说,就是一个应用程序中,某个类的实例对象只有一个,你没有办法去new,因为构造器是被private修饰的,一般通过getInstance()的方法来获取它们的实例. getInstan ...
- FFmpeg 结构体学习(四): AVFrame 分析
在上文FFmpeg 结构体学习(三): AVPacket 分析我们学习了AVPacket结构体的相关内容.本文,我们将讲述一下AVFrame. AVFrame是包含码流参数较多的结构体.下面我们来分析 ...
- [Swift]LeetCode450. 删除二叉搜索树中的节点 | Delete Node in a BST
Given a root node reference of a BST and a key, delete the node with the given key in the BST. Retur ...