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# TAP 异步编程】三、async\await的运作机理详解
[原创] 本文只是个人笔记,很多错误,欢迎指出. 环境:vs2022 .net6.0 C#10 参考:https://blog.csdn.net/brook_shi/article/details/ ...
- vue结合webpack打包问题
在使用vue开发项目时,如果要使用其单文件组件特性,必然要使用webpack或者其他打包工具打包,这里我用到的是webpack打包,首先是搭建vue环境和webpack环境,在这里遇到的一个问题是在成 ...
- el-dialog设置为点击弹窗以外的区域不自动关闭弹窗
两种方法:单个设置或者全局设置 第一种:(单个设置) 在el-dialog标签中添加:close-on-click-modal="false"即可 <el-dialog ti ...
- python初略复习(2)及python相关数据分析模块的介绍
常用模块 Python中的模块在使用的时候统一都是采用的句点符(.) # 就是模块名点方法的形式 import time time.time() import datetime datetime.da ...
- linux中jupyter notebook中切换虚拟环境
python -m ipykernel install --user --name 虚拟环境名称 --display-name "虚拟环境名称" 然后再打开jupyter note ...
- 04-SpringMVC之请求处理流程
SpringMVC之请求处理流程 我们知道DispatcherServlet就是一个HttpServlet,而HttpServlet的请求就从doGet/doPost开始 DispatcherServ ...
- laravel 5.6 API 接口开发限制接口访问频率
在laravel 5.6及以上版本中框架中已自带ThrottleRequests,但是为了更好的处理消息,我们可以再新加一个中间件,来更方便的处理相应信息 第一步: php artisan make: ...
- ref属性
ref属性 1.被用来给元素或组件注册引用信息(id的替代者) 2.应用在html标签上获取的是真实DOM元素,应用在组件标签上是组件实例对象(vc) 3.使用方式: 打标识:<h1 ref=& ...
- 写给开发人员的实用密码学(七)—— 非对称密钥加密算法 RSA/ECC
本文部分内容翻译自 Practical-Cryptography-for-Developers-Book,笔者补充了密码学历史以及 openssl 命令示例,并重写了 RSA/ECC 算法原理.代码示 ...
- 关于vue3的inheritAttrs属性和$attrs的部分用法
当我们在父组件中想要为子组件的某一个标签添加一些样式(注意,这里的是指attributes,css样式只是其中一种属性而已) <show-message id="lkx" c ...