Tomcat 代码方式启动
配置好参数,只需在Booter类中调用 EmbbedTomcat.main(args); 就可以启动。 maven中也需要配置相应插件。
import java.io.File;
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;
public class EmbbedTomcat {
private static final Logger logger = LoggerFactory.getLogger(EmbbedTomcat.class);
private String hostname = "localhost";
private int port = 8089;
private String webAppDir = "webapp";
private String contextPath = "/";
private String URIEncoding = "UTF-8";
private String baseDir = ".";
// absolute pathname, a relative pathname, or a URL
private String appBase = ".";
private Tomcat tomcat = null;
public String getHostname() {
return hostname;
}
public void setHostname(String hostname) {
this.hostname = hostname;
}
public int getPort() {
return port;
}
public void setPort(int port) {
this.port = port;
}
public String getWebAppDir() {
return webAppDir;
}
public void setWebAppDir(String webAppDir) {
this.webAppDir = webAppDir;
}
public String getContextPath() {
return contextPath;
}
public void setContextPath(String contextPath) {
this.contextPath = contextPath;
}
public String getBaseDir() {
return baseDir;
}
public void setBaseDir(String baseDir) {
this.baseDir = baseDir;
}
public String getAppBase() {
return appBase;
}
public void setAppBase(String appBase) {
this.appBase = appBase;
}
public void setURIEncoding(String uRIEncoding) {
URIEncoding = uRIEncoding;
}
public void start() throws Exception {
tomcat = new Tomcat();
tomcat.setPort(port);
tomcat.setHostname(hostname);
tomcat.setSilent(false);
tomcat.setBaseDir(baseDir);
tomcat.getConnector().setURIEncoding(URIEncoding);
tomcat.getConnector().setEnableLookups(false);
// webapps
tomcat.getHost().setAppBase(System.getProperty("user.dir") + File.separator + appBase);
StandardServer server = (StandardServer) tomcat.getServer();
AprLifecycleListener listener = new AprLifecycleListener();
server.addLifecycleListener(listener);
// ROOT
org.apache.catalina.Context ctx = tomcat.addWebapp(contextPath, webAppDir);
String contextPath = this.getClass().getResource("/").getPath() + "context.xml";
File contextFile = new File(contextPath);
ctx.setConfigFile(contextFile.toURI().toURL());
tomcat.enableNaming();
tomcat.start();
// add shutdown hook to stop server
Runtime.getRuntime().addShutdownHook(new Thread() {
public void run() {
try {
tomcat.stop();
} catch (LifecycleException e) {
logger.error("failed to stop tomcat.", e);
}
}
});
tomcat.getServer().await();
}
public static void main(String[] args) {
int port = 0;
String appBase = null;
String contextPath = null;
String webAppDir = null;
String baseDir = null;
String URIEncoding = null;
for (String arg : args) {
if (arg.startsWith("-httpPort")) {
port = Integer.parseInt(arg.substring(arg.indexOf("=") + 1));
}
if (arg.startsWith("-appBase")) {
appBase = arg.substring(arg.indexOf("=") + 1);
}
if (arg.startsWith("-contextPath")) {
contextPath = arg.substring(arg.indexOf("=") + 1);
}
if (arg.startsWith("-webAppDir")) {
webAppDir = arg.substring(arg.indexOf("=") + 1);
}
if (arg.startsWith("-baseDir")) {
baseDir = arg.substring(arg.indexOf("=") + 1);
}
if (arg.startsWith("-URIEncoding")) {
URIEncoding = arg.substring(arg.indexOf("=") + 1);
}
}
EmbbedTomcat tomcat = new EmbbedTomcat();
if (port > 0) {
tomcat.setPort(port);
}
if (appBase != null && appBase.length() > 0) {
tomcat.setAppBase(appBase);
}
if (contextPath != null && contextPath.length() > 0) {
tomcat.setContextPath(contextPath);
}
if (webAppDir != null && webAppDir.length() > 0) {
tomcat.setWebAppDir(webAppDir);
}
if (baseDir != null && baseDir.length() > 0) {
tomcat.setBaseDir(baseDir);
}
if (URIEncoding != null && URIEncoding.length() > 0) {
tomcat.setURIEncoding(URIEncoding);
}
try {
tomcat.start();
} catch (Exception e) {
logger.error("Server Start Error: ", e);
System.exit(-1);
}
}
}
Tomcat 代码方式启动的更多相关文章
- 以服务方式启动tomcat无法访问NFS共享盘
用startup.bat方式启动tomcat,程序的可以访问NFS共享盘的文件.但用 1).以服务的方式启动tomcat 2).或者用windows的任务计划去执行startup.bat的方式启动to ...
- tomcat三种启动不同的启动方式
Linux下tomcat服务的启动.关闭与错误跟踪,通常通过以下几种方式启动关闭tomcat服务: 切换到tomcat主目录下的bin目录 1. 启动tomcat服务 方式一:直接启动 ./start ...
- windows系统bat方式启动tomcat出现java.lang.OutOfmemoryError:PermGen Space 错误
1.问题情景: 在部署项目时,将两个应用部署到同一个tomcat下,通过startup.bat启动服务时,控制台出现出现java.lang.OutOfmemoryError:PermGen Space ...
- idea中使用tomcat 方式启动spring boot项目
Spring boot 的main 入口启动方式相信都会用,直接运行main直接就启动了,但是往往这种方式并不是最佳的启动方式,比如运维的层面更希望调整tomcat的调优参数,而只使用嵌入启动方式很难 ...
- C#/WPF/WinForm/.NET程序代码实现软件程序开机自动启动的两种常用方法的示例与源码下载带详细注释-源码代码-注册表方式-启动目录快捷方式
C#/WPF/WinForm/.NET程序代码实现软件程序开机自动启动的两种常用方法的示例与源码下载带详细注释-源码代码-注册表方式-启动目录快捷方式 C#实现自动启动的方法-两种方法 源码下载地址: ...
- Spring Boot移除内嵌Tomcat,使用非web方式启动
前言:当我们使用Spring Boot编写了一个批处理应用程序,该程序只是用于后台跑批数据,此时不需要内嵌的tomcat,简化启动方式使用非web方式启动项目,步骤如下: 1.在pom.xml文件中去 ...
- 如何在开机时让Tomcat以进程的方式启动
一. 安装tomcat服务 1. 打开cmd命令窗口,进入到"tomcat安装路径/bin"目录下,运行"service.bat install"命令,安装to ...
- 关于eclipse tomcat 无法启动(8080,8005,8009端口被占用)的解决方法,附 eclipse tomcat 与 tomcat 并存方式
eclipse 在编译运行时 新建的tomcat连接始终为stopped状态,描述为8080,8005,8009端口被占用. 这是因为在装完tomcat后,tomcat服务已启动,而eclipse仅仅 ...
- 部署war包后,新增tomcat服务器,启动tomcat服务器报错解决方法
导入Maven工程后,新增tomcat服务器,启动服务器后,报如下错误: 使用http访问页面的时候报如下错误: 经过百度后,有一种方法可以解决: 在eclipse tomcat无法启动,无法访问to ...
随机推荐
- bzoj 4869: [Shoi2017]相逢是问候 [扩展欧拉定理 线段树]
4869: [Shoi2017]相逢是问候 题意:一个序列,支持区间\(a_i \leftarrow c^{a_i}\),区间求和.在模p意义下. 类似于开根操作,每次取phi在log次后就不变了. ...
- SDN第5次上机作业
SDN第5次上机作业 实验目的 1.搭建如下拓扑并连接控制器 2.下发相关流表和组表实现负载均衡 3.抓包分析验证负载均衡 实验步骤 1.建立以下拓扑,并连接上ODL控制器. 提交要求:ODL拓扑界面 ...
- 为Android添加JNI支持
起因 今天在进行Android原生开发时,需要通过JNI调用C++代码实现一些处理.以前没有做过类似的东西,在网上找了很久才解决问题,特记录下来以便以后翻阅. Eclipse无cygwin编译so的方 ...
- ionic2 +Angular 使用自定义图标
结合阿里巴巴矢量图标库实现在ionic2开发中使用自定义图标. step1:在阿里巴巴图标管理中新建项目,并添加自己选中的图标到购物车: step2:将购物车中的图标"添加至项目" ...
- 随机手机号和身份证号码(python)
在使用selenium2 python自动化过程中,用户添加的时候程序设置的手机号和身份证号码是唯一的,这方面python代码可以实现,以下是调试成功,可以实现的. 具体代码如下 身份证需要下载dis ...
- shell脚本实现anisble客户端脚本分发和密钥授权配置
##############################Deploy ansible client shell######################## echo "start d ...
- redis 设置认证密码
通过修改redis配置文件(redis.conf)修改验证密码.(重启生效) requirepass myRedis 客户端通过密码登录redis并进行操作 redis-cli -h 127.0.0. ...
- 初步探究Android App API接口测试--实战
一.Android App API接口测试 1.如何学好Android App API接口测试 postman可以用来实现API接口自动化测试,但是也有弊端,无法实现接口测试数据的参数化,为了达到接口 ...
- 解决react-router4在browserhistory路由下的nginx的白屏或者404问题
使用react-router,官方推荐用browserhistory,美观简洁.但是nginx服务器端的配置也让人头疼. 首先看官方举例的方法: server { location / { try_f ...
- C# 如何使用预处理指令?
#define Debug #define Release #undef Release #if Debug using System; #endif 注意:#define 必须在文档最前面