Tomcat配置(一):背景知識和安裝tomcat

来源:http://www.cnblogs.com/f-ck-need-u/archive/2017/10/23/7717488.html
-Advertisement-
Play Games

本文目錄:1. 背景知識 1.1 java和jdk概念 1.2 jsp、servlet是什麼 1.3 web伺服器、web容器、應用程式伺服器 1.4 tomcat體繫結構2. 安裝tomcat 2.1 安裝jdk 2.2 安裝tomcat 1. 基礎背景知識 1.1 java和jdk概念 無論是何 ...


本文目錄:
1. 背景知識
 1.1 java和jdk概念
 1.2 jsp、servlet是什麼
 1.3 web伺服器、web容器、應用程式伺服器
 1.4 tomcat體繫結構
2. 安裝tomcat
 2.1 安裝jdk
 2.2 安裝tomcat

1. 基礎背景知識

1.1 java和jdk概念

無論是何種程式,要能在電腦上運行,必須能轉換為二進位的機器語言才能和硬體進行交互,在機器語言的上層是彙編語言,再上層是C/C++這樣較底層的語言,由於它們嚴重依賴於平臺架構,所有一般只能運行在程式源代碼已編譯的機器上,可移植性比較差。

Java是一種面向對象的語言,它的層次比C更高一點,層次指的是離硬體更遠一點。它將寫好的程式文件(.java)通過java編譯器javac編譯成位元組碼類型的class文件(.class),在編譯過程中涉及詞法分析、語法分析、語義分析、位元組碼生成等過程,最終生成位元組碼的class文件。class文件是Java的類文件,是編譯成功後的位元組碼文件,位元組碼由Java虛擬機JVM解釋執行,它將每一條位元組碼送給解釋器,再翻譯成機器語言,從而在特定的機器上運行。Java通過JVM的方式實現了一次編譯到處運行的功能。

即:

源碼XXX.java-->javac編譯器-->位元組碼XXX.class-->JVM-->機器語言(依賴於不同平臺)-->執行

JRE(Java Runtime Environment)是包含了JVM和其他一些簡單功能的JAVA運行環境,它適用於只運行java程式時。JDK(Java Development Kit)比JRE包含了更多東西,它除了能作為JAVA運行環境,還提供了很多用於開發的工具,所以它適用於開發程式時使用。

JAVA SE是java開發標準版,裡面有JDK,Java EE是企業版,本質上ee只是比se多提供了幾個類庫而已。

1.2 jsp、servlet是什麼

在web應用程式上,早期Java的實現方式是伺服器端放置應用程式,客戶端訪問時將其下載到客戶端本地並執行,這樣不僅不安全,而且要求客戶有java運行環境,這種實現方式是applet。

與applet相對的是servlet,但它是服務端程式。後來,java將應用程式放在伺服器端,客戶端請求此應用程式時,服務端通過servlet類庫分析http協議,將請求的應用程式在服務端執行,然後將結果組織起來返回給客戶端,但此時servlet能分析的http協議非常簡單,且和html的組織方式非常不友好,它要求java程式員首先得懂html開發,於是後來出現了JSP類庫。

JSP可以簡單的將java代碼嵌入在html文檔中,它們能夠很友好地結合,結合後的文檔類型為.jsp文件。當客戶端請求應用程式資源時,JSP類庫負責解析.jsp文件中的jsp部分並通過jasper組件將其翻譯成servlet代碼,然後再交由servlet來編譯並交給JVM來執行實際上,jsp和servlet本質上是一樣的,jsp類只不過是繼承於servlet類並添加了一些和html友好結合的特性,最終它還是要翻譯成servlet代碼。

事實上,JSP是Servlet的一種特殊形式,每個JSP頁面就是一個Servlet實例,Servlet再負責響應用戶請求。JSP其實也是Servlet的一種簡化,使用JSP時,其實還是使用Servlet,因為Web應用中的每個JSP頁面都會由Servlet容器生成對應的Servlet。對於Tomcat而言,JSP頁面生成的Servlet放在work路徑對應的Web應用下。

1.3 web伺服器、web容器、應用程式伺服器

web伺服器用於提供web服務,要求能解析http協議,通常認為提供靜態內容的伺服器是web伺服器。如apache httpd、nginx等。

對於java而言,web容器是能提供servlet容器的伺服器,它們是等價的概念。常見的有tomcat、weblogic、websphere、jboss。其中tomcat只提供servlet容器,它們在功能上是等價的。除tomcat外,後面3種web容器還提供除servlet容器外的EJB容器,專用於大型分散式程式開發。

應用程式伺服器是用於提供應用服務的伺服器。這是業務邏輯上的概念劃分。更具體一點的說,它提供WEB容器(servlet容器)、EJB容器以及其他功能。

