[Java][Web]ServletContext 方法的应用
由于一个 Web 应用中的所有 Servlet 共享同一个 ServletContext 对象,所以多个 Servlet 通过 ServletContext 对象实现数据共享。
ServletContext 对象通常也被称之为 context 域对象。(还有 request session page)
String data = "aaaa123";
this.getServletContext().setAttribute("data", data);
String value = (String) this.getServletContext().getAttribute("data");
response.getOutputStream().write(("data:" + value).getBytes());
这两个放在两个 ServletDemo 类中时,在不同浏览器的不同页面都可以访问到 ServletContext 的值。
// 读取 WebRoot\WEB-INF\web.xml 中的属性值
String value = this.getServletContext().getInitParameter("data1");
response.getOutputStream().write(value.getBytes());
<servlet>
<servlet-name>ServletDemo5</servlet-name>
<servlet-class>cn.itcast.ServletDemo5</servlet-class>
<init-param>
<param-name>data1</param-name>
<param-value>x1x2x3</param-value>
</init-param>
</servlet>
以下代码实现了 Servlet 的转发: ( 1.jsp 位于 WebRoot\1.jsp ),但因为 ServletContext 是所有用户共用的域,因此此处使用并不合适。
String data = "aaa5";
// 把数据带给 1.jsp 不能通过 ServletContext 域,而要通过 request 域。
this.getServletContext().setAttribute("data", data); RequestDispatcher rDispatcher = this.getServletContext()
.getRequestDispatcher("/1.jsp");
rDispatcher.forward(request, response);
<div style="border:1px solid red;">
<%
String data = (String) application.getAttribute("data");
out.write(data);
%>
</div>
以下代码用于读取 src 目录下的 db.properties 配置文件中的键值
// 资源文件在源代码中放在 src 目录下,但发布后会出现在 WEB-INF\classes 目录下。
InputStream inputStream = this.getServletContext().getResourceAsStream("/WEB-INF/classes/db.properties");
Properties properties = new Properties();
properties.load(inputStream); String urlString = properties.getProperty("url");
String username = properties.getProperty("username");
String password = properties.getProperty("password"); response.getOutputStream().write(("url:" + urlString).getBytes());
response.getOutputStream().write(("\r\nusername:" + username).getBytes());
response.getOutputStream().write(("\r\npassword" + password).getBytes());
如果配置文件放在包下,路径会在 /WEB-INF/classes/cn/itcast/ 目录下
如果配置文件在 WebRoot 目录下,路径会成为 /db.properties
如果要使用 FileInputStream 来读取资源文件,可使用以下代码取得文件真实路径:
String path = this.getServletContext().getRealPath("/WEB-INF/classes/db.properties");
如果是 java 类等,不是 Servlet 的类来读资源文件,则使用以下代码
InputStream inputStream = UserDao.class.getClassLoader().getResourceAsStream("db.properties");
Properties properties = new Properties();
properties.load(inputStream);
然后因为只需应用启动时读取一次,所以通常写成以下代码来使用:
private static Properties dbconfig = new Properties();
static {
try {
InputStream inputStream = UserDao.class.getClassLoader()
.getResourceAsStream("db.properties");
dbconfig.load(inputStream);
} catch (Exception e) {
throw new ExceptionInInitializerError(e);
}
}
// 如果读取资源文件的程序不是 Servlet 的话,就只能通过类装载器来读取
public void update() throws IOException {
System.out.println(dbconfig.getProperty("url"));
}
这样的代码发布后,修改配置文件需要重启应用,可以使用以下方法改进:
InputStream inputStream = UserDao.class.getClassLoader().getResourceAsStream("db.properties");
// 按上面代码加载的配置文件 修改后仍读到原来的值
String path = UserDao.class.getClassLoader().getResource("db.properties").getPath();
FileInputStream inputStream = new FileInputStream(path);
不使用第一句代码,而使用后面的代码即可。
[Java][Web]ServletContext 方法的应用的更多相关文章
- Android浏览器访问java web的方法
以前自己也做过Android程序,可以和服务器通信,通过json来存取数据,当时是在APP中直接存取数据的,而这次我打算在手机浏览器中获得服务器传过来的Json参数,后来才发现其实很简单的,首先需要手 ...
- java web简易网上书店项目系列,使用MVC模式(servlet+jstl+dbutils),开篇
一. 针对很多java web初学者入门困难的问题,笔者利用一个小型web项目,一步一步的展示java web开发方法,每一个章节引入一些java web开发的重点知识,让同学们可以将java web ...
- 在Java Web程序中使用监听器可以通过以下两种方法
之前学习了很多涉及servlet的内容,本小结我们说一下监听器,说起监听器,编过桌面程序和手机App的都不陌生,常见的套路都是拖一个控件,然后给它绑定一个监听器,即可以对该对象的事件进行监听以便发生响 ...
- 获取JAVA[WEB]项目相关路径的几种方法
在jsp和class文件中调用的相对路径不同. 在jsp里,根目录是WebRoot 在class文件中,根目录是WebRoot/WEB-INF/classes 当然你也可以用System.getPro ...
- linux 下用renameTo方法修改java web项目中文件夹名称问题
经测试,在Linux环境中安装tomcat,然后启动其中的项目,在项目中使用java.io.File.renameTo(File dest)方法可行. 之前在本地运行代码可以修改,然后传到Linux服 ...
- 如何用比较快速的方法掌握Spring的核心——依赖注入,Java web轻量级开发面试教程 读书笔记
我们知道,Java方面的高级程序员一定得掌握Spring的技能,其中包括Spring 依赖注入(IOC),面向切面(AOP),和数据库的整合(比如和Hibernate整合或声明式事务等)以及Sprin ...
- java web 入门级 开发 常用页面调试方法
这里介绍一下Java web 入门级开发中常用的代码调式方法; ( 仅供入门级童靴 参考) ; 工具: chrome 浏览器 (版本越高越好); Java web 入门级开发 主要就是两个方面: ...
- Java Web项目中连接Access数据库的配置方法
本文是对前几天的"JDBC连接Access数据库的几种方式"这篇的升级.因为在做一些小项目的时候遇到的问题,因此才决定写这篇博客的.昨天已经将博客公布了.可是后来经过一些验证有点问 ...
- 在eclpse中 一个web project 引用多个 java project 的方法
在开发时,我们会遇到一个需求:模块化.它要求我们把 业务组件进行拆分,分组.把一部分业务功能集中处理,以保证 部分功能块的独立,便于 分配任务到个人,确定人员职责,源代码管理,和发布时重组. 我们尝试 ...
随机推荐
- js jq 主动触发事件
js的自定义事件与触发 //主动触发事件:触发鼠标被按下事件 var btn2 =document.getElementById("btn2"); var btn = docume ...
- php获取当前日期开始一周日期与星期几
不说了,对于PHPer来说,写不出来说什么都是白瞎,不喜勿喷~~~~ function get_week(){ $data = []; $format='Y-m-d'; for ($i=0; $i&l ...
- 【LeetCode 111_二叉树_遍历】Minimum Depth of Binary Tree
解法一:递归 int minDepth(TreeNode* root) { if (root == NULL) ; if (root->left == NULL) { ; } else if ( ...
- redis的Hash类型以及其操作
hashes类型 hashes类型及操作Redis hash是一个string类型的field和value的映射表.它的添加.删除操作都是0(1)(平均).hash特别适合用于存储对象.相较于将对象的 ...
- Windows平台编程涉及的函数
VirtualAlloc 调用进程的虚拟地址空间 GetTickCount 返回从操作系统启动到当前所经历过的毫秒数 malloc.h内存分配函数,需要头文件malloc.h
- Java语言基础-运算符
一丶逻辑运算符 1.&和&&的区别 (1).两个逻辑运算符的结果是一样的 (2).当第一个表达式为false时,&是会判断后边的表达式,而&&会产生短路 ...
- Bluetooth(android 4.2.2版本)
Android provides a default Bluetooth stack, BlueDroid, that is divided into two layers: The Bluetoot ...
- Redis安全性配置
最近Redis刚爆出一个安全性漏洞,我的服务器就“光荣的”中招了.黑客攻击的基本方法是: 扫描Redis端口,直接登录没有访问控制的Redis 修改Redis存盘配置:config set dir / ...
- sysbench工具使用
--------------需要的软件包-------------- automake libtool sysbench-1.0.zip --------------安装-------------- ...
- debian 8.1 安装idempiere 2.1 X64 笔记
接上文.当虚拟服务器和虚拟机搭建完成后.登陆debian 8.1 X64. 进入虚拟服务器控制台.打开虚拟机.root登陆.(留好初始状态系统快照.以便系统恢复.) 由于之前debian8.1X64默 ...