将Tomcat嵌入到自己的应用中
2014-04-16 11:04
225 查看
转自:http://yshjava.iteye.com/blog/1871965
查看原文请移步《http://www.yshjava.cn/post/418.html》
Tomcat是Apache
软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成,是目前比较流行的Web 应用服务器。
Tomcat运行时占用的系统资源小,扩展性好,支持负载平衡与邮件服务等开发应用系统常用的功能而广受广大程序员的喜欢。Tomcat不仅有独立运行的版本,而且还提供了可以内嵌到JavaEE应用中的Embedded版本,这一点非常实用!
将Tomcat服务器嵌入到自己的应用中,不仅可以大幅缩短搭建Web服务器所消耗的时间,还可以深度控制Tomcat,从而更好地为应用服务器。
下面就以Tomcat6为例,以具体代码方式展示如何将Tomcat服务器嵌入到自己的应用中。
Java代码
package cn.ysh.studio.tomcat;
import java.io.File;
import java.net.InetAddress;
import java.net.UnknownHostException;
import org.apache.catalina.*;
import org.apache.catalina.connector.Connector;
import org.apache.catalina.realm.MemoryRealm;
import org.apache.catalina.startup.Embedded;
/**
* 以内嵌的方式启动tomcat服务器
*
* @author www.yshjava.cn
*
*/
public class EmbeddedTomcat {
private EmbeddedTomcat(Embedded tomcat, String listenIP, int listenPort) {
this.tomcat = tomcat;
this.listenIP = listenIP;
this.listenPort = listenPort;
}
public static EmbeddedTomcat startup(String catalinaHome, String warFileName, int listenPort, boolean enableRemoteAccess) {
System.setProperty("catalina.home", catalinaHome);
// 监听IP获取
String listenIP;
try {
listenIP = (enableRemoteAccess ? InetAddress.getLocalHost().getHostAddress() : "127.0.0.1");
} catch (UnknownHostException e) {
throw new RuntimeException(e);
}
// war 文件检测
String contextName;
int tn = warFileName.lastIndexOf("//");
if (tn < 0) {
contextName = warFileName;
warFileName = catalinaHome + "/webapps/" + warFileName;
} else {
contextName = warFileName.substring(tn + 1);
}
File warFile = new File(warFileName);
if (!warFile.exists())
throw new RuntimeException("File '" + warFileName + "' does'nt exist.");
if (warFileName.endsWith(".war")) {
contextName = contextName.substring(0, contextName.lastIndexOf('.'));
} else {
if (!warFile.isDirectory()){
throw new RuntimeException("File '" + warFileName + "' must be a .war file or a folder.");
}
}
//创建一个内嵌的Tomcat服务器
Embedded tomcat = new Embedded();
//设置Tomcat的工作目录
tomcat.setCatalinaHome(catalinaHome);
// set the memory realm
MemoryRealm memRealm = new MemoryRealm();
tomcat.setRealm(memRealm);
// 创建Tomcat引擎
Engine engine = tomcat.createEngine();
//设置默认的虚拟主机
engine.setDefaultHost("localhost");
engine.setName("MyEngine");
//创建虚拟主机
Host host = tomcat.createHost("localhost", catalinaHome + "/webapps");
//把Host加入Engine
engine.addChild(host);
/*
* Create the ROOT context Context rootContext =
* tomcat.createContext("", catalinaHome + "/webapps/ROOT");
* rootContext.setReloadable(false);
* rootContext.addWelcomeFile("index.jsp"); host.addChild(rootContext);
*/
Context myContext = tomcat.createContext("/" + contextName, warFileName);
myContext.setPrivileged(true);
host.addChild(myContext);
// Install the assembled container hierarchy
tomcat.addEngine(engine);
Connector connector = tomcat.createConnector(listenIP, listenPort, false);
tomcat.addConnector(connector);
// Start the embedded server
try {
tomcat.start();
} catch (LifecycleException e) {
throw new RuntimeException(e);
}
EmbeddedTomcat srv = new EmbeddedTomcat(tomcat, listenIP, listenPort);
return srv;
}
private Embedded tomcat;
private String listenIP;
private int listenPort;
public void stop() {
try {
tomcat.stop();
} catch (LifecycleException e) {
throw new RuntimeException(e);
}
}
public String getListenIP() {
return listenIP;
}
public int getListenPort() {
return listenPort;
}
public static void main(String[] args) {
//内嵌Tomcat的工作目录
String tomcathome = "D://Test//TestEmbedTomcat";
//启动内嵌的Tomcat
final EmbeddedTomcat tomcat = EmbeddedTomcat.startup(tomcathome, "examples", 8080, true);
//打印启动信息
System.out.println("Tomcat started at " + tomcat.getListenIP() + ":" + tomcat.getListenPort());
//在JVM中添加一个Hook,这样可以在虚拟机退出时关闭tomcat以释放相关资源
Runtime.getRuntime().addShutdownHook(new Thread() {
public void run() {
tomcat.stop();
}
});
}
}
从上述代码来看,将Tomcat内嵌到自己的应用中还是比较简单和方便的,如果你了解Tomcat的目录结构或者是工作原理,那么上述代码就更加容易理解了。
原创文章,转载请注明出处:http://www.yshjava.cn/post/418.html
查看原文请移步《http://www.yshjava.cn/post/418.html》
Tomcat是Apache
软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成,是目前比较流行的Web 应用服务器。
Tomcat运行时占用的系统资源小,扩展性好,支持负载平衡与邮件服务等开发应用系统常用的功能而广受广大程序员的喜欢。Tomcat不仅有独立运行的版本,而且还提供了可以内嵌到JavaEE应用中的Embedded版本,这一点非常实用!
将Tomcat服务器嵌入到自己的应用中,不仅可以大幅缩短搭建Web服务器所消耗的时间,还可以深度控制Tomcat,从而更好地为应用服务器。
下面就以Tomcat6为例,以具体代码方式展示如何将Tomcat服务器嵌入到自己的应用中。
Java代码
package cn.ysh.studio.tomcat;
import java.io.File;
import java.net.InetAddress;
import java.net.UnknownHostException;
import org.apache.catalina.*;
import org.apache.catalina.connector.Connector;
import org.apache.catalina.realm.MemoryRealm;
import org.apache.catalina.startup.Embedded;
/**
* 以内嵌的方式启动tomcat服务器
*
* @author www.yshjava.cn
*
*/
public class EmbeddedTomcat {
private EmbeddedTomcat(Embedded tomcat, String listenIP, int listenPort) {
this.tomcat = tomcat;
this.listenIP = listenIP;
this.listenPort = listenPort;
}
public static EmbeddedTomcat startup(String catalinaHome, String warFileName, int listenPort, boolean enableRemoteAccess) {
System.setProperty("catalina.home", catalinaHome);
// 监听IP获取
String listenIP;
try {
listenIP = (enableRemoteAccess ? InetAddress.getLocalHost().getHostAddress() : "127.0.0.1");
} catch (UnknownHostException e) {
throw new RuntimeException(e);
}
// war 文件检测
String contextName;
int tn = warFileName.lastIndexOf("//");
if (tn < 0) {
contextName = warFileName;
warFileName = catalinaHome + "/webapps/" + warFileName;
} else {
contextName = warFileName.substring(tn + 1);
}
File warFile = new File(warFileName);
if (!warFile.exists())
throw new RuntimeException("File '" + warFileName + "' does'nt exist.");
if (warFileName.endsWith(".war")) {
contextName = contextName.substring(0, contextName.lastIndexOf('.'));
} else {
if (!warFile.isDirectory()){
throw new RuntimeException("File '" + warFileName + "' must be a .war file or a folder.");
}
}
//创建一个内嵌的Tomcat服务器
Embedded tomcat = new Embedded();
//设置Tomcat的工作目录
tomcat.setCatalinaHome(catalinaHome);
// set the memory realm
MemoryRealm memRealm = new MemoryRealm();
tomcat.setRealm(memRealm);
// 创建Tomcat引擎
Engine engine = tomcat.createEngine();
//设置默认的虚拟主机
engine.setDefaultHost("localhost");
engine.setName("MyEngine");
//创建虚拟主机
Host host = tomcat.createHost("localhost", catalinaHome + "/webapps");
//把Host加入Engine
engine.addChild(host);
/*
* Create the ROOT context Context rootContext =
* tomcat.createContext("", catalinaHome + "/webapps/ROOT");
* rootContext.setReloadable(false);
* rootContext.addWelcomeFile("index.jsp"); host.addChild(rootContext);
*/
Context myContext = tomcat.createContext("/" + contextName, warFileName);
myContext.setPrivileged(true);
host.addChild(myContext);
// Install the assembled container hierarchy
tomcat.addEngine(engine);
Connector connector = tomcat.createConnector(listenIP, listenPort, false);
tomcat.addConnector(connector);
// Start the embedded server
try {
tomcat.start();
} catch (LifecycleException e) {
throw new RuntimeException(e);
}
EmbeddedTomcat srv = new EmbeddedTomcat(tomcat, listenIP, listenPort);
return srv;
}
private Embedded tomcat;
private String listenIP;
private int listenPort;
public void stop() {
try {
tomcat.stop();
} catch (LifecycleException e) {
throw new RuntimeException(e);
}
}
public String getListenIP() {
return listenIP;
}
public int getListenPort() {
return listenPort;
}
public static void main(String[] args) {
//内嵌Tomcat的工作目录
String tomcathome = "D://Test//TestEmbedTomcat";
//启动内嵌的Tomcat
final EmbeddedTomcat tomcat = EmbeddedTomcat.startup(tomcathome, "examples", 8080, true);
//打印启动信息
System.out.println("Tomcat started at " + tomcat.getListenIP() + ":" + tomcat.getListenPort());
//在JVM中添加一个Hook,这样可以在虚拟机退出时关闭tomcat以释放相关资源
Runtime.getRuntime().addShutdownHook(new Thread() {
public void run() {
tomcat.stop();
}
});
}
}
从上述代码来看,将Tomcat内嵌到自己的应用中还是比较简单和方便的,如果你了解Tomcat的目录结构或者是工作原理,那么上述代码就更加容易理解了。
原创文章,转载请注明出处:http://www.yshjava.cn/post/418.html
相关文章推荐
- 如何将自己应用替换tomcat自带应用
- android菜鸟测试之Aj_02的Android 中自定义View的应用,在main.xml中嵌入自己写的view
- 自己写的一个简单的LBS应用 GoogleMap与Tomcat 服务器
- 利用用户自己的server、tomcat下的解决iOS7.1企业应用无法安装应用程序 由于证书无效的问题
- 利用用户自己的服务器、tomcat下的解决iOS7.1企业应用无法安装应用程序 因为证书无效的问题
- javaweb--Tomcat>>用自己编译的Tomcat发布应用
- 利用用户自己的服务器、tomcat下的解决iOS7.1企业应用无法安装应用程序 因为证书无效的问题
- vb.net在自己的应用中嵌入谷歌地球的方法
- android 简易显示web浏览,嵌入自己的应用中
- spring容器bean实例化之后添加一些自己的逻辑处理(应用实例启动tomcat加载缓存)
- 利用用户自己的server、tomcat下的解决iOS7.1企业应用无法安装应用程序 由于证书无效的问题
- android 简易显示web浏览,嵌入自己的应用中
- 关于tomcat端口的修改,以及同时部署多个应用,自己遇到的问题以及解决办法
- 如何在Tomcat里发布自己的程序
- Android开发自己的桌面应用,Luancher原来也是如此简单(上)
- 【转】C#自定义控件:WinForm将其它应用程序窗体嵌入自己内部
- windows tomcat web应用以及eclipse console乱码解决方法
- jetty和tomcat区别与应用场景
- linux下升级tomcat中的应用服务器
- 数据连接池的应用之JavaWeb服务器管理数据源:Tomcat(三)