`

嵌入式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. }  
分享到:
评论

相关推荐

    Eclipse SVN Jetty Tomcat jad 等常用插件

    Eclipse中的Tomcat插件(如“Tomcat Plugin”)可以帮助开发者便捷地管理和调试在Tomcat上运行的应用,包括启动、停止、部署和调试等操作。 4. **jadclipse**: - jadclipse是Eclipse的一个JAD(Java反汇编器)...

    tomcat embedded + sqlite

    标题 "Tomcat Embedded + SQLite" 暗示了一个关于如何在嵌入式Tomcat服务器中集成SQLite数据库的技术主题。这通常涉及到在Java应用程序中使用轻量级数据库管理系统SQLite,以便在没有传统数据库服务器的情况下运行。...

    eclipse-jetty插件

    这个插件允许开发者直接在Eclipse中启动、停止、调试和管理Jetty服务器,无需离开IDE,从而提高了开发效率。 Jetty插件的主要特点和功能包括: 1. **快速启动与调试**:Eclipse Jetty插件可以快速启动Jetty服务器...

    Eclipse 2021-6 安装软件及其教程.zip

    1. 嵌入式Tomcat服务器:通过WST插件,可以直接在Eclipse内启动和管理Tomcat服务器,方便进行Web应用的部署和调试。 2. 集成调试器:强大的源码级调试工具,可以设置断点、查看变量值、单步执行等,提高调试效率。 3...

    Maven+jetty+jrebel+m2eclipse+eclipse搭建struts2开发环境

    8. **运行和调试**:在Eclipse中运行Maven的jetty:run目标,启动Jetty服务器,然后在浏览器中访问应用。借助JRebel,代码更改会立即反映在运行的应用中,无需手动刷新或重启。 通过这样的配置,开发者可以在Eclipse...

    apache-tomcat-8.0.18-windows-x86

    - 开发者通常使用IDE如Eclipse或IntelliJ IDEA集成Tomcat,方便调试和部署。 - Spring Boot可以与Tomcat集成,提供嵌入式服务器功能,简化部署流程。 - Maven或Gradle构建工具可帮助自动化构建和部署过程。 6. *...

    Eclipse+Maven创建webapp项目集成jetty服务器

    在IT行业中,开发Java Web应用程序时,我们常常使用Eclipse作为IDE,Maven作为构建工具,而Jetty则是一个轻量级的嵌入式HTTP服务器,适用于快速部署和测试。这篇博客“Eclipse+Maven创建webapp项目集成jetty服务器”...

    eclipse

    对于Web应用,Eclipse还支持Tomcat、Jetty等服务器的集成,可以直接在IDE内进行应用的部署和运行。 4. **插件生态系统**:Eclipse最突出的特点之一就是其丰富的插件生态系统。通过插件,Eclipse可以扩展到几乎任何...

    apache-tomcat-6.0.32.zip_ecj-3.3.1.j

    5. **ECJ的使用**:理解ECJ如何作为嵌入式编译器在Tomcat中工作,以及如何在不使用完整JDK的情况下进行开发和调试。 6. **WAR文件**:Web应用程序通常被打包成WAR(Web ARchive)文件,这是一个标准的Java归档文件...

    在自制集成开发环境光盘下开发Java程序.pdf

    J2ME是Java的一个轻量级版本,用于开发移动设备和嵌入式系统的应用程序。在Eclipse中开发J2ME项目,首先需要通过Eclipse的插件系统安装EclipseME。以下是创建J2ME项目的步骤: 1. 启动Eclipse,然后通过菜单栏依次...

    非常详细的J2ME前端开发环境和后台数据库搭建过程

    在IT行业中,J2ME(Java 2 Micro Edition)是一种用于开发移动设备和嵌入式系统的Java平台。本文将深入探讨如何配置一个完整的J2ME前端开发环境,并介绍如何搭建后台数据库,以便进行高效的应用程序开发。我们将涉及...

    Tomcat面试题(相关面试问题整合)

    7. **什么是Context、Host和Engine在Tomcat中的含义?** - Context:代表一个Web应用程序,对应于webapps目录下的每个目录或WAR文件。 - Host:代表一个域名,可以包含多个Context,对应于server.xml中的元素。 -...

    eclipse-jee-2023-06-R-linux-gtk-aarch64.tar.gz

    Eclipse JEE版本特别加强了对Java企业级应用开发的支持,包括Web服务、Java服务器页面(JSP)、Servlets、Java持久层框架等,还包含了诸如MyEclipse、GlassFish Server、Tomcat等服务器的集成。 Linux是操作系统的...

    jetty-distribution-9.4.15.v20190215,轻量级服务器,配置在eclipse和intellij

    通过以上配置,你可以在Eclipse或IntelliJ IDEA中直接启动和调试基于Jetty的Web应用,而无需单独启动外部服务器。 此外,Jetty支持多种部署方式,包括传统的WAR文件部署、通过Web-INF/classes和lib目录热部署,以及...

    chemistry-opencmis-test-tools-0.7.0.zip

    1. **嵌入式Tomcat服务器**:包含了运行在本地开发环境中所需的Tomcat服务器配置和依赖。 2. **示例应用**:可能包含一个简单的Vaadin应用示例,展示如何在嵌入式服务器上运行。 3. **构建脚本**:如Maven或Gradle的...

    java设计--基于springboot旅游网站.zip

    它预配置了许多常见功能,如嵌入式Tomcat服务器、自动配置、Spring MVC、数据访问等,极大地提高了开发效率。在本旅游网站项目中,SpringBoot作为核心框架,负责管理和协调整个应用的生命周期。 SSM技术栈是Java ...

    jetty服务器

    在Eclipse中,使用Jetty插件可以快速部署,而在IDEA中,可以通过添加Artifacts和配置运行/调试配置来达到类似的效果。 总的来说,这份资源包提供了一套完整的Jetty服务器学习和实践材料,无论你是初学者还是有经验...

    springboot485基于springboot的宠物健康顾问系统pf.zip

    5.1 IDE:IntelliJ IDEA或Eclipse作为开发环境,集成SpringBoot插件,方便项目创建和调试。 5.2 版本控制:Git进行版本管理,协同开发。 5.3 构建工具:Maven或Gradle负责项目的构建、打包和依赖管理。 六、部署...

    flex 整合java spring

    1. **配置Spring**:首先,需要在Spring项目中配置HTTP服务,例如使用Spring Boot的嵌入式Tomcat服务器,或者配置独立的Servlet容器,如Apache Tomcat。 2. **创建Flex客户端**:在Flex项目中,使用Flex SDK创建一...

Global site tag (gtag.js) - Google Analytics