<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          手寫一個(gè)main的Tomcat容器,構(gòu)建Http服務(wù)器

          共 3782字,需瀏覽 8分鐘

           ·

          2022-03-01 18:07

          你知道的越多,不知道的就越多,業(yè)余的像一棵小草!

          你來(lái),我們一起精進(jìn)!你不來(lái),我和你的競(jìng)爭(zhēng)對(duì)手一起精進(jìn)!

          編輯:業(yè)余草

          blog.csdn.net/m0_37892044

          推薦:https://www.xttblog.com/?p=5317

          當(dāng)我們開始接觸到 SpringBoot 項(xiàng)目的時(shí)候,我們特別驚訝,為什么沒(méi)有了tomcat服務(wù)器,web項(xiàng)目還能跑起來(lái)。為什么只用了一個(gè)main方法就能講一個(gè)web項(xiàng)目跑起來(lái)。學(xué)習(xí)了這篇文章你就能明白了。

          文章目錄

          • 發(fā)現(xiàn)內(nèi)置Tomcat
          • 創(chuàng)建一個(gè)maven項(xiàng)目
          • 添加tomcat依賴
          • 創(chuàng)建一個(gè)servlet:IndexServlet
          • 創(chuàng)建一個(gè)tomcat
          • 定義servlet配置參數(shù)
          • 內(nèi)置Tomcat常用API介紹
          • 創(chuàng)建tomcat并且添加servlet
          • 啟動(dòng)main方法創(chuàng)建tomcat
          • 訪問(wèn)IndexServlet

          1.發(fā)現(xiàn)內(nèi)置Tomcat

          打開一個(gè)SpringBoot項(xiàng)目,我們發(fā)現(xiàn),有tomcat的依賴

          tomcat的依賴

          接下來(lái)讓我們把tomcat的依賴找到。

          首先找到spring-boot-starter-web。

          spring-boot-starter-web

          點(diǎn)進(jìn)去之后我們看到他用的是2.1.0版本,我們繼續(xù)點(diǎn)擊去。

          tomcat-embed

          果然在里面找到tomcat的依賴,我們繼續(xù)點(diǎn)進(jìn)去。

          tomcat-embed

          這是我們我們就能看到tomcat的相關(guān)依賴了。

          tomcat-embed

          因此我們是可以使用Java提供內(nèi)置Tomcat容器框架,使用Java語(yǔ)言操作Tomcat容器。這樣我們也能創(chuàng)建一個(gè)maven項(xiàng)目,并且內(nèi)置一個(gè)tomcat容器了。

          2.創(chuàng)建一個(gè)maven項(xiàng)目

          3.添加tomcat依賴

          這里我們使用8.5版本的tomcat


          <dependency>
          ?<groupId>org.apache.tomcat.embedgroupId>
          ?<artifactId>tomcat-embed-coreartifactId>
          ?<version>8.5.16version>
          dependency>

          4.創(chuàng)建一個(gè)servlet:IndexServlet

          public?class?IndexServlet?extends?HttpServlet?{
          ?private?static?final?long?serialVersionUID?=?1L;
          ?@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("IndexServletIndexServletIndexServletIndexServletIndexServletIndexServlet");
          ?}
          }

          我們先看看傳統(tǒng)的Servlet需要怎么配置,我們需要在WEB-INF目錄下的web.xml文件中,配置sevlet的映射。

          配置sevlet的映射

          當(dāng)我們?cè)L問(wèn)這個(gè)servlet的時(shí)候,訪問(wèn)地址應(yīng)該是:ip:<端口>//index。

          但是,但是,但是。。。

          當(dāng) tomcat和web.xml 沒(méi)了,怎么配置?

          簡(jiǎn)單,沒(méi)有我們就用main方法來(lái)創(chuàng)建一個(gè)tomcat。

          5.創(chuàng)建一個(gè)tomcat

          5.1.定義servlet配置參數(shù)

          我們先定義幾個(gè)servlet的配置參數(shù):servlet的名字,servlet的映射。

          servlet的配置參數(shù)

          5.2.內(nèi)置Tomcat常用API介紹

          「org.apache.catalina.startup.Tomcat」
          「創(chuàng)建tomcat」

          Tomcat?tomcatServer?=?new?Tomcat();

          「設(shè)置tomcat端口」

          void?setPort(int?port);

          「設(shè)置上下文地址」

          void?setPath(String?path)

          「添加監(jiān)聽(tīng)」

          void?addLifecycleListener(LifecycleListener?listener)

          「添加sevlet」

          Wrapper?addServlet(String?contextPath,String?servletName,Servlet?servlet)

          「添加sevlet映射」

          void?addServletMappingDecoded(String?pattern,?String?name)

          「啟動(dòng)tomcat」

          void?start()?throws?LifecycleException

          「獲取服務(wù)」

          Server?getServer()

          「服務(wù)異步」

          tomcatServer.getServer().await()

          「將Web應(yīng)用程序添加到Tomcat的webapps目錄中,」

          等效的默認(rèn)web.xml將應(yīng)用于該Web應(yīng)用程序,并且與該應(yīng)用程序打包的任何 WEB-INF/web.xmlMETA-INF/context.xml都將被正常處理。

          Context?addWebapp(String?contextPath,?String?docBase)?throws?ServletException

          「web應(yīng)用資源添加到此Web應(yīng)用程序」

          void?addPreResources(WebResourceSet?webResourceSet)

          5.3.創(chuàng)建tomcat并且添加servlet

          public?class?TestTomcat?{
          ?private?static?int?PORT?=?8080;
          ?private?static?String?CONTEX_PATH?=?"/demosevlet";
          ?private?static?String?SERVLET_NAME?=?"index";
          ?private?static?String?MAPPING?=?"index";

          ?public?static?void?main(String[]?args)?throws?LifecycleException,?InterruptedException?{
          ??System.out.println("開始啟動(dòng)tomcat");
          ??Tomcat?tomcatServer?=?new?Tomcat();
          ??//設(shè)置tomcat端口
          ??tomcatServer.setPort(PORT);
          ??//此tomcat端口是否自動(dòng)部署
          ??tomcatServer.getHost().setAutoDeploy(false);
          ??//創(chuàng)建一個(gè)web應(yīng)用程序
          ??StandardContext?standardContex?=?new?StandardContext();
          ??//設(shè)置web應(yīng)用程序的上下文地址
          ??standardContex.setPath(CONTEX_PATH);
          ??//添加web應(yīng)用程序的監(jiān)聽(tīng)
          ??standardContex.addLifecycleListener(new?FixContextListener());
          ??//將web應(yīng)用程序添加到服務(wù)器中
          ??tomcatServer.getHost().addChild(standardContex);
          ??//配置servelt和映射
          ??tomcatServer.addServlet(CONTEX_PATH,?SERVLET_NAME,?new?IndexServlet());
          ??standardContex.addServletMappingDecoded("/"+MAPPING,?SERVLET_NAME);
          ??//啟動(dòng)tomcat
          ??tomcatServer.start();
          ??System.out.println("啟動(dòng)tomcat完畢");
          ??//開啟異步服務(wù),接收請(qǐng)求
          ??tomcatServer.getServer().await();
          ?}
          }

          5.4.啟動(dòng)main方法創(chuàng)建tomcat

          啟動(dòng)結(jié)果如下,我們看到tomcat以8080端口啟動(dòng)

          tomcat以8080端口啟動(dòng)

          并且在此目錄下生成了tomcat.8080文件夾。

          tomcat.8080文件夾

          5.5.訪問(wèn)IndexServlet

          請(qǐng)求地址:ip:<端口>//index。

          請(qǐng)求地址:127.0.0.1:8080/demosevlet/index。

          手寫main方法啟動(dòng)tomcat

          有了本文的基礎(chǔ),后面我在給大家手寫 SpringBoot 教程時(shí),就能更得心應(yīng)手了!

          使用 Java 手寫一個(gè) Redis 服務(wù)端!

          手寫一個(gè)簡(jiǎn)易版的 Tomcat!

          從零開始手?jǐn)]一個(gè)較為完整的RPC框架!

          手把手教你設(shè)計(jì)一個(gè)更通用的查詢接口!

          架構(gòu)師動(dòng)手寫了一個(gè) helloworld!

          手?jǐn)]一個(gè)「冰墩墩」,代碼開源了!

          瀏覽 25
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产熟女一区二区三区五月婷 | 日韩欧美一级精品久久 | 亚洲综合免费观看高清完整版在线 | 手机AV网站在线观看 | 久久一本|