package com.spring.web.mvc;
import org.apache.catalina.Context;
import org.apache.catalina.connector.Connector;
import org.apache.catalina.startup.Tomcat;
import org.apache.tomcat.util.scan.StandardJarScanner;
public class TomcatBoot {
public void start() {
try {
int port = 8080;
Tomcat tomcat = new Tomcat();
// 设置tomcat工作目录,
tomcat.setBaseDir("target");
//设置端口
tomcat.setPort(port);
//设置IP
tomcat.setHostname("localhost");
//设置connector
//协议版本
Connector connector = new Connector("HTTP/1.1");
//端口号
connector.setPort(port);
//编码格式,get 编码默认是 ISO-8859-1
connector.setURIEncoding("utf-8");
//让 URI 和 body 编码一致。(针对POST请求)
connector.setUseBodyEncodingForURI(true);
//将connect添加到tomcat中
tomcat.setConnector(connector);
//1.新建了server,并添加到了tomcat中
//2.新建了service,并添加到了server中
//3.向service中添加connector
tomcat.getService().addConnector(connector);
//设置webapp工作目录,以下webappPath对应tomcat的webapp路径
//1.获取.class生成路径(classspath)路径 2.将路径从target处截断,再加上src/main/webapp目录。 此处就是web.xml所在目录
String file = getClass().getClassLoader().getResource(".").getFile();
String webappPath = file.substring(0, file.indexOf("target")) + "src/main/webapp";
System.out.println("webapp目录:" + webappPath);
//获取webapp目录的上下文
Context ctx = tomcat.addWebapp("/", webappPath);
//设置目录扫描:默认不扫描全目录,扫描classpath。
//扫描classpath主要是为了扫描servlet3.0的各种注解,类似于dispatcherServlet-servlet.xml配置文件的自动扫描
//建议两个都关闭掉,不然影响启动时间,
StandardJarScanner scanner = (StandardJarScanner) ctx.getJarScanner();
//是否扫描全目录
scanner.setScanAllDirectories(false);
//是否扫描classpath
scanner.setScanClassPath(false);
tomcat.setSilent(true);
System.setProperty("org.apache.catalina.SESSION_COOKIE_NAME", "JSESSIONID" + port);
tomcat.start();
while (true) {
char c = (char) System.in.read();
if (c == 1) {
System.out.println("重启tomcat...");
tomcat.stop();
tomcat.start();
}
}
} catch (Exception ex) {
}
}
}
POM.XML
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-logging-juli</artifactId>
<version>8.5.0</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<version>8.5.0</version>
</dependency>