- 浏览: 282903 次
- 性别:
- 来自: 宁波
文章分类
最新评论
有个朋友要用getClass().getResourceAsStream() 提取test.properties
但是在服务器运行过程中 无论怎么更改test.properties
得出的数据还是最初的那个
我后来试了一下 代码如下
package test;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
public class Test {
Properties pp = null;
public Properties getData() throws IOException {
InputStream is = getClass().getResourceAsStream("/test.properties");
// InputStream is = new FileInputStream(
// "D:\\java\\apache-tomcat-5.5.17\\apache-tomcat-5.5.17\\webapps\\testp\\WEB-INF\\classes\\test.properties");
System.out.println(is.hashCode());
pp = new Properties();
pp.load(is);
System.out.println(pp.hashCode());
// Properties pp = System.getProperties();
// Enumeration<String> enu = (Enumeration<String>) pp.propertyNames();
// while(enu.hasMoreElements()){
// String name = enu.nextElement();
// System.out.println(name + "=" +pp.getProperty(name));
// }
// is.close();
is.close();
return pp;
}
public static Properties getProperties() {
try {
return new Test().getData();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
public static void main(String[] args) {
while (true) {
System.out.println(getProperties());
try {
Thread.sleep(1000L);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
上面这个解析的Properties pp 的hashcode 始终不变
而InputStream 的hash 缺一直改变
由此可以推断结论有
getClass().getResourceAsStream() 是ClassLoader 加载Class一样的把test.properties 加载进了内存
但是针对上面的红字我写了MAIN函数做为测试
现在发现如果我更改Properties ,会立刻做出反应
main函数中的代码我的理解如下 每次ClassLoader都在加载ClassPath下的文件,当发现改变就构成Properties 改变
所以我想这是不是tomcat的ClassLoader 的一个bug ??
所以如果想test.properties随时变 用绝对路径 InputStream is = new FileInputStream("绝对路径")
就可以了
主要是因为把资源文件放在classpath下了,而改变了以后,资源文件没有重新编译,因此放入非classpath目录下就可以了
但是在服务器运行过程中 无论怎么更改test.properties
得出的数据还是最初的那个
我后来试了一下 代码如下
package test;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
public class Test {
Properties pp = null;
public Properties getData() throws IOException {
InputStream is = getClass().getResourceAsStream("/test.properties");
// InputStream is = new FileInputStream(
// "D:\\java\\apache-tomcat-5.5.17\\apache-tomcat-5.5.17\\webapps\\testp\\WEB-INF\\classes\\test.properties");
System.out.println(is.hashCode());
pp = new Properties();
pp.load(is);
System.out.println(pp.hashCode());
// Properties pp = System.getProperties();
// Enumeration<String> enu = (Enumeration<String>) pp.propertyNames();
// while(enu.hasMoreElements()){
// String name = enu.nextElement();
// System.out.println(name + "=" +pp.getProperty(name));
// }
// is.close();
is.close();
return pp;
}
public static Properties getProperties() {
try {
return new Test().getData();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
public static void main(String[] args) {
while (true) {
System.out.println(getProperties());
try {
Thread.sleep(1000L);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
上面这个解析的Properties pp 的hashcode 始终不变
而InputStream 的hash 缺一直改变
由此可以推断结论有
getClass().getResourceAsStream() 是ClassLoader 加载Class一样的把test.properties 加载进了内存
但是针对上面的红字我写了MAIN函数做为测试
现在发现如果我更改Properties ,会立刻做出反应
main函数中的代码我的理解如下 每次ClassLoader都在加载ClassPath下的文件,当发现改变就构成Properties 改变
所以我想这是不是tomcat的ClassLoader 的一个bug ??
所以如果想test.properties随时变 用绝对路径 InputStream is = new FileInputStream("绝对路径")
就可以了
主要是因为把资源文件放在classpath下了,而改变了以后,资源文件没有重新编译,因此放入非classpath目录下就可以了
发表评论
-
apache commons 组件下载
2015-05-26 08:40 1142apache commons 组件下载目录 http:/ ... -
各个手机号码运营商的 号码段 正则表达式
2015-03-11 13:59 1033134,135,136,137,138,139, ... -
利用反射 和 注解 实现javabean的验证
2015-01-06 08:59 2179验证类 public class BeanValidUt ... -
利用反射生成对应的dao参数类
2015-01-04 18:01 767package cn.com.servyou.fkpt.co ... -
java 生成doc 注意事项
2014-12-25 14:48 438在写注释的时候 /** * 风险 ... -
java 异常(转)
2013-09-09 11:21 8621.提倡异常封装 Java语言的异常处理机制可以 ... -
Void等多线程中的类和修饰符
2013-08-09 14:57 849Void 类是一个不可实例化的占位符类,它持有对表示 Ja ... -
父类和子类的操作
2013-06-05 17:06 901父类 public class Father { } ... -
set 效率问题
2013-06-04 11:05 1532为啥要用HashSet? ... -
冒泡排序
2013-05-31 17:17 829import java.util.Arrays; ... -
关于截取字符串长度 中文不能截取半个的问题
2013-05-26 21:30 1126import java.io.UnsupportedEnc ... -
java连接数据库
2013-05-16 20:56 834import java.sql.Connection; i ... -
内部类 匿名类 等
2013-05-13 11:07 835匿名内部类 举例 collections.sort中的 比 ... -
java 字符串反转 取2个字符串所有交叉的字符串
2013-05-12 18:25 2093//字符串反转方法 public String rever ... -
父类没有默认的构造函数,子类会编译通不过
2013-05-12 17:51 996父类没有默认的构造函数,子类会编译通不过 例子 父类 p ... -
java Calendar bug
2013-04-28 16:38 1041Calendar cal = Calendar.getIns ... -
静态成员变量和静态成员类的加载顺序
2013-04-28 16:29 908public class StaticClassNField ... -
null 强制转化为其他类型
2013-04-28 16:13 1002因null值可以强制转换为任何java类类型,(String ... -
Java注释中的@deprecated
2013-04-28 15:49 35835Java注释中的@deprecated与源代码中的@Dep ... -
利用反射 进行list的排序 泛型 支持所有实体类型
2013-04-23 14:22 1143public class SortUtils<T ...
相关推荐
- Tomcat会读取`conf/catalina.properties`、`conf/server.properties`等配置文件,获取服务器的默认设置。 - `webapps`目录下的每个应用都有对应的`WEB-INF/web.xml`,定义了应用的部署信息,Tomcat会逐一解析...
Tomcat使用`java.util.logging`API进行日志记录,用户可以在`logging.properties`文件中定制日志级别和输出方式。此外,`GlobalNamingResources`元素用于全局资源的定义,如数据源,错误页面的处理也在这里进行配置...
描述中的“目前主流的小型javaweb服务器,经典”意味着在Tomcat 6.0发布时,它是Java Web开发领域广泛应用的服务器,并且因其经典设计和稳定性能而备受推崇。虽然现在可能有更高级的版本,如Tomcat 9或更高,但...
在 Java 开发中,XML 配置文件的使用变得越来越普遍,许多项目都开始使用 XML 作为配置文件的格式,例如 Tomcat 的安装配置文件和 J2EE 的配置文件。使用 XML 作为配置文件有很多好处,例如可以轻松地更改配置项,而...
在main方法中,Bootstrap会加载服务器的全局配置文件,如`catalina.properties`,并创建`Catalina`实例,这是Tomcat的主要容器。 2. **服务器配置**: `Catalina`实例会读取`server.xml`等配置文件,解析并构建...
"java"标签表明这个话题与Java编程语言紧密相关,因为Tomcat是Java应用服务器,主要用于运行Java Web应用。这涉及到Java Servlet、JavaServer Pages(JSP)等技术,以及可能涉及的Java EE相关框架如Spring或Struts。...
总的来说,Tomcat 5.0.30是Java Web开发历程中的一个重要版本,它奠定了现代Web应用服务器的基础,并且在许多方面影响了后来的Tomcat版本和其他应用服务器的设计。通过学习这个版本,开发者可以深入了解Web服务器的...
Tomcat的运行离不开Java Development Kit(JDK),因为Tomcat需要JDK中的Java运行环境来解析和执行Servlet。因此,在安装和配置Tomcat之前,首先需要确保系统上已经安装了与Tomcat版本兼容的JDK。 Tomcat的核心配置...
3. 使用`java-property-utils-1.9.jar`读取并解析这个配置文件,将其配置到Filter中。 4. 在`web.xml`配置文件中,定义`CORSFilter`并绑定到相应的URL模式: ```xml <filter-name>CORSFilter <filter-class>...
Apache Tomcat作为一款轻量级的应用服务器,它主要负责处理基于Java的Web应用程序,如动态网页、Java小应用程序(JApplets)以及Java EE中的Servlet和JSP。Tomcat以其简单易用、性能稳定和低资源消耗而受到开发者的...
在Tomcat中,配置跨域通常涉及到修改`web.xml`文件或者使用Filter来设置响应头,这些操作可能需要读取和解析配置文件,这时`java-property-utils`就派上用场了。例如,我们可以用它来读取服务器配置中的跨域允许的...
Apache Tomcat是一款开源的Java Servlet容器,...总之,Apache Tomcat是一个强大且灵活的Java Web服务器,适用于开发和部署中小型应用。通过理解和配置其核心组件,你可以有效地管理你的Web服务,提高开发和运维效率。
- 在 Apache 的 `conf` 目录下创建 `workers.properties` 文件,该文件定义了 Tomcat 的位置(`tomcat_home`)和 Java 安装路径(`java_home`)。同时,它还设置了 AJP 连接器(`ajp13`)的端口(8009)和主机...
Apache Tomcat是一款开源的Java Servlet...总之,Apache Tomcat是一个强大的、轻量级的Java Web应用服务器,广泛应用于各种规模的企业和项目中。理解和掌握如何配置、管理及优化Tomcat对于Java Web开发者来说至关重要。
《深入解析Tomcat 7.0.26的Juli日志系统》 在Java Web应用服务器领域,Tomcat无疑是最受欢迎的选择之一。Tomcat 7.0.26版本中的`tomcat-juli.jar`文件是其核心组件之一,主要用于提供日志处理功能。本文将深入探讨`...
它主要负责解析并执行Java Servlets以及服务JavaServer Pages (JSP)。作为轻量级应用服务器,Tomcat以其小巧、高效、易于配置而受到开发者们的青睐。这份“Tomcat 5帮助文档”将涵盖以下关键知识点: 1. **Tomcat...
《深入解析SpringBoot内置Tomcat 9.0.44》 在现代Java Web开发中,SpringBoot框架因其便捷性和高效性受到了广泛欢迎。其中,SpringBoot内置的Tomcat服务器是许多开发者首选的轻量级应用服务器。本文将详细探讨...
Tomcat主要负责解析HTTP请求,并将这些请求转发给Java Servlets或JSP页面进行处理。处理完成后,Tomcat再将响应返回给客户端。Tomcat支持多线程处理,能够同时处理多个请求,具备高并发能力。 在安装Apache Tomcat ...
Apache Tomcat 6.0.32 是一个广泛使用的开源软件,主要作为Java Servlet和JavaServer Pages(JSP)的应用服务器。它实现了Java EE的Web应用程序容器标准,为开发者提供了一个轻量级、高效的平台来部署和运行Java Web...
只需在`application.properties`或`application.yml`中配置服务器端口,Spring Boot就会自动处理Tomcat的初始化和启动。 总的来说,embeded Tomcat使得JavaEE开发变得更加便捷,允许开发者在本地环境中快速迭代和...