Java 之 ServletContext 对象
一、ServletContext 接口
1、ServletContext 是什么
(1)ServletContext 是一个接口,它表示 Servlet 上下文对象(可以和程序的容器(服务器)来通信);
(2)一个 web 工程, 只有一个 ServletContext 对象实例;
(3)ServletContext 对象是一个域对象;
(4)ServletContext 是在 web 工程部署启动的时候创建。 在 web 工程停止的时候销毁
2、域对象
域对象:就是类似于 Map,可以在里面存取数据,叫域对象。
域对象的范围:指的是 存取数据的操作范围。
ServletContext 范围:整个 Web 工程。
二、获取 ServletContext 对象
1、通过 ServletConfig 获取
方法:
ServletContext servletContext = getServletConfig().getServletContext();
2、通过ServletRequest及其子类获取
方法:
ServletRequest req = (ServletRequest)request; //强转成 ServletRequest 获取
ServletContext servletContext3 = req.getServletContext();
ServletContext servletContext5 = request.getServletContext(); //通过 HttpServletRequest 获取
3、通过 getServletContext() 方法获取
直接调用该方法,其实是 GenericServlet 类中的方法,其本质还是通过 ServletConfig 对象获取的
ServletContext servletContext = getServletContext();
三、功能作用
1、获取 web.xml 中配置的 上下文参数 context-param
//web.xml配置
<!--context-param 是上下文参数(它属于整个 web 工程)-->
<context-param>
<param-name>username</param-name>
<param-value>context</param-value>
</context-param>
<!--context-param 是上下文参数(它属于整个 web 工程)-->
<context-param>
<param-name>password</param-name>
<param-value>root</param-value>
</context-param>
//获取参数的 方法
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 获取 web.xml 中配置的上下文参数 context-param
ServletContext context = getServletConfig().getServletContext();
String username = context.getInitParameter("username");
System.out.println("context-param 参数 username 的值是:" + username);
System.out.println("context-param 参数 password 的值是:" + context.getInitParameter("password"));
}
注意:
① <context-param> 标签要书写在 <web-app> 里面,<servlet>的外面;
② 这里配置的参数是为整个 web 工程配置的,对所有的 servlet 都有效;而之前 <init-param> 为某一个servlet单独配置的,注意区分;
2、域对象:存取数据
(1)setAttribute(String name,Object value); 存储数据
(2)getAttribute(String name); 获取数据
(3)removeAttribute(String name); 移除数据
ServletContent 对象范围:所有用户所有请求的数据(谨慎使用)
Demo:
// ContextServlet1
public class ContextServlet1 extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException,IOException {
// 获取 ServletContext 对象
ServletContext context = getServletContext();
System.out.println(context);
System.out.println("保存之前: Context1 获取 key1 的值是:" + context.getAttribute("key1"));
context.setAttribute("key1", "value1");
System.out.println("Context1 中获取域数据 key1 的值是:" + context.getAttribute("key1"));
}
}
// ContextServlet2
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException {
ServletContext context = getServletContext();System.out.println(context);
System.out.println("Context2 中获取域数据 key1 的值是:"+ context.getAttribute("key1"));
}
3、获取当前的工程路径(虚拟路径):格式:/工程路径
获取当前工程的路径(虚拟路径),格式:/工程路径
String contextPath = getServletContext().getContextPath();
4、获取工程部署后在服务器硬盘上的绝对路径(真实路径)
获取工程绝对路径(真实路径)
String realPath = getServletContext().getRealPath("/");
Demo:
// 获取工程部署后在服务器硬盘上的绝对路径(真实路径)
/**
* / 斜杠被服务器解析地址为:http://ip:port/工程名/ 映射到 IDEA/eclipse 代码的 web 目录
*/
System.out.println("工程部署的路径是:" + context.getRealPath("/"));
System.out.println("工程下 css 目录的绝对路径是:" + context.getRealPath("/css"));
System.out.println("工程下 imgs 目录 1.jpg 的绝对路径是:" + context.getRealPath("/imgs/1.jpg")); String b = context.getRealPath("/b.txt");//web目录下资源访问
String c = context.getRealPath("/WEB-INF/c.txt");//WEB-INF目录下的资源访问
String a = context.getRealPath("/WEB-INF/classes/a.txt");//src目录下的资源访问
5、获取MIME类型
MIME 类型:在互联网通信过程中定义的一种文件数据类型。
格式:
大类型/小类型; 如:text/html、image/jpeg 等
获取一个文件的 MIME类型
String mimeType = getServletContext().getMimeType(String fileName);
Java 之 ServletContext 对象的更多相关文章
- 在Servlet使用getServletContext()获取ServletContext对象出现java.lang.NullPointerException(空指针)异常的解决办法
今天遇到了一个在servlet的service方法中获取ServletContext对象出现java.lang.NullPointerException(空指针)异常,代码如下: 1 //获取Serv ...
- Java Servlet(三):Servlet中ServletConfig对象和ServletContext对象
本文将记录ServletConfig/ServletContext中提供了哪些方法,及方法的用法. ServletConfig是一个抽象接口,它是由Servlet容器使用,在一个servlet对象初始 ...
- Java第三阶段学习(十一、Servlet基础、servlet中的方法、servlet的配置、ServletContext对象)
一.Servlet简介 1.什么是servlet: sun公司提供的一套规范(接口),用来处理客户端请求.响应给浏览器的动态资源.但servlet的实质就是java代码,通过java的API动态的向 ...
- JAVA基础之ServletContext对象
个人理解: ServletContext类似字节码文件对象,在web创建的时候就自动生成了,并且是唯一的,跟随着项目和服务器共存亡了.通过这个对象,我们可以向里面存数据(键值对),也可以通过别的Se ...
- mvc-servlet---ServletConfig与ServletContext对象详解(转载)
ServletConfig与ServletContext对象详解 一.ServletConfig对象 在Servlet的配置文件中,可以使用一个或多个<init-param>标签为s ...
- ServletContext对象
**1 ServletContext对象 1)在web应用中,由服务器创建的唯一的一个对象是ServletContext 2)ServletContext对象在每一个Servlet中取得都是相 ...
- Java 四大域对象总结
一.ServletContext 1.生命周期:当Web应用被加载进容器时创建代表整个web应用的ServletContext对象,当服务器关闭或Web应用被移除时,ServletContext对象跟 ...
- javaWEB总结(4):ServletContext对象方法
前言:之前每次学到ServletContext对象都会抗拒,跳着学,后面才发现有很多不懂的原理都在这个对象里面,后悔莫及,所以今天特地把他单放在一篇文章里,算是对他的忏悔. 1.什么是ServletC ...
- ServletConfig与ServletContext对象(接口)
ServletConfig:封装servlet的配置信息. 在Servlet的配置文件中,可以使用一个或多个<init-param>标签为servlet配置一些初始化参数. <ser ...
随机推荐
- Incorrect string value: '\xF0\x9F\x98\xAD",...' for column 'commentContent' at row 1
我分为下面三个步骤来解决: (1):修改mysql数据库的编码为uft8mb4 (2):修改数据表的编码为utf8mb4 (3):修改连接数据库的连接代码 更改数据库编码:ALTER DATABASE ...
- Linux下SQL Server安装及数据库迁移
有客户使用Linux服务器,SQL Server从2017开始已支持Linux,从未用过,今天测试了一下,比较简单,记录一下. Linux:CentOS 7.0 首先更新源: curl -o /etc ...
- 支付宝小程序开发——rich-text富文本组件支持html代码
前言: 与微信小程序不同,支付宝小程序的富文本组件并不能直接支持html代码,如: 如上,支付宝小程序的富文本组件只支持数组类型,html代码需要使用 mini-html-parser 转换,具体用法 ...
- 【转】Python查找某文件夹下的所有excel文件
# -*- coding: utf-8 -*- # author:baoshan import os dirname = r'D:\0.shenma\01.聊城资料\01.数据资料\02.聊城年鉴数据 ...
- jw python 培训帮助 手册
#########sample 1 (如果python 遇到有问题,就求助于 help 命令,python 是 个人开发的胶水语言,因此不具备 java,c++的类的继承关系) Python hel ...
- makefile那些事儿
一.好处 自动化编译,一条make命令,整个工程可以完全自动编译,make命令是构建大型项目的首选方案. makefile就像一个shell脚本一样,用来定义规则,一个名称包含一条或多条命令,在终端m ...
- AIX日志相关的命令
常用的命令有: 1.列出简短的出错信息 errpt | more 2.列出所有硬件出错信息 errpt -d H 3.列出所有软件错误信息 errpt -d S 4.列出详细的出错信息 errpt – ...
- 负载均衡Nginx和F5的区别
今早上看书,看到为了保证Zuul的高可用性,在Zuul的前端可以使用Nginx或F5再次进行负载转发 使用过Nginx,那F5是什么,他们有什么区别吗? (1)F5 F5负载均衡器是应用交付网络的全球 ...
- json_encode不自动转义斜杠“/”的方法
默认的情况之下使用 json_encode 对数组进行 json 格式的转换时候会自动的将数据中含有斜杠的字符串进行转义,如图 两种解决办法 其一,正则替换: $a = str_replace(& ...
- k8s-ingress安装
一.编写nginx-ingress-controller.yaml文件 apiVersion: extensions/v1beta1 kind: Deployment metadata: name ...