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 ...
随机推荐
- 搭建windows测试环境的步骤
步骤:1.JDK安装 2.配置好JDK环境变量3.Tomcat安装4.将war包放在Tomcat的发布目录中webapps中,5.conf>server.xml里面设置默认解压,unpackW ...
- Yii2.0手册地址
官网打不开,可以看这里 http://yii2.techbrood.com/ ;跟官网里面文档一样.ps:今天真郁闷,官网都打不开
- 《Java大学教程》--第3章 迭代
迭代(iteration).重复(repetition):三种循环* for: 重复执行固定次数* while: 重复执行不固定次数* do...while: 比while至少多一次 1.答:P47迭 ...
- JavaScript 概述
什么是JavaScriptJavaScript 是一种具有面向对象能力的.解释型的程序设计语言. 它是基于对象和事件驱动并具有相对安全性的客户端脚本语言. 主要目的是,验证发往服务器端的数据.增加 W ...
- 面试总结——Java篇
前言:前期对Java基础的相关知识点进行了总结,具体参看:Java基础和面试知识点.近期由于笔者正在换工作(ing),因此下面将笔者在面试过程中或笔者朋友面试过程中反馈的题目进行总结,相信弄清楚下面题 ...
- Centos 7 安装JAVA环境 jdk1.8
在Linux环境(Centos 7)安装jdk1.8,有以下两种方式 方式一.安装openjdk # yum install java-1.8.0-openjdk* -y 方式二.使用wget下载 ...
- 机器学习算法总结(四)——GBDT与XGBOOST
Boosting方法实际上是采用加法模型与前向分布算法.在上一篇提到的Adaboost算法也可以用加法模型和前向分布算法来表示.以决策树为基学习器的提升方法称为提升树(Boosting Tree).对 ...
- P1553 数字反转(升级版)(模拟)
花了2个小时,写的..mmp只想说,还是我太菜了. #include<iostream> #include<cstring> using namespace std; ]; i ...
- centos 6.9修改系统默认字符集
[root@ckh ~]# locale –a #列出系统所支持的所有字符集 aa_DJ aa_DJ.iso88591 aa_DJ.utf8 aa_ER aa_ER@saaho aa_ER.utf8 ...
- node.js服务端程序在Linux上持久运行
如果要想在服务端部署node.js程序,让其持久化运行,就不能单单使用npm start命令运行,当然了,这样运行是毫无问题的,但是当关闭xshell窗口或者是关闭进程的时候(其实关闭xshell窗口 ...