tomcat放在java里_在应用中使用嵌入式Tomcat

Tomcat5中的Embeded版本,为应用中集成完整的Web服务提供了尽可能大的空间,不仅使开发者容易获得对标准HTTP的处理,还有SSL的通讯处理,使开发者很容易就可以对原有非Web系统进行扩展以支持瘦客户端应用,通向Web大门的钥匙已经放在这里,剩下的就是看你怎样来发挥了。

Tomcat严格意义上不是一个真正的AppServer,只是支持运行Servlet和Jsp的Web容器,此外扩展了一些AppServer的功能,如数据库连接池,JNDI等,如何提炼,或者说把Tomcat整理成一个最小的集合成为Tomcat嵌入版本的关键,从Tomcat5.0开始提供和支持Embeded版本,即最简化Tomcat Server,下面就针对Tomcat Server的Embeded版本进行介绍,怎样把Tomcat集成到Java应用中。

首先可以在http://apache.mirrors.versehost.com/jakarta/tomcat-5/v5.0.28/bin/jakarta-tomcat-5.0.28-embed.tar.gz下载Tomcat的Embeded版本,下载解压后把最里层的jakarta-tomcat-5.0.28-embed目录copy到容易查找的目录,为简易需要更名为tomcat-embed,作为嵌入Tomcat的工作目录。

首先我们需要了解Tomcat在工作时的层次情况,它按照:

62d1e47dd5a14dfea64ccd2a96b7ab8e.png

上面是Tomcat实现的内部工作结构:

一个Server含有几个Connector,比如non-SSL HTTP/1.1 Connector on port 8080,SSL HTTP/1.1 Connector on port 8443和AJP 1.3 Connector on port 8009。连接器就是接受客户端情况然后封装成request和response对象交给容器处理。

通常是一个Engine,其中Engine里含有1个Host,1个Host 内可以含有多个Context,Context代表Web应用,即1个Host里可以包含多个Web应用,tomcat的webapps目录里面防止的就是一个个web应用。Engine接收Service发过来的请求(通过Connector),交给相应的Host进行处理,然后Host交给具体的Context。

下面是非常简单的创建Embeded tomcat的例子,示意其使用

把tomcat-embed目录下的lib内的所有jar包引入到项目的环境中,即完成了项目的环境搭建。在应用里开发嵌入式Tomcat,需要根据以下步骤:

1)创建org.apache.catalina.startup.Embedded实例,其代表嵌入式Tomcat Server的实例;

2)创建org.apache.catalina.Engine 实例,代表上面XML结构示例中的Engine,作为容器用来包含Host节点;

3)创建org.apache.catalina.Host实例,代表虚拟主机服务,把它加入到2)中产生的Engine;

4)创建一个或多个org.apache.catalina.Context实例,代表Web应用,每个Web应用都需要加入到3)产生的Host中;

5)最后创建org.apache.catalina.Connector实例,把它加入1)创建的tomcat实例中,它用来接收客户发出的请求。

具体和完整的代码如下:

import java.io.File;

import java.net.InetAddress;

import java.net.UnknownHostException;

import org.apache.catalina.Context;

import org.apache.catalina.Engine;

import org.apache.catalina.Host;

import org.apache.catalina.Logger;

import org.apache.catalina.startup.Embedded;

public class TomcatService {

public static void main(String[] args) {

//设置Tomcat的工作目录,并启动Tomcat Server

String path = "/usr/local/tomcat-embed";

Embedded tc = createTomcat(path);

try {

tc.start();

System.out.println("---------- Tomcat Server start over. ------------");

} catch (Exception e) {

e.printStackTrace();

}

}

private static Embedded createTomcat(String path) {

//创建嵌入式Tomcat Server的实例

Embedded tomcat = new Embedded();

//设置Tomcat的工作目录

tomcat.setCatalinaHome(path);

//产生Tomcat引擎

Engine engine = tomcat.createEngine();

engine.setName("EmbededServer");

//创建Host,设置Host的工作目录

Host host = tomcat.createHost("localhost", tomcat.getCatalinaHome()

+ "/webapps");

//把Host加入Engine

engine.addChild(host);

engine.setDefaultHost(host.getName());

String path = host.getAppBase() + "/instance1";

if (!new File(path).exists()) {

System.err.println("请检查instance1应用的目录以及相关资源是否存在.");

return null;

}

//创建instance1的Context,并加入Host中

Context ctxt = tomcat.createContext("/instance1", path);

host.addChild(ctxt);

tomcat.addEngine(engine);

tomcat.setDebug(Logger.WARNING);

try {

//Tomcat加入Connector,监听本地(127.0.0.1)的访问

tomcat.addConnector(tomcat.createConnector(InetAddress

.getByName("127.0.0.1"), 8080, false));

} catch (UnknownHostException e) {

System.err.println("绑定Tomcat Server到127.0.0.1:8080失败,请检查端口是否被占用.");

e.printStackTrace();

tomcat = null;

}

return tomcat;

}

}

在这里需要注意,由于嵌入式版本Tomcat没有common/lib目录,一些需要的Jar包可以复制到JDK的/jre/lib/endorsed目录下进行使用。

在OFBiz中默认使用的embeded tomcat,具体的可以参考里面对于嵌入式启动相关的内容。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值