1. 程式人生 > >tomcat原理及安裝及反向代理、會話保持、session叢集和session共享伺服器的實現(一)

tomcat原理及安裝及反向代理、會話保持、session叢集和session共享伺服器的實現(一)

JDKjava development kit)叫做java開發工具包,是整個java的核心,包括JREjava runtime environment,叫做java執行是環境),一堆java的工具和java的基本類庫。

JDK包含的元件包括:

       javac:編譯器,將源程式轉換成位元組碼,即。java程式轉換成。class檔案,然後才能java虛擬機器上執行。class檔案

       jar:打包工具,將相關的類檔案打包成一個檔案

       javadoc:文件生成器,從原始碼註釋中提取文件

       jdbdebuger,差錯工具

       java:執行編譯後的

java程式(.clsss字尾的檔案,java檔案在編譯後生成。class檔案,叫做位元組碼檔案)

       appletviewer:小應用程式瀏覽器,一種執行html檔案上的java小程式瀏覽器

       javapjava的反編譯器,將位元組碼反編譯為java程式

       jconsolejava進行系統除錯和監控的工具

JVM架構jvm叫做java虛擬機器,是通過軟體模擬的方式模擬出來的的能夠執行java程式的虛擬機器器,是java程式碼執行的平臺,java的源程式執行在jvm上時需要進行系統呼叫是由jvm自動執行,因此實現了程式碼和真實機器的隔離,所以java程式可誇平臺指的就是隻要系統上執行一個

jvmjava源程式就能夠在jvm上執行,而與作業系統的相關的操作是由jvm自己定製的,而不需要程式設計師考慮。


JVM的核心組成部分:

1class loader,叫做類載入器,用來載入java基礎類和自定義的類

2、執行引擎

方法區:執行緒共享的,用於存放被虛擬機器載入的類資訊、常量、靜態變數等。或稱為永久代,

堆:堆記憶體是共享的,java堆是對java所管理的記憶體中最大的一部分,也是GC管理的主要區域,主流的演算法都基於分代方式進行收集,如新生代和老年代。

java棧:執行緒私有的,用來存放執行緒自己的區域性變數等資訊

pc暫存器 program counter register,也叫程式計數器,用來記錄程式程式碼執行時的指標所指向的地址空間,執行緒獨佔的記憶體空間。

本地方法棧:native

GC:叫做垃圾回收器,是面向堆來工作的。

Jave EE標準則包含了一組適用於建立企業級Web應用程式的APIJave EE建立在Java SE的基礎上,並依賴於Java SE才能正常工作。當然,任何級別的應用程式均能從Java EE中獲益,但Jave EE卻更適合解決大型軟體系統設計中的問題。

JAVA 2 EE包含多個獨立的APIServletJSP就是其中的兩個,而JAVA EE中著名的API中還包含如下的幾個:

JAVA 2 EE APIs:

EJB(Enterprise JavaBeans)JAVA相關的諸多高階功能的實現,如RMIRemote MethodInvocation), 物件/關係對映,跨越多個數據源的分散式事務等;

JMS(Java Message Service):高效能非同步訊息服務,實現JAVA EE應用程式與非JAVA程式的“透明”通訊;

JMXJava Management Extensions):在程式執行時對其進行互動式監控和管理的機制;

JTAJava Transaction API):允許應用程式在自身的一個或多個元件中平滑地處理錯誤的機制;

JavaMail:通過工業標準的POP/SMTP/IMAP協議傳送和接收郵件的機制;java 2 EE 包括的技術:servletJSP ,EJB ,JMX javamail

applet:小應用程式,客戶端程式

servlet:伺服器應用程式,稱之為 servlet contaier

    客戶端瀏覽器只能理解html語言,但是java程式在sever伺服器執行後的結果沒有html的標籤等,為了輸出這些html的標籤,則必須使用java程式輸出,如println<h1>,這種方式就是html標籤要硬編碼在應用程式中,為簡化這種問題,出現了JSP語言,能夠類似於php語言可以直接巢狀在html標籤中,在程式執行時,java會自動將這些html標籤硬編碼為java語言。也可以將jsp看做java中的一個特殊的類,能夠實現自動將html格式的標籤轉換為java程式碼的輸出格式,然後在執行java程式。

html標籤要硬編碼在應用程式中,為了解決這種問題,出現了JSP語言,這就類似於php的語法了。使得java程式碼能夠直接內嵌在html程式碼中,簡化了程式的

jdk只提供了java 2 EE的標準,而沒有提供jsp的功能,

