项目开发经验----如何同时应对多个项目 & embedded tomcat 使用
来源:互联网 发布:阿里云 cname 配置 编辑:程序博客网 时间:2024/05/21 13:56
项目开发经验----如何同时应对多个项目 & embedded tomcat 使用
如果有几个项目同时开发,将它们都发布在tomcat下运行调试,一种简单容易的方法。用myeclipse自带的"add and remove deployment"菜单进行发布和取消发布。比如现在有a,b,c,d四个项目。
如果需要跑a项目,就单独发布a,需要跑b项目就发布b.同时remove其它的已发布在tomcat下的项目,这样反复地切换,特别是项目比较大,发布一下要半分钟的时候,很烦。
如果图方便,同时发布a,b,c,d四个项目,这样省去了反复"add and remove"的麻烦,但另一方面,tomcat启动过程就比只发布一个要慢,如果程序改动较大,tomat需要反复启动,启动一次等上一两分钟,浪费时间更影响心情。此外,同时发布多个项目,tomcat跑起来很吃内存。
有一种解决问题的方法,修改tomcat根目录下conf/server.xml这个文件。在host元素里添加context元素,配置虚拟路径。如下,要发布名称为a的项目,只需添加下面这段代码:
<Context path="/a" docBase="D:/eclipse/workspace/a/webapp" ></Context>
其中D:/eclipse/workspace/a/webapp是项目的路径。myeclipse创建的web工程根目录文件夹的名字是WebRoot,上面例子中根目录的文件夹名是webapp.注意修改。
还有一种方法,使用内嵌tomcat。(myeclipse新建web工程,名字较haha)
步骤一:从apache官网上下载embedded tomcat. 5.0版本的搭配jdk1.4, 5.5版本的搭配jdk1.5.
步骤二:将haha工程的j2ee类库去掉,换成jdk。
步骤三:下载的embedded tomcat里有lib文件夹和conf文件夹,将lib文件夹里面的jar包加到haha工程的WEB-INF/lib文件夹下,将conf文件夹整个添加到WebRoot下。
步骤四:编写tomcat的启动类。
使用embedded tomcat,以下几点要注意:
1) 5.5与5.0的启动代码有区别,请注意。而且jdk要正确搭配。
2) 内嵌tomcat需要tool.jar包进行动态编译jsp,最好把jdk添加到运行路径中,(再次强调步骤二)。
3) 在tomcat启动类中,要设置CatalinaHome的值,如下面例子中的代码行:tomcat.setCatalinaHome(catalinaHome);
个人猜测,tomcat启动时自动去找catalinaHome路径下的conf/web.xml这个文件,作为默认的web.xml(default web.xml),通常这个文件包含处理jsp文件的信息. 使用embedded tomcat时,要确认该文件的存在,这里重复强调步骤三。
4) classpath里不要有其它冲突的包。最好先跑通一个简单的或者空的工程。然后再跑真实的项目。
网上有很多例子,这里发一个自己用的(tomcat 5.0)
//--------------------------------------------------------
// MyEmbeddedTomcat.java
import org.apache.catalina.startup.Embedded;
import org.apache.catalina.Engine;
import org.apache.catalina.Host;
import org.apache.catalina.Context;
import org.apache.catalina.Connector;
import java.io.File;
import java.net.InetAddress;
/**
*/
public class MyEmbeddedTomcat {
private String webrootPath; //WEB应用程序路径
private String contextPath; //WEB上下文名称
private String catalinaHome = "D:/myeclipse/workspace/embeddedtomcat/WebRoot";
private boolean reloadable=true; //是否允许热交换class
private Embedded tomcat; //嵌入式Tomcat
public MyEmbeddedTomcat() {
webrootPath ="D:/myeclipse/workspace/a/WebRoot";
contextPath ="/tomcat";
}
/**
* 启动Tomcat
*/
public void startup() throws Exception {
tomcat = new Embedded();
Engine engine = tomcat.createEngine();
tomcat.setCatalinaHome(catalinaHome);
Host host = tomcat.createHost("localhost", webrootPath);
Context context = tomcat.createContext(contextPath, webrootPath);
// context.setAltDDName(getWebXmlDirectory()); //设置web.xml的位置
if(reloadable) context.setReloadable(true);
host.addChild(context);
engine.addChild(host);
engine.setDefaultHost(host.getName());
engine.setName("EmbeddedServer");
tomcat.addEngine(engine);
Connector connector =
tomcat.createConnector(InetAddress.getByName("0.0.0.0"), 8080, false);
tomcat.addConnector(connector);
tomcat.start();
}
/**
* 终止Tomcat
*/
public void shutdown() throws Exception {
tomcat.stop();
}
public static void main(String[] args) {
try {
long begin = System.currentTimeMillis();
String workdir = "D:/myeclipse/workspace/embeddedtomcat/WebRoot/work";
delFolder(workdir);
System.out.println("work directory is deleted, use " + (System.currentTimeMillis() - begin) + " ms");
begin = System.currentTimeMillis();
new MyEmbeddedTomcat().startup();
System.out.println("Tomcat Server started, use " + (System.currentTimeMillis() - begin) + " ms");
} catch (Exception e) {
e.printStackTrace();
}
}
// 删除文件夹
// param folderPath 文件夹完整绝对路径
public static void delFolder(String folderPath) {
try {
delAllFile(folderPath); // 删除完里面所有内容
String filePath = folderPath;
filePath = filePath.toString();
java.io.File myFilePath = new java.io.File(filePath);
myFilePath.delete(); // 删除空文件夹
} catch (Exception e) {
e.printStackTrace();
}
}
// 删除指定文件夹下所有文件
// param path 文件夹完整绝对路径
public static boolean delAllFile(String path) {
boolean flag = false;
File file = new File(path);
if (!file.exists()) {
return flag;
}
if (!file.isDirectory()) {
return flag;
}
String[] tempList = file.list();
File temp = null;
for (int i = 0; i < tempList.length; i++) {
if (path.endsWith(File.separator)) {
temp = new File(path + tempList[i]);
} else {
temp = new File(path + File.separator + tempList[i]);
}
if (temp.isFile()) {
temp.delete();
}
if (temp.isDirectory()) {
delAllFile(path + "/" + tempList[i]);// 先删除文件夹里面的文件
delFolder(path + "/" + tempList[i]);// 再删除空文件夹
flag = true;
}
}
return flag;
}
}
//-------------------------------------------------------------------------
以上是个人这几天调试embedded tomcat 时的收获。如果有不足或者错误之处,欢迎指正。
- 项目开发经验----如何同时应对多个项目 & embedded tomcat 使用
- 项目开发经验----如何同时应对多个项目 & embedded tomcat 使用
- 如何使用Tomcat部署多个项目
- tomcat 同时部署多个项目
- Idea在Mac上如何同时启动多个tomcat运行多个web项目
- 如何同时管理多个项目
- 项目开发中如何应对客户
- tomcat部署多个项目且同时拥有Root目录
- 07-项目同时部署在多个tomcat
- tomcat同时存在多个项目webapp.root问题
- tomcat启用不同端口,同时启动多个项目
- 多个tomcat同时访问一个项目的配置
- JavaScript如何从listbox里同时删除多个项目
- 如何同时启动多个Tomcat服务器
- 如何同时启动多个Tomcat服务器
- 如何同时启动多个Tomcat服务器
- 如何同时启动多个Tomcat服务器
- 如何同时启动多个Tomcat服务器
- SQL语句
- 用ROME创建RSS服务
- 自我领悟的OO
- 一个程序员的成长历程
- 为什么要使用EJB?
- 项目开发经验----如何同时应对多个项目 & embedded tomcat 使用
- 软件中国2009年大势图
- awk命令简介
- 数据库备份及还原的方法
- SQL Server进程阻塞的检查和解决办法
- 不允许一个用户使用一个以上用户名与服务器或共享资源的多重连接
- 抓取utf-8页面乱码的解决办法
- AIX热插拔PCI 设备功能介绍
- FastReport不同版本兼容问题