Spring Boot2.0之 原理—建立內建Tomcat容器
阿新 • • 發佈:2018-11-08
前面所述的https://www.cnblogs.com/toov5/p/9823728.html 中的第一條先不贅述了,就是玩了maven
重點介紹後兩條
首先內建Tomcat:
SpringBoot中內建tomcat伺服器
Java操作建立tomcat
我們點選pom中的
持續點選到
繼續點選會發現:
這個依賴 為我所需~
注意:Springboot2.0之後 Tomcat8.0以上版本
引入到自己的pom中(類似的還有其他的依賴包):
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.toov5.tomcat</groupId> <artifactId>tomcat</artifactId> <version>0.0.1-SNAPSHOT</version> <dependencies> <!--Java語言操作tomcat --> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-core</artifactId> <version>8.5.16</version> </dependency> <!-- tomcat對jsp支援 --> <dependency> <groupId>org.apache.tomcat</groupId> <artifactId>tomcat-jasper</artifactId> <version>8.5.16</version> </dependency> </dependencies> </project>
servlet程式碼:
package com.toov5.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class IndexServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doPost(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.getWriter().print("successful congratulation "); } }
然後用servlet建立Tomcat容器
package com.toov5.tomcat; import org.apache.catalina.LifecycleException; import org.apache.catalina.core.StandardContext; import org.apache.catalina.startup.Tomcat; import org.apache.catalina.startup.Tomcat.FixContextListener; import com.toov5.servlet.IndexServlet; //使用Java建立Tomcat容器 //tomcat 底層執行程式 最終執行servlet //Springmvc底層使用servlet public class Test { private static int PORT = 8080; //埠 private static String CONTEX_PATH = "/toov5"; //專案訪問名稱 private static String SERVLET_NAME="IndexServet"; public static void main(String[] args) { Tomcat tomcatServer = new Tomcat(); tomcatServer.setPort(PORT); //指定埠號 //是否設定自動部署 tomcatServer.getHost().setAutoDeploy(false); //建立上下文,拿到上下文後就可以設定整個訪問地址了 StandardContext standardContext = new StandardContext(); standardContext.setPath(CONTEX_PATH); //監聽上下文 standardContext.addLifecycleListener(new FixContextListener()); standardContext.addLifecycleListener(new FixContextListener()); // tomcat容器新增standardContext 新增整個context tomcatServer.getHost().addChild(standardContext); // 建立servlet servlet的名字叫IndexServlet tomcatServer.addServlet(CONTEX_PATH, SERVLET_NAME, new IndexServlet()); // 新增servleturl對映 standardContext.addServletMappingDecoded("/index", SERVLET_NAME); try { tomcatServer.start(); } catch (LifecycleException e) { e.printStackTrace(); } System.out.println("tomcat伺服器啟動成功!"); //需要非同步接受請求 tomcatServer.getServer().await(); } }
這段程式碼等同於,
web.xml中的:
<servlet> <servlet-name>toov5</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring/springmvc.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>toov5</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
專案目錄結構:
啟動:
訪問路徑名字是這個:
上下文:
訪問之:
小夥伴,有木有很好玩呀~