jsp能夠利用jasper在前端將htmljava互相巢狀的程式碼翻譯成servlet程式(全java程式碼個格式),然後在JVM上執行。

jsp程式執行的過程:

       jsp程式jasper engine翻譯成.java程式(也就是servlet能夠識別的程式碼)---然後由javac將以.java結尾的程式檔案編譯成.class檔案(位元組碼程式),最後由java真正執行位元組碼程式,因此一個能夠執行jsp程式的架構平臺必須包括JDK, SERVLET,JSP,而這種平臺稱之為web container

web container:要包括JDK, ServletJSP

要部署jsp應用程式伺服器,前提必須部署JDK,然後在部署servletjsp,而JDK軟體中只有jdk元件,servletjsp的元件需要其他軟體來提供,能夠實現這些的功能的web container有:

商業實現:

websphereIBM

weblogic(原屬於BEA,後被oracle收購)

oc4j

glassfish

geronimo

JOnAS

JBoos

開源實現:

Tomcat

jetty

resin

JDK的提供者有:

                            sun開發的jdk,開源軟體openJDKIBM開發的jdk等。

       tomcat僅實現了jspservlet的功能,而沒有實現java EE的其他功能

tomcat的核心元件:

1catalina:提供servlet container容器

2coyote:是一個http connection連結器

3Jasper jsp engine,負責將jsp檔案中的html語言標籤轉換為能夠被servle識別的java格式程式碼。

tomcat的主配置檔案中各元件包括

1、伺服器(server)Tomcat的一個例項,通常一個JVM只能包含一個Tomcat例項;因此,一臺物理伺服器上可以在啟動多個JVM的情況下在每一個JVM中啟動一個Tomcat例項,每個例項分屬於一個獨立的管理埠。這是一個頂級元件。

2、服務(service):一個服務元件通常包含一個引擎和與此引擎相關聯的一個或多個聯結器。給服務命名可以方便管理員在日誌檔案中識別不同服務產生的日誌。一個server可以包含多個service元件,但通常情下只為一個service指派一個server

聯結器類元件:

3、聯結器(connectors):負責連線客戶端(可以是瀏覽器或Web伺服器)請求至Servlet容器內的Web應用程式,通常指的是接收客戶發來請求的位置及伺服器端分配的埠。預設埠通常是HTTP協議的8080,管理員也可以根據自己的需要改變此埠。一個引擎可以配置多個聯結器,但這些聯結器必須使用不同的埠。預設的聯結器是基於HTTP/1.1Coyote。同時,Tomcat也支援AJPJServJK2聯結器。

容器類元件:

4、引擎(Engine):引擎通是指處理請求的Servlet引擎元件,即Catalina Servlet引擎,它檢查每一個請求的HTTP首部資訊以辨別此請求應該發往哪個hostcontext,並將請求處理後的結果返回的相應的客戶端。嚴格意義上來說,容器不必非得通過引擎來實現,它也可以是隻是一個容器。如果Tomcat被配置成為獨立伺服器,預設引擎就是已經定義好的引擎。而如果Tomcat被配置為Apache Web伺服器的提供Servlet功能的後端,預設引擎將被忽略,因為Web伺服器自身就能確定將使用者請求發往何處。一個引擎可以包含多個host元件。

5、主機(Host):主機元件類似於Apache中的虛擬主機,但在Tomcat中只支援基於FQDN的“虛擬主機”。一個引擎至少要包含一個主機元件。

6、上下文(Context)Context元件是最內層次的元件,它表示Web應用程式本身。配置一個Context最主要的是指定Web應用程式的根目錄,以便Servlet容器能夠將使用者請求發往正確的位置。Context元件也可包含自定義的錯誤頁,以實現在使用者訪問發生錯誤時提供友好的提示資訊。

被巢狀類(nested)元件:

這類元件通常包含於容器類元件中以提供具有管理功能的服務,它們不能包含其它元件,但有些卻可以由不同層次的容器各自配置。

7、閥門(Valve):用來攔截請求並在將其轉至目標之前進行某種處理操作,類似於Servlet規範中定義的過濾器。Valve可以定義在任何容器類的元件中。Valve常被用來記錄客戶端請求、客戶端IP地址和伺服器等資訊,這種處理技術通常被稱作請求轉儲(request dumping)。請求轉儲valve記錄請求客戶端請求資料包中的HTTP首部資訊和cookie資訊檔案中,響應轉儲valve則記錄響應資料包首部資訊和cookie資訊至檔案中。

