java 内嵌tomcat_内嵌Tomcat7 - JianmingDeng的个人页面 - OSCHINA - 中文开源技术交流社区...

不想经常打包部署,而想让WEB应用能直接Run As,Tomcat提供tomcat-embed-core-7.0.42.jar,故可以嵌入Tomcat。在Maven配置文件中添加如下的配置文件:

org.apache.tomcat

tomcat-catalina

7.0.42

org.apache.tomcat

tomcat-dbcp

7.0.42

org.apache.tomcat.embed

tomcat-embed-core

7.0.42

org.apache.tomcat.embed

tomcat-embed-logging-juli

7.0.42

org.apache.tomcat

tomcat-juli

7.0.42

org.apache.tomcat.embed

tomcat-embed-jasper

7.0.42

org.apache.tomcat

tomcat-jasper

7.0.42

org.apache.tomcat

tomcat-jasper-el

7.0.42

org.apache.tomcat

tomcat-jsp-api

7.0.42

引入的依赖的版本不一致,也能导致程序出现异常。故全部采用7.0.42,当然也可以采用其它版本,只是尽量保持一致。

写一个EmbeddedTomcat类,先看代码:

package com.raze.common.tomcat;

import java.io.File;

import javax.servlet.ServletException;

import org.apache.catalina.LifecycleException;

import org.apache.catalina.core.AprLifecycleListener;

import org.apache.catalina.core.StandardServer;

import org.apache.catalina.startup.Tomcat;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

/**

* @author DJM

*/

public class EmbeddedTomcat {

private Logger logger = LoggerFactory.getLogger(EmbeddedTomcat.class);

private Tomcat tomcat;

private int port;

private static final String tempDir= "src"+File.separatorChar+"main"+File.separatorChar+"webapp";

public EmbeddedTomcat(int port){

tomcat = new Tomcat();

this.port = port;

}

public void startUpTomcat(){

tomcat.setPort(port);

try {

tomcat.addWebapp("/DJM", System.getProperty("user.dir")+File.separatorChar+tempDir);

} catch (ServletException e) {

e.printStackTrace();

}

try {

StandardServer server = (StandardServer)tomcat.getServer();

AprLifecycleListener listener = new AprLifecycleListener();

server.addLifecycleListener(listener);

tomcat.start();

} catch (LifecycleException e) {

logger.info("An exception occurs when start tomcat!");

e.printStackTrace();

}

tomcat.getServer().await();

logger.info("Tomcat has been started successfully!");

}

public void shutDownTomcat(){

try {

tomcat.stop();

} catch (LifecycleException e) {

logger.info("An exception occurs when close tomcat!");

e.printStackTrace();

}

logger.info("Tomcat has been closed!");

}

}

有些资料指引我们使用org.apache.catalina.startup.Embedded,但是看下图就明白org.apache.catalina.startup.Embedded已经过时了,

59318e68dfa15902325061cc88438a87.png

所以采用org.apache.catalina.startup.Tomcat类。项目的目录结构如图:

3d06fd2c8c23f1cf009ac46bcae51992.png

我们现在调用我写的com.raze.common.tomcat.EmbeddedTomcat类,代码如下:

package com.raze;

import com.raze.common.tomcat.EmbeddedTomcat;

/**

* @author DJM

*/

public class Boot {

public static void main(String[] args) {

EmbeddedTomcat tomcat = new EmbeddedTomcat(8090);

tomcat.startUpTomcat();

}

}

直接Run As,选中JavaApplication,控制台打印如下信息:

33b18cbf573dbe3e8de89799a2794e44.png

选中项目,按"F5"或者右键"Refresh"项目,多出了一个与tomcat相关的目录,如下图:

57da7fd2435c87304f07bc1ea9636448.png

968b78e5190c6f37f3840ce460104767.png

成功嵌入Tomcat7。此处JSP页面中的Hello World也只为验证成功嵌入Tomcat7与否。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值