Tomcat介紹
Tomcat
Tomcat服務器是Apache組織開發的一種JSP引擎同時支持Servlet,自己具備Web服務器的功能,能夠做爲獨立的Web服務器來使用。
Tomcat 是一種具備JSP環境的Servlet容器,Servlet容器是代替用戶管理和調用 Servlet的運行時外殼。
JSP(Java Server Pages)是一種運行於服務器端的動態網頁開發技術,它基於Java技術,執行JSP時須要在Web服務器上架設一個編譯JSP網頁的引擎。
Servlet容器,負責處理客戶請求,當客戶請求來到時,Servlet容器獲取請求,而後調用某個Servlet,並把Servlet的執行結果返回給客戶。當客戶請求某個資源時,Servlet容器使SERVLETREQUEST對象把客戶的請求信息封裝起來,而後調用JAVA Servlet API中定義的Servlet的一些生命週期方法,完成Servlet的執行,接着把Servlet執行的要返回給客戶的結果封裝到SERVLETRESPONSE對象中,最後SERVLET容器把客戶的請求發送給客戶,完成爲客戶的一次服務過程。
Tomcat做爲Web服務器方面,Tomcat處理靜態HTML頁面時不如Apache迅速,也沒有Apache健壯,因此咱們通常將Tomcat與Apache配合使用,讓Apache對網站的靜態頁面請求提供服務,而Tomcat做爲專用的JSP引擎,提供JSP解析,以獲得更好的性能。
Tomcat自己就是Apache的一個子項目,因此Tomcat對Apache提供了強有力的支持,對於大多數網站來講,Tomcat是一個很不錯的選擇。
Tomcat 在嚴格意義上並非一個真正的應用服務器,它只是一個能夠支持運行Serlvet/JSP的Web容器,不過Tomcat也擴展了一些應用服務器的功能,如JNDI,數據庫鏈接池,用戶事務處理等等。
Tomcat 服務器是一個免費的開放源代碼的Web 應用服務器,屬於輕量級應用服務器,在中小型系統和併發訪問用戶不是不少的場合下被廣泛使用,是開發和調試JSP 程序的首選。
Tomcat是Apache 服務器的擴展,但運行時它是獨立運行的,因此當你運行tomcat 時,它實際上做爲一個與Apache 獨立的進程單獨運行的。當配置正確時,Apache 爲HTML頁面服務,而Tomcat 實際上運行JSP 頁面和Servlet。
Tomcat和IIS等Web服務器同樣,具備處理HTML頁面的功能,另外它仍是一個Servlet和JSP容器,獨立的Servlet容器是Tomcat的默認模式。
Tomcat處理靜態HTML的能力不如Apache服務器。
Tomcat以面向對象的方式運行,它能夠在運行時動態加載配置文件中定義的對象結構,這有點相似於apache的httpd模塊的調用方式。
Tomcat運行環境
tomcat使用java語言來編寫,tomcat和php同樣都是用來處理動態程序的(也能夠解析靜態資源)。
tomcat能夠處理.jsp或者.do結尾的動態文件,處理時並非tomcat自己去處理,而是交給後端的jvm來處理,也就是java虛擬機來處理,處理以前先裝入tomcat的類文件,而後由jvm來處理,因此安裝tomcat必須先安裝JDK(Java Development Kit)。
java開發工具箱在java虛擬機之上,安裝了JDK就至關於安裝java虛擬機,JDK有兩種開源的軟件能夠安裝,OpenJDK和Oracle JDK.
Java代碼的運行:
*.java(source code) --> javac --> *.class(bytecode)
jvm:
class loader,加載程序的類文件,及程序的類文件依賴到的其它的類文件然後運行,整個運行表現爲一個jvm進程。
JVM運行時區域:
方法區:
線程共享,用於存儲被JVM加載的class信息、常量、靜態變量、方法等;
堆:
是jvm所管理的內存中佔用空間最大的一部分,也是GC管理的主要區域,存儲對象;
Java棧:
線程私有,存儲線程本身的局部變量;
PC寄存器:
線程私有的內存空間,程序的指令指針;
本地方法棧:
JDK:
瞭解當前的java環境:
java -version
OpenJDK:
java-VERSION-openjdk:
The OpenJDK runtime environment.
java-VERSION-openjdk-headless:
The OpenJDK runtime environment without audio and video support.
java-VERSION-openjdk-devel:
The OpenJDK development tools.
CentOS 7:
VERSION:1.6.0, 1.7.0, 1.8.0
注意:多版本並存時,可以使用 alternatives命令設定默認使用的版本;
Oracle JDK:
安裝相應版本的rpm包;
jdk-VERSION-OS-ARCH.rpm
例如:jdk-1.8.0_25-linux-x64.rpm
注意:安裝完成後,要配置JAVA_HOME環境變量,指向java的安裝路徑;
OpenJDK:
JAVA_HOME=/usr
Oracle JDK:
JAVA_HOME=/usr/java/jdk_VERSION
Java 2 EE:
CGI: Common Gateway Interface
Servlet:
類庫;web app;
Servlet container,Servlet Engine
JSP: Java Server Page
類庫:
<html>
<title>TITLE</title‘
>
<body>
<h1>...</h1>
<%
... java code...
%>
</body>
</html>
.jsp -->jasper--> .java --> javac --> .class --> jvm
注意:基於jasper將靜態輸出的數據轉爲java代碼進行輸出,結果爲servlet規範的代碼;
JSP Container:
JSP + Servlet Container
Java Web Server:JWS
ASF:JServ
O'Reilly
Tomcat 3.x
Tomcat 4.x
Catalina
http://tomcat.apache.org/
商業實現:
WebSphere, WebLogic, Oc4j, Glassfish, Geronimo, JOnAS, JBoss, ...
開源實現:
Tomcat, Jetty, Resin, ...
Tomcat: Java 2 EE技術體系的不完整實現;
一、OpenJDK的安裝
yum install java-1.8.0-openjdk-devel.x86_64
肯定JDK是否安裝可使用以下命令
java -version ##能夠看到版本,說明安裝成功
二、Oracle JDK的安裝
在oracle官方網站上下載jdk-8u151-linux-x64.rpm
http://www.oracle.com/technetwork/java/javase/downloads/index.html
rpm -ivh jdk-8u151-linux-x64.rpm
cd /usr/java/
ll ##有兩個軟連接文件,一個指向的是默認的,一個指向的是最新的,這裏只有一個版本,若是有多個版本這兩個軟連接會分別指向不一樣的版本
total 0
lrwxrwxrwx 1 root root 16 Nov 3 21:01 default -> /usr/java/latest
drwxr-xr-x 9 root root 268 Nov 3 21:01 jdk1.8.0_151
lrwxrwxrwx 1 root root 22 Nov 3 21:01 latest -> /usr/java/jdk1.8.0_151
cd bin/ ##發現有不少java程序文件,由於不在PATH變量裏,因此最好定義PATH變量
vim /etc/profile.d/java.sh
PATH=/usr/java/latest/bin/:$PATH
. /etc/profile.d/java.sh ##生效
java -version ##發現java環境已經準備好了,定義完PATH變量,java虛擬機就會自動開啓
java version "1.8.0_151"
Java(TM) SE Runtime Environment (build 1.8.0_151-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.151-b12, mixed mode)
Tomcat安裝運行
安裝tomca也有兩種方法,一種是base倉庫,另一種就是到官方站點下載,這裏在上面準備好的OpenJDK上用base倉庫安裝,在Oracle JDK上安裝編譯好的二進制包。
一、Base Repo:
yum install tomcat tomcat-admin-webapps tomcat-docs-webapp tomcat-webapps
rpm -q tomcat ##查看版本
cat /usr/sbin/tomcat ##能夠看到tomcat並非一個二進制的程序,而是一個腳本文件,經過腳本文件調用java程序。
service tomcat start
ps -aux ##發現tomcat啓動的是一個java虛擬機程序
jps -v ##能夠看到啓動過程,先裝載tomcat的類文件完成自舉,而後運行java虛擬機程序,因此tamcat真正運行的是一個java程序
ss -nlt ##從這也能夠看到運行的是java進程
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 1 ::ffff:127.0.0.1:8005 :::* users:(("java",5990,52))
LISTEN 0 100 :::8009 :::* users:(("java",5990,48))
LISTEN 0 100 :::8080 :::* users:(("java",5990,47))
監聽的端口有三個:8080爲http協議的接口,8009爲ajp協議的接口,8005爲管理接口
telnet 127.0.0.1 8005
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
SHUTDOWN
Connection closed by foreign host.
ss -nlt ##發現tomcat實例被關閉了,因此這個管理端口監聽在本地的8005,這樣比較安全,否則誰telnet到這個端口均可以關閉tomcat,不過通常這個端最好不要監聽,這樣更安全
進行安全設置
vim /etc/tomcat/server.xml
<Server port="8005" shutdown="SHUTDOWN">
把上面的改爲port=-1,就表示關閉端口,或者openssl rand -hex 10 生成一個隨機數來當shuntdown,這樣別人就不知道該怎麼關閉了
http://172.18.21.106:8080/ ##訪問http協議的接口能夠看到web站點
二、Tomcat binary release
在官方網站上下載
http://tomcat.apache.org/
tomcat是屬於apache旗下的產品,這裏下載的是apache-tomcat-7.0.82.tar
tar -xvf apache-tomcat-7.0.82.tar.gz -C /usr/local
ln -s apache-tomcat-7.0.82/ tomcat
useradd tomcat ##運行tomcat時最好以普通用戶的身份運行,因此建立一個tomcat用戶
chown -R root:tomcat ./* ##修改tomcat目錄下的文件的全部者和所屬組,這裏只修改所屬組爲tomcat是由於怕tomcat帳號被別人盜用後,登錄此帳號後修改tomcat內的二進制程序文件
chown -R tomcat ./{logs,temp,work,webapps,conf} ##將這些目錄的全部者修改成tomcat,由於在執行tomcat時有可能要修改這些目錄內的文件
vim /etc/profile.d/tomcat.sh
PATH=/usr/local/tomcat/bin/:$PATH
. /etc/profile.d/tomcat.sh
su - tomcat
$catalina.sh start ##利用這個命令來啓動和關閉tomcat
$catalina.sh --help
$ss -nlt ##發現端口已經打開
$ps -aux ##發現是以tomcat的身份在運行,若是用root用戶去開啓tomcat會發現tomcat是以root的身份在運行
catalina.sh version
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/7.0.82 ##能夠看到tomcat的版本
Server built: Sep 29 2017 12:23:15 UTC
Server number: 7.0.82.0
OS Name: Linux
OS Version: 3.10.0-514.el7.x86_64
Architecture: amd64
JVM Version: 1.8.0_151-b12 ##java虛擬機的版本
JVM Vendor: Oracle Corporation
catalina.sh --help
debug 在調試器中啓動Catalina
debug -security 採用安全管理調試Catalina
jpda start 在JPDA調試器中啓動Catalina
run 在當前窗口啓動Catalina
run -security 採用安全管理在當前窗口中啓動
start 在單獨的窗口中啓動Catalina
start -security 在單獨的窗口中採用安全管理啓動
stop 中止Catalina,等待5秒來進行進程中止
stop n 中止Catalina,等待N秒來進行進程中止
stop -force 中止Catalina,等待5秒,若還在運行則使用kill -KILL來中止進程運行
stop n -force 中止Catalina,等待n秒,若還在運行則使用kill -KILL來中止進程運行
configtest 在server.xml上運行基礎同步檢查-檢查結果的退出代碼
version 顯示版本
Tomcat程序環境
rpm -ql tomcat
/etc/logrotate.d/tomcat
/etc/sysconfig/tomcat ##特殊服務配置文件
/usr/bin/tomcat-digest
/usr/bin/tomcat-tool-wrapper
/usr/lib/systemd/system/tomcat.service
/usr/lib/systemd/system/tomcat@.service
/usr/libexec/tomcat
/etc/tomcat ##配置文件目錄
/etc/tomcat/server.xml ##主配置文件
/etc/tomcat/tomcat.conf ##全局配置文件
/etc/tomcat/tomcat-users.xml ##用戶認證的帳號和密碼文件;角色(role),用戶(User),此文件在tomcat啓動時被裝入內存
/usr/share/tomcat/webapps ##webapp的默認根目錄
/usr/sbin/tomcat
/var/lib/tomcat
/var/lib/tomcats
/var/log/tomcat
/var/log/tomcat/catalina.out
tomcat的目錄結構
bin:腳本目錄,及啓動時用到的類。
catalina.sh,用於啓動和關閉tomcat服務器
configtest.sh,用於檢查配置文件
startup.sh,啓動Tomcat腳本
shutdown.sh,關閉Tomcat腳本
conf:配置文件目錄。
server.xml,Tomcat 的全局配置文件
web.xml,爲不一樣的Tomcat配置的web應用設置缺省值的文件
tomcat-users.xml,Tomcat用戶認證的配置文件
lib:庫文件,Java類庫,jar。
包含被Tomcat使用的各類各樣的jar文件,在Linux/UNIX上任何這個目錄中的文件將被附加到Tomcat的classpath中。
logs:日誌文件目錄。
localhost_access_log.2013-09-18.txt,訪問日誌
localhost.2013-09-18.log,錯誤和其它日誌
manager.2013-09-18.log,管理日誌
catalina.2013-09-18.log,Tomcat啓動或關閉日誌文件
temp:臨時文件目錄;
webapps:webapp的默認目錄,即Tomcat的主要Web發佈目錄。
含Web應用的程序 (JSP、Servlet和JavaBean等)
work:工做目錄,存放編譯後的字節碼文件,即Tomcat將翻譯JSP文件到的Java文件和class文件放在這裏
由Tomcat自動生成,這是Tomcat放置它運行期間的中間(intermediate)文件(諸如編譯的JSP文件)地方。
若是當Tomcat運行時,你刪除了這個目錄那麼將不可以執行包含JSP的頁面。
rpm包安裝的程序環境:
配置文件目錄:/etc/tomcat
主配置文件:server.xml
webapps存放位置:/var/lib/tomcat/webapps/
examples
manager
host-manager
docs
Unit File:tomcat.service
環境配置文件:/etc/sysconfig/tomcat
Tomcat的配置文件默認存放在$CATALINA_HOME/conf目錄中,主要有如下幾個:
server.xml:主配置文件;
web.xml:
context.xml:tomcat-users.xml:;
catalina.policy:;
catalina.properties:;
logging.properties:;
server.xml:
Tomcat的主配置文件,包含Service, Connector, Engine, Realm, Valve, Hosts主組件的相關配置信息。
web.xml:
每一個webapp只有「部署」後才能被訪問,它的部署方式一般由web.xml進行定義,其存放位置爲WEB-INF目錄中,此文件爲全部的webapps提供默認部署相關的配置。
遵循Servlet規範標準的配置文件,用於配置servlet,併爲全部的Web應用程序提供包括MIME映射等默認配置信息。
web.xml基於Java Servlet規範,可被用於每個Java servlet容器,一般有兩個存放位置,$CATALINA_BASE/conf和每一個Web應用程序(一般是WEB-INF/web.xml)。
Tomcat在deploy一個應用程序時(包括重啓或從新載入),它首先讀取conf/web.xml,然後讀取WEB-INF/web.xml。
tomcat-user.xml:
用戶認證的帳號和密碼文件,角色(role),用戶(User),此文件在tomcat啓動時被裝入內存。
Realm認證時用到的相關角色、用戶和密碼等信息,Tomcat自帶的manager默認狀況下會用到此文件,在Tomcat中添加/刪除用戶,爲用戶指定角色等將經過編輯此文件實現。
catalina.policy:
Java相關的安全策略配置文件,在系統資源級別上提供訪問控制的能力。
當使用-security選項啓動tomcat時,用於爲tomcat設置安全策略。
catalina.properties:
Java屬性的定義文件,用於設定類加載器路徑,以及一些與JVM調優相關參數。
Tomcat內部package的定義及訪問相關的控制,也包括對經過類裝載器裝載的內容的控制,Tomcat在啓動時會事先讀取此文件的相關設置。
logging.properties:
日誌系統相關的配置。
Tomcat經過本身內部實現的JAVA日誌記錄器來記錄操做相關的日誌,此文件即爲日誌記錄器相關的配置信息,能夠用來定義日誌記錄的組件級別以及日誌文件的存在位置等。
context.xml:
全部host的默認配置信息。
每一個webapp均可以使用的配置文件,它一般由專用的配置文件context.xml來定義,其存放位置爲WEB-INF目錄中,此文件爲全部的webapps提供默認配置。
JSP WebAPP的組織結構:
/: webapps的根目錄
index.jsp:主頁;
WEB-INF/:當前webapp的私有資源路徑,一般用於存儲當前webapp的web.xml和context.xml配置文件;
META-INF/:相似於WEB-INF/;
classes/:類文件,當前webapp所提供的類;
lib/:類文件,當前webapp所提供的類,被打包爲jar格式;
Tomcat的Web應用程序目錄組成
頁面內容等文件的存放位置:
*.html, *.jsp等能夠有許多目錄層次,由用戶的網站結構而定,實現的功能應該是網站的界面,也就是用戶主要的可見部分。
除了HTML文件、JSP文件外,還有js(JavaScript)文件和css(樣式表)文件以及其餘多媒體文件等。
Web-INF/web.xml
這是一個Web應用程序的描述文件。
這個文件是一個XML文件,描述了Servlet和這個Web應用程序的其餘組件信息,此外還包括一些初始化信息和安全約束等等。
Web-INF/classes/
這個目錄及其下的子目錄應該包括這個Web應用程序的全部JavaBean及Servlet等編譯好的Java類文件(*.class)文件,以及沒有被壓縮打入JAR包的其餘class文件和相關資源。
注意,在這個目錄下的Java類應該按照其所屬的包層次組織目錄(即若是該*.class文件具備包的定義,則該*.class文件應該放在.\WEB-INF\classes\包名下)。
這個目錄下的類文件也能夠打包成JAR文件,並能夠放到WEB-INF下的lib目錄下,如將 classes目錄下的各個*.class文件打包成WebMis.jar文件(jar cvf WebMis.jar *.*)
common/lib/
這個目錄下包含了全部壓縮到JAR文件中的類文件和相關文件。
好比:第三方提供的Java庫文件、JDBC驅動程序等。
其中msbase.jar、mssqlserver.jar、msutil.jar文件爲SqlServer2000的JDBC驅動程序
其中servlet-api.jar和jsp-api.jar爲Servlet和JSP的API所在的包
webapp歸檔格式:
tree /usr/share/tomcat/webapps/ 能夠看到根目錄結構
.war:webapp,通常生產中用到的都是這種格式的打包好的程序文件,只要把它扔到網頁程序文件存放的目錄下就會自動展開這個文件,不用解壓包
.jar:EJB的類打包文件(類庫);
.rar:資源適配器類打包文件;
.ear:企業級webapp;
部署(deploy) webapp的相關操做:
deploy:將webapp的源文件放置於目標目錄(網頁程序文件存放目錄),配置tomcat服務器可以基於web.xml和context.xml文件中定義的路徑來訪問此webapp,將其特有的類和依賴的類經過class loader裝載至JVM。
部署有兩種方式:
自動部署:auto deploy
手動部署:+
冷部署:把webapp複製到指定的位置,然後才啓動tomcat;
熱部署:在不中止tomcat的前提下進行部署;
熱部署工具:manager、ant腳本、tcd(tomcat client deployer)等;
undeploy:拆除(反部署),中止webapp,並從tomcat實例上卸載webapp;
start:啓動處於中止狀態的webapp;
stop:中止webapp,再也不向用戶提供服務;其類依然在jvm上;
redeploy:從新部署;
tomcat的兩個管理應用:
manager
host-manager
示例:
手動提供一測試類應用,並冷部署:
# mkidr -pv /usr/local/tomcat/webapps/test/{classes,lib,WEB-INF}
建立文件/usr/local/tomcat/webapps/test/index.jsp
<%@ page language="java" %>
<%@ page import="java.util.*" %>
<html>
<head>
<title>Test Page</title>
</head>
<body>
<% out.println("hello world");%>
</body>
</html>