[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 的方法
在开发时,我们会遇到一个需求:模块化.它要求我们把 业务组件进行拆分,分组.把一部分业务功能集中处理,以保证 部分功能块的独立,便于 分配任务到个人,确定人员职责,源代码管理,和发布时重组. 我们尝试 ...
随机推荐
- Win10 怎么给php文件设置默认打开应用
一,首先以管理员身份打开命令提示符 二,assoc .php=phpfile 创建一个文件关联 三,ftype phpfile="E:\Program Files\Sublime Text ...
- iOS支付宝SDK回调那坑
支付宝钱包支付接口开发包2.0标准版(iOS 2.2.1) ,回调不出来,demo给出的方法是: - (BOOL)application:(UIApplication *)application op ...
- 海康威视 嵌入到web页面相关问题
因项目上面需求,接触到了海康威视的设备,要把他嵌入到web页面中,所以就开始了爬坑之路 刚开始不知道如何把设备的页面嵌入到项目的web页面中,直到我遇见了他——“WEB3.0控件开发包V1.0.9_C ...
- LINUX文件的权限
一.权限设定的意义:系统最底层安全设定方法之,保证文件可以被可用的用户做相应操作. 二.文件权限的查看(alias) 命令:ls ls -l file ## 查看文件属性 ls -ld mkdir ...
- java中遍历类中的属性、调用getter&setter方法
public static void testReflect(Object model) throws NoSuchMethodException, IllegalAccessException, I ...
- HAWQ + MADlib 玩转数据挖掘之(四)——低秩矩阵分解实现推荐算法
一.潜在因子(Latent Factor)推荐算法 本算法整理自知乎上的回答@nick lee.应用领域:"网易云音乐歌单个性化推荐"."豆瓣电台音乐推荐"等. ...
- 解决 src/MD2.c:31:20: fatal error: Python.h: No such file or directory安装包错误
在linux命令行安装包时报错 src/MD2.c:31:20: fatal error: Python.h: No such file or directory 原因:缺少了python的dev 解 ...
- linux 系统优化+定时任务
安装软件 通过yum安装 自动补全工具:yum completion yum install -y tree bash-completion wget vim find -[TAB] 更改系统的yum ...
- I.MX6 linux tslib Corrupt calibration data
I.MX6 linux tslib Corrupt calibration data 一.tslib出错 Corrupt calibration data 二.解决方法: ...... if [ -f ...
- 使用SDWebImage加载大量图片后造成内存泄露的解决办法
SDWebImage的知名度就不用说了,github上近10k的star,国内外太多的App使用其进行图片加载. 但是最近在使用过程中发现,在UITableView中不断加载更多的内容,使用SDWeb ...