前言:Tomcat是基於java研發的一個web容器,即web服務器,下面咱們先簡單介紹下Java
html
一 、Javajava
一、Java簡介
node
Java是由Sun Micorsystems公司於1995年5月推出的Java面向對象程序設計語言(簡稱Java語言)和Java平臺的總稱。用Java實現的HotJava瀏覽器使得Java被普遍應用起來。mysql
二、Java特色linux
Java語言是面向對象的語言,以數據爲中心來組織程序的,包括數據+方法,方法存放於類中web
自身具備API(應用程序編程接口)與ABI(應用程序二進制接口),強大的跨平臺能力;sql
動態站點(運行在服務器端和客戶端);apache
Java平臺兼容了大部分的操做系統,能夠只編譯一次,就能夠在各類系統中運行;編程
自帶GC(內存垃圾收集),無需再向C那樣使用時本身註冊一段內存,完了還要本身釋放。Java自身能夠自動的釋放內存,避免了內存釋放錯誤vim
多線程,適應於並行架構(多核心CPU),實現程序的高效執行
三、Java的組成部分
-- Java編程語言
-- Java類文件格式
-- Java虛擬機
-- Java應用程序接口(API)
四者關係:Java編程語言+Java API編寫出.java的源碼文件;
.java源碼文件通過Java編譯器Java Copmplier 進行編譯生成.class(字節碼文件)
.class類文件經過類文件加載器加載,在Java虛擬機(JVM)上運行,同時可能會須要 一些類庫
JVM :
Java虛擬機(JVM)的組成部分 #Java class loader 類加載器 #Java 執行引擎(即執行環境)
JRE :Java Running Environment Java運行環境-----面向桌面級通常用戶 由JVM(Hotspot)+ JavaSE API JDK: Java Development Kit Java開發工具包 Java程序設計語言 工具及工具API JRE
四、Java體系
Java SE : Standard Editon ,J2SE(之前稱呼) #支持面向桌面級應用,提供了完整的Java核心API Java EE:Enterprise Edition, J2EE(之前稱呼) #支持使用多層架構的企業應用(如EJB,CRM等),包含了Java SE,並額外提供了大量的企業級類庫 Java ME: Micro Edition, J2ME (之前稱呼)
Java EE 創建在Java SE 基礎之上,依賴Java SE工做
Java EE 更適合解決大型軟件系統設計中的問題,包含了多個API,Servlet和JSP就是其中兩個
Java EE 包含的其餘的APIs #EJB(Enterprise JavaBeans):JAVA相關的諸多高級功能的實現,如RMI(Remote Method Invocation), 對象/關係映射,跨越多個數據源的分佈式事務等; #JMS(Java Message Service):高性能異步消息服務,實現JAVA EE應用程序與非JAVA程序的「透明」通訊; #JMX(Java Management Extensions):在程序運行時對其進行交互式監控和管理的機制; #JTA(Java Transaction API):容許應用程序在自身的一個或多個組件中平滑地處理錯誤的機制; #JavaMail:經過工業標準的POP/SMTP/IMAP協議發送和接收郵件的機制; Java SE 包含的其餘APIs: #JNDI(Java Naming and Directory Interface):用於與LDAP服務交互的API; #JAXP(Java API for XML Processing):用於分析及轉換XML(基於XSLT實現);
5 Java 執行過程
#Java語言來編寫源代碼,把它編譯成Java Class文件,而後在Java VM中運行class文件;當編寫程序時,經過調用類(Java API)中的方法來訪問系統資源,而當程序運行時,它經過調用class文件中實現了Java API的方法也知足程序的Java API調用。Java VM和Java API一塊兒組成了一個「平臺「,全部Java程序都在其上編譯和運行,所以,它們有時也被稱做Java運行時環境。Java VM的主要任務是裝載class文件而且執行其中的字節碼。Java VM包含一個類裝載器(class loader),它能夠從程序和API裝載class文件;而Java API的類只在程序執行中須要時纔會被裝載。
六、Java EE 中的 Servlet 和 JSP
JSP是一種腳本語言,語法簡單,能夠方便的嵌入到HTML中 Servlet必須須要硬編碼進html中 #JSP 就是爲了簡化Java和Servlet的使用難度,同時經過擴展JSP標籤(TAG)提供網頁動態執行的能力 JSP與Servlet的關係 #當Web服務器(或Servlet引擎,應用服務器)支持JSP引擎時,JSP引擎會照着JSP的語法,將JSP文件轉換成Servlet代碼源文件,接着Servlet會被編譯成Java可執行字節碼(bytecode),並以通常的Servlet方式載入執行 *.jsp文件 -jasper引擎-> *.java文件 -javac編譯器-> .class (JVM運行)。
#在不修改JSP頁面的狀況下,除了第一個客戶訪問JSP頁面須要通過以上幾個步驟外,之後訪問該JSP頁面的客戶請求,直接發送給JSP對應的字節碼程序處理,並將處理結果返回給客戶,這種狀況下,JSP頁面既不須要啓動服務器,以便從新加載修改後的JSP頁面。
二 、Tomcat
一、簡介
Tomcat就是一個Java EE的不完整實現,是一個web容器,也能夠成爲web服務器。它只使用了Java EE附帶的兩個類庫-----Servlet與JSP,(關於這兩個類庫什麼關係上邊咱們已經詳述!),Tomcat服務器時Apache組織開發的一種JSP引擎,同時支持Servlet,自己就具備WEB服務器的功能,可是在WEB服務器方面Tomcat處理靜態的HTML頁面不如Apache迅速,也沒有Apache健壯,因此咱們通常將Tomcat與Apache配合使用,讓Apache處理靜態頁面的請求,Tomcat做爲專門的JSP引擎,提供JSP解析。
二、常見的web容器
商業版: Sun GlassFish Enterprise Server Sun Java System Web Server JBoss Enterprise Application Platform WebLogic Application Server Caucho's Resin Server WebSphere Application Server NetWeaver 非商業版: Apache Tomcat Apache Geronimo GlassFish JBoss Application Server Jetty
三、Tomcat的體系結構
頂級組件:位於配置層次的頂級,而且彼此有嚴格的對應滾戲(Server,Service)
鏈接器:鏈接客戶端(能夠是瀏覽器或web服務器)請求至Servlet容器
容器:包含一組其餘組件,如Engine、Host、Context
被嵌套的組件:位於一個容器當中,但不能包含其餘組件(如Realm 領域、valve過濾認證 logger記錄日誌)
頂級組件 #1 服務器(server):Tomcat的一個實例,一般一個JVM只能包含一個Tomcat實例;所以,一臺服務器上能夠在啓動多個JVM的狀況下每個JVM中啓動一個Tomcat實例,每一個實例分屬於一個獨立管理端口。這是一個頂級組件 #2 服務(service):一個服務組件一般包含一個引擎和此引擎相關聯的一個或多個鏈接器。給服務命名能夠方便管理員在日誌文件中識別不一樣服務產生的日誌。一個server能夠包含多個service組件,但一般狀況下只爲一個service指派一個server 鏈接器類組件: # 鏈接器(connectors):負責鏈接客戶端(能夠是瀏覽器或web服務器)請求至Servlet容器內的web應用程序,一般指的是接受客戶發來請求的位置及服務器段分配的端口。默認端口一般是HTTP協議的8080,管理員能夠根據本身的須要改變此端口。一個引擎能夠鏈接多個鏈接器,但這些鏈接器必須使用不一樣的端口。默認的鏈接器是HTTP/1.1的Coyote,同時Tomcat也支持AJP、JServ和JK2連機器。 容器類組件: #(1)引擎(Engine):一般指Cataliana Servlet引擎,它檢查每個請求的HTTP首部信息辨別此請求應該發往到哪一個host或context,並將請求處理後的結果發送給客戶端。一個引擎能夠包含多個主機組件。 #(2)主機(Host):主機組件相似於Apache的虛擬主機,但Tomcat只支持基於FQDN的虛擬主機。至少一個主機組件。 #(3)上下文(Context):Context組件式最內層組件,表明Web應用程序自己。配置一個Context最主要的就是指定Web應用程序的根目錄,一遍Servlet容器能偶將用戶請求發往正確的位置。Context組件也能夠定義包含錯誤頁,實現用戶訪問發生錯誤時提供友好的提示信息。 被嵌套類組件: #(1)閥門(valve):能夠定義在任何容器類的組件中,用來記錄客戶端請求/客戶端IP地址和服務器等信息。 #(2)日誌記錄器(logger):能夠用於除Context以外的任何容器中。記錄日誌 #(3)領域(Realm):用於用戶的認證和受權
四、Tomcat鏈接器架構
# 基於Apache做爲Tomcat前段的架構來說,Apache經過mod_jk、mod_proxy模塊與後端的Tomcat進行數據交換 apache與tomcat鏈接器通訊的模塊有兩個: 1) mod_jk : apache/1.3, apache/2.0 2) mod_proxy : apache/2.2+ Tomcat的http鏈接器 # 1)基於java的http/1.1鏈接器; # 2)基於java的高性能NIO HTTP/1.1鏈接器 # 3)基於C/C++研發的Native APR HTTP/1.1鏈接器 (須要額外編譯安裝) Tomcat的鏈接器協議 # 1)http # 2)ajp Tomcat的工做模式 # 1)單獨模式 # 2)進程間配置 # 3) 獨立/網絡配置
五、 Tomcat的組織機構
<Server> 頂層元素,表明一個服務器 <Service> 頂層元素,是Connector的集合,只有一個Engine <Connectior/> 鏈接器類元素,表明通訊接口 <Engine> 容器類元素,爲特定的Service組件處理全部客戶請求,可包含多個Host <Host> 爲特定的虛擬主機處理全部客戶請求 <Context> 爲特定的WEB應用處理全部客戶請求 </Context> </Host> </Engine> </Service> </Server>
六、Tomcat的配置文件
Tomcat的配置文件默認存放在$CATALINA_HOME/conf目錄中 #server.xml: Tomcat的主配置文件,包含Service, Connector, Engine, Realm, Valve, Hosts主組件的相關配置信息; #web.xml:遵循Servlet規範標準的配置文件,用於配置servlet,併爲全部的Web應用程序提供包括MIME映射等默認配置信息; #tomcat-user.xml:Realm認證時用到的相關角色、用戶和密碼等信息;Tomcat自帶的manager默認狀況下會用到此文件;在Tomcat中添加/刪除用戶,爲用戶指定角色等將經過編輯此文件實現; #catalina.policy:Java相關的安全策略配置文件,在系統資源級別上提供訪問控制的能力; #catalina.properties:Tomcat內部package的定義及訪問相關的控制,也包括對經過類裝載器裝載的內容的控制;Tomcat在啓動時會事先讀取此文件的相關設置; #logging.properties: Tomcat經過本身內部實現的JAVA日誌記錄器來記錄操做相關的日誌,此文件即爲日誌記錄器相關的配置信息,能夠用來定義日誌記錄的組件級別以及日誌文件的存在位置等; #context.xml:全部host的默認配置信息;
7 、安裝Tomcat
安裝方式:1)rom包yum安裝
2)官網的二進制包安裝
3)源碼包編譯安裝
下載:jdk-7u9-linux-x64.rpm apache-tomcat-7.0.42.tar.gz jdk 環境的配置 1)安裝jdk # rpm -ivh jdk-7u9-linux-x64.rpm 2)配置環境變量 # vim /etc/profile.d/java.sh exportJAVA_HOME=/usr/java/latest export PATH=$JAVA_HOME/bin:$PATH # source /etc/profile.d/java.sh 重讀配置文件 3)查看版本 # java -version
tomcat配置 1)解壓,創建軟鏈接 # tar xf apache-tomcat-7.0.42.tar.gz -C /usr/local # cd /usr/local # ln -sv apache-tomcat-7.0.42 tomcat 2)配置環境變量 # vim /etc/profile.d/tomcat.sh export CATALINA_HOME=/usr/local/tomcat export PATH=$CATALINA_HOME/bin:$PATH # source /etc/profile.d/tomcat.sh 3) 提供tomcat腳本 # vim /etc/rc.d/init.d/tomcat #!/bin/sh # Tomcat init script for Linux. # # chkconfig: 2345 96 14 # description: The Apache Tomcat servlet/JSP container. # JAVA_OPTS='-Xms64m -Xmx128m' JAVA_HOME=/usr/java/latest CATALINA_HOME=/usr/local/tomcat export JAVA_HOME CATALINA_HOME case $1 in start) exec $CATALINA_HOME/bin/catalina.sh start ;; stop) exec $CATALINA_HOME/bin/catalina.sh stop;; restart) $CATALINA_HOME/bin/catalina.sh stop sleep 2 exec $CATALINA_HOME/bin/catalina.sh start ;; configtest) exec $CATALINA_HOME/bin/catalina.sh configtest ;; *) exec $CATALINA_HOME/bin/catalina.sh * ;; esac # chmod +x /etc/rc.d/init.d/tomcat # chkconfig --add tomcat # chkconfig tomcat on # service tomcat start 啓動服務 # ss -ntl | grep 8080 tomcat默認偵聽的端口爲8080 LISTEN 0 100 :::8080
web瀏覽器訪問
Tomcat 目錄文件
[root@node2 zxj]# cd /usr/local/tomcat/ [root@node2 tomcat]# ls bin conf lib LICENSE logs NOTICE RELEASE-NOTES RUNNING.txt temp webapps work
#bin ——Tomcat執行腳本目錄 #conf ——Tomcat配置文件 #lib ——Tomcat運行須要的庫文件(JARS) #logs ——Tomcat執行時的LOG文件 #temp ——Tomcat臨時文件存放目錄 #webapps ——Tomcat的主要Web發佈目錄(存放咱們本身的JSP,SERVLET,類) #work ——Tomcat的工做目錄,Tomcat將翻譯JSP文件到的Java文件和class文件放在這裏。
八、配置tomcat的 Server status 、Manager App、Host Manager
# cd /usr/local/tomcat/conf # vim tomcat-users.xml <role rolename="manager-gui"/> <role rolename="admin-gui"/> <user username="tomcat" password="tomcat" roles="manager-gui,admin-gui"/> # service tomcat restart
Web瀏覽器測試
Manager Status
Manager Host ---管理虛擬主機
九、Tomcat上部署程序
1)本機安裝mysql服務器與mysql客戶端 # yum -y install mysql-server mysql 受權用戶 #mysql> grant all on *.* to 'root'@'localhost' identified by '123456'; #mysql> flush privileges;
2)編輯server.xml配置文件,添加一個host和context # vim /usr/local/tomcat/conf/server.xml <Host name="www.a.com" appBase="/www/webapps" unpackWARS="true" autoDeploy="true"> <Context path="" docBase="ROOT" reloadable="true" /> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="%h %l %u %t "%r" %s %b" /> </Host>
3)配置web程序 # mkdir -pv /www/webapps/ROOT 下載JavaCenter_Home_2.0_GBK.tar.bz2 # tar xf JavaCenter_Home_2.0_GBK.tar.bz2 # cd JavaCenter_Home_2.0_GBK # mv * /www/webapp/ROOT
Web瀏覽器測試
JavaCenter_Home程序部署成功!!!
PS:我的水平有限,若有疑問請留言,若有錯誤請及時指出.