您好,登錄后才能下訂單哦!
Tomcat是Apache 軟件基金會(Apache Software Foundation)的Jakarta 項目中的一個核心項目,由Apache、Sun 和其他一些公司及個人共同開發而成。由于有了Sun 的參與和支持,最新的Servlet 和JSP 規范總是能在Tomcat 中得到體現,Tomcat 5支持最新的Servlet 2.4 和JSP 2.0 規范。因為Tomcat 技術先進、性能穩定,而且免費,因而深受Java 愛好者的喜愛并得到了部分軟件開發商的認可,成為目前比較流行的Web 應用服務器。
servlet(應用程序或者容器)是java提供的用于開發web服務器應用程序的一個組件,運行在服務器端,有servlet用于生成動態頁面內容,servlet是平臺立的java類,編寫一個servlet,實際上就是安裝servlet規范編寫一個java類
Tomcat 處理請求和響應的過程是由servlet的程序來完成的,并且servlet是為例解決實現動態頁面而衍生的東西,與我們之前了解的nginx或者apache想要實現動態頁面需要和php服務器溝通的過程差不多,可以把servlet比作成php
Tomcat 是web應用服務器,是一個servlet/jsp容器,tomcat作為servlet容器,負責處理客戶請求,并將servlet的響應傳送給客戶,而servlet是一種運行在java語言的服務器上的組件,servlet最常見的用途是擴展java web服務器功能,提供非常安全的,可以移植的(打包網頁代碼就可以在另外一個環境中運行,如linux系統跟windows環境),易于使用cgi替代品。
1.Tomcat是運行在JVM中的一個進程。它定義為【中間件】,顧名思義,是一個在Java項目與JVM之間的中間容器。
2.Web項目的本質,是一大堆的資源文件和方法。Web項目沒有入口方法(main方法),,意味著Web項目中的方法不會自動運行起來。
3.Web項目部署進Tomcat的webapp中的目的是很明確的,那就是希望Tomcat去調用
寫好的方法去為客戶端返回需要的資源和數據。
4. Tomcat可以運行起來,并調用寫好的方法。那么,Tomcat一定有一個main方法。
5. 對于Tomcat而言,它并不知道我們會有什么樣的方法,這些都只是在項目被部署進webapp下后才確定的,由此分析,必然用到了Java的反射來實現類的動態加載、實例化、獲取方法、調用方法。但是我們部署到Tomcat的中的Web項目必須是按照規定好的接口來進行編寫,以便進行調用
6.Tomcat如何確定調用什么方法呢。這取卻于客戶端的請求,http://127.0.0.1:8080/JayKing.Tomcat.Study/index.java?show這樣的一個請求,通過http協議,在瀏覽器發往本機的8080端口,攜帶的參數show方法,包含此方法的路徑為JayKing.Tomcat.Study,文件名為:index.java。
1、瀏覽器發送請求數據
2、tomcat收到服務器的請求數據,由servlet容器處理并進行解析,并且把客戶端的數據請求request改變成servlet request 交給后端的servlet 實例(或者或叫對象)實例收到客戶端的請求數據的請求對象,進行出處理客戶端的請求,處理完成后將數據響應給servlet容器,響應給servlet容器叫做servlet response。
3、Servlet收到的實例的響應數據交給客戶端(如圖)
Servlet(tomcat)容器與servlet實例需要通過java servlet api接口進行通信,api接口是由開發人員在寫代碼的時候定義或者編寫的
4.servlet容器將收到的響應數據交給客戶端
Servlet在Java代碼中可以通過HttpServletResponse對象動態輸出HTML內容;
JSP在靜態HTML內容中嵌入Java代碼,然后Java代碼在被動態執行后生成HTML頁面;
運行時占用的資源小,擴展性好,支持負載均衡和郵件服務器等開發應用系統常用的功能
下載Tomcat所需的軟件包
[root@localhost ~]# rpm -qa | grep jdk
\\查詢已安裝的jdk包
copy-jdk-configs-1.2-1.el7.noarch
java-1.7.0-openjdk-headless-1.7.0.111-2.6.7.8.el7.x86_64
java-1.8.0-openjdk-1.8.0.102-4.b14.el7.x86_64
java-1.7.0-openjdk-1.7.0.111-2.6.7.8.el7.x86_64
java-1.8.0-openjdk-headless-1.8.0.102-4.b14.el7.x86_64
[root@localhost ~]# rpm -e java-1.7.0-openjdk-headless-1.7.0.111-2.6.7.8.el7.x86_64 java-1.7.0-openjdk-1.7.0.111-2.6.7.8.el7.x86_64 java-1.8.0-openjdk-headless-1.8.0.102-4.b14.el7.x86_64 --nodeps
\\卸載系統自帶的jdk環境
[root@localhost ~]# tar zxf jdk-8u211-linux-x64.tar.gz -C /usr/local/
[root@localhost ~]# vim /etc/profile
//編寫系統環境變量,在最后一行加以下內容
export JAVA_HOME=/usr/local/jdk1.8.0_211 //指定java的路徑
export JRE_HOME=/usr/local/jdk1.8.0_211/jre //java運行環境
export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
//聲明java中的類,類就是一類事務的屬性,如各種蓋飯最終他們的屬性是飯
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
//將定義的變量添加到系統環境變量中
[root@localhost ~]# source /etc/profile //重新加載系統環境變量文件
[root@localhost ~]# tar zxf apache-tomcat-8.5.35.tar.gz
[root@localhost ~]# mv apache-tomcat-8.5.35 /usr/local/tomcat
[root@localhost ~]# /usr/local/tomcat/bin/startup.sh \\啟動tomcat
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/local/jdk1.8.0_211/jre
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
[root@localhost ~]# netstat -anpt | grep 8080
tcp6 0 0 :::8080 :::* LISTEN 16320/java
Bin:存放windows或linux平臺上啟動或者關閉tomcat的腳本文件
Conf:存放tomcat服務器的全局配置文件,其中最重要的是server.xml和web.xml
Lib:tomcat運行需要的庫文件(jars)
Logs:tomcat運行時產生的日志文件
Temp:臨時文件存放目錄
Work:tomcat的工作目錄,存放tomcat運行時的編譯配置文件
Webapps:網頁文件存放路徑
Tomcat常用配置文件說明
Server.xml:tomcat的主配置文件,可以設置端口號,設置域名或者IP
Web.xml: 缺省的web app配置(也可以理解為是實現主配置文件沒有定義到的功能:如目錄遍歷,定義錯誤頁面類型)
Tomcat-users.xml:用來配置管理tomcat的用戶與權限
Server:代表整個容器,實例的頂層元素,一個配置文件中只能有一個server元素,可以包含多個service。比如:
<Server port="8005" shutdown="SHUTDOWN">
//表示關閉Tomcat,使用telnet連接8005,輸入shutdown指令
Service:提供完整jvm的獨立組件,jvm表示Java虛擬機,是一個虛構出來的虛擬機,可以包含一個engine包含多個connector;
<Service name="Catalina">
//代表接受所有tomcat接受的請求,如果是Service name="apache"則表示接受所有apache轉發過來的請求
Connector:接口定義,負責接受客戶端的請求,以及向客戶端返回響應的結構;
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
//port:接受數據的端口;protocol:設置http協議;
//Connection Timeout:與客戶端的連接超時時間,-1代表不限制客戶端的連接時間;
//Redirectport :當客戶端請求是https將請求轉發到8443去
Engine:處理客戶端的請求,可以包含多個hots;
<Engine name="Catalina" defaultHost="localhost">
//name:是引擎名稱,處理客戶的請求默認去尋找localhost
Host:定義的虛擬主機,為特定的虛擬主機處理所有的客戶端請求;
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
Context:運行在虛擬主機中的單個web應用;
過程
①用戶點擊網頁內容,請求被發送到本機端口8080,被在那里監聽的Coyote HTTP/1.1 Connector獲得;
②Connector把該請求交給它所在的Service的Engine來處理,并等待Engine的回應;
③Engine獲得請求localhost/test/index.jsp,匹配所有的虛擬主機Host;
④Engine匹配到名為localhost的Host(即使匹配不到也把請求交給該Host處理,因為該Host被定義為該Engine的默認主機),名為localhost的Host獲得請求/test/index.jsp,匹配它所擁有的所有的Context。Host匹配到路徑為/test的Context(如果匹配不到就把該請求交給路徑名為“ ”的Context去處理);
⑥path=“/test”的Context獲得請求/index.jsp,在它的mapping table中尋找出對應的Servlet。Context匹配到URL PATTERN為*.jsp的Servlet,對應于JspServlet類;
⑥構造HttpServletRequest對象和HttpServletResponse對象,作為參數調用JspServlet的doGet()或doPost().執行業務邏輯、數據存儲等程序;
⑦Context把執行完之后的HttpServletResponse對象返回給Host;
⑧Host把HttpServletResponse對象返回給Engine;
⑨Engine把HttpServletResponse對象返回Connector;
⑩Connector把HttpServletResponse對象返回給客戶Browser;
[root@localhost ~]# vim /usr/local/tomcat/conf/server.xml
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
\\在zhe這個Hostname下添加以下內容
<Context path = "/xws" docBase = "/data/project" debug = "0" reloadable = "false" crossContext = "true">
</Context>
Path:指出訪問的路徑
docBase:指定存放的路徑
Debug:指定debug的等級為0輸出信息最少,9提供最多信息
Reloadable:為ture時當web.xml文件有改動的時候自動重新加載,不用重啟服務
CorssContext:為ture時表示不同的context共享一個session(會話池)
[root@localhost ~]# mkdir -p /data/project
[root@localhost ~]# vim /data/project/index1.jsp
aaaaaaa
[root@localhost ~]# vim /data/project/index2.jsp
bbbbbbb
[root@localhost ~]# vim /usr/local/tomcat/conf/web.xml
\\大約在112行中把false改為true
[root@localhost ~]# /usr/local/tomcat/bin/shutdown.sh \\關閉服務
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/local/jdk1.8.0_211/jre
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
[root@localhost ~]# /usr/local/tomcat/bin/startup.sh \\啟動服務
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/local/jdk1.8.0_211/jre
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
[root@localhost ~]# vim /usr/local/tomcat/conf/server.xml
//在host中添加
<Context path="/jiankong" docBase="/jk/jiankong" debug="0" reloadable=" false" crossContext="true"/>
[root@localhost /]# mkdir /jk/jiankong -p
[root@localhost /]# vim /jk/jiankong/index.jsp
<%
Runtime rtm = Runtime.getRuntime();
long mm = rtm.maxMemory()/1024/1024;
long tm = rtm.totalMemory()/1024/1024;
long fm = rtm.freeMemory()/1024/1024;
out.println("JVM memory detail info :<br>");
out.println("Max memory:"+mm+"MB"+"<br>");
out.println("Total memory: "+tm+"MB"+"<br>");
out.println("Free memory: "+fm+"MB"+"<br>");
out.println("Available memmory can be used is :"+(mm+fm-tm)+"MB"+"<br>");
%>
[root@localhost ~]# /usr/local/tomcat/bin/shutdown.sh
[root@localhost ~]# /usr/local/tomcat/bin/startup.sh //重啟tomcat服務
[root@localhost /]# vim /usr/local/tomcat/bin/catalina.sh
#----- Execute The Requested Command ----------------------------------------- //填寫的內容必須在這行下面大約在309行
CATALINA_OPTS=" $CATALINA_OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8888 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=true"
[root@localhost /]# cd /usr/local/jdk1.8.0_211/jre/lib/management/
[root@localhost management]# cp jmxremote.password.template jmxremote.password
[root@localhost management]# vim jmxremote.password //在最后一行添加,定義用戶為xws,密碼為123456,使用“wq!”強制保存退出
xws 123456
[root@localhost management]# vim jmxremote.access //定義用戶權限的文件
xws readwrite \ //在倒數第三行。把原有的用戶改為xws
[root@localhost management]# chmod 600 jmxremote.access
[root@localhost management]# chmod 600 jmxremote.password
[root@localhost management]# /usr/local/tomcat/bin/shutdown.sh
[root@localhost management]# /usr/local/tomcat/bin/startup.sh
[root@localhost ~]# netstat -anpt | grep 8888
tcp6 0 0 :::8888 :::* LISTEN 58760/java
//確認剛才定義的端口8888在監聽
[root@localhost /]# . /etc/profile
\\更新環境變量
[root@localhost /]# jconsole
[root@localhost /]# keytool -genkey -v -alias tomcat -keyalg RSA -keystore /usr/local/tomcat/conf/tomcat.keystore -validity 36500
//alias:別名,這里設置為tomcat;
//keyalg:證書算法,RSA;
//validity:證書有效期,單位為天
//keystore:指定證書存放路徑,可以自定義
輸入密鑰庫口令:
再次輸入新口令:
您的名字與姓氏是什么?
[Unknown]: xws
您的組織單位名稱是什么?
[Unknown]: aaa
您的組織名稱是什么?
[Unknown]: bbb
您所在的城市或區域名稱是什么?
[Unknown]: ccc
您所在的省/市/自治區名稱是什么?
[Unknown]: wwwe
該單位的雙字母國家/地區代碼是什么?
[Unknown]: qwe
CN=xws, OU=aaa, O=bbb, L=ccc, ST=wwwe, C=qwe是否正確?
[否]: y
正在為以下對象生成 2,048 位RSA密鑰對和自簽名證書 (SHA256withRSA) (有效期為 36,500 天):
CN=xws, OU=aaa, O=bbb, L=ccc, ST=wwwe, C=qwe
輸入 <tomcat> 的密鑰口令
(如果和密鑰庫口令相同, 按回車):
[正在存儲/usr/local/tomcat/conf/tomcat.keystore]
Warning:
JKS 密鑰庫使用專用格式。建議使用 "keytool -importkeystore -srckeystore /usr/local/tomcat/conf/tomcat.keystore -destkeystore /usr/local/tomcat/conf/tomcat.keystore -deststoretype pkcs12" 遷移到行業標準格式 PKCS12。
[root@localhost ~]# vim /usr/local/tomcat/conf/server.xml //可以添加也可以從原有的內容稍作修改即可
<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol" //將原本的8443改為443
maxThreads="150" SSLEnabled="true"
keystoreFile="/usr/local/tomcat/conf/tomcat.keystore" //指定證書存放路徑
keystorePass="123456"> //指定生成證書所輸入的密碼
</Connector>
[root@localhost ~]# /usr/local/tomcat/bin/shutdown.sh
[root@localhost ~]# /usr/local/tomcat/bin/startup.sh
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。