Tomcat介紹 Tomcat Tomcat運行環境 Tomcat安裝運行 Tomcat程式環境 ...
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技術體系的不完整實現;
1、OpenJDK的安裝
yum install java-1.8.0-openjdk-devel.x86_64
確定JDK是否安裝可以使用如下命令
java -version ##可以看到版本,說明安裝成功
2、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上安裝編譯好的二進位包。
1、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站點
2、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/[email protected]
/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>