tomcat依賴導入步驟_Tomcat長生不老之術——嵌入式

99624f69242a22c5d8c80fbcb774353b.png

前言

Tomcat是一個非常流行的Web服務器,用于部署和運行Java Web應用程序。一般情況下,我們都是在單獨的Tomcat實例上運行自己的Web應用,其實與這種經典方案相比,我們可以將服務器運行時直接集成到應用程序中,從而更加的靈活和方便。

嵌入式Tomcat的Maven依賴

要使用嵌入式Tomcat并將其運行時與Java Web應用程序打包,請在Maven的pom.xml 文件中添加以下依賴項


<groupId>org.apache.tomcat.embedgroupId>
<artifactId>tomcat-embed-coreartifactId>
<version>${tomcat.version}version>


<groupId>org.apache.tomcat.embedgroupId>
<artifactId>tomcat-embed-jasperartifactId>
<version>${tomcat.version}version>


<groupId>org.apache.tomcat.embedgroupId>
<artifactId>tomcat-embed-logging-juliartifactId>
<version>${tomcat.version}version>

其中 tomcat.version 是指向Tomcat實際版本的屬性


<tomcat.version>8.0.48tomcat.version>

Tomcat嵌入式實例

核心類是org.apache.catalina.startup.Tomcat

例如,以下代碼創建并啟動在端口號8082上運行的嵌入式Tomcat實例

package com.xiangxue.embedded;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.io.Writer;
import org.apache.catalina.Context;
import org.apache.catalina.LifecycleException;
import org.apache.catalina.startup.Tomcat;

public class EmbeddedTomcatEx {

public static void main(String[] args) throws LifecycleException,
InterruptedException, ServletException {

Tomcat tomcat = new Tomcat();
tomcat.setPort(8082);

Context ctx = tomcat.addContext("/", new File(".").getAbsolutePath());

Tomcat.addServlet(ctx, "Embedded", new HttpServlet() {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {

Writer w = resp.getWriter();
w.write("Embedded Tomcat servlet.\n");
w.flush();
w.close();
}
});

ctx.addServletMapping("/*", "Embedded");

tomcat.start();
tomcat.getServer().await();
}
}

下面我們分段解釋以上代碼的作用:

Tomcat tomcat = new Tomcat();
tomcat.setPort(8082);

Tomcat在端口8082上啟動

Context ctx = tomcat.addContext("/", new File(".").getAbsolutePath());

每個應用程序都映射到上下文。使用該addContext()方法,我們創建了一個不是JSP文件且沒有web.xml?文件的應用程序。我們使用根上下文路徑和文檔庫的當前工作目錄。

Tomcat.addServlet(ctx, "Embedded", new HttpServlet() {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {

Writer w = resp.getWriter();
w.write("Embedded Tomcat servlet.\n");
w.flush();
w.close();
}
});

addServlet()方法添加了一個新的servlet 。servlet中使用流響應一些文本。

 ctx.addServletMapping("/*", "Embedded");

servlet mappping控制如何訪問名為Embedded的servlet。對于我們的示例,任何URL最終都會調用我們的servlet。

tomcat.start();
tomcat.getServer().await();

最后Tomcat服務器啟動。

服務器正在偵聽端口8082,因此在Web瀏覽器中鍵入以下URL:

http://localhost:8082/

你就可以看到對應的效果

8c4f86e5843cae162d5013beb221d4b0.png

總結

基本上,我們用到嵌入式Tomcat主要有以下的目的:

1)對Java組件等Web組件進行快速單元測試

可以使用嵌入式Tomcat自動進行單元測試,而不是啟動/停止Tomcat服務器并打開Web瀏覽器進行手動單元測試。

2)將Java Web應用程序作為獨立的Java應用程序提供

最終用戶現在可以運行JAR文件,該文件啟動托管Web應用程序的嵌入式服務器。無需下載和安裝Tomcat并手動部署Web應用程序。

3)對Tomcat更好的控制

集成嵌入式服務器使您能夠以更好地控制服務器,從代碼上控制服務器,并自動執行自行預訂的步驟。

并且現在流行的SpringBoot架構中直接使用Main方法啟動一個也是使用以上的方式實現,只是在實現中用到了更多的嵌入式Tomcat的相關的配置和參數。

e09b1e964897891e7e4a41d7c1b38444.png

我知道你在看

5d583472879d6822338334da2c249192.png

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/272090.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/272090.shtml
英文地址,請注明出處:http://en.pswp.cn/news/272090.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux用戶組筆記整理

目錄 一、Linux用戶組概念 二、常用命令 三、用戶組信息存儲位置 一、Linux用戶組概念 Linux用戶組&#xff08;group&#xff09;就是具有相同操作權限范圍的Linux用戶管理起來&#xff1b; 比如有時我們要讓同一類用戶具有相同的權限&#xff0c;比如查看、修改某一文件或執…

java泛型、泛型類及特點、限制泛型、類型通配符聲明、泛型方法

java泛型&#xff1a; 泛型簡介泛型類限制泛型可用類型類型通配聲明泛型方法 問題&#xff1a; 如果我們需要產生多個對象&#xff0c;每個對象的邏輯完全一樣&#xff0c;只是對象內的成員變量的類型不同。那我們該如何去做&#xff1f;如果按照正常的做法就要創建多個類文件…

不生效 設置了viewport_配置viewport

