1. 程式人生 > >tomcat配置與應用(1)

tomcat配置與應用(1)

源文件 root用戶 containe 意義 image 定義 處理請求 jre 環境變量

回顧: java, tomcat


java:

servlet: java 2 ee的一個特殊類;

jsp: java 2 ee的一個特殊類;


java 2 ee: java 2 se, servlet, jsp, jmx, javamail, ...


jsp --> jasper --> servlet --> complie --> bytecodes --> jvm


tomcat: JWS(Sun) + Jserv(ASF)


tomcat: jdk + tomcat


tomcat:server.xml

server, service, connector, engine, host, context


部署:

jvm:

運行時區域:

堆:對象;


Tomcat(2)

tomcat:

CentOS 6:

Oracle JDK, Tomcat

yum repo:

jdk

tomcat6

tomcat


CentOS 7:

OpenJDK 7

Tomcat 7


JDK:

1.6,1.7,1.8 註:1.6為采用的最經典的版本,不同的應用程序對jdk的版本要求是不一樣的,要註意

註:很多應用程序在運行時都會去尋找一個JAVA_HOME的環境變量,以確定jdk所在的路徑

java程序如果監聽在一個小於1023的端口上,才需要root用戶去啟用它,否則我們完全可以使用普通用戶運行該程序。

engine早期的代碼叫catalina,所以在java內部把engine叫做catalina

Java WebAPP 組織結構:

有特定的組織形式、層次型的目錄結構;主要包含了servlet代碼文件、JSP頁面文件、類文件、部署描述符文件等;

/usr/local/tomcat/webapps/app1/

/: webapp的根目錄;

WEB-INF/:當前webapp的私有資源目錄,通常存放當前webapp自用的web.xml;

META-INF/:當前webapp的私有資源目錄,通常存放當前webapp自用的context.xml;

classes/: 此webapp的私有類;

lib/: 此webapp的私有類,被打包為jar格式類;

index.jsp:webapp的主頁


webapp歸檔格式:

.war:webapp;

.jar:EJB的類;

.rar:資源適配器;

.ear:企業級應用程序;


手動添加一個測試應用程序:

1、創建webapp特有的目錄結構;

# mkdir -pv myapp/{lib,classes,WEB-INF,META-INF}

2、提供webapp各文件;

#vim myapp/index.jsp

<%@ page language="java" %>

<%@ page import="java.util.*" %>

<html>

<head>

<title>JSP Test Page</title>

</head>

<body>

<% out.println("Hello, world."); %>

</body>

</html>


部署(deployment)webapp相關的操作

deploy:部署,將webapp的源文件放置於目標目錄、配置tomcat服務器能夠基於context.xml文件中定義的路徑來訪問 此webapp; 將其特有類通過class loader裝載至tomcat;

有兩種方式:

自動部署:auto deploy

手動部署:

1、冷部署:把webapp復制到指定位置,而後才啟動tomcat;

2、熱部署:在不停止tomcat的前提下進行的部分:

部署工具:manager、ant腳本、tcd(tomcat client deployer)等;

undeploy:反部署,停止webapp,並從tomcat實例拆除其部分文件和部署名;

stop:停止,不再向用戶提供服務;

start:啟動處於“停止”狀態的webapp;

redeploy:重新部署;


tomcat自帶的應用程序:

manager app: webapp管理工具

host manager:Virtual Hosts管理工具


配置manager app管理工具的用戶名和密碼

#/usr/local/tomcat/conf/tomcat-users.xml

技術分享圖片

配置完執行:

# catalina.sh stop

# catalina.sh start

再次訪問172.16.0.131:8080/manger/html

技術分享圖片


技術分享圖片


配置host manager的賬號密碼

#/usr/local/tomcat/conf/tomcat-users.xml

技術分享圖片

配置完執行:

# catalina.sh stop

# catalina.sh start

技術分享圖片



技術分享圖片

tomcat的主配置文件結構:

技術分享圖片


Tomcat的架構:

