3) 写一个tomcat 启动类,EmbeddedTomcat.java
import java.io.File;
import java.net.InetAddress;
import org.apache.catalina.Context;
import org.apache.catalina.Engine;
import org.apache.catalina.Host;
import org.apache.catalina.startup.Embedded;
public class EmbeddedTomcat {
private String path = null;
private Embedded embedded = null;
private Host host = null;
/**
* Default Constructor
*
*/
public EmbeddedTomcat() {
}
/**
* Basic Accessor setting the value of the context path
*
* @param path - the path
*/
public void setPath(String path) {
this.path = path;
}
/**
* Basic Accessor returning the value of the context path
*
* @return - the context path
*/
public String getPath() {
return path;
}
/**
* This method Starts the Tomcat server.
*/
public void startTomcat() throws Exception {
// Create an embedded server
embedded = new Embedded();
Engine engine = null;
// Set the home directory
// System.setProperty("catalina.home", getPath());
embedded.setCatalinaHome(getPath());
// Create an engine
engine = embedded.createEngine();
// Create a default virtual host
host = embedded.createHost("localhost", getPath()
+ "/webapps");
engine.addChild(host);
engine.setDefaultHost(host.getName());
// Create the ROOT context
Context rootCxt = embedded.createContext("",
getPath() + "/webapps/ROOT");
rootCxt.setPrivileged(true);
//Create your own context
Context scoreCxt = embedded.createContext("/score", "E:\\Eclipse_WorkSpace\\Eclipse_Work\\WebDynamicAgg\\score");
host.addChild(rootCxt);
host.addChild(scoreCxt);
// Install the assembled container hierarchy
embedded.addEngine(engine);
// Assemble and install a default HTTP connector
embedded.addConnector(embedded.createConnector(
InetAddress.getByName("127.0.0.1"), 8080, false));
// Start the embedded server
embedded.start();
}
/**
* This method Stops the Tomcat server.
*/
public void stopTomcat() throws Exception {
// Stop the embedded server
embedded.stop();
}
public static void main(String args[]) {
try {
EmbeddedTomcat tomcat = new EmbeddedTomcat();
tomcat.setPath((new File(".")).getCanonicalPath());
tomcat.startTomcat();
}
catch( Exception e ) {
e.printStackTrace();
}
}
}
对其中tomcat 基础的介绍请看http://www.onjava.com/lpt/a/1547。在我的这个启动类中向tomcat中添加两个context, 一个tomcat root context, 另一个是在我的eclipse里面的一个web project。
// Create the ROOT context
Context rootCxt = embedded.createContext("",
getPath() + "/webapps/ROOT");
rootCxt.setPrivileged(true);
//Create your own context
Context scoreCxt = embedded.createContext("/score", "E:\\Eclipse_WorkSpace\\Eclipse_Work\\WebDynamicAgg\\score");
host.addChild(rootCxt);
host.addChild(scoreCxt);
假如要能认出eclipse的java project是一个web project, 你需要把你的web project的context做成发布时一样就行(本例中的context时score), 然后在eclipse中改变build path:如下图:
把所有的lib放到WEB-INF/lib 就行了。
4) 优点: 使用这种方式启动tomcat非常快, 而且更干净, 占用更少的memory。 相比下比 Myeclipse插件快很多(本人用的最多的也是Myeclipse的app server deployment 和 jsp xml editor)。而且myeclipse是在你每次保存文件时把这个文件考到对应的webapps下你的project下面。 使用这种方式还少了拷贝文件。
5) 在实际操作时当我浏览score时, 发生了找不到一些lib的错误。 一个log4j还有一个是commons-el.jar(在TOMCAT_HOME/common\lib里面这里的tomcat不是emebed版本的),把这两个lib考到Tomcat Startup/lib文件夹下, 然后再把他们add到eclipse的Liberaries中。