8、日誌記錄器(Logger):用於記錄元件內部的狀態資訊,可被用於除Context之外的任何容器中。日誌記錄的功能可被繼承,因此,一個引擎級別的Logger將會記錄引擎內部所有元件相關的資訊,除非某內部元件定義了自己的Logger元件。

9、領域(Realm):用於使用者的認證和授權;在配置一個應用程式時,管理員可以為每個資源或資源組定義角色及許可權,而這些訪問控制功能的生效需要通過Realm來實現。Realm的認證可以基於文字檔案、資料庫表、LDAP服務等來實現。Realm的效用會遍及整個引擎或頂級容器,因此,一個容器內的所有應用程式將共享使用者資源。同時,Realm可以被其所在元件的子元件繼承,也可以被子元件中定義的Realm所覆蓋。

引擎(Engine):引擎是指處理請求的Servlet引擎元件,即Catalina Servlet引擎,它從HTTPconnector接收請求並響應請求。它檢查每一個請求的HTTP首部資訊以辨別此請求應該發往哪個hostcontext,並將請求處理後的結果返回的相應的客戶端。嚴格意義上來說,容器不必非得通過引擎來實現,它也可以是隻是一個容器。如果Tomcat被配置成為獨立伺服器,預設引擎就是已經定義好的引擎。而如果Tomcat被配置為Apache Web伺服器的提供Servlet功能的後端,預設引擎將被忽略,因為Web伺服器自身就能確定將使用者請求發往何處。一個引擎可以包含多個host元件。


下面是安裝tomcat的兩種方法和基於httpdnginx做反向代理tomcat以及實現tomcat負載均衡和session繫結。

第一種方法:

手動安裝jdk

[[email protected] src]# rpm -ivhjdk-7u79-linux-x64.rpm


jdk安裝後的檔案,

相關推薦

tomcat原理安裝反向代理會話保持session叢集session共享伺服器實現

JDK(java development kit)叫做java開發工具包,是整個java的核心,包括JRE(java runtime environment,叫做java執行是環境),一堆java的工具和java的基本類庫。 JDK包含的元件包括:        java

HTTP 代理原理實現

文章目錄 普通代理 隧道代理 提醒:本文最後更新於 1097 天前,文中所描述的資訊可能已發生改變,請謹慎使用。 Web 代理是一種存在於網路中間的實體,提供各式各樣的功能。現代網路系統中,Web 代理無處不在。我之前有關 HTTP 的博文中,多次提到了代理對 HTTP 請

寫程式學ML:樸素貝葉斯演算法原理實現

[題外話]近期申請了一個微信公眾號:平凡程式人生。有興趣的朋友可以關注,那裡將會涉及更多更新機器學習、OpenCL+OpenCV以及影象處理方面的文章。 1、樸素貝葉斯演算法的原理 樸素貝葉斯法是基於貝葉斯定理與特徵條件獨立假設的分類方法。 和決策樹模型相比,樸素貝葉斯

寫程式學ML:Logistic迴歸演算法原理實現

[題外話]近期申請了一個微信公眾號:平凡程式人生。有興趣的朋友可以關注,那裡將會涉及更多更新機器學習、OpenCL+OpenCV以及影象處理方面的文章。 1、Logistic迴歸演算法的原理 假設現在有一些資料點,我們用一條直線對這些點進行擬合(該線稱為最佳擬合直線),這個

計算機網路--TCP的可靠傳輸原理實現

可靠傳輸的工作原理 TCP傳送的報文段是交給IP層傳送的。但IP層只能提供盡最大努力服務。所以TCP必須採用適當的措施才能使兩個運輸層之間的通訊變得可靠。 理想的傳輸條件: (1)傳輸通道不產生差錯。 (2)不管傳送方以多快的速度傳送資料,接收方總是來得及處理收到的資料。

Android開發,MapBox的使用部分功能實現----- 初始化標記定位styleurl

近期,應公司要求,開始接觸MapBox For Android的開發。 經過初步的接觸,發現MapBox與我之前使用的Arcgis有很多不同,相比起來,MapBox更清潔,更輕便,也更容易使用,但是相對的,MapBox相對於Arcgis缺少了很多的功能實現,許多的東西都需要

實現自定義查詢的數據庫設計實現

bre 名稱 審批流程 work 數據庫名 需要 自定義查詢 perm 枚舉 需求 先說一下需求:實現用戶自定義的查詢,用戶可以自定義要查詢的列、自定義條件條件、自定義排序。除了查詢使用外,還可以使用於各個需要根據條件進行約束的業務,如權限; 本設計和實現,很大部分是通過數

