原文同步发表至个人博客【夜月归途】

原文链接: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域实现数据共享;

转载于:https://www.cnblogs.com/guitu18/p/10224653.html

JaveWeb学习之Servlet(二):ServletConfig和ServletContext相关推荐

  1. Java Servlet(三):Servlet中ServletConfig对象和ServletContext对象

    本文将记录ServletConfig/ServletContext中提供了哪些方法,及方法的用法. ServletConfig是一个抽象接口,它是由Servlet容器使用,在一个servlet对象初始 ...

  2. Servlet第二篇【Servlet调用图、Servlet细节、ServletConfig、ServletContext】

    Servlet的调用图 前面我们已经学过了Servlet的生命周期了,我们根据Servlet的生命周期画出Servlet的调用图加深理解 Servlet的细节 一个已经注册的Servlet可以被多次映 ...

  3. servlet 返回可访问文件_Servlet第二篇「Servlet细节、ServletConfig、ServletContext」

    Servlet的调用图 前面我们已经学过了Servlet的生命周期了,我们根据Servlet的生命周期画出Servlet的调用图加深理解 Servlet的细节 一个已经注册的Servlet可以被多次映 ...

  4. Servlet功能实现和执行过程、servlet的生命周期、Servlet线程安全问题、Servlet的三种映射方式、ServletConfig、ServletContext

    1. 什么是Servlet? Servlet是SUN公司提供的一套规范,名称就叫Servlet规范,它也是JavaEE规范之一. 第一:Servlet是一个运行在web服务端的java小程序 第二:它 ...

  5. Java Servlet 中的 ServletConfig 和 ServletContext 之间的区别

    ServletConfig 和 ServletContext 是 Java Servlet 中的两个重要接口,它们都是用来存储 servlet 的配置信息的. ServletConfig 是针对单个 ...

  6. 大数据WEB阶段 (十)Response、ServletConfig、ServletContext、资源跳转三种方式

    Response.ServletConfig.ServletContext.资源跳转三种方式 - (一)Response 一.Response概述 在doGet和doPost方法的参数中,HttpSe ...

  7. Java基础学习之Servlet 运用学习

    Servlet 简介 Servlet 是什么? Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上 ...

  8. Spring MVC 学习总结(二)——控制器定义与@RequestMapping详解

    Spring MVC 学习总结(二)--控制器定义与@RequestMapping详解 目录 一.控制器定义 1.1.实现接口Controller定义控制器 1.2.使用注解@Controller定义 ...

  9. Servlet学习笔记 Servlet原理

    Servlet学习笔记 Servlet原理 一.Servlet基础 1.Servlet执行过程 用户请求一个Servlet,Servlet容器自动构建请求和响应对象,然后执行Servlet的servi ...

最新文章

  1. 计算机应用基础试题及答案试卷号7074,阅读文章,完成试题。后来才知道,在这千钧一发的时刻,是郝副营长划着了火柴,点燃了那本书,举得高高的, - 学进去中小学试卷试题库...
  2. 背光源:你究竟是怎样的波长?
  3. 发现一篇专门吐槽 NLP 内卷现状的 ACL 论文 ...
  4. 通过Python的__slots__节省9GB内存
  5. jquery 批量上下移动
  6. 一文带你认识Spring事务
  7. 3-4:类与对象中篇——默认成员函数之拷贝构造函数
  8. Adobe Illustrator CS6 绿色简体中文版下载地址
  9. 图像主观质量评价 评分_图像质量分析工具哪家强?
  10. linux查看网卡型号
  11. 目录代码php_php获取某个目录大小的代码
  12. 动软代码生成器连接8.0.17版本的mysql
  13. inspinia中文管理后台_JAVA项目实战开发电商项目案例(六与七)商品分类与商品模块管理开发
  14. 微信小程序之获取用户位置权限
  15. echarts绘制嵌套环形图(南丁格尔玫瑰图)
  16. rtx3060性能相当于什么水平 rtx3060参数
  17. oppok3如何刷机_[oppok3刷机教程]oppok3怎么刷机
  18. 建设GSM900/1800双频网应考虑的几个问题(转)
  19. 网络研讨室_Excel问题,修复和网络研讨会
  20. 干货:O2O美团外卖四部曲

热门文章

  1. 用双向链表实现一个栈
  2. Jquery 【select 通过value来寻找对应的项name】
  3. Java学习开发入门基础教程系列
  4. Go 从入门到精通(三)字符串,时间,流程控制,函数
  5. 深入理解Fabric环境搭建的详细过程
  6. ajax asp后台获取不到post数据,jQuery AJAX调用将数据发布到ASP.Net页面(不是Get但POST)...
  7. seo 伪原创_SEO干货——文章到底如何伪原创?
  8. JZOJ 5456. 【NOIP2017提高A组冲刺11.6】奇怪的队列
  9. python import出错_Python ImportError: cannot import name urlopen错误分析
  10. 基于STM32系列芯片的 IAP实现的探索