zoukankan      html  css  js  c++  java
  • Eclipse的Tomcat热部署,免重启的方法

    背景与目标:

          最好使用MyEclipse部署Web应用,在开发调试时,非常方式。资源文件修改可以自动的同步。修改Java文件,除非改变类的结构定义,也可以实现热部署的效果。

          后来使用Eclipse JEE版本原生的方式(WTP)部署Web应用,在这一方面的便利性大大降低。原因是一旦修改Java类,虽说Tomcat也不需要人自动重启,但实际上,WebContext自动relead,实际还是相当于重启。

          其实,不仅仅是修改Java类,只是放在Eclipse作为source folder的文件修改,都可触发tomcat的reload。

    改善:

          对此,一个改善的思路是:直接将tomcat的Context指向工程目录下的WebRoot/WebContent。这样,就免去了代码同步的问题。

          方法:

          1、修改tomcat的server.xml。

               在Eclipse创建Server,实际已经新建了一组catalina的配置文件,即原tomcat中的conf目录。



     

          2、手动添加项目引用。在Host结点下,添加Context节点。

       

    Xml代码  收藏代码
    1. <Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true" xmlNamespaceAware="false" xmlValidation="false">  
    2.        <!-- docBase指向工程目录  path即Context名称 -->  
    3.     <Context docBase="E:/code/workspace/SCM/WebRoot" path="/SCM" reloadable="false">  
    4.     </Context>  
    5.   
    6. </Host>  

    问题:很多项目引用的第三方包有统一的位置,并不直接放在工程下/WebContent/WEB-INF/lib下。在这种场景,将会导致ClassNotFoundException异常抛出。

    再改善:

    方法 一:

           一些无关Classloader的类,主要是作为工具类引用的,可以放在tomcat的shared.loader下。这个可以通过设置catalina.properties目录来实现。

          但是此方法改变原有的类加载设计,可能工程需要做一些特别的改变。不具有普遍适应性。故略。

    方法 二:

          利用Tomcat配置的VirtualWebappLoader机制,告诉tomcat去加载第三方的其他jar文件。配置方法同样在server.xml文件里。在前面加的Context下添加Loader。如下:

      

    Xml代码  收藏代码
    1. <Context docBase="E:/code/workspace/SCM/WebRoot" path="/SCM" reloadable="false">      <Loader className="org.apache.catalina.loader.VirtualWebappLoader" searchVirtualFirst="false" virtualClasspath="E:/code/workspace/SimpleLibs/libs/*.jar"></Loader>  
    2. </Context>  

     注意:上面的配置适用于Tomcat 7.X。在Tomcat 6.0设置virtualClasspath时,需要列举出具体的jar,即不能使用*.jar。

    题外话:可以自定义VirtualWebappLoader,但是在Eclipse方式启动tomcat的情况下,已测的tomcat6.0无效。直接在tomcat/bin/startup.bat下可自定义。初步推断原因是eclipse在catalina.base目录下生成一个org.eclipse.jst.server.tomcat.runtime.60.loader.jar。里面重写了WebappLoader。

  • 相关阅读:
    (转载)Android content provider基础与使用
    如何解决Android的SDK与ADT不匹配问题
    Android 中断线程的处理
    用AsyncTask 来实现下载图片在android开发中
    开源自己的一个小android项目(美女撕衣服游戏)
    实现在Android开发中的Splash Screen开场屏的效果
    支持在安卓中UI(View)的刷新功能
    android从资源文件中读取文件流显示
    后缀数组 模板题 hdu1403(最长公共(连续)子串)
    Codeforces Round #383 (Div. 1) C(二分图)
  • 原文地址:https://www.cnblogs.com/beyang/p/4911246.html
Copyright © 2011-2022 走看看