嵌入式tomcat相对于myeclipse、wtp等eclipse插件优势主要在与速度快、免部署、方便调试。
首先下载嵌入式的tomcat
http://apache.mirror.phpchina.com/tomcat/tomcat-5/v5.5.25/bin/apache-tomcat-5.5.25-embed.zip
解压,假设解压路径为%CATALINA_HOME%=D:/apache-tomcat-5.5.25-embed
在eclipse中Window->Preference->Java->Build Path->User Libraries中添加一个EmbedTomcat的库,将%CATALINA_HOME%/lib下的所有包都加入到该库中。
在工程中加入EmbedTomcat库,加入如下2个java文件,设置好contextPath,mappingPath,以及tomcat路径,将
SimpleTomcatLauncher以DEBUG方式作为普通java application启动,即可设置断点进行调试。
EmbeddedTomcatLauncher
java 代码
首先下载嵌入式的tomcat
http://apache.mirror.phpchina.com/tomcat/tomcat-5/v5.5.25/bin/apache-tomcat-5.5.25-embed.zip
解压,假设解压路径为%CATALINA_HOME%=D:/apache-tomcat-5.5.25-embed
在eclipse中Window->Preference->Java->Build Path->User Libraries中添加一个EmbedTomcat的库,将%CATALINA_HOME%/lib下的所有包都加入到该库中。
在工程中加入EmbedTomcat库,加入如下2个java文件,设置好contextPath,mappingPath,以及tomcat路径,将
SimpleTomcatLauncher以DEBUG方式作为普通java application启动,即可设置断点进行调试。
EmbeddedTomcatLauncher
java 代码
- package per.sunrie;
- import org.apache.catalina.Context;
- import org.apache.catalina.Engine;
- import org.apache.catalina.Host;
- import org.apache.catalina.connector.Connector;
- import org.apache.catalina.startup.Embedded;
- /**
- * @author sunrie
- * @version $Id$
- */
- public abstract class EmbeddedTomcatLauncher {
- private static final int DEFAULT_PORT = 8080;
- private Embedded tomcat;
- protected EmbeddedTomcatLauncher() {
- initEmbedded();
- initShutdownHook();
- }
- protected abstract String[] getContextsAbsolutePath();
- protected abstract String[] getContextsMappingPath();
- protected abstract String getTomcatPath();
- protected int getPort(){
- return DEFAULT_PORT;
- }
- protected void startTomcat() {
- try {
- long startTime = System.currentTimeMillis();
- tomcat.start();
- System.err.println(
- "Embedded Tomcat started in "
- + (System.currentTimeMillis() - startTime) + " ms."
- );
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- private void initEmbedded() {
- tomcat = new Embedded();
- tomcat.setCatalinaBase(getTomcatPath());
- Host host =
- tomcat.createHost(
- "localhost",
- tomcat.getCatalinaHome() + "/webapps"
- );
- String[] contexts = getContextsMappingPath();
- String[] contextsPath = getContextsAbsolutePath();
- Context context = null;
- for (int i = 0; i < contexts.length; ++i) {
- context = tomcat.createContext(contexts[i], contextsPath[i]);
- host.addChild(context);
- }
- Engine engine = tomcat.createEngine();
- engine.setName("MyDevAppServer");
- engine.addChild(host);
- engine.setDefaultHost(host.getName());
- tomcat.addEngine(engine);
- // 只能本机访问
- Connector connector = tomcat.createConnector("localhost", getPort(), false);
- // 可从其它机器访问
- // Connector connector = tomcat.createConnector((InetAddress) null, getPort(), false);
- connector.setURIEncoding("UTF-8");
- tomcat.addConnector(connector);
- }
- private void initShutdownHook() {
- Runtime.getRuntime().addShutdownHook(
- new Thread() {
- public void run() {
- stopTomcat();
- }
- }
- );
- }
- private void stopTomcat() {
- try {
- tomcat.stop();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
SimpleTomcatLauncher
java 代码
java 代码
- package per.sunrie;
- import java.net.MalformedURLException;
- import java.net.URL;
- /**
- * @author sunrie
- * @version $Id$
- */
- public class SimpleTomcatLauncher extends EmbeddedTomcatLauncher {
- public static void main(String[] args) {
- new SimpleTomcatLauncher().startTomcat();
- }
- @Override
- protected String[] getContextsAbsolutePath() {
- return new String[] { getSingleContextAbsolutePath() };
- }
- private String getSingleContextAbsolutePath() {
- try {
- URL url = getClass().getResource("/");
- url = new URL(url, getSingleContextPathRelativeToClassPath());
String path = url.getPath();
path = URLDecoder.decode(url.getPath(), "UTF-8");
return path; - } catch (MalformedURLException e) {
- throw new RuntimeException(e);
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e); - }
- }
- private String getSingleContextPathRelativeToClassPath() {
//实际contextPath(与classpath的相对路径) - return "../web";
- }
- @Override
- protected String[] getContextsMappingPath() {
//映射路径 - return new String[] { "/webContext" };
- }
- @Override
- protected String getTomcatPath() {
//Tomcat的HOME - return "/D:/apache-tomcat-5.5.25-embed";
- }
- }