Tomcat 6支持Servlet 2.5和JSP 2.1的規範,它由一組嵌套的層次和組件組成,一般可分為以下四類:

頂級組件:位於配置層次的頂級,並且彼此間有著嚴格的對應關系;

連接器:連接客戶端(可以是瀏覽器或Web服務器)請求至Servlet容器,

容器:包含一組其它組件;

被嵌套的組件:位於一個容器當中,但不能包含其它組件;


各常見組件:

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

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


連接器類組件:

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


容器類組件:

4、引擎(Engine):引擎通是指處理請求的Servlet引擎組件,即Catalina Servlet引擎,它檢查每一個請求的HTTP首部信息以辨別此請求應該發往哪個host或context,並將請求處理後的結果返回的相應的客戶端。嚴格意義上來說,容器不必非得通過引擎來實現,它也可以是只是一個容器。如果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首部信息以辨別此請求應該發往哪個host或context,並將請求處理後的結果返回的相應的客戶端。嚴格意義上來說,容器不必非得通過引擎來實現,它也可以是只是一個容器。如果Tomcat被配置成為獨立服務器,默認引擎就是已經定義好的引擎。而如果Tomcat被配置為Apache Web服務器的提供Servlet功能的後端,默認引擎將被忽略,因為Web服務器自身就能確定將用戶請求發往何處。一個引擎可以包含多個host組件。

【以上段的內容來自馬哥教育】


配置文件詳解:

1、server.xml

<Server port="8005" shutdown="SHUTDOWN"> 註:可以通過telnet登錄本機,執行shutdow關閉8005端口

<Listener className="org.apache.catalina.startup.VersionLoggerListener" /> 註:資源監控組件

<!-- Security listener. Documentation at /docs/config/listeners.html

<Listener className="org.apache.catalina.security.SecurityListener" />

-->

<!--APR library loader. Documentation at /docs/apr.html -->

<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />

<!-- Prevent memory leaks due to use of particular java/javax APIs-->

<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />

<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />

<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />



<GlobalNamingResources> 註:定義全局命名格式的

<!-- Editable user database that can also be used by

UserDatabaseRealm to authenticate users

-->

<Resource name="UserDatabase" auth="Container"

type="org.apache.catalina.UserDatabase"

description="User database that can be updated and saved"

factory="org.apache.catalina.users.MemoryUserDatabaseFactory"

pathname="conf/tomcat-users.xml" />

</GlobalNamingResources>



<Service name="Catalina">

<Connector port="8080" protocol="HTTP/1.1" http連接器,如果改端口可以把8080直接改成80就行

connectionTimeout="20000"

redirectPort="8443" />

<Connector executor="tomcatThreadPool" 線程池連接器

port="8080" protocol="HTTP/1.1"

connectionTimeout="20000"

redirectPort="8443" />


<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" https連接器

maxThreads="150" SSLEnabled="true" scheme="https" secure="true"

clientAuth="false" sslProtocol="TLS" />



<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> 只有apache的專用組件支持,AJP: apache jserv protocol, 二進制協議;



<Engine name="Catalina" defaultHost="localhost"> 默認虛擬主機為本地主機




自定義Host及Context示例:

<Host name="web1.magedu.com" appBase="/data/webapps/" unpackWARs="true" autoDeploy="true">

註:appBase指的是主機的應用庫 unpackWARs:能否自動展開WAR文件 autoDeploy:是否支持自動部署

<Context path="" docBase="ROOT" reloadable="true">

<Valve className="org.apache.catalina.valves.RemoteAddrValve" 定義訪問日誌過濾器

deny="172\.16\.100\.100"/>

</Context>

<Context path="/shop" docBase="shopxx" reloadable="true" />

<Valve className="org.apache.catalina.valves.AccessLogValve" directory="/data/logs" 日誌目錄

prefix="web1_access_log" suffix=".txt" 日誌前綴和後綴

pattern="%h %l %u %t &quot;%r&quot; %s %b" /> 日誌格式

</Host>

註意:path給定的路徑不能以“/”結尾;



tomcat配置與應用(1)