`
zhaomengsen
  • 浏览: 207476 次
  • 性别: Icon_minigender_1
  • 来自: 河北
社区版块
存档分类
最新评论

tomcat 5.5 动态加载类

阅读更多
转载于:http://www.itxuexiwang.com/a/javadianzishu/tomcat/2016/0225/161.html?1456480735
开发使用的是tomcat5.5.27,对于WEB-INF/classes下面的类做了修改,tomcat就会就会自动重启,然后紧接着就是内存溢出。调试比较麻烦。昨天研究了一下tomcat的源代码,对类的加载机制作了一点点修改,让它动态加载类,这样调试的时候如果修改了java文件就不用重启 tomcat了。具体步骤如下:
修改WebappClassLoader.java文件中的modify()方法,
在745行的
    return (true);注销,修改为:
    // return (true);
    //做了修改,重新装载
    this.reloadresource(i);
    return false;

然后添加一个对方法reloadresource的实现:
    /**
     * 重新装载的动作包括:
     * 1。重新装载
     * 2。更新最新时间
     * @param i
     */
    private void reloadresource(int i)throws NamingException{
        String path = paths[i];
        String tclassName = path.replaceAll(this.repositories[0], "");
        String name = tclassName.replaceAll("/", ".").replaceAll(".class", "");
       
        resourceEntries.remove(name);
        this.findResourceInternal(name, tclassName);
        System.out.println("重新加载了类文件:"+tclassName);
        long lastModified =
            ((ResourceAttributes) resources.getAttributes(path))
            .getLastModified();
        lastModifiedDates[i] = lastModified;
       
        //从这里加载的相当于多在paths和lastModifiedDates中多添加了冗余记录,需要删除最后一个
        synchronized (allPermission) {
            int j;
            long[] result2 =
                new long[lastModifiedDates.length - 1];
            for (j = 0; j < (lastModifiedDates.length - 1); j++) {
                result2[j] = lastModifiedDates[j];
                }
            lastModifiedDates = result2;

            String[] result = new String[paths.length - 1];
            for (j = 0; j < (paths.length - 1); j++) {
                result[j] = paths[j];
                }
            paths = result;

        }
    }
这样就可以动态的由tomcat来加载类了。
分享到:
评论

相关推荐

    Tomcat5.5中文版

    1. Context配置:在`server.xml`中,每个`&lt;Context&gt;`元素代表一个Web应用程序,定义了应用的根路径、类加载器、session配置等。 2. Web应用部署:Web应用程序通常以WAR(Web ARchive)格式打包,只需将其放入`...

    tomcat5.5 解压版

    10. **监控与管理**:Tomcat提供了一个名为Manager的Web应用,允许管理员通过浏览器管理部署的应用,包括启动、停止、重新加载和删除应用。 总的来说,Tomcat 5.5作为一个轻量级应用服务器,适合小型项目或开发环境...

    Tomcat5.5 的dbcp配置

    在`$CATALINA_HOME/conf/server.xml`的`GlobalNamingResources`元素内,添加对`dbcp-config.xml`的引用,以便Tomcat能识别并加载数据源: ```xml &lt;!-- Edit the file at /path/to/tomcat/conf/Catalina/localhost...

    axis2+Tomcat5.5+Eclipse3.3

    【标题】:"axis2+Tomcat5.5+Eclipse3.3" 实例解析 【描述】:本文将深入探讨如何使用axis2、Tomcat5.5和Eclipse3.3来部署和访问Web服务,这是一份适用于初学者的学习指南。 【标签】:"webservice" "axis2" 在...

    tomcat5.5起动报错原因解决

    Tomcat 5.5在启动时,会尝试加载所有部署的应用程序。如果某个应用的类库或资源文件存在问题,比如缺少必要的JAR包、配置错误或是版本不兼容,都可能导致Tomcat启动失败。开发者需检查应用的`WEB-INF/lib`目录下的...

    小型服务器tomcat5.5

    4. **管理工具**:Tomcat提供了一套基于Web的管理界面,名为`Manager App`,允许管理员部署、卸载、重新加载或启动/停止应用。此外,还有一个`Host Manager`用于管理虚拟主机。 5. **安全特性**:Tomcat支持基本的...

    tomcat5.5 oracle驱动包

    这个驱动包通常包含一个名为`ojdbc.jar`的文件,它包含了所有必要的类和资源,使得Tomcat可以识别并连接到Oracle数据库。 安装Oracle驱动包的步骤如下: 1. **下载驱动包**:首先,你需要从Oracle官方网站或可靠的...

    嵌入式Tomcat5.5

    4. **编译类无需重启**:嵌入式Tomcat5.5能够自动检测类文件的变化,并自动重新加载,这样在开发过程中,当修改了Java源码并编译后,无需手动重启服务器,应用就能自动使用新的类。 5. **开发专用**:嵌入式Tomcat...

    tomcat5.5服务器

    9. **资源加载优化**:Tomcat 5.5允许开发者通过类路径或文件系统上的特定位置加载资源,增强了资源管理的灵活性。 10. **日志系统**:Tomcat 5.5使用`catalina.out`记录启动和运行时的日志,方便问题排查和诊断。 ...

    tomcat5.5及jprofile配置.rar

    标题和描述中提到的"tomcat5.5"是指Apache Tomcat 5.5版本,这是一个流行的开源Java Servlet容器,用于部署和运行Java Web应用程序。它遵循Java EE规范,特别是Servlet和JSP标准。Tomcat以其轻量级、高效和易用性而...

    Tomcat5.5 API

    《Tomcat5.5 API》是针对Apache Tomcat 5.5版本的API文档,它为开发者提供了详尽的接口信息和使用指南。Tomcat是一个开源的Java Servlet容器,广泛用于构建和部署Java Web应用程序。这个API文档是开发人员理解和使用...

    tomcat5.5源代码

    `org.apache.catalina.startup`包包含启动Tomcat时的部署逻辑,例如`Tomcat`类用于加载和解析`context.xml`和`server.xml`配置文件。理解这部分源码有助于定制部署过程。 8. **错误处理和日志系统**: Tomcat使用...

    Tomcat 5.5

    - ** Catalina目录**:存放了Tomcat的核心组件,如Catalina类加载器,以及与特定主机相关的配置。 - **webapps目录**:部署Web应用程序的地方,将WAR文件或解压后的目录放在此处即可自动部署。 - **logs目录**:...

    Mirror of Apache Tomcat 5.5.x.zip

    这个“Mirror of Apache Tomcat 5.5.x.zip”文件很可能是Apache Tomcat 5.5版本的一个镜像,包含了该版本的所有组件和必要的配置文件。Apache Tomcat 5.5是在2006年发布的,虽然现在已经过时,但仍有用户可能出于...

    tomcat 5.5下使用JSTL所需JAR包

    lib目录中的JAR文件会被自动加载到服务器的类路径中。 3. 在你的Web应用的WEB-INF目录下创建一个名为web.xml的配置文件,如果没有的话。在这个文件中,你需要配置JSTL的标签库描述符。例如: ```xml ... ...

    Tomcat5.5数据源的配置[图解]

    【Tomcat5.5数据源配置详解】 在Java Web开发中,Tomcat作为轻量级应用服务器,常常被用于部署Web应用程序。为了连接数据库,我们需要配置数据源(DataSource)。本篇将详细介绍如何在Tomcat 5.5版本中配置数据源,...

    tomcat5.5连接池配置

    首先,你需要下载C3P0的jar包,将其添加到Tomcat的lib目录下,确保Tomcat在运行时可以加载到这个库。C3P0的最新版本可以在官方网站上找到。 接着,我们需要在Tomcat的conf/server.xml文件中配置数据源(DataSource...

    Tomcat5.5 for Struts几个jar包

    在Tomcat 5.5环境下,为了使Struts能够正常工作,需要将上述jar包复制到Tomcat的`lib`目录下,或者直接在应用的`WEB-INF/lib`目录下放置,这样它们会在应用启动时被自动加载。这样做可以确保应用运行时能够找到所有...

    解决tomcat5.5以上不能用命令行启动的问题

    这些脚本会执行一些初始化任务,包括设置环境变量、加载JVM参数、初始化类加载器以及启动服务器。 问题可能出现在以下几个方面: 1. **环境变量配置**:确保`JAVA_HOME`和`CATALINA_HOME`环境变量已正确设置。`...

    Java Web实例:Eclipse3.2+Tomcat5.5+Sql Server2000实现的分页数据查询

    本实例将通过Eclipse 3.2集成开发环境、Tomcat 5.5应用服务器以及SQL Server 2000数据库来演示如何实现这一功能。 首先,我们需要在Eclipse 3.2中创建一个Java Web项目。Eclipse作为一款强大的Java IDE,提供了便捷...

Global site tag (gtag.js) - Google Analytics