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 ...
随机推荐
- Shell与脚本
shell是Linux操作系统的用户接口,我们经常需要编写脚本让操作系统自动执行一系列指令的需求,本文将简单介绍开发shell脚本的所需的语言特性. shell脚本是指令序列,其指令可以直接在终端中执 ...
- 设计模式之“Decorator”注疏#02
装饰模式在某种意义上来说也是挺原始的, 它首先需要一个你被装饰的基础类, 再来是需要一个基于这个基础类的原始包装器,可以看作是其它包装器的基础类 进而通过继承这个包装器,来构建出多个具有各自功能的特定 ...
- javascript 一些特殊的字符运算
1.什么是 --> ? 这两个分开是很简单的两个运算符,比如--,一般表示自减,var i = 5;while(i){console.log(i--);},会打印出5,4,3,2,1: > ...
- Java中的Throable类是不是受查异常?
Q: Throable是不是受查异常? A: 是 在Java规范中,对非受查异常和受查异常的定义是这样的: The unchecked exception classes are the run-ti ...
- 根据展示文字自适应 cell 高度,实现点击cell的伸缩扩展
1.要根据展示的文字计算cell的高度, 再此给NSString写的延展的方法, 以此获取展示文字的高度 2.在自定义的cell中 声明属性和定义方法 注:在cell上初始化子控件,最好用代码写, 不 ...
- angular2^ typescript 将 文件和Json数据 合并发送到服务器(1.客户端处理)
首先介绍下框架基本流程 (web > webservice [前端架构] ) > (nodejs [ 数据中转站 ]) >(api [后台接口]) --web (html a ...
- 正本清源区块链——Caoz
正本清源区块链 说明:以下内容整理自Caoz的<正本清源区块链>,如有不妥,请联系我修改或删除. 简介 不讨论炒币!不讨论炒币!不讨论炒币! 本课程内容分为两部分: 第一部分,烧脑篇,介绍 ...
- 关于eclipse安装springide的记录
近些天,又开始学习springmvc,使用eclipse进行开发,由于很多快捷键时候需要安装springide插件才能出来,我遇到配置DispatcherServlet,结果alt+/出不来Dispa ...
- 手把手教你用.NET Core写爬虫
写在前面 自从上一个项目58HouseSearch从.NET迁移到.NET core之后,磕磕碰碰磨蹭了一个月才正式上线到新版本. 然后最近又开了个新坑,搞了个Dy2018Crawler用来爬dy20 ...
- 变态的IE
1.IE7及更早版本, unshift()方法总是返回undefined而不是数组的新长度.2.IE8及之前版本, 在catch语句中捕获的错误对象会被添加到执行环境的变量对象, 而不是catch语句 ...