它們之間的關係和功能大致如下:web伺服器提供web服務,主要處理http請求並響應給客戶端,並可以將動態請求委托給其他程式,如cgi腳本、jsp腳本、asp腳本等進行處理;web容器即servlet容器主要負責處理基於http請求的動態jsp內容;EJB容器主要提供和後端資料庫服務、其他服務進行交互的功能;應用伺服器通常來說包括servlet容器或EJB容器,它們都運行於支持Java的應用伺服器中,因此tomcat/weblogic/websphere/jboss都算是應用伺服器。

1.4 tomcat體繫結構

tomcat是jdk+servlet(嚴格地說是+jsp)實現的精簡版的java ee,由於它只在jdk的基礎上附加了jsp和servlet類庫,所以它的應用範圍主要是web應用。tomcat項目目前由apache軟體基金會維護。

它是一種應用程式伺服器,只提供servlet容器,同時還提供apache解析靜態HTML,只不過之它的處理能力不如獨立的apache伺服器。類似的應用程式服務還有websphere/weblogic/jetty/resin/jboss等,它們都是在jdk基礎上附加各種類庫實現不同程度的java ee(tomcat=jdk+servlet)。

對於tomcat來說,它高度模塊化,通過各個組件實現各種功能。它的體繫結構如下圖所示:

其中:

  • server是頂級類,一個server算是一個tomcat實例,在此層次中可定義tomcat服務的監聽埠。
  • service是server下的子組件,用於封裝綁定connector和containor,併為它們提供一個名稱屬性。有了service就可以提供相關的服務,如監聽TCP連接請求、處理http請求。註意server是管理整個tomcat實例的層次,它和提供服務沒有關係。
  • connector是連接器,定義http協議(預設)以及該協議的監聽埠。連接器用於接收客戶端請求並將containor處理的數據返回給客戶端
  • containor稱為容器,它和connector連接器進行綁定。該容器內有4個子容器,包括:engine容器、host容器、context容器、Wrapper容器。容器用於分析、處理請求,並構建響應給connector以發送給客戶端。它和connector是tomcat的心臟組件。
  • engine容器定義servlet引擎,用於定義引擎的名稱、預設的虛擬主機。引擎用於分析http請求並將請求轉發給對應的虛擬主機
  • host容器用於定義虛擬主機。
  • context容器用於定義webapp,一個context定義一個webapp。它是真正管理servlet容器的層次。
  • wrapper容器對應的是真正的servlet容器,一個wrapper代表一個servlet,它負責管理一個Servlet,包括的Servlet的裝載、初始化、執行以及資源回收。Wrapper是最底層的容器,一個context只能包含一個wrapper。在配置文件中,無法配置該容器的屬性。

還有一些其他組件,如session管理組件、JMX等。

一個server可以有多個service。一個service可以有多個connector和唯一的containor。containor是容器類,從containor層次開始,真正進入servlet容器相關的過程它包含了唯一的engine容器,engine容器中包含了一個或多個host容器,host容器中包含了一個或多個context容器,context容器中包含了唯一的wrapper。它們的組織結構大致如下:

<server>
    <service>
        <connector />
        <engine>
            <host>
                <context />
                <context />
            </host>
            <host>
                <context />
            </host>
        </engine>
    </service>

    <service>
         ......
    </service>
</server>

2. 安裝tomcat

tomcat依賴於jdk,所以需要先安裝jdk。tomcat和jdk版本之間存在對應關係,應該考慮好要安裝哪個版本的jdk以及哪個版本的tomcat。官方給出的對應關係網址為:https://tomcat.apache.org/whichversion.html。以下是到tomcat 9.x版本和jdk的對應表。

本文jdk以jdk-8u131為例,表示版本為8的第131次更新,tomcat以apache-tomcat-8.5.14為例。

2.1 安裝jdk

下載地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html

以rpm包的為例。

shell> yum localinstall -y jdk-8u131-linux-x64.rpm

安裝路徑為/usr/java。在該路徑有3個文件,其中兩個是版本號的軟鏈接。

shell> ll /usr/java
total 4
lrwxrwxrwx 1 root root   16 May  4 22:54 default -> /usr/java/latest
drwxr-xr-x 9 root root 4096 May  4 22:54 jdk1.8.0_131
lrwxrwxrwx 1 root root   22 May  4 22:54 latest -> /usr/java/jdk1.8.0_131

通過這種軟鏈接方式,以後有新版jdk要安裝,直接改latest的鏈接對象即可。

在安裝目錄的Bin目錄下,有很多可執行程式,包括javac(java編譯器),java(java主程式,其中包括JVM),jps(查看當前java進程及pid,所以可以查看java進程數)。

