最近在阅读《How Tomcat Works》这本书,书中提到了Tomcat中对各种异常进行处理的方式。像Tomcat这种应用,错误消息对于系统管理员和servlet程序员来说都是很有用的。Tomcat中处理错误消息的方法是将错误消息存储在一个properties文件中,便于读取和编辑,但是Tomcat中有几百个类。若是将所有类的错误消息都存储在一个大的properties属性文件中,并维护这个文件将是一个噩梦。为了避免这种情况,Tomcat将properties文件划分到不同的包中,例如org.apache.catalina.core包下的properties属性文件包含该包中的任何类可能抛出的所有异常的信息,每个properties文件都是用org.apache.tomcat.util.res. StringManager类的一个实例来处理的。当Tomcat运行时,会产生StringManager类的很多实例,每个实例都会读取某个包下指定的properties文件。
当包中的某个类需要在其包内的properties文件中查找错误消息时,它会先获取对应的StringManager实例。但是,同一个包下的许多类会使用同一个StringManager实例,若是为每个要查找错误消息的对象创建一个StringManager实例是很浪费资源的。因此,设计StringManager类以便StringManager类的实例被保内所有的对象共享,在Tomcat中使用单例模式来处理这个问题,所以StringManager类是个单例类。StringManager只有一个私有的构造函数,这样就不能在类的外部通过new来实例化它了。只能通过调用其公用静态方法getManager()来获取其实例,该方法需要一个指明了包名的参数。每个StringManager实例都会以这个包名作为其键存储在一个Hashtable中。
代码实现如下:
publicstaticfinalsynchronized StringManager getManager(
String packageName, Locale locale) {
Map<Locale,StringManager> map = managers.get(packageName);
if (map == null) {
map = new Hashtable<Locale, StringManager>();
managers.put(packageName, map);
}
StringManager mgr = map.get(locale);
if (mgr == null) {
mgr = new StringManager(packageName, locale);
map.put(locale, mgr);
}
return mgr;
}
使用方法如下:
根据包名称获取到对应的实例:
/**
* The string manager for this package.
*/
protectedstaticfinal StringManager sm =
StringManager.getManager(Constants.Package);
在程序中使用:
publicvoid addChild(Container child) {
thrownew IllegalStateException
(sm.getString("standardWrapper.notChild"));
}
相关推荐
7. **错误处理和日志记录**:Tomcat如何处理异常并记录日志信息,以及如何自定义这些行为。 8. **部署和热更新**:Tomcat如何检测和处理Web应用程序的部署和更新。 9. **国际化和本地化**:Tomcat如何支持多种语言...
深入研究Tomcat源码可以帮助开发者了解Web应用是如何在服务器端运行的,以及如何优化性能、处理异常和实现高级功能。源码中的注释虽然可能不多,但结合官方文档和其他在线资源,可以逐步理解每个组件的工作方式。这...
Apache Tomcat源码分析 Apache Tomcat是一款广泛应用的开源Java Servlet容器,它是Java EE Web应用程序的标准实现。Tomcat源码的深入理解对于Java Web开发者来说是至关重要的,它可以帮助我们了解HTTP服务器的工作...
3. **源码分析**: 笔记作者在深入Tomcat源代码时发现,请求处理过程中,过滤器链的组装是在`StandardWrapperValve`中进行的,具体实现位于`org.apache.catalina.core.ApplicationFilterFactory.createFilterChain`...
【标题】"Tomcat源码资源包"是一个包含Apache Tomcat服务器源代码的压缩文件,旨在帮助开发者深入了解Tomcat的工作原理以及进行定制化开发。Tomcat是Java Servlet和JavaServer Pages(JSP)的开源应用服务器,是轻量...
2. **定位问题**:当遇到应用运行异常或者性能瓶颈时,源码分析能帮助快速找到问题所在,进行调试和修复。 3. **定制化开发**:了解源码后,我们可以根据需求对Tomcat进行扩展或修改,例如编写自定义Valve,实现...
8. **性能优化**:Tomcat源码分析可以帮助开发者了解如何优化性能,如调整线程池大小,启用NIO(非阻塞I/O)模式,减少内存泄漏等。 9. **扩展性**:Tomcat源码允许开发者自定义Valves(请求处理管道中的组件)、...
8. **错误处理与日志系统**:通过源码,我们可以了解Tomcat如何处理异常,以及它的日志系统是如何工作的,这对于调试和优化应用性能非常重要。 9. **国际化与本地化**:Tomcat支持多语言环境,源码中包含了国际化和...
Tomcat源码的分析可以帮助开发者理解Web应用的部署、请求处理、响应生成、会话管理等流程。在源码中,你可以找到如Catalina(核心Servlet容器)、 Coyote(连接器负责网络通信)和 Jasper(JSP引擎)等关键模块。 ...
6. **性能优化**:Tomcat源码分析可以帮助你理解其性能瓶颈,并提供针对性的优化策略。例如,调整线程池大小、缓存策略等。 7. **异常处理**:源码中的错误处理和日志记录部分对于调试和故障排除至关重要。了解这些...
1. 源码结构:Tomcat源码分为几个主要模块,如Catalina(核心服务)、Common(公共组件)、Jasper(JSP引擎)、Juli(日志系统)等,便于理解和调试。 2. 自定义配置:通过修改源码,可以实现特定功能,如自定义错误...
**源码分析:** Apache Tomcat 的源码提供了深入了解其内部工作原理的机会,这对于开发者优化性能、调试问题或进行定制化开发非常有价值。5.5.23 版本的源码包括了以下几个主要部分: 1. **Catalina**:这是Tomcat...
6. **错误处理**:理解Tomcat如何处理异常和错误,以及错误页面的定制。 总之,Apache Tomcat 7.0.75源码对于Java开发者来说是一份宝贵的资源,它不仅提供了运行Java Web应用的平台,同时也为深入学习Java Web技术...
源码分析是理解其工作原理和提升开发技能的重要途径。Apache Tomcat 7.0.33的源码提供了丰富的学习材料,让我们一起探索其中的关键知识点。 1. **架构设计** Tomcat采用模块化设计,主要由Catalina、Jasper、Juli...
5. 考虑异常处理,确保测试脚本在遇到错误时能正常结束。 6. 使用持续集成工具(如Jenkins、Travis CI等)自动化测试过程。 7. 分析测试报告,找出性能瓶颈和潜在的bug。 总之,"tomcat connectors"是Tomcat服务器...
WebWork源码分析: WebWork的核心在于它的Action系统,它通过处理用户请求并调用相应的业务逻辑来驱动应用程序。源码中包含了Action、Interceptor、Result等关键组件的实现。Action是处理用户请求的入口点,...
源码分析: 1. **目录结构**:在解压后的`apache-tomcat-8.0.0-RC5-src`中,你会看到一系列的目录和文件,包括`bin`、`conf`、`lib`、`webapps`、`work`等。`bin`目录包含了启动和停止Tomcat的脚本,`conf`包含配置...
用户只需导入必要的jar包,即可使用Ant工具对Tomcat源码进行编译,这为开发者提供了极大的便利。 在探索Tomcat6.0.35源码时,你可以关注以下几个关键知识点: 1. **Servlet容器**:Tomcat作为Servlet容器,负责...
Apache Tomcat 6.0.26 是一个广泛使用的开源软件,它是一个实现了Java Servlet和JavaServer Pages(JSP)规范的应用服务器,主要用于部署和运行Java Web应用程序。这个压缩包包含的是其源码版本,这对于开发者来说是...
总之,"maven构建的Tomcat源码"提供了一个深入研究Web服务器内部运作的窗口,结合MyEclipse2014和JDK1.7,为开发者提供了完整的开发、调试和学习环境。通过学习和实践,开发者不仅可以提升技术能力,还能更好地理解...