精华内容
下载资源
问答
  • Tomcat自动加载更新配置

    千次阅读 2016-10-21 18:40:56
    在开发项目的时候每次修改类都要重新手动启动服务器,这样会浪费很多时间,下边介绍一种方法来修改tomcat配置,来让tomcat在类更新时自动加载。 在tomcat中可以直接配置自动加载的操作,这样即使不重新启动服务器...

    在开发项目的时候每次修改类都要重新手动启动服务器,这样会浪费很多时间,下边介绍一种方法来修改tomcat的配置,来让tomcat在类更新时自动加载。

    在tomcat中可以直接配置自动加载的操作,这样即使不重新启动服务器,类修改后也可以被立刻加载进来。重新加载的实现有许多方法,下边介绍一个在sever.xml中的配置,如下:

    1.找到tomacat的安装目录。

    2,找到conf文件夹下的server.xml(关于server.xml的介绍可以看这个 http://blog.csdn.net/weinianjie1/article/details/7954425

    3.加上

    <Context path="/test" docBase="test" reloadable="true"/>  
    Context属性有:
    	className         :指定实现org.apache.catalina.Context接口的类,默认值为org.apache.catalina.core.StandardContext.
              path                   :指定访问该Web应用的URL入口.
              docBase             :指定Web应用的文件路径.可以给定绝对路径,也可以给定相对于Host的appBase属性的相对路径.     如果Web应用采用开放目录结构,那就指定Web应用的根目录;如果Web应用是个WAR文件,那就指定WAR文件的路径.
              reloadable       :如果这个属性设为true,Tomcat服务器在运行状态下会监视在WEB-INF/class和WEB-INF/lib目录下CLASS文件的改动.如果检测到有calss文件被更新,服务器会自动重新加载Web应用.
              cookies             :指定是否通过Cookie来支持Session,默认为true.
              useNaming         :指定是否支持JNDI,默认为true。
    (详细属性解释见上边链接文章)


    可以发现,直接在配置虚拟目录的位置上增加一个reloadable属性即可,但是这种情况只适合于开发。因为使用reloadable自动加载后,服务器将始终处于监视状态,一旦发现类修改后就要立刻重新加载,运行的性能是比较低的,所以,当项目真正发布运行时一定要将reloadable的内容设置成false,以提升服务器的运行性能。

    另外,当Tomcat重新加载了新的内容之后,所有的操作都将初始化,所有设置过的session属性都将消失。(《java web开发实战经典》)


    下边列举网上摘录的其它几种方法:

    1.可以在test/META-INF目录下面放置一个context.xml文件,内容如下:
    <Context reloadable="true"/>
    
    2.也可以在conf/Catalina/localhost目录下放置一个test.xml文件,内容如下:
    <Context reloadable="true"/>
    
    3.如果想让localhost下的所有web应用都自动reload,那么可以在conf/Catalina/localhost目录下放置一个context.xml.default文件,内容如下:
    <Context reloadable="true"/>
     
    4.如果希望tomcat下的所有web应用都自动reload,还有一种方法。方法如下:
    随便修改一下test/WEB-INF/web.xml文件,比如加个空行,然后保存,这样tomcat会自动监测到web.xml被修改了,然后就重新加载test应用。这个自动监测的配置属于tomcat的默认配置,配置信息如下:
    conf/context.xml文件中
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
    这个文件中的配置适用于所有的web应用,不过这种方法有些局限性,就是WatchedResource中只能指定一个具体的文件,不支持WEB-INF/*等模式匹配,所以无法做到监测整个web应用。
    
    5.还可以修改server.xml文件,在<host>下面配置<Context>信息:
    <Context path="/test" docBase="test" reloadable="true"/>
    不过这种方法不建议使用,因为修改server.xml文件需要重启tomcat,而且不便于管理,因为server.xml里面的配置信息比较重要,所以最好把web应用自身的配置信息放在单独的文件中管理比较好。

    展开全文
  • 如何配置 tomcat 的 context.xml 文件以实现无需重启服务器,自动重新加载修改过的类文件。

    当我们进行 Web 应用开发时,如果不进行配置,每次修改 Java 类文件都需要重启服务器。如何让服务器识别到类的更新并自动重新加载呢?其实很简单。

    一、配置方法

    对于较新版本(5.5 之后)的 tomcat 服务器来说,只需要修改 \conf\context.xml 文件,给 Context 标签加上 reloadable="true" 这个属性即可。比如原来 context.xml 是这个样子的:

    <Context>
    
        <WatchedResource>WEB-INF/web.xml</WatchedResource>
        <WatchedResource>WEB-INF/tomcat-web.xml</WatchedResource>
        <WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>
    
    </Context>
    

    修改之后

    <Context reloadable="true">
    
        <WatchedResource>WEB-INF/web.xml</WatchedResource>
        <WatchedResource>WEB-INF/tomcat-web.xml</WatchedResource>
        <WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>
    
    </Context>
    

    旧版 tomcat(5.5 之前,目前很少用),则需要在\conf\server.xml 中的 <Host> 元素里加入 <Context reloadbale="true">

    这就算完成任务了。当然,要是需要说的就这么多,就用不着不单独开一篇文章啦。主要是在应用的过程中,我遇到了一些让我疑惑的地方,在网上又不好搜到相关的解答,于是进行了一点实验,并在这里记录一下。

    二、几点问题

    1.配置 context.xml 后需要重启服务器吗?

    tomcat 会定时扫描 context.xml 文件,按理说,一旦发现文件被修改,就会自动重新加载这个文件,而不需要重启服务器 。然而实际上增加 reloadable="true" 这个属性后,类的自动重载并没有生效,需要重启服务器。

    1.什么情况适用自动重新加载?

    自动重新加载只对修改现存的 Java 类文件(如 Servlet)有效,创建新的文件是不行的。

    2.如何触发自动重新加载?

    在修改了类的源代码(.java)后,需要重新编译得到类文件(.class),并且需要使用客户端(浏览器)访问该 Web 页面。对已打开的 Web 页面,随意点击一下即可。对于这一过程,可以使用 listener 进行监听。

    展开全文
  • Tomcat加载配置方式

    千次阅读 2018-03-10 11:15:45
    一、Tomcat加载配置在工程管理目录找到自己的server下的server.xml修改部署项目添加代码:[html] view plain copy&lt;Context docBase="XXAPP" path="/XXAPP" reloadable="true...

    一、Tomcat热加载配置

    在工程管理目录找到自己的server下的server.xml修改部署项目

    添加代码:

    [html]  view plain  copy
    1. <Context docBase="XXAPP" path="/XXAPP" reloadable="true" source="org.eclipse.jst.jee.server:XXAPP"/></Host>  

    上面这段代码是从我的项目配置中复制的,把其中的/XXAPP换成项目名,重点是设置reloadable="true",这样每次文件有更改,保存的时候,就会自动部署到Tomcat服务器,实现热部署。不过,这种部署设置,每次保存的时候,都会重新启动服务器。

    再做如下修改:

    [html]  view plain  copy
    1. <Context docBase="XXAPP" path="/XXAPP" reloadable="false" crossContext="true" source="org.eclipse.jst.jee.server:XXAPP"/></Host>  

    如上代码,设置reloadable="false" crossContext="true",那么就可实现每次保存文件的时候,自动部署到服务器中,并且不会重新启动。

    热加载的方式必须保证eclipse以debug模式启动项目才可以用!

    二、修改文件即时发布到tomcat中

    如下图所示,Publishing中选择第二项,保证Eclipse中修改java类和jsp等文件会立即同步到Tomcat的webapps中对应项目中,使得jsp的修改可以立即呈现。



    展开全文
  • 当应用配置文件发生变化时,无需重启tomcat,可以使tomcat重新加载应用。 场景 假设存在一个J2EE应用A,对应war文件名称为A.war,部署在tomcat的webapps目录下,即:CATALINA_HOME/webapps/A.war。 tomcat启动之后会...

    前言

    当应用配置文件发生变化时,无需重启tomcat,可以使tomcat重新加载应用。

    场景

    假设存在一个J2EE应用A,对应war文件名称为A.war,部署在tomcat的webapps目录下,即:CATALINA_HOME/webapps/A.war。
    tomcat启动之后会将A.war解压,并在$CATALINA_HOME/webapps/目录下对应生成目录A,即:CATALINA_HOME/webapps/A。
    此时,需要修改A下存在一个配置文件a_dao.xml,其中配置了一些参数,如:数据库配置。
    为了使应用能够重新使用最新的配置属性,有2种方式:
    其一:修改配置文件,直接重启tomcat。
    其二:修改配置文件,执行命令:touch TOMCAT_HOME/webapps/A/WEB-INF/web.xml,让tomcat重新加载应用A。

    原理

    当然,修改配置之后重启tomcat这个方式不难理解,应用重新被部署,肯定会使用到最新的配置。
    那么,对于不需要重启tomcat,而是让tomcat重新加载应用,低层的实现原理是什么呢?
    首先,我们来看通过tomcat重新加载应用,我们做了什么?
    我们只做了一件事情:touch TOMCAT_HOME/webapps/A/WEB-INF/web.xml
    显然,这里涉及了2个组件:touch命令和tomcat。
    OK,下面我们分别解读这2个组件都做了什么事情,拨云见雾地看看这里面都发生了什么。

    1.touch命令做了什么

    执行了touch命令,这个命令的作用是修改文件的时间戳。

    TOUCH(1)                         User Commands                        TOUCH(1)
    
    NAME
           touch - change file timestamps
    
    SYNOPSIS
           touch [OPTION]... FILE...
    
    DESCRIPTION
           Update the access and modification times of each FILE to the current time.
    
           A FILE argument that does not exist is created empty, unless -c or -h is supplied.

    什么意思?在实践中发现,touch命令会将文件的“创建时间”,“访问时间”和“修改时间”这三个时间戳都修改为当前时间。
    这意味着什么呢?tomcat会认为这个文件发生了变化!
    那么,是不是可以理解为一旦tomcat监测到应用的描述文件web.xml发生变化之后就会主动重新加载应用呢?

    如下是一个实际的tomcat重新加载应用的输出日志。

    九月 15, 2017 8:21:49 下午 org.apache.catalina.startup.HostConfig reload
    信息: Reloading context [/test-javaweb]
    九月 15, 2017 8:21:49 下午 org.apache.catalina.core.StandardContext reload
    信息: Reloading Context with name [/test-javaweb] has started
    九月 15, 2017 8:21:49 下午 org.apache.catalina.ha.session.DeltaManager stopInternal
    信息: Manager [localhost#/test-javaweb] expiring sessions upon shutdown
    九月 15, 2017 8:21:50 下午 org.apache.catalina.startup.TaglibUriRule body
    信息: TLD skipped. URI: http://java.sun.com/jstl/core_rt is already defined
    九月 15, 2017 8:21:50 下午 org.apache.catalina.startup.TaglibUriRule body
    信息: TLD skipped. URI: http://java.sun.com/jstl/core is already defined
    九月 15, 2017 8:21:50 下午 org.apache.catalina.startup.TaglibUriRule body
    信息: TLD skipped. URI: http://java.sun.com/jsp/jstl/core is already defined
    九月 15, 2017 8:21:50 下午 org.apache.catalina.startup.TaglibUriRule body
    信息: TLD skipped. URI: http://java.sun.com/jstl/fmt_rt is already defined
    九月 15, 2017 8:21:50 下午 org.apache.catalina.startup.TaglibUriRule body
    信息: TLD skipped. URI: http://java.sun.com/jstl/fmt is already defined
    九月 15, 2017 8:21:50 下午 org.apache.catalina.startup.TaglibUriRule body
    信息: TLD skipped. URI: http://java.sun.com/jsp/jstl/fmt is already defined
    九月 15, 2017 8:21:50 下午 org.apache.catalina.startup.TaglibUriRule body
    信息: TLD skipped. URI: http://java.sun.com/jsp/jstl/functions is already defined
    九月 15, 2017 8:21:50 下午 org.apache.catalina.startup.TaglibUriRule body
    信息: TLD skipped. URI: http://jakarta.apache.org/taglibs/standard/permittedTaglibs is already defined
    九月 15, 2017 8:21:50 下午 org.apache.catalina.startup.TaglibUriRule body
    信息: TLD skipped. URI: http://jakarta.apache.org/taglibs/standard/scriptfree is already defined
    九月 15, 2017 8:21:50 下午 org.apache.catalina.startup.TaglibUriRule body
    信息: TLD skipped. URI: http://java.sun.com/jstl/sql_rt is already defined
    九月 15, 2017 8:21:50 下午 org.apache.catalina.startup.TaglibUriRule body
    信息: TLD skipped. URI: http://java.sun.com/jstl/sql is already defined
    九月 15, 2017 8:21:50 下午 org.apache.catalina.startup.TaglibUriRule body
    信息: TLD skipped. URI: http://java.sun.com/jsp/jstl/sql is already defined
    九月 15, 2017 8:21:50 下午 org.apache.catalina.startup.TaglibUriRule body
    信息: TLD skipped. URI: http://java.sun.com/jstl/xml_rt is already defined
    九月 15, 2017 8:21:50 下午 org.apache.catalina.startup.TaglibUriRule body
    信息: TLD skipped. URI: http://java.sun.com/jstl/xml is already defined
    九月 15, 2017 8:21:50 下午 org.apache.catalina.startup.TaglibUriRule body
    信息: TLD skipped. URI: http://java.sun.com/jsp/jstl/xml is already defined
    九月 15, 2017 8:21:50 下午 org.chench.test.web.listener.TestWebListener contextInitialized
    信息: TestWebListener contextInitialized
    九月 15, 2017 8:21:50 下午 org.chench.test.web.filter.TestWebFilter init
    信息: TestWebFilter context path=/test-javaweb
    九月 15, 2017 8:21:50 下午 org.apache.catalina.core.StandardContext reload
    信息: Reloading Context with name [/test-javaweb] is completed

    经过实验发现,一旦web应用的web.xml文件的时间戳发生变化(创建时间,修改时间或访问时间发生变化),tomcat就会重新加载应用。

    2.tomcat如何知道应用的web.xml发生了变化

    在上述tomcat日志中存在如下信息:

    九月 15, 2017 8:21:49 下午 org.apache.catalina.startup.HostConfig reload
    信息: Reloading context [/test-javaweb]

    追踪tomcat源码发现,这个日志信息是在org.apache.catalina.startup.HostConfig类的reload方法中打印的:

    /*
    * Note: If either of fileToRemove and newDocBase are null, both will be
    *       ignored.
    */
    private void reload(DeployedApplication app, File fileToRemove, String newDocBase) {
        if(log.isInfoEnabled())
            log.info(sm.getString("hostConfig.reload", app.name));
        ...
    }

    继续追踪tomcat源码发现,在org.apache.catalina.core.ContainerBase中存在如下实现:

        /**
         * Start the background thread that will periodically check for
         * session timeouts.
         */
        protected void threadStart() {
    
            if (thread != null)
                return;
            if (backgroundProcessorDelay <= 0)
                return;
    
            threadDone = false;
            String threadName = "ContainerBackgroundProcessor[" + toString() + "]";
            thread = new Thread(new ContainerBackgroundProcessor(), threadName);
            thread.setDaemon(true);
            thread.start();
    
        }

    也就是说,Tomcat在启动时会启动一个后台线程ContainerBackgroundProcessor,用于监控web应用的配置变化。
    默认情况下,该线程会每隔10秒检查一次web应用的web.xml文件的变化。
    该值在server.xml中Engine元素上配置属性:backgroundProcessorDelay。
    722072-20170926190613903-1129001819.png
    详见:http://tomcat.apache.org/tomcat-7.0-doc/config/engine.html
    实际上,org.apache.catalina.startup.HostConfig中存在如下方法:

    addWatchedResources(DeployedApplication app, String docBase, Context context)

    这个方法是tomcat在部署应用的时候调用的,它将应用的web.xml文件添加为监控对象。
    后台线程通过检测该文件的时间戳是否发生变化,从而确定是否需要重新加载应用。

    另外,需要特别注意:该特性需要配置Host元素的autoDeploy属性为true;若为false,即使应用web.xml文件发生变化,tomcat也不会重新加载应用。

    <Host name="localhost"  appBase="webapps"
        unpackWARs="true" autoDeploy="true">
    </Host>

    因为org.apache.catalina.startup.HostConfig在check时会判断autoDeploy是否为true。

    /**
     * Check status of all webapps.
     */
    protected void check() {
    
        if (host.getAutoDeploy()) {
            // Check for resources modification to trigger redeployment
            DeployedApplication[] apps =
                deployed.values().toArray(new DeployedApplication[0]);
            for (int i = 0; i < apps.length; i++) {
                if (!isServiced(apps[i].name))
                    checkResources(apps[i], false);
            }
    
            // Check for old versions of applications that can now be undeployed
            if (host.getUndeployOldVersions()) {
                checkUndeploy();
            }
    
            // Hotdeploy applications
            deployApps();
        }
    }

    【参考】
    https://www.mulesoft.com/cn/tcat/tomcat-reload

    转载于:https://www.cnblogs.com/nuccch/p/7598373.html

    展开全文
  • springboot+tomcat针对不同环境自动加载配置 为了使一个程序对于不同环境不需要打包多次,可以在tomcat中进行配置,使其在不同的环境中自动识别不同环境的配置文件 配置方法为: 打开tomcat/bin/catalina.sh文件,在...
  • Eclipse下Tomcat自动加载web项目,无需重启了 1.双击打开Tomcat Overview文件 2.点击Moduls 3.首先点Add External Web Module按钮弹出对话框, Document base选择你的web路径,path是你的项目名称,我的已经设置好了...
  • 修改tomcat服务器文件 tomcat安装目录--conf--server.xml,在tomcat的标签里添加下面这行代码:
  • 0、目录1、开发环境2、Tomcat为什么需要配置自动加载3、配置方法4、参考链接 1、开发环境 Eclipse + Tomcat 2、Tomcat为什么需要配置自动加载 在进行Web开发时,修改页面是不用重启Tomcat的,当修改Java代码或者...
  • TOMCATtomcat加载配置文件

    千次阅读 2014-02-21 16:50:27
    tomcat服务器是一种Servlet/jsp容器,更实质性的说是Servlet容器,因为jsp最终还是被编译... 如果某文件资源没有找到,服务器要报404错误,按上述配置则会调用/webapps/ROOT/notFileFound.jsp。 如果执行的某个JSP
  • 不重启Tomcat有两种方式:热部署、热加载   热部署:容器状况在运行时重新部署整个项目。这类环境下一般整个内存会清空,重新加载,这类方式   有可能会造成sessin丢失等环境。tomcat 6确实可以热部署了,而且对话...
  • 添加server: 配置保存热加载
  • 64位自带1.8JDK tomcat,无需配置环境变量直接启动,也不需要去修改配置文件,install.bat文件一键注册到Windows服务.
  • 为方便在调整页面与js文件后能自动加载,需要对tomcat进行配置配置方法如下: idea中,在已经配置tomcat时(或后),打开edit configurations 在On ‘Update’ action:选择restart server;在on frame ...
  • tomcat加载应用程序配置文件顺序

    万次阅读 2015-07-13 14:26:46
    对于三大框架,例如ssh或ssm,在tomcat容器启动时配置文件加载顺序是?  针对这样的疑问,我大概知道每个项目的加载都是从web.xml开始的,所以我们以下面的配置文件为例,说明加载过程,我的项目web.xml配置文件...
  • SpringBoot之所以能有使用java -jar命令启动, 是因为内部嵌入了web容器jar包, 如tomcat, jetty… 分析下SpringBoot中tomcat加载流程. SpringBoot自动依赖spring-boot-autoconfigure-2.1.2.RELEASE.jar(参考版本), 在...
  • quartz实例 自动生成 表达式 动态更新 xml文件 tomcat自动加载 写的时候一点也不明白 确实费了点劲 写的不好 不要笑
  • 在进行项目的开发过程中,如果我们修改了WEB-INF下的某个配置文件,我们总希望tomcat能够自动的监听到这些变化,从而自动加载这些变化的配置文件,那么我们该如何操作呢?这个时候我们就需要单独的为我们的应用...
  • 主要介绍了web.xml中如何设置配置文件的加载路径实例详解的相关资料,需要的朋友可以参考下
  • 项目中有个功能是main方法启动的,放在web项目中,需要项目启动自动开启thrift服务,spring配置init-method自动加载bean不生效,找了半天原因,原来是web.xml配置少了个load-on-startup,加上后自动运行成功!...
  • 一、在 Tomcat下的server.xml中添加如下配置: <Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150" SSLEnabled="true"> <SSLHostConfig> &l...
  • 关于Tomcat自动加载更新class的小技巧

    千次阅读 2015-09-24 17:38:05
    大家都知道在Tomcat的...在小项目中将reloadable属性设成true或许并没有什么感觉,但是在大项目中尤其是用到框架的项目那每次改动class都将会自动部署重新启动tomcat,换谁都会受不了, 我就是其中一个。 ------
  • 关于不重启Tomcat自动加载改变的class文件
  • 实际工作中 每次更改项目 在发布费时费力,现给出一种方法...设置2.1 step01eclipse 菜单栏 项目选项 选择自动构建2.2 step02 双击服务器,跳出配置面板2.3 step03找到服务器选项,选择第一个 即serve modules with...
  • 自动解压:是server.xml文件中Host节点的autoDeploy。意思是把war包放到appBase下面就会被...热加载:是指修改项目内容而自动加载项目,不用重启tomcat <Context path="" docBase="" reloadable="true"/> pat
  • 在MyEclipse配置tomcat后, 发现程序保存后, 刷新网页的时候, 不能自动加载修改后的网页, 而必须重启服务器才可以重新加载. 现在可以通过修改tomcat配置文件来让服务器自动加载, 修改tomcat服务器文件 tomcat...
  • tomcat启动时没有把spring配置文件定义的bean加载进来 最近在把自己的之前搭建的那个通用的ssh框架,配置成dubbo+zookeeper这样的分布式架构。搭建的思路就是把项目的service和controller分离出来。两个项目之间的...
  • 小程序代码只能访问自己的服务器地址,没有办法在自己本机运行tomcat进行前后台联调,每次重新部署服务器tomcat都很费事,于是尝试用 idea 的 Automatic Upload 功能配合 Tomcat加载功能完成代码修改后的自动部署...
  • Intellij Idea tomcat启动后改动文件自动加载(图文)

    万次阅读 多人点赞 2015-03-28 17:54:57
    一、背景 Intellij的强大毋庸置疑,随着Android Studio的出现到如今,包括博主在内,越来越多的朋友从...解决内置tomcat插件服务启动后,修改类、资源时无法自动加载的问题。 三、解决办法 1. 打开右上角的Ed
  • 1 目录结构/bin:脚本文件目录。/common/lib:存放所有web项目都可以访问的公共jar包(使用Common类加载加载)。/conf:存放配置文件,最...仅对TOMCAT可见,对所有的WEB APP都不可见(使用Catalina类加载加载)。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 92,032
精华内容 36,812
关键字:

tomcat自动加载配置