长生的梦呓


  • 归档
  • 算法
  • 基础
  • 关于

  • 分类
  • 日志
  • Servlet
  • Archive
  • 数据结构
  • IO 流

  • 标签
  • 友链
  • MyBatis
  • About
  • Spring 5
  • Java SE
  • Java EE
  • Algorithms
  • 新特性
  • 位运算技巧

  • 搜索
内网穿透 项目实战 数据库 MySQL 安卓踩坑 开发工具 设计模式 Enum 枚举 Linux MyBatis-plus JSON IDEA Transactions AOP IO 流 DP IoC 与 DI 位运算技巧 工具类 学习技巧 Git JDK 排序 Spring Boot Spring MVC Spring Framework MyBatis Log4J Regex Jsoup JDBC 数据结构 递推 递归 算法 Servlet与JSP 小难 中等 简单

(15)ServletContext对象介绍与使用

发表于 2020-03-31 | 0 | 阅读次数 273

前言

我们在前面学习了:
Java EE基础(12):Cookie介绍对象与使用 ,解决了不同请求间的数据共享问题。
Java EE基础(14):Session对象介绍与使用,解决了同一个用户不同请求的处理,需要相同数据问题。

这次我们学习ServletContext对象。它解决了不同的用户的数据共享。

一、ServletContext对象介绍

1.是什么

ServletContext官方叫servlet上下文。服务器会为每一个工程创建一个对象,这个对象就是ServletContext对象。这个对象全局唯一,而且工程内部的所有servlet都共享这个对象。所以叫全局应用程序共享对象。

ServletContext光看名字,会不会有人觉得这个对象是每个Servlet都有一个?其实并不是的,事实上,一个web应用对应的是一个ServletContext,所以ServletContext的作用范围(作用域)应该是整个应用的。

现在你知道了,你创建的一个web应用只对应着一个ServletContext。句话说,在你的web项目中只有一个ServletContext对象。

2.作用

解决了不同用户对同一数据的共享问题。

3.原理

ServletContext是由服务器进行创建的,一个项目有且仅有一个ServletContext对象。不管从项目中哪一个Servlet中获取,得到的都是同一个ServletContext对象。该对象由所有用户共同拥有,那么不同用户发起的请求获取到的也就是同一个对象。

4.生命周期

服务器启动到服务器关闭

5.作用域

整个项目内

6.特点

  • 服务器进行创建
  • 用户共享
  • 一个项目只且只有一个

二、ServletContext使用

1.如何获取

百度词条:

ServletContext接口是Servlet中最大的一个接口,呈现了web应用的Servlet视图。ServletContext实例是通过 getServletContext()方法获得的,由于HttpServlet继承GenericServlet的关系,GenericServlet类和HttpServlet类同时具有该方法。

解释:我们查询文档是会找到一个ServletContext接口,这个并不是我们要的。我们想要的是一个ServletContext对象。

既然在HttpServlet中并没有获取ServletContext对象的方法,那我们看它的父类GenericServlet。

我们发现HttpServlet的父类GenericServlet中有一个getServletContext() 方法,它可以返回一个ServletContext对象。返回的类型是ServletContext。此时我们应该就知道该怎么获取ServletContext对象了。

ServletContext servletContext = this.getServletContext(); // 获取ServletContext对象

getServletContext() 方法其实从GenericServlet实现的接口ServletConfig中来的,ServletConfig接口中有这个方法。

2.获取的三种方式

我们知道了getServletContext()方法是从什么地方来的,此时我们也知道如何获取ServletContext 对象。那么接下来会讲解三种不同的方法获取ServletContext对象

以下是三种方式获取ServletContext 对象:

ServletContext servletContext = this.getServletContext(); // 获取ServletContext对象,方式1
ServletContext servletContext2 = this.getServletConfig().getServletContext(); // 获取ServletContext对象,方式2
ServletContext servletContext3 = req.getSession().getServletContext(); // 获取ServletContext对象,方式3
		

3.数据存储与获取

和我们前面的Session存储与获取是一样的用法。

ServletContext servletContext = this.getServletContext(); // 获取ServletContext对象,方式1
servletContext.setAttribute("name", "value");
servletContext.getAttribute("name");

4.当前项目路径获取

ServletContext servletContext = this.getServletContext();
String realPath = servletContext.getRealPath(""); // 获取项目下资源的绝对路径

5.示例代码

设置值和获取值、获取项目下资源的绝对路径。剩下的方法可以参考Tomcat文档。

import java.io.IOException;

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;

/**
 * ServletContext简单使用
 * 
 * @author changsheng
 */
@WebServlet("/ServletContextServlet")
public class ServletContextServlet extends HttpServlet {

	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// 1.设置请求编码格式
		req.setCharacterEncoding("utf-8");
		// 2.设置响应编码格式
		resp.setHeader("content-type", "text/html;charset=utf-8");
		// 3.获取请求信息
		// 4.处理请求信息
		StringBuilder print = new StringBuilder();
		ServletContext servletContext = this.getServletContext(); // 获取ServletContext对象,方式1
		servletContext.setAttribute("name", "value"); // 设置值
		String name = (String)servletContext.getAttribute("name");
		print.append(name+"\n");
		String realPath = servletContext.getRealPath(""); // 获取项目下资源的绝对路径
		print.append(realPath);
		// 5.响应处理结果
		System.out.println(print); // 打印Session对象id
		resp.getWriter().write(print.toString());
	}

}

  • 本文作者: 长生的梦呓
  • 本文链接: https://shengjava.com/archives/15servletcontext对象介绍与使用
  • 版权声明: 本博客所有文章除特别声明外,均采用CC BY-NC-SA 3.0 许可协议。转载请注明出处!
# 内网穿透 # 项目实战 # 数据库 # MySQL # 安卓踩坑 # 开发工具 # 设计模式 # Enum # 枚举 # Linux # MyBatis-plus # JSON # IDEA # Transactions # AOP # IO 流 # DP # IoC 与 DI # 位运算技巧 # 工具类 # 学习技巧 # Git # JDK # 排序 # Spring Boot # Spring MVC # Spring Framework # MyBatis # Log4J # Regex # Jsoup # JDBC # 数据结构 # 递推 # 递归 # 算法 # Servlet与JSP # 小难 # 中等 # 简单
(14)Session对象介绍与使用
(16)JSP概念 + 简单使用 + 运行原理
  • 文章目录
  • 站点概览
长生的梦呓

长生的梦呓

110 日志
39 分类
40 标签
RSS
E-mail CSDN
Creative Commons
Links
  • CSDN 地址
  • waltz26
  • Ryan Wang's Blog
  • JohnNiang's Blog
  • 廖雪峰
  • 菜鸟教程
© 2021 长生的梦呓
浙ICP备20005262号-1