在web应用的开发中,我们经常做的工作可能就是 修改 -- 打包 -- 查看 -- 修改 。。。。。。 ,经过n多次的修改和之后我们完成了我们的工作,可是你肯定也被这打包的事弄的精疲力尽了。也许打包耗费的时间比我们修改的时间还要多,而且那还是一件无聊的事,那么为什么不让事情变的更简单一些呢 。
事情是可以变的更简单的,因为我们有嵌入式Tomcat 。。。。。。
/**
* Author : crazy_rain
* Date : 2007-03-12
* Description :EmbeddedTomcat ,快速部属和修改web应用的利器
*/
public class EmbeddedTomcat {
private static final Log log = LogFactory.getLog(EmbeddedTomcat.class);
private String webRoot = ""; //WEB应用程序路径
private String contextPath = ""; // WEB上下文名称
private boolean reloadable = true; //是否允许热替换
private boolean isRuning; //服务器是否正在运行
private Embedded tomcat; //嵌入式Tomcat
/**
* 创建 EmbeddedTomcat
*
* @param webRoot web应用的根路径
* @param contextPath 应用的上下文路径
*/
public EmbeddedTomcat(String webRoot, String contextPath) {
this.webRoot = webRoot;
this.contextPath = contextPath;
}
/**
* 创建 EmbeddedTomcat
*
* @param webRoot web应用的根路径
* @param contextPath 应用的上下文路径
* @param reloadable 是否允许热交换
*/
public EmbeddedTomcat(String webRoot, String contextPath, boolean reloadable) {
this(webRoot, contextPath);
this.reloadable = reloadable;
}
/**
* 启动Tomcat
*/
public void run() {
log.debug("EmbeddedTomcat is starting ...");
if (webRoot.equals("") || contextPath.equals("")) {
throw new IllegalArgumentException("webRoot or contextPath is empty , place check ...");
}
//创建内嵌式tomcat
tomcat = new Embedded();
//创建并设置tomcat引擎
Engine engine = tomcat.createEngine();
tomcat.setCatalinaHome(webRoot);
//创建服务主机
Host host = tomcat.createHost("localhost", webRoot);
//创建上下文
Context context = tomcat.createContext(contextPath, webRoot);
//设置是否允许热替换
context.setReloadable(reloadable);
host.addChild(context);
engine.addChild(host);
engine.setDefaultHost(host.getName());
engine.setName("EmbeddedTomcat");
tomcat.addEngine(engine);
Connector connector = null;
try {
connector = tomcat.createConnector(InetAddress.getLocalHost(), 8080, false);
} catch (UnknownHostException e) {
log.debug("UnknownHostException ...", e);
}
//设置资源编码
if (null != connector) {
connector.setURIEncoding("GBK");
}
tomcat.addConnector(connector);
try {
//启动 Tomcat
tomcat.start();
} catch (LifecycleException e) {
log.debug("LifecycleException ...", e);
}
isRuning = true;
log.debug("EmbeddedTomcat is running ...");
}
/**
* 关闭 EmbeddedTomcat
*/
public void stop() {
if (!isRuning) {
throw new IllegalStateException("tomcat is not running ...");
}
try {
tomcat.stop();
isRuning = false;
} catch (LifecycleException e) {
log.debug("LifecycleException ocurred while stop tomcat ...", e);
}
}
//for demo :)
public static void main(String args[]) {
EmbeddedTomcat tomcat = new EmbeddedTomcat("D://projects//NetStore", "/NetStore");
tomcat.run();
}
}