shell> ls latest/bin/
appletviewer  idlj  java  javafxpackager  javapackager  jcmd  jdb  jinfo  jmc
jrunscript  jstat  keytool  pack200  rmid  serialver  unpack200  xjc ControlPanel
jar  javac  javah  java-rmi.cgi  jconsole  jdeps  jjs  jmc.ini  jsadebugd  jstatd
native2ascii  policytool  rmiregistry  servertool  wsgen extcheck  jarsigner
javadoc  javap  javaws  jcontrol  jhat  jmap  jps  jstack  jvisualvm  orbd  rmic
schemagen  tnameserv  wsimport

執行java -version可以驗證jdk工具是否安裝成功。

[root@xuexi jdk1.8.0_131]# bin/java -version
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)

然後再設置JAVA_HOME環境變數並導出java程式所在目錄的PATH環境變數。

shell> echo 'export JAVA_HOME=/usr/java/latest' > /etc/profile.d/jdk.sh
shell> echo 'export PATH=$JAVA_HOME/bin:$PATH' >> /etc/profile.d/jdk.sh
shell> . /etc/profile.d/jdk.sh

shell> java -version
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)

2.2 安裝tomcat

直接解壓即可。

shell> tar xf apache-tomcat-8.5.14.tar.gz -C /usr/local/
shell> ln -s /usr/local/apache-tomcat-8.5.14 /usr/local/tomcat

安裝完後,有以下幾個文件和目錄。

shell> cd /usr/local/tomcat

[root@xuexi tomcat]# ll -d */
drwxr-x--- 2 root root 4096 May  4 23:36 bin/
drwx------ 2 root root 4096 Apr 13 20:58 conf/
drwxr-x--- 2 root root 4096 May  4 23:36 lib/
drwxr-x--- 2 root root 4096 Apr 13 20:55 logs/
drwxr-x--- 2 root root 4096 May  4 23:36 temp/
drwxr-x--- 7 root root 4096 Apr 13 20:56 webapps/
drwxr-x--- 2 root root 4096 Apr 13 20:55 work/

logs目錄是日誌目錄。temp是臨時目錄。webapps是存放web程式的根目錄。work目錄是存放編譯後生成的class文件的目錄。bin目錄下有很多腳本文件,有.sh腳本,也有.bat腳本。

[root@xuexi tomcat]# ls bin/
bootstrap.jar  catalina.sh         commons-daemon.jar            configtest.bat  daemon.sh   digest.sh         setclasspath.sh  shutdown.sh  startup.sh       tomcat-native.tar.gz  tool-wrapper.sh  version.sh
catalina.bat   catalina-tasks.xml  commons-daemon-native.tar.gz  configtest.sh   digest.bat  setclasspath.bat  shutdown.bat     startup.bat  tomcat-juli.jar  tool-wrapper.bat      version.bat

其中:

  • catalina.sh類似於SysV服務管理腳本,支持stop、start和configtest,但不支持restart和reload,如catalina.sh start
  • startup.sh等價於catalina.sh start
  • shudown.sh等價於catalina.sh stop
  • configtest.sh等價於catalina.sh configtest
  • daemon.sh是通過指定各種PATH參數將tomcat以daemon的方式運行,要指定的參數path較多。catalina.sh執行start也是在後臺運行tomcat的,所以沒有必要使用此腳本來實現daemon模式的tomcat。

在安裝目錄下的conf目錄下有幾個配置xml格式的配置文件。

[root@xuexi tomcat]# ls conf/
catalina.policy  catalina.properties  context.xml  jaspic-providers.xml  jaspic-providers.xsd  logging.properties  server.xml  tomcat-users.xml  tomcat-users.xsd  web.xml

其中server.xml是主配置文件,tomcat-users.xml是狀態監控和gui界面管理的身份認證配置文件,後面會有相關配置說明,web.xml是為webapp提供預設屬性配置的文件,在tomcat啟動時會先載入webapp屬性的自定義配置文件/WEB-INF/web.xml,然後再載入此文件提供預設屬性,一般此文件都不用任何修改,要定義屬性時修改/WEB-INF/web.xml即可。對於此處的web.xml,唯一需要知道的是其內設置了主頁文件名。

[root@xuexi tomcat]# grep -C 1 index conf/web.xml 
    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>

安裝後,設置環境變數。

echo "export CATALINA_HOME=/usr/local/tomcat" > /etc/profile.d/tomcat.sh
echo 'export PATH=$CATALINA_HOME/bin:$PATH' >> /etc/profile.d/tomcat.sh
. /etc/profile.d/tomcat.sh

執行bin目錄下的version.sh檢查PATH環境變數是否正確。

