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 ...
随机推荐
- navicat12.0.24安装注意事项
关闭防火墙并断网,或者不要改变安装路径,或者换一个注册机 链接:https://pan.baidu.com/s/1AvEuD6TWGOCisSctF7pcbg 提取码:o4wp
- UnicodeDecodeError
'gbk' codec can't decode byte 0x80 in position xx open文件时,添加参数'encoding='utf-8' 'utf-8' codec can't ...
- Chrome:查看HTTP请求的header信息
1.打开Google浏览器Chrome,通过F12进入开发者工具,进入Network模块下,此时由于我们还没有进行任何HTTP请求,所以这个页面下还是空空如也 2.随便通过某个搜索引擎搜索一下,比如通 ...
- c语言 排序(转)
https://blog.csdn.net/Galaxy_n/article/details/116742537
- JZ-051-构建乘积数组
构建乘积数组 题目描述 给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]A[1]...A[i-1]A[i+1]...A[n-1]. ...
- CDN网络科普小文(小说版)
引言 作为公司 cdn 小组的一名小码仔,我为写一篇 cdn 的科普文章准备了好一段时间(大概有一个多月没有更新我的社交账号了). 在我刚进入公司,培训完,进入小组,了解到我们做的是 cdn 相关的工 ...
- awk讲义-1-快速入门
awk讲义-1-快速入门 一.目标问题: 1.统计各个省份中城市的数量(一维数组) 2.统计城市中区县数量,要求输出格式:省份 城市 区县数量(二维数组) 3.求两个文件的交集 4.省市和市区两个文件 ...
- 基于python 实现KNN 算法
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2018/11/7 14:50 # @Author : gylhaut # @Site ...
- mysql 锁表
mysql 查看锁表解锁-- 查看那些表锁到了show OPEN TABLES where In_use > 0;-- 查看进程号show processlist;--删除进程 kill 108 ...
- Spring——初识
1.1 使用 导包:Spring Web MVC(maven) <!-- https://mvnrepository.com/artifact/org.springframework/sprin ...