`

嵌入式Tomcat用于在Eclipse中调试

阅读更多
嵌入式tomcat相对于myeclipse、wtp等eclipse插件优势主要在与速度快、免部署、方便调试。

首先下载嵌入式的tomcat
http://apache.mirror.phpchina.com/tomcat/tomcat-5/v5.5.25/bin/apache-tomcat-5.5.25-embed.zip
解压,假设解压路径为%CATALINA_HOME%=D:/apache-tomcat-5.5.25-embed
在eclipse中Window->Preference->Java->Build Path->User Libraries中添加一个EmbedTomcat的库,将%CATALINA_HOME%/lib下的所有包都加入到该库中。
在工程中加入EmbedTomcat库,加入如下2个java文件,设置好contextPath,mappingPath,以及tomcat路径,将
SimpleTomcatLauncher以DEBUG方式作为普通java application启动,即可设置断点进行调试。

EmbeddedTomcatLauncher
java 代码
 
  1. package per.sunrie;  
  2.   
  3. import org.apache.catalina.Context;  
  4. import org.apache.catalina.Engine;  
  5. import org.apache.catalina.Host;  
  6. import org.apache.catalina.connector.Connector;  
  7. import org.apache.catalina.startup.Embedded;  
  8.   
  9. /** 
  10.  * @author sunrie 
  11.  * @version $Id$ 
  12.  */  
  13. public abstract class EmbeddedTomcatLauncher {   
  14.     private static final int DEFAULT_PORT = 8080;   
  15.     private Embedded tomcat;  
  16.   
  17.     protected EmbeddedTomcatLauncher() {   
  18.         initEmbedded();   
  19.         initShutdownHook();   
  20.     }   
  21.   
  22.     protected abstract String[] getContextsAbsolutePath();   
  23.   
  24.     protected abstract String[] getContextsMappingPath();   
  25.   
  26.     protected abstract String getTomcatPath();   
  27.       
  28.     protected int getPort(){  
  29.         return DEFAULT_PORT;  
  30.     }  
  31.   
  32.     protected void startTomcat() {   
  33.         try {   
  34.             long startTime = System.currentTimeMillis();   
  35.             tomcat.start();   
  36.             System.err.println(   
  37.                 "Embedded Tomcat started in "   
  38.                 + (System.currentTimeMillis() - startTime) + " ms."   
  39.             );   
  40.         } catch (Exception e) {   
  41.             e.printStackTrace();   
  42.         }   
  43.     }   
  44.   
  45.     private void initEmbedded() {   
  46.         tomcat = new Embedded();   
  47.         tomcat.setCatalinaBase(getTomcatPath());   
  48.   
  49.         Host host =   
  50.             tomcat.createHost(   
  51.                 "localhost",   
  52.                 tomcat.getCatalinaHome() + "/webapps"   
  53.             );   
  54.   
  55.         String[] contexts = getContextsMappingPath();   
  56.         String[] contextsPath = getContextsAbsolutePath();   
  57.         Context context = null;   
  58.   
  59.         for (int i = 0; i < contexts.length; ++i) {   
  60.             context = tomcat.createContext(contexts[i], contextsPath[i]);   
  61.             host.addChild(context);   
  62.         }   
  63.   
  64.         Engine engine = tomcat.createEngine();   
  65.         engine.setName("MyDevAppServer");   
  66.         engine.addChild(host);   
  67.         engine.setDefaultHost(host.getName());   
  68.   
  69.         tomcat.addEngine(engine);  
  70.         // 只能本机访问  
  71.         Connector connector = tomcat.createConnector("localhost", getPort(), false);  
  72.         // 可从其它机器访问  
  73.         // Connector connector = tomcat.createConnector((InetAddress) null, getPort(), false);  
  74.         connector.setURIEncoding("UTF-8");  
  75.         tomcat.addConnector(connector);   
  76.     }   
  77.   
  78.     private void initShutdownHook() {   
  79.         Runtime.getRuntime().addShutdownHook(   
  80.             new Thread() {   
  81.                 public void run() {   
  82.                     stopTomcat();   
  83.                 }   
  84.             }   
  85.         );   
  86.     }   
  87.   
  88.     private void stopTomcat() {   
  89.         try {   
  90.             tomcat.stop();   
  91.         } catch (Exception e) {   
  92.             e.printStackTrace();   
  93.         }   
  94.     }   
  95. }  

SimpleTomcatLauncher
java 代码
 
  1. package per.sunrie;  
  2.   
  3. import java.net.MalformedURLException;  
  4. import java.net.URL;  
  5.   
  6. /** 
  7.  * @author sunrie 
  8.  * @version $Id$ 
  9.  */  
  10. public class SimpleTomcatLauncher extends EmbeddedTomcatLauncher {  
  11.     public static void main(String[] args) {  
  12.         new SimpleTomcatLauncher().startTomcat();  
  13.     }  
  14.   
  15.     @Override  
  16.     protected String[] getContextsAbsolutePath() {  
  17.         return new String[] { getSingleContextAbsolutePath() };  
  18.     }  
  19.   
  20.     private String getSingleContextAbsolutePath() {  
  21.         try {  
  22.             URL url = getClass().getResource("/");  
  23.             url = new URL(url, getSingleContextPathRelativeToClassPath());
                String path = url.getPath();
                path = URLDecoder.decode(url.getPath(), "UTF-8");
                return path;
  24.         } catch (MalformedURLException e) {  
  25.             throw new RuntimeException(e);
            } catch (UnsupportedEncodingException e) {
               
    throw new RuntimeException(e);  
  26.         }  
  27.     }  
  28.   
  29.     private String getSingleContextPathRelativeToClassPath() {
            //实际contextPath(与classpath的相对路径)  
  30.         return "../web";  
  31.     }  
  32.   
  33.     @Override  
  34.     protected String[] getContextsMappingPath() {
            //映射路径  
  35.         return new String[] { "/webContext" };  
  36.     }  
  37.   
  38.     @Override  
  39.     protected String getTomcatPath() {
            //Tomcat的HOME  
  40.         return "/D:/apache-tomcat-5.5.25-embed";  
  41.     }  
  42. }  
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics