为什么使用内嵌Tomcat开发?

开发人员无需搭建Tomcat的环境就可以使用内嵌式Tomcat进行开发,减少搭建J2EE容器环境的时间和开发时容器频繁启动所花时间,提高开发的效率.

怎么搭建内嵌Tomcat环境呢?(以tomcat6和tomcat7为例)

在开发工程(xxxx)的根目录下新建以下的目录:

xxxx/Embedded/conf

xxxx/Embedded/lib

xxxx/Embedded/webapps

xxxx/Embedded/work

apache-tomcat-6.0.32

apache官方只提供了apache-tomcat5和apache-tomcat7的内嵌版本,apache-tomcat6是没有的,但我们同样可以提供内嵌版本。

1. 将apache-tomcat-6.0.32\lib下所有的jar包拷到xxxx/Embedded/lib下

  • annotations-api.jar
  • catalina.jar
  • catalina-ant.jar
  • catalina-ha.jar
  • catalina-tribes.jar
  • ecj-3.3.1.jar
  • el-api.jar
  • jasper.jar
  • jasper-el.jar
  • jsp-api.jar
  • servlet-api.jar
  • tomcat-coyote.jar
  • tomcat-dbcp.jar
  • tomcat-i18n-es.jar
  • tomcat-i18n-fr.jar
  • tomcat-i18n-ja.jar
2.将apache-tomcat-6.0.32\bin下的tomcat-juli.jar包拷到xxxx/Embedded/lib下。
3.将JDK安装目录下的lib中的tools.jar包拷到xxxx/Embedded/lib下。
4.将apache-tomcat-6.0.32\conf下的context.xml和web.xml文件拷贝到xxxx/Embedded/conf下。
5.将xxxx/Embedded/lib下的所有Jar包都加到工程的classpath下。
6.在工程中新建EmbeddedTomcat类,该类代码如下:
  1.  public class EmbeddedTomcat {
    private static String CONTEXT_PATH = "/TestForTomcat6";
    private static String PROJECT_PATH = System.getProperty("user.dir");
    private static String WEB_APP_PATH = PROJECT_PATH + File.separatorChar + "WebRoot";
    private static String TOMCAT_HOME = PROJECT_PATH + File.separatorChar + "Embedded" + File.separatorChar + "Tomcat";
    private static String ENCODING = "UTF-8";
    private static int TOMCAT_PORT = 9080; // 开始嵌入式Tomcat服务器
    public static void startTomcat() throws Exception {
    try {
    long startTime = System.currentTimeMillis();
    Embedded tomcat = new Embedded();
    // 设置Tomcat的工作目录:工程根目录/Embedded/Tomcat
    tomcat.setCatalinaHome(TOMCAT_HOME);
    System.out.println("TOMCAT_HOME:" + TOMCAT_HOME); // 产生Tomcat引擎
    Engine engine = tomcat.createEngine();
    //"localhost"对应的是work下的"Catalina"
    engine.setName("Catalina"); //创建Host,设置Host的工作目录
    Host host = tomcat.createHost("localhost", tomcat.getCatalinaHome());
    host.setAutoDeploy(true); //把Host加入Engine
    engine.addChild(host);
    engine.setDefaultHost(host.getName()); //创建Context,并加入Host中
    Context context = null;
    context = tomcat.createContext(CONTEXT_PATH, WEB_APP_PATH); host.addChild(context);
    host.addChild(tomcat.createContext("", ""));
    if (!new File(WEB_APP_PATH).exists()) {
    System.err.println("请检查应用的目录以及相关资源是否存在.");
    }
    tomcat.addEngine(engine); Connector connector = tomcat.createConnector((java.net.InetAddress) null, TOMCAT_PORT, false);
    connector.setURIEncoding(ENCODING);
    connector.setUseBodyEncodingForURI(true);
    tomcat.addConnector(connector);
    AprLifecycleListener listener = new AprLifecycleListener();
    tomcat.addLifecycleListener(listener);
    tomcat.start();
    //停住一个小时(3600秒)
    Thread.sleep(3600000);
    tomcat.stop();
    System.err.println("Tomcat started in " + (System.currentTimeMillis() - startTime) + " ms.");
    } catch (Exception e) {
    e.printStackTrace();
    }
    } public static void main(String[] args) {
    try {
    EmbeddedTomcat.startTomcat();
    } catch (Exception e) {
    e.printStackTrace();
    }
    } }
 
apache-tomcat-7.0.22
 
1.请先到apache-tomcat官方网站下载apache-tomcat-7.0.23-embed内嵌版本,解压后将apache-tomcat-7.0.23-embed下的所有jar包拷贝到xxxx/Embedded/lib下,具体的jar如下:
  • ecj-3.7.jar
  • tomcat-dbcp.jar
  • tomcat-embed-core.jar
  • tomcat-embed-jasper.jar
  • tomcat-embed-logging-juli.jar
  • tomcat-embed-logging-log4j.jar
2.将apache-tomcat-7.0.23/conf下的context.xml和web.xml文件拷贝到xxxx/Embedded/conf下。
3.将xxxx/Embedded/lib下的所有Jar包都加到工程的classpath下。
4.在工程中新建EmbeddedTomcat类,该类代码如下:
  1.  public class EmbededTomcat {
    private final Log log=LogFactory.getLog(getClass());
    private static String CONTEXT_PATH = "/TestForTomcat7";
    private static String PROJECT_PATH = System.getProperty("user.dir");
    private static String WEB_APP_PATH = PROJECT_PATH + File.separatorChar + "WebRoot";
    private static String CATALINA_HOME = PROJECT_PATH + "/Embedded/Tomcat";
    private Tomcat tomcat = new Tomcat();
    private int port; public EmbededTomcat(int port){
    this.port=port;
    } public void start()throws Exception{
    tomcat.setPort(port);
    tomcat.setBaseDir(CATALINA_HOME);
    tomcat.getHost().setAppBase(WEB_APP_PATH);
    try{
    StandardServer server = (StandardServer)tomcat.getServer();
    AprLifecycleListener listener = new AprLifecycleListener();
    server.addLifecycleListener(listener);
    tomcat.addWebapp(CONTEXT_PATH, WEB_APP_PATH);
    }catch(ServletException e){
    e.printStackTrace();
    log.error(e.getMessage());
    throw e;
    }
    try{
    tomcat.start();
    tomcat.getServer().await();
    }catch(LifecycleException e){
    e.printStackTrace();
    log.error(e.getMessage());
    throw e;
    }
    log.info("Tomcat started.");
    } public void stop()throws Exception{
    try{
    tomcat.stop();
    }
    catch(LifecycleException ex){
    ex.printStackTrace();
    log.error(ex.getMessage());
    throw ex;
    }
    log.info("Tomcat stoped");
    } public void setPort(int port){
    this.port=port;
    }
    public int getPort(){
    return this.port;
    } public static void main(String[] args) throws Exception {
    EmbededTomcat embededTomcat = new EmbededTomcat(7080);
    embededTomcat.start();
    }
    }
 
遇到问题怎么办?
 
1. 内嵌Tomcat启动时报OutOfMemoryError异常,如何设置JVM的内存大小?

答:请按照以下步骤设置JVM的内存大小:

(1点击“Window->Preferences->Java->Installed JREs”可以看到所有的JRE。

(2点中当前使用的JRE,再点击右边的“Edit”。

3为该JRE的“Default VM Arguments”配置参数值:-Xmx1024M -Xms512M -XX:MaxPermSize=256m。

2.如何配置数据库的JNDI数据源?

答:打开XXXX\Embedded\Tomcat\conf\context.xml配置文件,添加<Resource>节点的属性来新建数据源配置,如下:

  1.  <Resource name="xxxxDataSource" auth="Container"
    type="javax.sql.DataSource" driverClassName="oracle.jdbc.OracleDriver"
    url="jdbc:oracle:thin:@localhost:1521:xxxxx"
    username="xxxx" password="xxxx" maxActive="15" maxIdle="10" initialSize="2"
    testWhileIdle="true" validationQuery="select 1 from dual" testOnBorrow="true"/>
 

基于内嵌Tomcat的应用开发的更多相关文章

  1. 如何优雅的关闭基于Spring Boot 内嵌 Tomcat 的 Web 应用

    背景 最近在搞云化项目的启动脚本,觉得以往kill方式关闭服务项目太粗暴了,这种kill关闭应用的方式会让当前应用将所有处理中的请求丢弃,响应失败.这种形式的响应失败在处理重要业务逻辑中是要极力避免的 ...

  2. 精尽Spring Boot源码分析 - 内嵌Tomcat容器的实现

    该系列文章是笔者在学习 Spring Boot 过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring Boot 源码分析 GitHub 地址 进行阅读 Sprin ...

  3. Spring Boot 内嵌Tomcat的端口号的修改

    操作非常的简单,不过如果从来没有操作过,也是需要查找一下资料的,所以,在此我简单的记录一下自己的操作步骤以备后用! 1:我的Eclipse版本,不同的开发工具可能有所差异,不过大同小异 2:如何进入对 ...

  4. 查看和指定SpringBoot内嵌Tomcat的版本

    查看当前使用的Tomcat版本号 Maven Repository中查看 比如我们需要查Spring Boot 2.1.4-RELEASE的内嵌Tomcat版本, 可以打开链接: https://mv ...

  5. 内嵌tomcat启动速度慢

    项目上最近要把内置的jetty换成tomcat, 来更好的支持servlet 3.0 本来以为换个容器, 几十行代码就好了. 实际上换了tomcat后, 一开始启动tomcat, 非常的慢. jett ...

  6. 内嵌tomcat最简单用法

    maven项目引入内嵌tomcat依赖 <dependency> <groupId>org.apache.tomcat.embed</groupId> <ar ...

  7. spring boot 2 内嵌Tomcat Stopping service [Tomcat]

    我在使用springboot时,当代码有问题时,发现控制台打印下面信息: Connected to the target VM, address: '127.0.0.1:42091', transpo ...

  8. Spring Boot内嵌Tomcat session超时问题

    最近让Spring Boot内嵌Tomcat的session超时问题给坑了一把. 在应用中需要设置session超时时间,然后就习惯的在application.properties配置文件中设置如下, ...

  9. springboot去除内嵌tomcat和打包在tomcat中运行需要做的步骤

    去除内嵌tomcat和添加jsp依赖 去除内嵌tomcat 在springboot启动依赖中去除内嵌tomcat <dependency> <groupId>org.sprin ...

随机推荐

  1. CSS3 媒体记

    css3 媒体 Media Type 媒体类型 媒体类型是CSS2中一个非常有用的属性.通过媒体类型可以对不同的设备指定不同的样式. W3C共列出十种媒体类型,如表: 值 设备类型 all 所有设备 ...

  2. javascript工具--控制台详解(转自 阮一峰博客)

    大神这篇博客是写在2011年,主要介绍 “Firefox” 浏览器插件 “Firebug” 的操作,如今主流浏览器对控制台都已经提供了很好的支持.我自己用的最多是谷歌的 “chrome” 浏览器,下面 ...

  3. 开始迈入Csharp的世界了

    以前没有学过, 有点兴奋,完全是新手啊. 今天是元宵情人节, 加油↖(^ω^)↗ 分享一些话:   一则拉封丹寓言名字叫寓言<两个朋友>:    一天夜里,一个朋友突然去找另一个朋友.被吵 ...

  4. asp中utf8不会出现乱码的写法

    <%@ CODEPAGE=65001 %> <% Response.CodePage=65001%> <% Response.Charset="UTF-8&qu ...

  5. Asp.net中基于Forms验证的角色验证授权

    Asp.net的身份验证有有三种,分别是"Windows | Forms | Passport",其中又以Forms验证用的最多,也最灵活. Forms 验证方式对基于用户的验证授 ...

  6. 如何在UINavigationBar上添加UISearchBar以及UISearchDisplayController的使用 --OC --iOS

    那我们开始吧,下面是Sely写的一个Demo,分享给大家. 新建一个项目, UISearchDisplayController 的 displaysSearchBarInNavigationBar太死 ...

  7. 【转】使用C#实现ADSL自动拨号

    原帖地址:http://www.cnblogs.com/guozk/archive/2010/04/07/1705951.html   在网络编程中,有时候会需要重新拨号建立网络连接(如Ad点击软件通 ...

  8. 版本控制工具--GIT 基本命令(1)

    一.安装GIT,在官网上下载安装即可(下面模拟环境是window7) 二.基本操作: 1.创建GIT库: ①先使用mkdir命令创建一个空目录,再使用git init将该目录变成GIT库,会在该目录下 ...

  9. 4月1日学习笔记(CSS基础)

    CSS初始化 内边距padding padding属性宽度是按照上右下左的顺序来的,否则单独设置就是padding-left... 边框border border可以设置样式(border-style ...

  10. 膜拜 2014-2 (献给L之三)

    文/安然 深深的夜静静的想你细细的品味满满的甜蜜爱,心灵的对话让我流泪战栗谢谢你给我这么弥足珍贵的体会不能一生相随又有什么关系你一直都在我的爱就永不停息此生足以——献给心底的爱