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 4835: 遗忘之树 [树形DP]
4835: 遗忘之树 题意:点分治,选标号最小的重心,上一次重心向下一次重心连有向边,求原树方案数. md我真不知道当初比赛时干什么去了...现在一眼秒啊... \(size[v]=\frac{siz ...
- A 洛谷 P3601 签到题 [欧拉函数 质因子分解]
题目背景 这是一道签到题! 建议做题之前仔细阅读数据范围! 题目描述 我们定义一个函数:qiandao(x)为小于等于x的数中与x不互质的数的个数. 这题作为签到题,给出l和r,要求求. 输入输出格式 ...
- 使用正则表达式和数组形式获取get方法传入的值
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- Python中append和extend的区别
编者注:本文主要参考了<Python核心编程(第二版)> 网上有很多对这两个函数的区别讲解,但我觉得都讲的不是很清楚,记忆不深刻.这样解释清楚且容易记住. list.append(obje ...
- WPF: WPF 中的 Triggers 和 VisualStateManager
在之前写的这篇文章 WPF: 只读依赖属性的介绍与实践 中,我们介绍了在 WPF 自定义控件中如何添加只读依赖属性,并且使其结合属性触发器 (Trigger) 来实现对控件样式的改变.事实上,关于触发 ...
- 关于Mac设置alias别名访问服务器
1.首先要安装zsh[链接]robbyrussell/oh-my-zsh 什么是 oh-my-zsh (官网) 两种下载方式 如下图所示,下载安装成功 vi ~/.zshrc发开 打开zsh配置文件 ...
- C++函数返回值发生的对象复制
最近用QT做一个监控系统的项目,需要显示目标的运动轨迹,每次目标移动后,就在目标的轨迹中(用vector记录)添加一条新轨迹. 但是在运行中画面里一直不出现轨迹,经过调试发现是记录轨迹的函数出错了. ...
- PhpStorm使用之 —— Xdebug断点调试
PhpStorm使用之 -- Xdebug断点调试 在<XAMPP的配置与使用>中已经阐述了Xdebug插件的配置,Xdebug配置完成后,只需要在IDE工具中进行相关设置,便可启动Xde ...
- iOS开发中UIPopoverController的使用详解
这篇文章主要介绍了iOS开发中UIPopoverController的使用,代码基于传统的Objective-C,需要的朋友可以参考下 一.简单介绍 1.什么是UIPopoverController ...
- Vijos 1404 遭遇战
Vijos 1404 遭遇战 背景 你知道吗,SQ Class的人都很喜欢打CS.(不知道CS是什么的人不用参加这次比赛). 描述 今天,他们在打一张叫DUSTII的地图,万恶的恐怖分子要炸掉藏在A区 ...