[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 的方法
在开发时,我们会遇到一个需求:模块化.它要求我们把 业务组件进行拆分,分组.把一部分业务功能集中处理,以保证 部分功能块的独立,便于 分配任务到个人,确定人员职责,源代码管理,和发布时重组. 我们尝试 ...
随机推荐
- 正则表达式 preg_match 匹配中文
preg_match 匹配中文出错 2010年01月06日 星期三 14:55 错误提示: Warning: preg_match() [function.preg-match]: Compilati ...
- UI-基本控件的简单使用
1.IBAction: //====================== 1> 能保证方法可以连线 2> 相当于void 2.IBOutlet: 1> 能保证属性可以连线 3.常 ...
- 解决visual studio2017没有系统类和方法注释的问题
好几次碰到这种情况了,每次都得稍微查一查才能解决这个问题,相信也有不少人遇到这个问题,在对方法还不是很熟练的时候,将鼠标放置到方法上去,就会有信息提示是一件非常方便的事情,本文的解决方法同样适用于只显 ...
- iOS-AFNetworking3.0上传大量(1000张)图片到服务器
背景: 最近项目要做上传图片功能,图片必须是高清的,所以不让压缩,上传图片是大量的,比如几百张,这个如果是用afn,将图片直接for循环加入到formData里会出现一个问题,临时变量太多,导致内存紧 ...
- import 路径
例子: import sys sys.path.append("/home/wang/Downloads/caffe-master/python") import caffe
- xgboost系列之应用xgboost的注意事项
问题:win和mac平台运行相同的xgboost代码,效果不同? 解决:xgboost的参数colsample_bytree设置为1.
- 前端(六):JavaScript面向对象之宿主对象
宿主对象即浏览器提供的对象,主要包括DOM对象和BOM对象. 一.DOM源起 1.SGML.XML和XHTML SGML(标准通用标记语言)是定义使用标签来表示数据的标记语言的语法. - 标签由一个小 ...
- 在Eclipse中导入dtd和xsd文件,使XML自动提示
DTD 类型约束文件 1. Window->Preferences->XML->XML Catalog->User Specified Entries窗口中,选择Add ...
- Virsh中创建虚拟机两种方式define和create的区别
本质上两者一样的,都是从xml配置文件创建虚拟机 define 丛xml配置文件创建主机但是不启动 create 同样是丛xml配置文件创建主机,但是可以指定很多选项,比如是否启动,是否连接控制台 ...
- GNU Radio安装教程: Ubuntu14.04 + uhd3.10.0 + gnuradio3.7.10.1
1. 更新和安装依赖项 在编译安装uhd和gnuradio之前,确保已安装所需依赖项.Ubuntu系统运行: sudo apt-get update 安装UHD和GNURadio所需依赖项: On U ...