假設你已將Tomcat解壓,你已得到下列
目錄
結構
:
? ? ? ??
目錄名
--描述
? ? ? ??bin
? ? ? ??
包含啟動/關閉腳本。
? ? ? ??conf
? ? ? ??
包含不同的配置文件,包括
server.xml(Tomcat
的主要配置文件)和為不同的Tomcat配置的web應用設置缺省值的文件web.xml。
? ? ? ??doc
? ? ? ??
包含各種Tomcat文檔。
? ? ? ??lib
? ? ? ??
包含Tomcat使用的jar文件,unix平臺此目錄下的任何文件都被加到Tomcat的classpath中。
? ? ? ??logs
? ? ? ??Tomcat
擺放日志文件的地方。
? ? ? ??src
? ? ? ??ServletAPI
源文件,先別高興,這些只有些必須在Servlet容器內實現的空接口和抽象類。
? ? ? ??webapps
? ? ? ??
包含web項目示例。
? ? ? ??此外你可以Tomcat會創建如下目錄
:
? ? ? ??work
? ? ? ??Tomcat
自動生成,放置Tomcat運行時的臨時文件(如編譯后的JSP文件),如在Tomcat運行時刪除此目錄.JSP頁面將不能運行。
? ? ? ??classes
? ? ? ??
你可以創建此目錄來添加一些附加的類到類路徑中,任何你加到此目錄中的類都可在Tomcat的類路徑中找到自身。
Tomcat 配置文件及其元素描述
一, tomcat 的配置文件
? ? ? ??Tomcat的配置基于兩個配置文件:
? ? ? ??1.
server.xml
- Tomcat
的全局配置文件。
? ? ? ??2.
web.xml
-
在Tomcat中配置不同的關系環境。
二,server.xml
? ? ? ??server.xml
是Tomcat的主配置文件.完成兩個目標:
? ? ? ??1 提供Tomcat組件的初始配置。
? ? ? ??2
說明Tomcat的結構與含義,使得Tomcat通過實例化組件完成起動及構建自身。
? ? ? ??在server.xml中的重要元素的描述:
? ? ? ??Server
? ? ? ??server.xml文件中最重要的元素,Server定義了一個Tomcat服務器,Server元素能包含Logger和ContextManager元素類型
? ? ? ??Logger
? ? ? ??
此元素定義一個Logger對象,每個 Logger都有一個名字來標識,也有一個紀錄Logger的輸出和冗余級別(描述此日志級別)和包含日志文件的路徑。通常有servlet的 Logger(ServletContext.log()處),JSP和Tomcat運行時的Logger。
? ? ? ??ContextManager
? ? ? ??ContextManager
說明一套
ContextInterceptor, RequestInterceptor , Context
和他們的Connectors的配置及結構.ContextManager有幾個隨同提供的特性
:
? ? ? ??1.
用來紀錄調試信息的調試級別
? ? ? ??2. webapps/,conf/,logs/
和所有已定義的環境的基本位置.用來使Tomcat可以在TOMCAT_HOME外的
其他
目錄啟動
.
? ? ? ??3.
工作目錄的名字
? ? ? ??ContextInterceptor&RequestInterceptor
? ? ? ??這 些偵聽器(interceptors)偵聽具體發生在ContextManager中的事件。例如,ContextInterceptor偵聽 Tomcat的啟動及終止事件,RequestInterceptor監視在它服務過程中用戶請求需要通過的不同階段。Tomcat的管理員不必知道太多 關于偵聽器的知識。另外,開發者應該知道這是如何在Tomcat中實現一個”全局”型的操作(例如安全性及每個請求日志
)
? ? ? ??Connector
? ? ? ??Connector
表示一個到用戶的聯接,不管是通過web服務器或直接到用戶瀏覽器(在一個獨立配置中)。Connector負責管理Tomcat的工作線程和讀/寫連接到不同用戶的端口的請求/響應。Connector的配置包含如下信息:
? ? ? ??1.
句柄類
? ? ? ??2.
句柄監聽的TCP/IP端口
? ? ? ??3.
句柄服務器端口的TCP/IP的
backlog.
? ? ? ??Context
? ? ? ??
每個Context提供一個指向你放置你Web項目的Tomcat的下屬目錄。每個Context包含如下配置:
[Page]
? ? ? ??1. Context
放置的路徑,可以是與ContextManager主目錄相關的路徑。
? ? ? ??2.
紀錄調試信息的調試級別。
? ? ? ??3.
可重載的標志.開發Servlet時,重載更改后的 Servlet,這是一個非常便利的特性,你可以調試或用Tomcat測試新代碼而不用停止或重新啟動Tomcat。要打開重載,把reloadable 設為true即可。這雖花費時間但可檢測所發生的變化;更重要的是鑒于在一個裝載類對象裝入一個新的servlet時,類裝載觸發器可能會擲出一些錯誤。 為避免這些問題,你可以設置可重載為false,這將停止重載功能。
三,web.xml
? ? ? ??Tomcat 可以讓用戶通過將缺省的web.xml放入conf目錄中來定義所有關系環境的web.xml的缺省值。建立一個新的關系環境時,Tomcat使用缺省的 web.xml文件作為基本設置,應用項目特定的web.xml(放在應用項目的WEB-INF/web.xml文件)來覆蓋這些缺省值。
?
?
?
?
?
?
?
1.Tomcat簡介
?? Jakarta Tomcat服務器是一種Servlet/JSP容器,經歷了3.x到4.0.x到4.1.x的變遷,現在最新的版本為5.0.x,支持 Servlet2.4和JSP2.0規范.安裝Tomcat之前必須安裝JDK,并在環境變量中設置JAVA_HOME變量。這樣Tomcat就可以啟動 了。
2.文件構成
安裝后的Tomcat文件構成如下圖所示:
?
2.1首先介紹Java類庫的存放位置,有三個:分別是/server/lib、/shared/lib和/common/lib。
三 個位置的區別:/server/lib下的Jar文件只能被Tomcat服務器自身訪問;/shared/lib下的jar文件及類只能被部署在 Tomcat中的所有Web應用訪問,不能被Tomcat服務器本身訪問;/common/lib下的Jar文件及類既能被部署在Tomcat中的所有 Web應用訪問,也能被Tomcat服務器本身訪問。
此外某個Web應用下的Web-inf/lib下的Jar文件只能被該Web應用訪問。
2.2類的加載順序
(1).最先是$JAVA_HOME/jre/lib/ext/下的jar文件。
(2).環境變量CLASSPATH中的jar和class文件。
(3).$CATALINA_HOME/common/classes下的class文件。
(4).$CATALINA_HOME/commons/endorsed下的jar文件。
(5).$CATALINA_HOME/commons/i18n下的jar文件。
(6).$CATALINA_HOME/common/lib?下的jar文件。
(JDBC驅動之類的jar文件可以放在這里,這樣就可以避免在server.xml配置好數據源卻出現找不到JDBC?Driver的情況。)
(7).$CATALINA_HOME/server/classes下的class文件。
(8).$CATALINA_HOME/server/lib/下的jar文件。
(9).$CATALINA_BASE/shared/classes?下的class文件。
(10).$CATALINA_BASE/shared/lib下的jar文件。
(11).各自具體的webapp?/WEB-INF/classes下的class文件。
(12).各自具體的webapp?/WEB-INF/lib下的jar文件。
2.3 admin應用和manager應用
這 是Tomcat中自帶的兩個Web應用,位于<%CATALINA_HOME%>/server/webapps/admin (manager),訪問地址是http://localhsot:8080/admin(manager)。要訪問這兩個Web應用,需要在
<%CATALINA_HOME%>/conf/tomcat-users.xml中添加如下內容:
<user username="admin" password="1234" role="admin"/>?????????? //對應admin Web應用
<user username="manager" password="1234" role="manager"/>?? //對應manager Web應用
admin應用-
把所有可配置的信息分為三類:Tomcat Server、Resources、User Definition。
Tomcat Server-相當于server.xml中的<Server>元素及其子元素,<Service>、< Host>、<Context>、<Resources>、<Date Source>。
Resources -相當于server.xml中的<GlobalNamingResources>,共有四種資源:Date Source(JNDI數據源)、Mail Sessioin(JNDI Mail Session資源)、Environment Entry(環境變量)、User Database(安全域中的用戶數據庫)。
User Definition-與tomcat-users.xml相對應。
manager應用
-列出來所有Web應用和狀態,并提供了Start、Stop、Reload、 Undeploy命令,還可以發布
<%CATALINA_HOME%>/webapps目錄下的Web應用或系統文件任意位置的WAR文件。
3. 相關配置
Tomcat里面常修改的配置文件有兩個Server.xml和Web.xml。
3.1 Server.xml--文件位置是<%CATALINA_HOME%>/conf/server.xml。該文件配置整個Tomcat服務器,其包含的各個域說明如下所示:
<Server>元素 每個Service元素只能有一個Engine元素.元素處理在同一個<Service>中所有<Connector>元素接收到的客戶請求.由org.apahce.catalina.Engine接口定義.
<Engine name="Catalina" defaultHost="localhost" debug="0">
1>className指定實現Engine接口的類,默認值為StandardEngine
2>defaultHost指定處理客戶的默認主機名,在<Engine>中的<Host>子元素中必須定義這一主機
3>name定義Engine的名字
在<Engine>可以包含如下元素<Logger>, <Realm>, <Value>, <Host>
? <Host>元素 由Host接口定義.一個Engine元素可以包含多個<Host>元素.每個<Host>的元素定義了一個虛擬主機.它包含了一個或多個Web應用.
? <Host name="localhost" debug="0" appBase="webapps" unpackWARs="true" autoDeploy="true">
1>className指定實現Host接口的類.默認值為StandardHost
2>appBase指定虛擬主機的目錄,可以指定絕對目錄,也可以指定相對于<CATALINA_HOME>的相對目錄.如果沒有此項,默認為<CATALINA_HOME>/webapps
3>autoDeploy如果此項設為true,表示Tomcat服務處于運行狀態時,能夠監測appBase下的文件,如果有新有web應用加入進來,會自運發布這個WEB應用
4>unpackWARs如果此項設置為true,表示把WEB應用的WAR文件先展開為開放目錄結構后再運行.如果設為false將直接運行為WAR文件
5>alias指定主機別名,可以指定多個別名
6> deployOnStartup如果此項設為true,表示Tomcat服務器啟動時會自動發布appBase目錄下所有的Web應用.如果Web應用中 的server.xml沒有相應的<Context>元素,將采用Tomcat默認的Context
7>name定義虛擬主機的名字
在<Host>元素中可以包含如下子元素<Logger>, <Realm>, <Value>, <Context>
<Context>元素 由Context 接口定義.是使用最頻繁的元素.每個<Context元素代表了運行在虛擬主機上的單個Web應用.一個<Host>可以包含多個 <Context>元素.每個web應用有唯一的一個相對應的Context代表web應用自身.servlet容器為第一個web應用創建 一個ServletContext對象.
<Context path="/sample" docBase="sample" debug="0" reloadbale="true">
1>className指定實現Context的類,默認為StandardContext類
2>path指定訪問Web應用的URL入口,注意/myweb,而不是myweb了事
3>reloadable如果這個屬性設為true, Tomcat服務器在運行狀態下會監視在WEB-INF/classes和Web-INF/lib目錄CLASS文件的改運.如果監視到有class文件被更新,服務器自重新加載Web應用
3>cookies指定是否通過Cookies來支持Session,默認值為true
4>useNaming指定是否支持JNDI,默認值為了true
在<Context>元素中可以包含如下元素<Logger>, <Realm>, <Resource>, <ResourceParams>
Connector元素 由Connector接口定義.<Connector>元素代表與客戶程序實際交互的給件,它負責接收客戶請求,以及向客戶返回響應結果.
<Connector port="8080" maxThread="50" minSpareThreads="25" maxSpareThread="75" enableLookups="false" redirectPort="8443" acceptCount="100" debug="0" connectionTimeout="20000" disableUploadTimeout="true" />
<Connection port="8009" enableLookups="false" redirectPort="8443" debug="0" protocol="AJP/1.3" />
第一個Connector元素定義了一個HTTP Connector,它通過8080端口接收HTTP請求;第二個Connector元素定義了一個JD Connector,它通過8009端口接收由其它服務器轉發過來的請求.
Connector元素共用屬性
1>className指定實現Connector接口的類
2>enableLookups如果設為true,表示支持域名解析,可以把IP地址解析為主機名.WEB應用中調用request.getRemoteHost方法返回客戶機主機名.默認值為true
3>redirectPort指定轉發端口.如果當前端口只支持non-SSL請求,在需要安全通信的場命,將把客戶請求轉發至SSL的redirectPort端口
HttpConnector元素的屬性
1>className實現Connector的類
2>port設定Tcp/IP端口,默認值為8080,如果把8080改成80,則只要輸入
http://localhost
即可
因為TCP/IP的默認端口是80
3>address如果服務器有二個以上ip地址,此屬性可以設定端口監聽的ip地址.默認情況下,端口會監聽服務器上所有的ip地址
4>bufferSize設定由端口創建的輸入流的緩存大小.默認值為2048byte
5>protocol設定Http協議,默認值為HTTP/1.1
6>maxThreads設定在監聽端口的線程的最大數目,這個值也決定了服務器可以同時響應客戶請求的最大數目.默認值為200
7>acceptCount設定在監聽端口隊列的最大客戶請求數量,默認值為10.如果隊列已滿,客戶必須等待.
8>connectionTimeout定義建立客戶連接超時的時間.如果為-1,表示不限制建立客戶連接的時間
JkConnector的屬性
1>className實現Connector的類
2>port設定AJP端口號
3>protocol必須設定為AJP/1.3
3.2 Web.xml--文件位置是webapps/Web應用/WEB-INF/Web.xml。該文件是Web應用部署描述文件,用于配置其發布信息,主要配置以下內容:
(1)Servlet的定義
(2)Servlet的初始化參數
(3)servlet及jsp的映射
(4)welcome文件清單
(5)資源引用(如數據源引用)
(6)環境變量的定義
3.3 Tomcat中JNDI數據源的配置
(1).? 在<%CATALINA_HOME%>/conf/server.xml中加入注意DBTest為你的webapp目錄:
<Context path="/DBTest" docBase="/DBTest" debug="0" reloadable="true" crossContext="true">??
??????? <Resource name="jdbc/TestDB" auth="Container" type="javax.sql.DataSource"/>
???? <ResourceParams name="jdbc/TestDB">
?????? <parameter>
???????? <name>factory</name>
???????? <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
?????? </parameter>
?????? <parameter>
???????? <name>maxActive</name>
???????? <value>100</value>
?????? </parameter>
?????? <parameter>
???????? <name>maxIdle</name>
???????? <value>30</value>
?????? </parameter>
?????? <parameter>
???????? <name>maxWait</name>
???????? <value>10000</value>
?????? </parameter>
?????? <parameter>
??????? <name>username</name>
??????? <value>sa</value>
?????? </parameter>
?????? <parameter>
??????? <name>password</name>
??????? <value>cugb201201</value>
?????? </parameter>
?????? <parameter>
????????? <name>driverClassName</name>
????????? <value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value>
?????? </parameter>
?????? <parameter>
???????? <name>url</name>
???????? <value>jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=TestDB1</value>
?????? </parameter>
???? </ResourceParams>
????</Context>
(2)在webapp\WEB-INF\web.xml中加入<resource-ref>元素:
<resource-ref>
<res-ref-name>jdbc/TestDB</res-ref-name>
??? <res-type>javax.sql.DataSource</res-type>
??? <res-auth>Container</res-auth>
??? <res-sharing-scope>Shareable</res-sharing-scope>
? </resource-ref>
(3)本代碼以sqlServer為例說明,需要將其相關的jdbc驅動程序拷貝到<CATALINA_HOME>/common/lib目錄下.
(4)在程序中通過連接池取得數據庫連接:
try{
??????? Context ctx = new InitialContext();
?????????????? if(ctx == null)
????????????????????? throw new Exception("no Context!");
?????????????? ds = (DataSource)ctx.lookup("java:comp/env/jdbc/TestDB");
}
catch(Exception e){
??????? System.out.println(e.getMessage());
}
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
