tomcat訪問許可權
❶ Tomcat基礎(2)
Tomcat伺服器的配置主要集中於tomcat/conf下的catalina.policy, catalina.properties,context.xml、server.xml、tomcat-users.xml、web.xml文件。
server.xml 是tomcat伺服器的核心配置文件,包含了Tomcat的servlet容器(catalina)的所有配置。由於配置的屬性特別多,我們在這里主要講解其中的一部分重要配置。
Server是server.xml的根元素,用於創建一個Server實例,默認使用的實現類是org.apache.catalina.core.standardserver.
port:Tomcat監聽的關閉伺服器的埠。
shutdown:關閉伺服器的指令字元串。
Server內嵌的子元素為Listener, GlobalNamingResources, Service.
默認配置的5個Listener的含義
GlobalNamingResources中定義了全局命名服務
該元素用於創建Service實例,默認使用org.apache.catalina.core.Standardservice,默認情況下,Tomcat僅指定了Service的名稱,值為"Catalina",Service可以內嵌的元素為:Listener, Executor, connector, Engine ,其中Listener用於為Service添加生命周期監聽器,Executor用於配置Service共享線程池,Connector用於配置Service包含的鏈接器,Engine用於配置Service中鏈接器對應的Servlet容器引擎。一個Server伺服器,可以包含多個Service服務。
默認情況下Service並未添加共享線程池配置,如果我們想添加一個線程池,可以在下添加如下配置:
屬性說明
屬性含義
name線程池名稱,用於Connector中指定。
nameprefix所創建的每個線程的名稱前綴,一個單獨的線程名稱為namePrefix+threadNumber.
maxThreads池中最大線程數。
minSpareThreads活躍線程數,也就是核心池線程數,這些線程不會被銷毀,會一直存在。
maxIdleTime線程空閑時間,超過該時間後,空閑線程會被銷毀,默認值為6000 (1分鍾) ,單位毫秒。
maxQueuesize在被執行前最大線程排隊數目,默認為Int的最大值,也就是廣義的無限。除非特殊情況,這個值不需要更改,否則會有請求不會被處理的情況發生。
prestartminSpareThreads啟動線程池時是否啟動minSpareThreads部分線程。默認值為false,即不啟動。
threadPriority線程池中線程優先順序,默認值為5,值從1到10。
className
線程池實現類,未指定情況下,默認實現類為org.apache.catalina.core.standardThreadExecutor,如果想使用自定義線程池首先需要實現 org.apache.catalina.Executor介面。
JDK工具jconsole.exe觀察線程池被創建
如果不配置共享線程池,那麼Catalina各組件在用到線程池時會獨立創建。
Connector用於創建鏈接器實例。默認情況下, server.xml配置了兩個鏈接器,一個支持HTTP協議,一個支持AJP協議。因此大多數情況下,我們並不需要新增鏈接器配置,只是根據需要對已有鏈接器進行優化。
屬性說明
1) port:埠號,Connector用於創建服務端Socket並進行監聽,以等待客戶端請求鏈接。如果該屬性設置為0,Tomcat將會隨機選擇一個可用的埠號給當前Connector使用。
2)protocol :當前Connector支持的訪問協議。默認為HTTP/1.1 ,並採用自動切換機制選擇一個基於java NIO的鏈接器或者基於本地APR的鏈接器(根據本地是否含有Tomcat的本地庫判定)。
如果不希望採用上述自動切換的機制,而是明確指定協議,可以使用以下值。
Http協議:
AJP協議
3) connectionTimeOut: Connector接收鏈接後的等待超時時間,單位為毫秒。-1表示不超時。
4)redirectPort:當前Connector不支持SSL(HTTP協議證書)請求,接收到了一個請求,並且也符合security-constraint約束,需要SSL傳輸,Catalina自動將請求重定向到指定的埠。
5)executor:指定共享線程池的名稱, 也可以通過maxThreads, minSpareThreads等屬性配置內部線程池。
6)URIEncoding:用於指定編碼URI的字元編碼,
Tomcat8.x版本默認的編碼為UTF-8,Tomcat7.X版本默認為ISO-8859-1(解決請求字元串亂碼問題,Tomcat8版本默認UTF-8不需要指定URI字元編碼)。
完整的配置如下:
Engine作為Servlet引擎的頂級元素,內部可嵌入:Cluster、Listener、Realm、Valve和Host。
屬性說明:
1)name:用於指定Engine的名稱,默認為Catalina。該名稱會影響一部分Tomcat的存儲路徑(如臨時文件);
2)defaultHost:默認使用虛擬主機名稱,當客戶端請求指向的的主機無效時將交由默認虛擬主機處理,默認為localhost。
Host元素用於配置一個虛擬主機,它支持以下嵌入元素:Alias,cluster,Listener,valve,Realm,context,如果在Engine下配置Realm,那麼此配置將在當前Engine下的所有Host中共享。同樣,如果在Host中配置Realm , 則在當前Host下的所有context中共享。Context中的Realm優先順序>Host的Realm優先順序>Engine中的Realm優先順序。
屬性說明:
1)name:當前Host通用的網路名稱,必須與DNS伺服器上的注冊信息一致。Engine中包含的Host必須存在一個名稱與Engine的defaultHost設置一致。
2)appBase:當前Host的應用基礎目錄,當前Host上部署的web應用均在該目錄下(可以是絕對目錄,相對路徑)。默認為webapps。
3)unpackWARs:設置為true, Host在啟動時會將appBase目錄下war包解壓為目錄。設置為false,Host將直接從war文件啟動。
4)autoDeploy:控制tomcat是否在運行時定期檢測並自動部署新增或變更的web應用。
通過給Host添加別名,我們可以實現同一個Host擁有多個網路名稱,配置如下:
Context用於配置一個web應用,默認配置如下:
屬性描述 :
1)docBase:Web應用目錄或War包的部署路徑。可以是絕對路徑,也可以是相對於Host appBase的相對路徑。
2)Path:Web應用的Context路徑。如果我們Host名為localhost,則該web應用訪問的路徑為: http://localhost:8080/myApp
它支持的內嵌元素為:CookieProcessor,Loader,Manager,Realm,Resources,WatchedResource,Jarscanner,Valve.
該配置文件中,主要配置的是Tomcat的用戶,角色等信息,用來控制Tomcat中manager,host-manager的訪問許可權。
web.xml是web應用的描述文件, 它支持的元素及屬性來自於servlet規范定義。在Tomcat中,web應用的描述信息包括tomcat/conf/web.xml中默認配置以及web應用WEB-INE/web.xml下的定製配置。
我們可以通過<context-param>添加ServletContext初始化參數,它配置了一個鍵值對,這樣我們可以在應用程序中使用javax.servlet.ServletContext.getInitParameter()方法獲取參數。 可以直接在servlet中進行應用 。
5.2 會話配置
<session-config>用於配置web應用會話,包括超時時間Cookie配置以及 會話追蹤模式 。它將覆蓋server.xml和context.xml
1)session-timeout:超時時間,單位分鍾。
2)cookie-config:用於配置會話追蹤Cookie
nane:Cookie的名稱
domain:Cookie的域名
path: Cookie的路徑
comment: 注釋
http-only:cookie只能通過HTTP方式進行訪問, JS無法讀取或修改,此項可以增加網站訪問的安全性。
secuze :設置true則此cookie只能通過HTTPS連接傳遞到伺服器,而HTTP連接則不會傳遞該信息。注意是從瀏覽器傳遞到伺服器,伺服器端的Cookie對像不受此項影響。
max-age:以秒為單位表示cookie的生存期,默認為-1表示是會話Cookie ,瀏覽器關閉時就會消失。
3)tracking-mode:用於配置會話追蹤模式,Servlet3.0版本中支持追蹤模式:COOKIE,URL,SSL
ACOOKIE:通過HTTP Cookie 追蹤會話是最常用的會話追蹤機制, 而且Servlet規范也要求所有的Servlet規范都需要支持Cookie追蹤。
B.URL:URL重寫是最基本的會話追蹤機制。當客戶端不支持Cookie時,可以採用URI重寫的方式。當採用URI追蹤模式時,請求路徑需要包含會話標識信息,Servlet容器會根據路徑中的會話標識設置請求的會話信息。如:"http: //www.myserver.com/user/index.html;jessionid=1234567890。
C.SSL:對於SSL請求,通過SSL會話標識確定請求會話標識。
Servlet的配置主要是兩部分,servlet和servlet-mapping;
配置說明:
1)sexvlet-name:指定servle的名稱,該屬性在web.xml中唯一。
2)servlet-class:用於指定servlet類名
3)init-param:用於指定servlet的初始化參數, 在應用中可以通過HttpServlet.getInitParameter獲取。
4) load-on-startup:用於控制在Web應用啟動時,Servlet的載入順序。值小於0, web應用啟動時,不載入該servlet,第一次訪問時載入
5)enabled: true ,false。若為false ,表示servlet不處理任何請求。
6)url-pattern:用於指定URL表達式,一個servlet-mapping可以同時配置多個url-pattern。
Servlet 中文件上傳配置
配置說明:
1)location:存放生成的文件地址。
2) max-file-size:允許上傳的文件最大值。默認值為-1,表示沒有限制。
3)max-request-size:針對該multi/form-data請求的最大數量,默認值為-1,表示無限制。
4)file-size-threshold:當數量量大於該值時, 內容會被寫入文件。
Listener用於監聽servlet中的事件,例如context、request、session對象的創建、修改、刪除,並觸發響應響應。Listener是 觀察者模式 的 實現 ,在servlet中主要用於context、request、session對象的生命周期進行監控。在servlet 2.5規范中共定義了8重Listener。在啟動時,ServletContextListener的執行順序與web.xml中的配置順序一致,停止時執行順序相反。
配置說明:
1)filter-name:用於指定過濾器名稱,在web.xm1中,過濾器名稱必須唯一。
2)filter-class:過濾器的全限定類名,該類必須實現Filter介面。
3)async-supported:該過濾器是否支持非同步。
4)init-param:用於配置Filter的初始化參數,可以配置多個,可以通過 FilterConfig.getInitParameter 獲取
5)url-pattern:指定該過濾器需要攔截的URL。
Tomcat conf/web.xml中配置了web默認訪問頁面。
Tomcat啟動後會嘗從上到下的請求順序。
如果在項目的WEB-INF目錄下的web.xml中配置訪問頁面,則會覆蓋Tomcat中的默認配置。
error-page用於配置web項目訪問異常時定向的頁面,支持HTTP響應碼和異常類兩種形式。優化用戶體驗,保證系統安全。
Tomcat中自定義錯誤頁面放入ROOT目錄下。
項目中將錯誤頁面放在web目錄下,並且會覆蓋Tomcat中的配置。
從早期的Tomcat版本開始,就提供了web版的管理控制台,他們是兩個獨立的web應用,位於webapps目錄下。Tomcat提供的管理應用有用於管理的Host的host-manager和用於管理web應用的manager。
這兩個web應用主要作用就是為Tomcat提供了管理後台,可以通過這兩個應用去管理Tomcat中所配置的虛擬主機、Tomcat中部署的web應用、Tomcat佔用的JVM內存分配、JVM參數配比等
Host-manager主要用來管理 虛擬主機 信息。Tomcat啟動之後,可以通過 http://localhost:8080/host-manager/html 訪問該web應用。host-manager默認添加了訪問許可權控制,當打開網址時,需要輸入用戶名和密碼(conf/tomcat-users.xml中配置) 。所以要想訪問該頁面,需要在conf/tomcat-users.xml中配置,並分配對應的角色:
1)admin-gui:用於控制頁面訪問許可權
2)admin-script:用於控制以簡單文本的形式進行訪問
配置如下:
界面:
Manager用來管理部署在當前Tomcat上的web應用,訪問路徑為 http://localhost:8080/manager ,同樣manager也添加了頁面訪問控制,因此我們需要為登錄用戶分配角色為:
Server Status查看伺服器狀態,給JVM內存優化參考數據