Tomact的启动开始于Bootstrap.java,在其init()中,首先要做的就是
setCatalinaHome();
setCatalinaBase();
initClassLoaders();
目的就是将tomcat启动的环境设置好,在进行classloader。
private void setCatalinaHome() {
if (System.getProperty("catalina.home") != null)
return;
File bootstrapJar =
new File(System.getProperty("user.dir"), "bootstrap.jar");
if (bootstrapJar.exists()) {
try {
System.setProperty
("catalina.home",
(new File(System.getProperty("user.dir"), ".."))
.getCanonicalPath());
} catch (Exception e) {
// Ignore
System.setProperty("catalina.home",
System.getProperty("user.dir"));
}
} else {
System.setProperty("catalina.home",
System.getProperty("user.dir"));
}
}
判断user.dir\bootstrap.jar存在否来设置catalina.home。
在initClassLoaders();中调用createClassLoader。loader class之前又要读取properties,于是看String value = CatalinaProperties.getProperty(name + ".loader");
public class CatalinaProperties {
// ------------------------------------------------------- Static Variables
private static final org.apache.juli.logging.Log log=
org.apache.juli.logging.LogFactory.getLog( CatalinaProperties.class );
private static Properties properties = null;
static {
loadProperties();
}
// --------------------------------------------------------- Public Methods
/**
* Return specified property value.
*/
public static String getProperty(String name) {
return properties.getProperty(name);
}
/**
* Return specified property value.
*/
public static String getProperty(String name, String defaultValue) {
return properties.getProperty(name, defaultValue);
}
// --------------------------------------------------------- Public Methods
/**
* Load properties.
*/
private static void loadProperties() {
InputStream is = null;
Throwable error = null;
try {
String configUrl = getConfigUrl();
if (configUrl != null) {
is = (new URL(configUrl)).openStream();
}
} catch (Throwable t) {
ExceptionUtils.handleThrowable(t);
}
if (is == null) {
try {
File home = new File(getCatalinaBase());
File conf = new File(home, "conf");
File properties = new File(conf, "catalina.properties");
is = new FileInputStream(properties);
} catch (Throwable t) {
ExceptionUtils.handleThrowable(t);
}
}
if (is == null) {
try {
is = CatalinaProperties.class.getResourceAsStream
("/org/apache/catalina/startup/catalina.properties");
} catch (Throwable t) {
ExceptionUtils.handleThrowable(t);
}
}
if (is != null) {
try {
properties = new Properties();
properties.load(is);
is.close();
} catch (Throwable t) {
error = t;
}
}
if ((is == null) || (error != null)) {
// Do something
log.warn("Failed to load catalina.properties", error);
// That's fine - we have reasonable defaults.
properties=new Properties();
}
// Register the properties as system properties
Enumeration<?> enumeration = properties.propertyNames();
while (enumeration.hasMoreElements()) {
String name = (String) enumeration.nextElement();
String value = properties.getProperty(name);
if (value != null) {
System.setProperty(name, value);
}
}
}
/**
* Get the value of the catalina.home environment variable.
*/
private static String getCatalinaHome() {
return System.getProperty("catalina.home",
System.getProperty("user.dir"));
}
/**
* Get the value of the catalina.base environment variable.
*/
private static String getCatalinaBase() {
return System.getProperty("catalina.base", getCatalinaHome());
}
/**
* Get the value of the configuration URL.
*/
private static String getConfigUrl() {
return System.getProperty("catalina.config");
}
}
CatalinaProperties 的核心是静态函数loadProperties(),在这里读取真正意义上的properties并注册
分享到:
相关推荐
cluster-redis-session-manager-3.0.jar":这是Tomcat Redis Session Manager的核心组件,实现了Tomcat的Session监听器和Manager接口,使得Tomcat能够将Session数据存储到Redis中,并在需要时从Redis中读取。...
- **Tomcat**: 版本7及以上,作为应用容器。 - **Jenkins**: 版本2.107.1,用于持续集成和持续部署。 - **Linux**: CentOS 6及以上版本,作为服务器操作系统。 2. **Jenkins插件**: - **Ansible Plugin**: 执行...
Tomcat支持多语言环境,源码中的LocalStrings.properties文件用于存储国际化文本,通过Locale对象切换不同语言版本。 总的来说,Tomcat源码的学习不仅能帮助开发者深入了解Web服务器的工作原理,还能提升解决实际...
在Tomcat启动时,它会读取`logging.properties`并根据配置使用Log4j进行日志记录。如果需要针对特定Web应用进行更细粒度的日志控制,可以在Web应用的`WEB-INF/classes`目录下放置自己的`log4j.properties`或`log4j....
### Tomcat跨域解决方案 #### 一、背景与问题描述 在现代Web开发中,由于浏览器的安全策略限制,不同源之间的资源访问会受到限制,这种现象被称为“同源策略”(Same-Origin Policy)。同源策略是为了保护用户数据...
"IDEA WEB项目启动不加载application.properties配置文件" 在本篇文章中,我们将讨论IDEA WEB项目启动不加载application.properties配置文件的问题。这个问题可能是由于项目中使用的SpringBoot版本不一致引起的。...
- Tomcat会读取`conf/catalina.properties`、`conf/server.properties`等配置文件,获取服务器的默认设置。 - `webapps`目录下的每个应用都有对应的`WEB-INF/web.xml`,定义了应用的部署信息,Tomcat会逐一解析...
- 首先,从官方网站下载对应Tomcat版本的Commons DBCP源码包。 - 打开`org.apache.commons.dbcp.BasicDataSourceFactory`类,找到处理密码的部分代码: ``` value=properties.getProperty(PROP_PASSWORD); if...
1. 将`cors-filter-1.7.jar`添加到Tomcat的`lib`目录下,确保Tomcat能够加载这个库。 2. 创建一个配置文件,例如`CORSFilter.properties`,其中定义跨域策略。比如: ``` allowed.origins=http://example.com, ...
在Windows 2003操作系统环境下,为了实现WebFocus系统的部署与运行,通常会采用IIS作为Web服务器,Tomcat作为应用服务器的架构。这种配置能够有效地支持动态网页、脚本执行以及更为复杂的Web应用需求。接下来,我们...
3. 加载properties文件:通过`java.io.FileInputStream`和`java.util.Properties`类读取properties文件,并使用`load`方法加载文件中的内容。 4. 获取配置项:使用`getProperty`方法根据key值获取properties文件中...
它们通常使用ISO-8859-1编码,但为了支持中文等非ASCII字符,我们需要将其编码转换为UTF-8。 1. **编码问题**: - **创建阶段**:当你编辑.properties文件时,确保编辑器(如Notepad++、Eclipse、IntelliJ IDEA等...
1.列出系统上的用户 2.另一种方法 3.推荐使用的 八、用户间通信-------------------------------------------------------------------------------------- 1.发送消息 2.接受消息和拒绝消息 九、发一封邮件--...
# 指定 mod_jk 模块需要读取的配置文件 workers.properties 的位置 JkWorkersFile /usr/local/apache/conf/workers.properties # 设置 mod_jk 日志文件的位置 JkLogFile /usr/local/apache/logs/mod_jk.log # 设置...
总之,理解和掌握Tomcat服务器的配置、启动分析及Servlet文件配置是Java Web开发者的必备技能。通过学习这些内容,开发者能够有效地管理Tomcat服务器,优化应用性能,以及提供稳定、安全的Web服务。不断探索和实践,...
在Web开发中,属性文件通常用于存储配置信息,如数据库连接字符串、系统参数或本地化文本。这些文件通常以`.properties`为扩展名,并且位于应用程序的`WEB-INF`或`webroot`目录下,以便于访问和管理。在本文中,我们...
总结来说,这个压缩包提供了一个处理跨域请求的Filter实现,结合了对Java属性文件的读取工具,以便于在Tomcat服务器上配置和管理CORS策略。开发者可以利用这些工具轻松地控制跨域访问,提升Web应用的交互性。