JAVAEE_Servlet_06_ServletContext接口
ServletContext接口
* javax.servlet.ServletContext
* Tomcat服务器中ServletContecxt的完整类名: ServletContext:org.apache.catalina.core.ApplicationContextFacade
* 获取ServletCotext
- 分别创建两个Servlet实现类,分别获取两个Servlet实现类的ServletContecxt,发现输出的结果是一样的,是同一个内存地址
public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
//获取ServletConfig
ServletConfig config=getServletConfig();
//获取ServletContext
ServletContext application=config.getServletContext();
//输出ServletContext
System.out.println("ServletContext01'ServletContext"+application);
}
* 总结:
1.javaweb程序员只需要面向 javax.servlet.ServletContext接口进行调用方法,不需要关心Tomcat对ServletContext接口的实现
2. ServletContext可以完成跨用户传递数据,因为一个项目中的所有Servle共享一个ServletContext。
3.ServletContext到底是什么? 什么时候被创建? 什么时候被销毁? 一个WEb项目中创建几个?
> ServletContext被翻译为Servlet上下文
> 一个WebApp只有一个ServletContext对象,无论有几个Servlet实现类都只有一个ServletContext对象。(而ServletConfig则是一个Servlet对象对应一个ServletConfig)
> 一个Webapp只有一个Web.xml文件,所有的Servle对象的配置信息都写在这一个Web.xml文件中
> Web.xml文件在服务器启动的时候被解析
> ServletContext对象在服务器启动阶段被实例化
> ServletContext对象在服务器关闭的时候被销毁
> 得出结论 :ServletContext对应的是Web.xml文件,是Web.xml文件的代表。
> ServletContext是所有Servlet对象四周环境的代表{在同一个Webapp中所有的Servlet共享同一个ServletContext}
> 所有用户如果想共享同一个数据,可以把该数据放在ServletContext对象中。可实现跨用户传递数据。
> 一般放在ServletContext对象中的数据是不建议涉及到修改操作的,因为可能触发线程安全问题。
* ServletContext中有哪些常用的方法?
- void setAttribute(String name,Object object) 向ServletContext中添加数据
BServletContext.setAttribute("学历","大学本科");
- Object getAttribute(String name) 从ServletContext 获取数据
Object obj=BServletContext.getAttribute("学历");
- Enumeration getAttributeNames(); 获取所有ServletContext中数据的name
Enumeration attributeNames=BServletContext.getAttributeNames();
while(attributeNames.hasMoreElements()){
Object name=attributeNames.nextElement();
Object value=BServletContext.getAttribute((String)name);
System.out.println(name+"="+value);
}
- void removeAttribute(String name) 移除ServletContext中的数据
AServletContext.removeAttribute("学历");
- String getInitParameter(String name) // 通过name获取value
String value=application.getInitParameter(name);
- 什么是ParameterNames? <param-name>name</param-name>
<context-param>
<param-name>name</param-name>
<param-value>ShiGe</param-value>
</context-param>
<context-param>
<param-name>age</param-name>
<param-value>18</param-value>
</context-param>
- Enumeration getInitParameterNames // 获取所有上下文初始化参数的name
public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
//获取ServletConfig
ServletConfig config=getServletConfig();
//获取ServletContext
ServletContext application=config.getServletContext();
//获取所有上下文初始化参数的name
Enumeration<String> names=application.getInitParameterNames();
while(names.hasMoreElements()) {
String name=names.nextElement();
//通过name获取value
String value=application.getInitParameter(name);
//out.print(name+"="+value);
System.out.println(name+"="+value);
}
}
- String getRealPath(String path) 获取项目中某个文件的绝对路径
String path = BServletContext.getRealPath("index.html");
System.out.println(path);
* Servlet, ServletConfig, ServletContext 三者之间的关系。
- 一个Servlet对应一个ServletConfig,一百个Servlet对应一百个ServletConfig。
- 所有的Servlet实例对象共享一个ServletContext对象
- 一个Web项目中只有一个web.xml文件,一个web.xml中包含了所有Servlet实例对象的配置信息。
JAVAEE_Servlet_06_ServletContext接口的更多相关文章
- App开发:模拟服务器数据接口 - MockApi
为了方便app开发过程中,不受服务器接口的限制,便于客户端功能的快速测试,可以在客户端实现一个模拟服务器数据接口的MockApi模块.本篇文章就尝试为使用gradle的android项目设计实现Moc ...
- 干货来袭-整套完整安全的API接口解决方案
在各种手机APP泛滥的现在,背后都有同样泛滥的API接口在支撑,其中鱼龙混杂,直接裸奔的WEB API大量存在,安全性令人堪优 在以前WEB API概念没有很普及的时候,都采用自已定义的接口和结构,对 ...
- 12306官方火车票Api接口
2017,现在已进入春运期间,真的是一票难求,深有体会.各种购票抢票软件应运而生,也有购买加速包提高抢票几率,可以理解为变相的黄牛.对于技术人员,虽然写一个抢票软件还是比较难的,但是还是简单看看123 ...
- Java基础Map接口+Collections工具类
1.Map中我们主要讲两个接口 HashMap 与 LinkedHashMap (1)其中LinkedHashMap是有序的 怎么存怎么取出来 我们讲一下Map的增删改查功能: /* * Ma ...
- Java基础Map接口+Collections
1.Map中我们主要讲两个接口 HashMap 与 LinkedHashMap (1)其中LinkedHashMap是有序的 怎么存怎么取出来 我们讲一下Map的增删改查功能: /* * Ma ...
- java基础_集合List与Set接口
List接口继承了Collection的方法 当然也有自己特有的方法向指定位置添加元素 add(索引,添加的元素); 移除指定索引的元素 remove(索引) 修改指定索引的元素 set ...
- 【WCF】自定义错误处理(IErrorHandler接口的用法)
当被调用的服务操作发生异常时,可以直接把异常的原始内容传回给客户端.在WCF中,服务器传回客户端的异常,通常会使用 FaultException,该异常由这么几个东东组成: 1.Action:在服务调 ...
- PHP以接口方式实现多重继承(完全模拟)--学习笔记
1.UML类图: 2.PHP代码: <?php /** * Created by PhpStorm. * User: andy * Date: 16-11-23 * Time: 下午7:57 ...
- 【微框架】Maven +SpringBoot 集成 阿里大鱼 短信接口详解与Demo
Maven+springboot+阿里大于短信验证服务 纠结点:Maven库没有sdk,需要解决 Maven打包找不到相关类,需要解决 ps:最近好久没有写点东西了,项目太紧,今天来一篇 一.本文简介 ...
随机推荐
- Gateway网关
前提要在注册中心把网关和服务都进行注册 通俗来说,网关就是指在客户端和服务端的一面墙,这面墙有请求转发,负载均衡,权限控制,跨域,熔断降级,限流保护等功能. 客户端发送请求,请求先通过网关,网关根据特 ...
- Content type 'application/json;charset=UTF-8' not supported异常的解决过程
首先说一下当时的场景,其实就是一个很简单的添加操作,后台传递的值是json格式的,如下图 ,后台对应的实体类, @Data @EqualsAndHashCode(callSuper = false) ...
- Java 搭建 RabbitMq 消息中间件
前言 当系统中出现"生产"和"消费"的速度或稳定性等因素不一致的时候,就需要消息队列. 名词 exchange: 交换机 routingkey: 路由key q ...
- oracle startup startup nomount startup mount 的区别
startup nomount选项启动实例,但不安装 数据库.当数据库以这个模式启动时,参数文件被读取:后台进程和内存结构被启动:但它们不被附加或与数据库的磁盘结构进行通信.当实例处于这个状态时sta ...
- Docker-compose编排微服务顺序启动
一.概述 docker-compose可以方便组合多个 docker 容器服务, 但是, 当容器服务之间存在依赖关系时, docker-compose 并不能保证服务的启动顺序.docker-comp ...
- ISC BIND9 - 最详细、最认真的从零开始的BIND 9 服务讲解
DNS and BIND 服务的搭建说明 目录 目录 DNS and BIND 服务的搭建说明 1. 背景 1.1 DNS 1.2 FQDN 1.3 BIND 1.4 本文中搭建模拟DNS服务网络虚拟 ...
- Python切换版本工具pyenv
目录 安装pyenv 安装与查看py版本 切换py版本 结合ide使用示例 和virtualenv的一些区别 参考文献 使用了一段时间,我发现这玩意根本不是什么神器,简直就是垃圾,安装多版本总是失败, ...
- HDOJ-2181(深搜记录路径)
哈密顿绕行世界问题 HDOJ-2181 1.本题是典型的搜索记录路径的问题 2.主要使用的方法是dfs深搜,在输入的时候对vector进行排序,这样才能按照字典序输出. 3.为了记录路径,我使用的是两 ...
- Python3+pygame中国象棋 代码完整 非常好 有效果演示
这几天看到抖音上有个妹子下象棋超级猛,我的中国象棋也差不到哪去啊,走 做一个.... 一.运行效果 二.代码 下面的代码用到图片素材(images文件夹),下载地址如下:https://www.itp ...
- Java 查找算法
1 查找算法介绍 在 java 中,我们常用的查找有四种: 1) 顺序(线性)查找 2) 二分查找/折半查找 3) 插值查找 4) 斐波那契查找 2 线性查找算法 有一个数列: {1,8, 10, ...