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>