`
董宗磊
  • 浏览: 65513 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Tomcat源码分析之(一)--------处理异常方式

 
阅读更多

最近在阅读《How Tomcat Works》这本书,书中提到了Tomcat中对各种异常进行处理的方式。像Tomcat这种应用,错误消息对于系统管理员和servlet程序员来说都是很有用的。Tomcat中处理错误消息的方法是将错误消息存储在一个properties文件中,便于读取和编辑,但是Tomcat中有几百个类。若是将所有类的错误消息都存储在一个大的properties属性文件中,并维护这个文件将是一个噩梦。为了避免这种情况,Tomcatproperties文件划分到不同的包中,例如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"));

 

 

    }

分享到:
评论

相关推荐

    apache-tomcat-9.0.34-src.zip

    7. **错误处理和日志记录**:Tomcat如何处理异常并记录日志信息,以及如何自定义这些行为。 8. **部署和热更新**:Tomcat如何检测和处理Web应用程序的部署和更新。 9. **国际化和本地化**:Tomcat如何支持多种语言...

    apache-tomcat-8.5.51-src.7z

    深入研究Tomcat源码可以帮助开发者了解Web应用是如何在服务器端运行的,以及如何优化性能、处理异常和实现高级功能。源码中的注释虽然可能不多,但结合官方文档和其他在线资源,可以逐步理解每个组件的工作方式。这...

    tomcat源码

    Apache Tomcat源码分析 Apache Tomcat是一款广泛应用的开源Java Servlet容器,它是Java EE Web应用程序的标准实现。Tomcat源码的深入理解对于Java Web开发者来说是至关重要的,它可以帮助我们了解HTTP服务器的工作...

    Tomcat 源代码调试笔记 - 看不见的 Shell1

    3. **源码分析**: 笔记作者在深入Tomcat源代码时发现,请求处理过程中,过滤器链的组装是在`StandardWrapperValve`中进行的,具体实现位于`org.apache.catalina.core.ApplicationFilterFactory.createFilterChain`...

    tomcat源码资源包

    【标题】"Tomcat源码资源包"是一个包含Apache Tomcat服务器源代码的压缩文件,旨在帮助开发者深入了解Tomcat的工作原理以及进行定制化开发。Tomcat是Java Servlet和JavaServer Pages(JSP)的开源应用服务器,是轻量...

    tomcat8:tomcat8源码分析(tomcat-8.0.32版本)

    2. **定位问题**:当遇到应用运行异常或者性能瓶颈时,源码分析能帮助快速找到问题所在,进行调试和修复。 3. **定制化开发**:了解源码后,我们可以根据需求对Tomcat进行扩展或修改,例如编写自定义Valve,实现...

    apache-tomcat-7.0.40-src源码

    8. **性能优化**:Tomcat源码分析可以帮助开发者了解如何优化性能,如调整线程池大小,启用NIO(非阻塞I/O)模式,减少内存泄漏等。 9. **扩展性**:Tomcat源码允许开发者自定义Valves(请求处理管道中的组件)、...

    Tomcat源码 学习java很好的东东 apache-tomcat-6.0.26-src

    8. **错误处理与日志系统**:通过源码,我们可以了解Tomcat如何处理异常,以及它的日志系统是如何工作的,这对于调试和优化应用性能非常重要。 9. **国际化与本地化**:Tomcat支持多语言环境,源码中包含了国际化和...

    java和tomcat源码

    Tomcat源码的分析可以帮助开发者理解Web应用的部署、请求处理、响应生成、会话管理等流程。在源码中,你可以找到如Catalina(核心Servlet容器)、 Coyote(连接器负责网络通信)和 Jasper(JSP引擎)等关键模块。 ...

    tomcat5.5.29源码下载(含方法)

    6. **性能优化**:Tomcat源码分析可以帮助你理解其性能瓶颈,并提供针对性的优化策略。例如,调整线程池大小、缓存策略等。 7. **异常处理**:源码中的错误处理和日志记录部分对于调试和故障排除至关重要。了解这些...

    apache-tomcat-9.0.12-src.tar.gz

    1. 源码结构:Tomcat源码分为几个主要模块,如Catalina(核心服务)、Common(公共组件)、Jasper(JSP引擎)、Juli(日志系统)等,便于理解和调试。 2. 自定义配置:通过修改源码,可以实现特定功能,如自定义错误...

    apache-tomcat-5.5.23 部分源码(仅供学习交流)

    **源码分析:** Apache Tomcat 的源码提供了深入了解其内部工作原理的机会,这对于开发者优化性能、调试问题或进行定制化开发非常有价值。5.5.23 版本的源码包括了以下几个主要部分: 1. **Catalina**:这是Tomcat...

    apache-tomcat-7.0.75

    6. **错误处理**:理解Tomcat如何处理异常和错误,以及错误页面的定制。 总之,Apache Tomcat 7.0.75源码对于Java开发者来说是一份宝贵的资源,它不仅提供了运行Java Web应用的平台,同时也为深入学习Java Web技术...

    tomcat7 源码

    源码分析是理解其工作原理和提升开发技能的重要途径。Apache Tomcat 7.0.33的源码提供了丰富的学习材料,让我们一起探索其中的关键知识点。 1. **架构设计** Tomcat采用模块化设计,主要由Catalina、Jasper、Juli...

    tomcat connectors

    5. 考虑异常处理,确保测试脚本在遇到错误时能正常结束。 6. 使用持续集成工具(如Jenkins、Travis CI等)自动化测试过程。 7. 分析测试报告,找出性能瓶颈和潜在的bug。 总之,"tomcat connectors"是Tomcat服务器...

    webwork,tomcat源码

    WebWork源码分析: WebWork的核心在于它的Action系统,它通过处理用户请求并调用相应的业务逻辑来驱动应用程序。源码中包含了Action、Interceptor、Result等关键组件的实现。Action是处理用户请求的入口点,...

    tomcat8.0.0-RC5源码官方

    源码分析: 1. **目录结构**:在解压后的`apache-tomcat-8.0.0-RC5-src`中,你会看到一系列的目录和文件,包括`bin`、`conf`、`lib`、`webapps`、`work`等。`bin`目录包含了启动和停止Tomcat的脚本,`conf`包含配置...

    tomcat6.0.35源码

    用户只需导入必要的jar包,即可使用Ant工具对Tomcat源码进行编译,这为开发者提供了极大的便利。 在探索Tomcat6.0.35源码时,你可以关注以下几个关键知识点: 1. **Servlet容器**:Tomcat作为Servlet容器,负责...

    apache-tomcat-6.0.26

    Apache Tomcat 6.0.26 是一个广泛使用的开源软件,它是一个实现了Java Servlet和JavaServer Pages(JSP)规范的应用服务器,主要用于部署和运行Java Web应用程序。这个压缩包包含的是其源码版本,这对于开发者来说是...

    maven构建的Tomcat源码

    总之,"maven构建的Tomcat源码"提供了一个深入研究Web服务器内部运作的窗口,结合MyEclipse2014和JDK1.7,为开发者提供了完整的开发、调试和学习环境。通过学习和实践,开发者不仅可以提升技术能力,还能更好地理解...

Global site tag (gtag.js) - Google Analytics