最近項目中需要開發內嵌的H5頁面&#xff0c;viewport不是很熟悉&#xff0c;故來翻譯一下此篇文件加深理解原文配置viewportIOS上的safari使用一種縮放的工作模式來展示pc端的網頁&#xff0c;如果默認的設置對你的網頁展示不友好&#xff0c;推薦你改變veiwport默認配置&…

Linux文件操作實用筆記

Linux系統遵循一切皆是操作文件的規則。所以想用好Linux系統&#xff0c;就必須要掌握文件相關的操作。 1、創建文件命令&#xff1a;touch 語法格式&#xff1a; touch filename #filename 文件名稱。 比如 touch hello.txt就會在當前木創建一個hello.txt的文件。 說明&#x…

安裝完CentOS 7 后必做的七件事

CentOS是最多人用來運行服務器的 Linux 版本&#xff0c;最新版本是 CentOS 7。當你興趣勃勃地在一臺主機或 VPS 上安裝 CentOS 7 后&#xff0c;首要的工作肯定是加強它的安全性&#xff0c;以下列出的七件事&#xff0c;是你進一步配置系統和安裝其他軟件前必須做的。 1. 更改…

python顯示小數點后幾位數_python窗口編程-3:數位處理(整數)

我們在上一次課程中(python窗口編程-2&#xff1a;風格與布局 )&#xff0c;制作了完整的計算器窗口界面&#xff0c;只是那個窗口沒有真正的功能&#xff0c;是點擊任何按鈕都會關閉。這一次&#xff0c;我們加入一些事件處理的功能&#xff0c;讓它成為一個正常工作的窗口程序…

Linux文件目錄基礎筆記

1、進入目錄名稱&#xff1a;cdcd命令主要是方便用戶切換到不同目錄的指令。比如&#xff1a;cd #只執行cd命令默認進入root的根目錄cd /home #進入home目錄&#xff0c;如果home目錄有testdir目錄的話&#xff0c;可以執行 cd testdir 進入testdir目錄。2、創建目錄命令&#…

eclipse安卓工程的構建、配置連接模擬器、安卓工程結構介紹

安卓工程構建及第一個安卓程序運行&#xff1a; 首先新建安卓工程&#xff1a; 然后填寫APP信息&#xff0c;下面的包名一般都是公司域名的倒寫&#xff0c;包名中不能有中文&#xff0c;否則會報錯。 然后配置一些安卓app的選項 有關app啟動的圖標&#xff08;就像QQ的企鵝一…

android eclipse 導入idea項目

將以下代碼復制到.project中 <?xml version"1.0" encoding"UTF-8"?> <projectDescription> <name>IDEATest</name> <comment/> <projects/> <buildSpec> <buildCommand> <name>com.android.ide.…

Linux中su和sudo的用法整理

一、為什么會有su和sudo命令&#xff1f;主要是因為在實際工作當中需要在Linux不同用戶之間進行切換。root用戶權限最高很多時候需要root用戶才能執行一些關鍵命令。所以需要臨時切換為root用戶。工作完成后&#xff0c;考慮到系統的安全性避免誤操作需要切換為普通用戶。su和s…

codeforces 650B - Image Preview

題意&#xff1a;給你n個照片&#xff0c;從第一個照片開始看&#xff0c;如果一張照片是w&#xff0c;那么要花費b時間去反轉他&#xff0c;否則不用反轉&#xff0c;看一張從來沒看過的照片要1時間&#xff0c; 從一張滑動到另一張要a時間。如果一張照片看過&#xff0c;則不…

asp js單步調試_如何使用Chrome的控制臺高效的調試Javascript代碼?

引言在我們的日常開發中我們常常會遇到JavaScript的調試問題&#xff0c;而我們解決問題的傳統解決方案就是使用大量的console.log或者console對象的其他方法&#xff0c;這會給我們帶來很多不便&#xff0c;特別是遇到復雜問題的時候&#xff0c;可能會出現大量的console.log&…

安卓App的啟動過程、安卓布局分類及布局和頁面的關系

Android App 啟動流程: 當你想要啟動一個app時&#xff0c;首先得點擊該app桌面圖標。那點擊圖標時到底發生了什么呢&#xff1f;先看個理論知識 .Launcher: launcher其實就是一個app&#xff0c;從功能上說&#xff0c;是對手機上其他app的一個管理和啟動&#xff0c;從代碼…

Linux文件默認權限和umask筆記

關于Linux文件默認權限的問題&#xff0c;可以實際先嘗試一下如下命令&#xff1a;root用戶登錄[rootlocalhost test]# touch file1[rootlocalhost test]# ls-l file1-rw-r--r-- 1 root root 0 May 5 08:28 file1 #輸出結果 對應的數字權限 644[rootlocalhost test]# touch fi…

Android相對布局(RelativeLayout)常用屬性、練習使用按鍵、文本框等控件、線性布局(LinearLayout)屬性

RelativeLayout中子控件常用屬性&#xff1a; 子控件默認是從父控件的左上角開始排列的 相對于父控件 android:layout_alignParentTop"true" 和父控件的頂部對齊android:layout_alignParentBottom"true" 和父控件的底部對齊android:layout_alignPar…

Seata AT模式

基本思路 先決條件 支持本地ACID事務的關系數據庫。通過JDBC訪問數據庫的Java應用程序。 整體機制 從兩個階段提交協議的演變&#xff1a; 階段1&#xff1a;在同一本地事務中提交業務數據和回滾日志&#xff0c;然后釋放本地鎖和連接資源。階段2&#xff1a; 對于提交情況…