servlet中的ServletContext对象
ServletContext官方叫Servlet上下文。服务器会为每一个Web应用创建一个ServletContext对象。这个对象全局唯一,而且Web应用 中的所有Servlet都共享这个对象(在整个web应用中只有一个ServletContext对象)。所以叫全局应用程序共享对象。

ServletContext对象的作用
相对路径转绝对路径
相对路径的相对点是以web项目的根作为相对点

- context.getRealPath("path")
将一个相对路径转换为绝对路径,在文件上传与下载时需要用到该方法做路径的转换。
//获取ServletContext对象,继承自GenericServlet类
ServletContext servletContext=this.getServletContext();
//将相对路径转换为绝对路径
String realpath=servletContext.getRealPath("image/樱花.jpg");

获取容器的附加信息
获取当前Tomcat不同的基本信息
- servletContext.getServerInfo()
返回Servlet容器的名称和版本号
- servletContext.getMajorVersion()
返回Servlet容器所支持Servlet的主版本号。
- servletContext.getMinorVersion()
返回Servlet容器所支持Servlet的副版本号。
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter; @WebServlet("/getbaseinfo")
public class GetBaseInfo extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req,resp);
} @Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//设置响应编码
resp.setContentType("text/html;charset=utf-8");
//获取响应输出流
PrintWriter pw=resp.getWriter();
//获取servletContext对象
ServletContext servletContext=this.getServletContext(); //获取servlet容器名称和版本号
String serverinfo=servletContext.getServerInfo();
//获取Servlet容器所支持Servlet的主版本号
int major=servletContext.getMajorVersion();
//获取Servlet容器所支持Servlet的副版本号
int minor=servletContext.getEffectiveMinorVersion(); //输出到客户端浏览器
pw.println("容器名称及版本号:"+serverinfo);
pw.println("主版本号:"+major);
pw.println("副版本号:"+minor); pw.flush();
pw.close(); }
}

读取配置信息
读取web.xml特定节点所给定的内容
<!--param-name的名称不能重复-->
<context-param>
<param-name>key1</param-name>
<param-value>value1</param-value>
</context-param>
<context-param>
<param-name>key2</param-name>
<param-value>value2</param-value>
</context-param>
<context-param>
<param-name>key3</param-name>
<param-value>value3</param-value>
</context-param>
<context-param>
<param-name>key4</param-name>
<param-value>value4</param-value>
</context-param>
- servletContext.getInitParameter("key")
读取web.xml文件中标签中的配置信息。
- servletContext.getInitParameterNames()
读取web.xml文件中所有param-name标签中的值。
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取servletContext对象
ServletContext servletContext=this.getServletContext();
//获取所有<param-name>的值,返回枚举类型
Enumeration<String > en=servletContext.getInitParameterNames();
//遍历所有<param-name>
while (en.hasMoreElements()){
//获取每一个name
String name=en.nextElement();
//根据key获取value
String value=servletContext.getInitParameter(name);
//输出到控制台
System.out.println(name+":"+value);
} }

全局容器
当Tomcat启动后,会为当前web应用创建一个ServletContext对象。在一个web应用中,所有的servlet对应同一个ServletContext对象
- servletContext.setAttribute("key",ObjectValue)
向全局容器中存放数据。
- servletContext.getAttribute("key")
从全局容器中获取数据。
- servletContext.removeAttribute("key")
根据key删除全局容器中的value。
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter; @WebServlet("/global")
public class GlobalContarner extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req,resp);
} @Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charset=utf-8");
//获取ServletContext对象
ServletContext servletContext=this.getServletContext();
//获取全局容器的数据
String name=(String) servletContext.getAttribute("name");
String id=(String) servletContext.getAttribute("id"); //获取响应输出流
PrintWriter pw=resp.getWriter();
//向客户端浏览器响应数据
pw.println("name:"+name);
pw.println("id"+id); //刷新流
pw.flush();
//输出流
pw.close();
} /**
* 向ServletContext对象中初始化数据
* @throws ServletException
*/
//当Servlet被实例化后,Tomcat会立即调用init()方法,可用该方法向全局容器中添加数据
@Override
public void init() throws ServletException {
ServletContext servletContext=this.getServletContext();
servletContext.setAttribute("name","张三");
servletContext.setAttribute("id","123456");
}
}