[root@xuexi bin]# version.sh
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/java/latest
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Server version: Apache Tomcat/8.5.14
Server built:   Apr 13 2017 12:55:45 UTC
Server number:  8.5.14.0
OS Name:        Linux
OS Version:     2.6.32-504.el6.x86_64
Architecture:   amd64
JVM Version:    1.8.0_131-b11
JVM Vendor:     Oracle Corporation

最後啟動tomcat。

[root@xuexi tomcat]# catalina.sh start
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/java/latest
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.

[root@xuexi tomcat]# netstat -tnlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address      State       PID/Program name
tcp        0      0 0.0.0.0:22              0.0.0.0:*            LISTEN      1879/sshd       
tcp        0      0 127.0.0.1:25            0.0.0.0:*            LISTEN      1415/master     
tcp        0      0 :::22                   :::*                 LISTEN      1879/sshd       
tcp        0      0 ::1:25                  :::*                 LISTEN      1415/master     
tcp        0      0 ::ffff:127.0.0.1:8005   :::*                 LISTEN      15212/java      
tcp        0      0 :::8009                 :::*                 LISTEN      15212/java      
tcp        0      0 :::8080                 :::*                 LISTEN      15212/java     

[root@xuexi tomcat]# curl -I http://localhost:8080
HTTP/1.1 200 
Content-Type: text/html;charset=UTF-8
Transfer-Encoding: chunked
Date: Tue, 17 Oct 2017 16:49:10 GMT

 

回到Linux系列文章大綱:http://www.cnblogs.com/f-ck-need-u/p/7048359.html

回到網站架構系列文章大綱:http://www.cnblogs.com/f-ck-need-u/p/7576137.html

回到資料庫系列文章大綱:http://www.cnblogs.com/f-ck-need-u/p/7586194.html

轉載請註明出處:http://www.cnblogs.com/f-ck-need-u/p/7717488.html

註:若您覺得這篇文章還不錯請點擊右下角推薦,您的支持能激發作者更大的寫作熱情,非常感謝!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 瞭解S3C2410/S3C2440和觸摸屏的結構; 瞭解電阻觸摸屏的工作原理和等效電路圖; 瞭解S3C2410/S3C2440觸摸屏控制器的多種工作模式; 掌握S3C2410/S3C2440 ADC和觸摸屏的編程方法; ...
  • 一直以為自己linux還說的過去,事實上已經跟不上日新月異的應用需要了。 現成文檔都沒法看,錯太多。然而畢竟是多年積累,整理一個準確的文檔還是能做到的。 本機ip設置: # static interfaceauto eth0iface eth0 inet staticaddress 192.168. ...
  • 本來是計劃對postfix做一個全系列的安裝文檔的,不過在查某個知識點的時候,偶然找到一個已經寫好的postfix全系列文章,在全部看完之後驚為天人,我認為:總體上會比我要寫的要好,所以我準備借用一下拿來主義的案例,直接總結一個鏈接的目錄連接給大家參考。 我之前幾篇寫好的已經構建了一個基本的郵件系統 ...
  • 一、lvs介紹 LVS的英文全名為“Linux Virtual Server”,即Linux虛擬伺服器,是一個虛擬的四層交換器集群系統,根據目標地址和目標埠實現用戶請求轉發,本身不產生流量,只做用戶請求轉發,目前是負載均衡性能最好的集群系統。 二、lvs集群的類型: lvs nat:修改請求報文的 ...
  • 一、簡介 1、認識 Rsync(remote synchronize)是一個遠程數據同步工具,可通過LAN/WAN快速同步多台主機間的文件。Rsync使用所謂的“Rsync演算法”來使本地和遠 程兩個主機之間的文件達到同步,這個演算法只傳送兩個文件的不同部分,而不是每次都整份傳送,因此速度相當快 Rsy ...
  • 摘要:一個服務的配置文件非常重要,弄懂配置文件是熟練掌握服務的必要前提。 一、httpd-2.2常見文件介紹 (1)配置文件: 主配置文件儘量別改,改自己的子配置文件 /etc/httpd/conf/httpd.conf 主配置文件 /etc/httpd/conf.d/*.conf 自配置文件 檢查 ...
  • nohup命令 起因 ssh到機器上,然後執行某個程式,再登錄發現程式早就不運行了。 原因 ssh過去之後,執行的大部分命令(守護進程不會斷開),都是ssh進程的子進程,ssh斷開,命令自然會中斷 解決辦法 命令前面加nohup就可以了,比方說: 局限性 當再次ssh過去的時候程式可能在運行,但是無 ...
  • 兩個命令df 、du結合比較直觀 df -h 查看整台伺服器的硬碟使用情況 cd / 進入根目錄 du -sh * 查看每個文件夾的大小 du -lh --max-depth=1 : 查看當前目錄下一級子文件和子目錄占用的磁碟容量。 這樣的組合可以快速定位大文件和分區滿了 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...