Servlet 使用ServletContext共享数据,读取web.xml配置
ServletContext对象
session和cookie,对于每一个请求用户来说,都是不同的,因为要保证隐私安全。
而有一些数据,可以让所有用户共享,此时就可以用ServletContext对象。只要在一个Servlet中设置了ServletContext属性值,那么本项目的中任意一个Servlet中都可以获取到设置的属性值。作用范围是所有Servlet,而有效期是服务器关闭之前。
public class TestServletContext extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 获取Servlet的三种方式,获取的ServletContext对象是相同的。
//ServletContext context = this.getServletContext();
//context = req.getSession().getServletContext();
//ontext = this.getServletConfig().getServletContext();
ServletContext context = this.getServletContext();
// 设置属性值setAttribute(String name, Object object)
context.setAttribute("name", "张三");
// 获取属性值,如果不存在,则返回null
String name = (String)context.getAttribute("name");
}
}
使用ServletContext来获取web.xml中的配置项
之前讲了可以使用Properties工具类来获取配置文件中的配置项,这里,同样可以使用ServletContext来实现。
不过需要注意的是,ServletContext对象能够读取的配置项需要专门配置:
# 下面创建了两个配置项,分别是name=张三,age=99
<context-param>
<param-name>name</param-name>
<param-value>张三</param-value>
</context-param> <context-param>
<param-name>age</param-name>
<param-value>99</param-value>
</context-param>
使用ServletContext读取配置的实例:
ServletContext context = this.getServletContext();
String name = (String)context.getInitParameter("name");
int age = Integer.parseInt(context.getInitParameter("age"));
System.out.println("从web.xml读取到全局配置如下:\n" + "name :" + name + "\t age :" + age);
运行结果如下:
从web.xml读取到全局配置如下:
name :张三 age :99
从其他文件中读取数据
读取数据的时候,有一个问题就是路径的问题,如果使用绝对路径,一旦服务器代码改变位置,路径就会错误,一般都会使用相对路径。
相对路径有时候并不能准确的表示文件的位置,即使能都找到,在定位文件的时候也会有点麻烦,
可以在指定路径的时候,以项目根路径为准,来定位文件。
// 获取以项目webRoot目录为根目录,给定path的资源文件,返回绝对路径
String path = context.getRealPath("/doc/intro.txt");
System.out.println(path);
// E:\javaee\.metadata\.me_tcat85\webapps\MySite\doc\intro.txt // 获取webRoot下的资源流对象
InputStream config = context.getResourceAsStream("/doc/intro.txt");
// 实际是读webRoot/doc/intro.txt byte[] b = new byte[1000];
int length = config.read(b);
System.out.println(new String(b, 0, length));
// 打印配置文件中的数据
Servlet 使用ServletContext共享数据,读取web.xml配置的更多相关文章
- servlet中用注解的方式读取web.xml中的配置信息
在学习servletContext的时候,我们知道了可以在web.xml中通过<context-param>标签来定义全局的属性(所有servlet都能读取的信息),并在servlet中通 ...
- web.xml配置以及一些详解
web.xml的根元素定义如下所示(代表当前使用哪个模版): <?xml version="1.0" encoding="UTF-8"?> < ...
- web.xml配置重理解
<context-param> <param-name>home-page</param-name> <param-value>home.jsp< ...
- web.xml配置之<context-param>详解
读完本文,你将了解(1)<context-param>的作用和用法,(2)<context-param>配置和<init-param>的区别 <context ...
- springmvc学习指南 之---第27篇 spring如何实现servlet3.0无web.xml 配置servlet对象的
writedby 张艳涛 基于web.xml配置,有人说麻烦,tomcat给按照servlet3.0,实现了基于注解@WebServlet,有人说springmvc的springmvc.xml配置麻烦 ...
- springMVC WebApplicationInitializer 替代web.xml 配置Servlet 之原理
Servlet 3.0之前 ,xml 配置 在过去搭建spring + springMCV ,首先第一步要做的是什么 ,就是要配置web.xml 文件 ,把springMVC 中的Servlet 加 ...
- 初学servlet之使用web.xml配置
先写两个servlet,之后展示web.xml配置 package app01c;import java.io.IOException;import java.io.PrintWriter;impor ...
- eclipse环境Dynamic web module version 3.1版本的进步,简化Dynamic web object 中Servlet类的配置,不用web.xml配置<Servlet>
eclipse环境Dynamic web module version 3.1版本之前,Dynamic web object 中Servlet类的配置,要在web.xml 配置<Servlet& ...
- java web.xml配置详解
1.启动一个WEB项目的时候,WEB容器会去读取它的配置文件web.xml,读取<listener>和<context-param>两个结点. 2.紧急着,容创建一个Servl ...
随机推荐
- MATLAB简易画图2—普通直角坐标系
MATLAB简易画图2—普通直角坐标系 本人的MATLAB版本为: 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 继续在“MATLAB简易画图”这篇随 ...
- 微信小程序跳转微信小程序新增配置项目 navigateToMiniProgramAppIdList
每个小程序可跳转的其他小程序数量限制为不超过 10 个 从 2.4.0 版本以及指定日期(具体待定)开始,开发者提交新版小程序代码时,如使用了跳转其他小程序功能,则需要在代码配置中声明将要跳转的小程序 ...
- Win10 开始运行不保存历史记录原因和解决方法
Win10 开始运行命令以后,再次打开就没有任何历史记录了,常规方法是桌面-右键-个性化-开始-显示最常用的应用..可是打开是灰色的不可选. 每次打开开始都没有以前的记录..比如需要打开下regedi ...
- jquery中prop()和attr()用法
jquery1.6中新加了一个方法prop(),一直没用过它,官方解释只有一句话:获取在匹配的元素集中的第一个元素的属性值. 大家都知道有的浏览器只要写disabled,checked就可以了,而有的 ...
- node基础—process对象(管理进程)
process对象概述 process对象是一个全局对象,可以在任何地方都能访问到他,通过这个对象提供的属性和方法,使我们可以对当前运行的程序的进程进行访问和控制 process 对象是一个 glob ...
- CentOS 7 上安装vim(默认未安装)
今天使用CentOS 7,发现未安装vim,所以重新安装 执行命令: yum -y install vim* 然后就可以使用了
- python六十九课——网络编程之TCP协议
1.1 概述: TCP协议通过三次握手协议将客户端与服务器端连接,两端使用各自的Socket对象.Socket对象中包含了IO流,供数据传输. 即:TCP协议在客户端与服务器端通过Socket组成了I ...
- Error response from daemon: --cluster-store and --cluster-advertise daemon configurations are incompatible with swarm mode
将docker worker node加入swarm集群时,出现以下错误 1.试验环境: centos7 2.报错翻译:--cluster-store和--cluster-advertise后台配置与 ...
- python 那些我记不清的函数
eval 函数:用来计算在字符串中的有效Python表达式,并返回一个对象......将字符串变回数据类型 enumerate函数:加上序号 isinstance函数:判断数据类型 isinstanc ...
- pytorch学习-WHAT IS PYTORCH
参考:https://pytorch.org/tutorials/beginner/blitz/tensor_tutorial.html#sphx-glr-beginner-blitz-tensor- ...