ServletContext对象生命周期
1)当容器启动时会创建ServletContext对象并一直缓存该对象
2)容器关闭后该对象生命周期结束
3)由于ServletContext对象的生命周期非常长,所以在使用全局容器时不建议存放业务数据。如果在ServletContext对象中存放了业务数据,同时也在database中存放了相同的数据,当database做了修改而ServletContext对象中的数据没有及时同步的话便会出现“张冠李戴”的风险
servlet中的ServletContext对象的更多相关文章
- 重温Servlet学习笔记--servletContext对象
一个项目中只有一个ServletContext对象,我们可以在多个servlet中获取这个唯一的对象,使用它可以给多个servlet传递数据,我们通常成servletContext为上下文对象.这个对 ...
- Servlet中的request对象、重定向和转发的差别(6)
1.这里所说的request对象指的是HttpServletRequest对象,它代表client的请求,当client通过HTTP协议訪问server时.HTTP请求头中的全部信息都封装在这个对象中 ...
- Servlet学习(二)——ServletContext对象
1.什么是ServletContext对象 ServletContext代表是一个web应用的环境(上下文)对象,ServletContext对象内部封装是该web应用的信息,一个web应用只有一个S ...
- Java EE javax.servlet中的ServletContext接口
ServletContext接口 public interface ServletContext (https://docs.oracle.com/javaee/7/api/javax/servlet ...
- servlet中的ServletConfig对象
ServletConfig对象对应web.xml文件中的<servlet>节点.当Tomcat初始化一个Servlet时,会创建ServletConfig对象,并将该Servlet的配置信 ...
- [原创]java WEB学习笔记05:Servlet中的ServletConfig对象
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- servlet中的HttpServletResponse对象
当有多个客户端浏览器去请求Tomcat时,Tomcat会为每一个客户端浏览器创建一对独立的HttpServletRequest与HttpServletResponse对象 HttpServletRes ...
- servlet中的HttpServletRequest对象
HttpServletRequest对象表示客户端浏览器发起的请求,当客户端浏览器通过HTTP协议访问服务器时,Tomcat会将HTTP请求中的所有信息解析并封装在HttpServletRequest ...
- spring中得到servletContext对象方法
1.spring得到servletContext,这个和session没有什么关系,上下文可以说是一个session容器,一个上下文可以有多个会话session 在web.xml中有以下配置后.加入s ...
随机推荐
- 【C#基础概念】Ineterface 接口的设计原则
接口设计方式 自顶向下 (如图所示),自底向上(发现类需要结构了就声明一个接口). 接口的作用 用来解耦.继承 接口的本质
- linux系统挂载磁盘
linux系统挂载磁盘 ## 将硬盘挂载到/mnt/disk1下 # 检查磁盘状态,确认分区 fdisk -l # 格式化磁盘(分区) mkfs.ext4 /dev/sda #根据机器上的命名 以sd ...
- UnboundLocalError: local variable ‘xxx‘ referenced before assignment
原因 在Python函数中调用了某个和全局变量同名的局部变量,导致编译器不知道此时使用的是全局变量还是局部变量 a = 3 def func(): a+=3 func() UnboundLocalEr ...
- struct.error: unpack requires a buffer of 26 bytes
with open('Test.bmp', 'rb') as f: s = f.read(30) #利用struct提取信息 struct.unpack('<ccIIIIIHH',s) #报错 ...
- 设置vim永久显示编号
永久显示行号,需要我们设置配置文件,两种配置方式: 1. /etc/vimrc 是系统范围的初始化配置 2. -/.vimrc 个人的vim初始化配置 编辑配置文件,以个人为例: vi ...
- 使用 Istio CNI 支持强安全 TKE Stack 集群的服务网格流量捕获
作者 陈计节,企业应用云原生架构师,在腾讯企业 IT 负责云原生应用治理产品的设计与研发工作,主要研究利用容器集群和服务网格等云原生实践模式降低微服务开发与治理门槛并提升运营效率. 摘要 给需要快速解 ...
- CLR的GC工作模式介绍(Workstation和Server)
CLR的核心功能之一就是垃圾回收(garbage collection),关于GC的基本概念本文不在赘述.这里主要针对GC的两种工作模式展开讨论和研究. Workstaction模式介绍 该模式设计的 ...
- hive从入门到放弃(一)——初识hive
之前更完了<Kafka从入门到放弃>系列文章,本人决定开新坑--hive从入门到放弃,今天先认识一下hive. 没看过 Kafka 系列的朋友可以点此传送阅读: <Kafka从入门到 ...
- CF917D题解
题目大意 一张有 \(n\) 个节点的完全图,再给出这张图的一棵生成树,问该图有多少颗生成树和这颗生成树的公共边总共有 \(k\) 条,求助 \(0 \leq k \leq n-1\) 时所有 \(k ...
- python+pytest接口自动化(9)-cookie绕过登录(保持登录状态)
在编写接口自动化测试用例或其他脚本的过程中,经常会遇到需要绕过用户名/密码或验证码登录,去请求接口的情况,一是因为有时验证码会比较复杂,比如有些图形验证码,难以通过接口的方式去处理:再者,每次请求接口 ...