ReduxReact-Redux的實現:中間件的原理applyMiddlewareThunk的實現

調用 map 介紹 typeof 觀察者 ets 返回 async 基本原理 現在我們的Redux和React-Redux已經基本實現了,在Redux中,觸發一個action,reducer立即就能算出相應的state,如果我要過一會才讓reducer計算state呢怎麽辦

KVM虛擬化的四種簡單網絡模型介紹實現

_for only 應該 code eth tun x86_64 信息 dock KVM中的四種簡單網絡模型,分別如下:1、隔離模型:虛擬機之間組建網絡,該模式無法與宿主機通信,無法與其他網絡通信,相當於虛擬機只是連接到一臺交換機上。2、路由模型:相當於虛擬機連接到一臺路由

spring-boot-admin原始碼分析單機監控spring-boot-monitor的實現

SpringBootMonitor spring-boot-admin原始碼分析及單機監控spring-boot-monitor的實現(一) spring-boot-admin原始碼分析及單機監控spring-boot-monitor的實現(二) spring-boot-ad

基於以太坊的DPOS實現原始碼測試執行

原始碼 目錄 測試執行 安裝環境 開始之前請先確認已經安裝配置好Go語言環境,安裝包可以從https://golang.org下載,如果連不Go的官網請自行百度下安裝包。gttc現在支援Go版本為 1.9.x、1.10.x 及1.11.x。 $ go ver

影象處理基礎OpenCV實現

最近學習數字影象處理基礎及OpenCV實現這本書,寫一點東西記錄所學的內容。。 一、 開啟影象與視訊 開啟影象 用到了OpenCV中的結構體IplImage, 函式IplImage* cvLoadImage( const char* filename, int

VC++對話方塊程式列印列印預覽的實現

張明奇(卡哥)註釋:成功版本         MFC文件/檢視的應用程式,嚮導給了列印及列印預覽的標準支援。使這類應用程式列印及列印預覽工作得以簡化。另一類對話方塊程式卻沒有相應支援,從MFC列印及列印預覽的標準支援

資料分析基本技巧python實現

該文總結資料分析常用手法,在程式碼中用註釋的形式給出必要的闡述。 需要安裝包:numpy、scipy、numpy、pandas、sklearn 檢查資料是否符合某項分佈 檢查資料是否符合正態分佈 #檢查資料是否符合正態分佈 ##構建正態分佈資料 In [1]: impor

棧的順序儲存實現

繼續學習資料結構,今天我們來學習棧的相關知識。其實學習沒有捷徑,如果抱著一種吃快餐的態度進行學習,那是學不到東西,各種技術都是淺嘗輒止,那註定學習是不會有太大的效果。不知道你們討不討厭 某某語言從入門到精通的這類書籍?我在想,有這麼牛逼麼,一本書直接都從入門到精通了,只不是

UNIX管道應用Shell實現-主體框架

作業系統的第一個大作業是做一個簡單的Shell,實現重定向、管道等功能。奮戰了好幾天終於基本搞定了= = 基本要求 Shell能夠解析的命令列法如下: 帶引數的程式執行功能。 program arg1 arg2 … argN 重

學習使用DockerDocker-ComposeRancher搭建部署Pipeline

docker 部署 rancher 雲 微服務 說明 這篇文章是一系列文章的第一篇,在這一系列文章中,我們想要分享我們如何使用Docker、Docker-Compose和Rancher完成容器部署工作流的故事。我們想帶你從頭開始走過pipeline的革命歷程,重點指出我們這一路上遇到的

jquery中appendprepend, beforeafter方法的區別

mod serve com oos 兄弟節點 sha pos 插入 5% 原文:http://blog.csdn.net/woosido123/article/details/64439490 在 jquery中append() 與 prepend()是在元素內插

PHPMySQLJavaScript學習手冊筆記

本地 後端 驗證 css 考題 php 語言 html oot 第一章思考題1.創建一個完全動態網頁至少需要哪四大要素?服務器 動態語言php js 數據庫2.html代表超文本xxx3.因為sql分支用sql語言4.php用在服務器端 處理後端任務 js用在客戶端 本地驗

[Xcode10 實際操作]博主領進門-(9)Xcode左側介面介紹

本文將演示Xcode的左側操作介面。 專案的目錄結構: 應用代理檔案【AppDelegate.swift】 應用代理檔案時系統執行本應用的委託,裡面定義瞭如程式的進入與退出、裝置方向旋轉等眾多全域性方法。 檢視控制器【ViewController.swift】 檢視控制器可以建立和管理檢視,也可以監