tomcat的結(jié)構tomcat的結(jié)構 <Server> 頂層類元素:可包含多個Service <Service> 頂層類元素:可包含一個Engine,多個Connector <Connector/> 連接器類元素:代表通信接口 <Engine> 容器類元素:為特定的Service組件處理所有客戶請求, 可包含多個Host。 <Host> 容器類元素:為特定的虛擬主機處理所有客戶請求 可包含多個Context。 <Context> 容器類元素:為特定的Web應用處理所有客戶請求 </Context> </Host> </Engine> </Service> </Server> Tomcat的工作模式 獨立的Servelet容器: 進程內(nèi)的Servlet容器:JNI通信機制 進程外的Servlet容器:IPC通信機制 Tomcat的環(huán)境變量 Windows環(huán)境: JAVA_HOME:Java安裝根目錄(如:c:\j2sdk1.4.2)。 CATALINA_HOME:Tomcat安裝的根目錄(如:c:\tomcat 5.0)。 Linux環(huán)境:(假設Java安裝在/home/java/j2sdk1.4.2,Tomcat安裝在/home/tomcat下)
Tomcat運行腳本(catalina.bat的使用方法)
創(chuàng)建和發(fā)布Web應用 Tomcat的目錄結(jié)構
可以在Java Web應用下的WEB-INF目錄中建立lib子目錄,存放各種Jar文件,這些Jar文件只能被當前Web應用訪問。 在運行過程中,Tomcat類裝載器先裝載classes目錄下的類,再裝載lib目錄下的類。如果兩個目錄下存在同名的類,classes目錄下的類具有優(yōu)先權。 Web應用的目錄結(jié)構
關于Context的一點體會 Context 可以直接加在Server.xml的Host中,可是據(jù)我的觀察,如果我們通過Tomcat的可視化管理界面(Tomcat Administration)來產(chǎn)生Context,就會發(fā)現(xiàn),Tomcat5.0會自動在..\Tomcat 5.0\conf\Catalina\localhost下面添加一個以Context名為文件名的Xml文件(如:你的Context叫做 "/Hello",那它就會產(chǎn)生一個"Hello.xml"的文件)。并且,如果你是第一次使用Tomcat Administration,它會把它的Server.xml及其它現(xiàn)存的所有Context都進行一次重寫(表現(xiàn)為:原來Server.xml中的注釋全部沒有了)。對于Server.xml的改寫,它還會產(chǎn)生一個備份文件。而且我發(fā)現(xiàn),只要更改過Context,就會重寫一次Server.xml。 Context元素的屬性
開發(fā)階段,將reloadable屬性設為true,有助于調(diào)試Servlet和其他的class文件。但是由于這一功能會加重服務器的運行負荷,因此建議在Web應用的產(chǎn)品發(fā)布階段,將它改為false。 <servlet>元素的屬性
配置虛擬主機 Servlet技術 Servlet是與平臺無關的服務器端組件,它可以運行在Servlet容器中。 Servlet框架是由兩個Java包組成:javax.servlet和javax.servlet.http。 Servlet的框架的核心里javax.servlet.Servlet接口,所有的Servlet都必須實現(xiàn)這一接口。 有3個方法代表了Servlet的生命周期: l init方法,負責初始化Servlet對象。 l service方法,負責響應客戶的請求。 l destroy方法,當Servlet對象退出生命周期時,負責釋放占用的資源。 Servlet類必須擴展以下兩個類中的一個。 l 擴展GenericServlet類 必須實現(xiàn)service方法,因為GenericServlet類中的service方法被聲明為抽象方法。 Public abstract void service(ServletRequest request,ServletResponse response) thows ServletException,IOException l 擴展HttpServlet類 HTTP的請求方式包括DELETE、GET、OPTION、POST、PUT、TRACT,在HttpServlet類中分別提供了相應的doXXX()方法,我們只需要重寫相應方法即可。 下面,介紹一下ServletRequest和ServletResponse接口。 l ServletRequest接口 它封裝了客戶請求信息,如客戶請求方式、參數(shù)名和參數(shù)值、客戶端正在使用的協(xié)議,以及發(fā)出客戶請求的遠程主機信息等。還為Servlet提供了直接以二進制方式讀取客戶請求數(shù)據(jù)流的ServletInputStream。 ServletRequest接口的部分方法
l ServletResponse接口 為Servlet提供了返回結(jié)果的方法。它允許Servlet設置返回數(shù)據(jù)的長度和MIME類型,并且提供輸出流ServletOutputStream。 ServletResponse接口的部分方法
Servlet的生命周期 1. 初始化階段 下列情形下Servlet容器裝載Servlet l Servlet容器啟動時自動裝載某些Servlet l 在Servlet容器啟動后,客戶首次向Servlet發(fā)出請求 l Servlet的類文件被更新后,重新裝載Servlet Servlet是否在啟動時自動裝載Servlet,是由在web.xml中為Servlet設置的<load-on-startup>屬性決定的。 Init方法有兩種形式: public void init(ServletConfig config) throws ServletException public void init() throws ServletException 初始化階段,Servlet容器會為Servlet創(chuàng)建一個ServletConfig對象,用來存放Servlet的初始化配置信息,如Servlet的初始參數(shù)。如果Servlet類覆蓋了第一種帶參數(shù)的init方法,應該先調(diào)用super.init(config)方法確保參數(shù)config引用 ServletConfig對象;如果覆蓋的是第二種不帶參數(shù)的init方法,可以不調(diào)用super.init()方法,如果要在init方法中訪問 ServletConfig對象,可以調(diào)用Servlet類的getServletConfig()方法。 HTTP請求 由3部分組成,分別是: l 請求方法URI協(xié)議/版本 l 請求頭(Request Header) l 請求正文 示例: GET /sample.jsp HTTP/1.1 Accept:image/gif,image/jpeg,*/* Accept-Language:zh-cn Connection:Keep-Alive Host:locakhost User-Agent:Mozilla/4.0(compatible;MSIE5.01;Windows NT 5.0) Accept-Encoding:gzip,deflate userName=werqin&password=1234 HTTP響應 由3部分組成,分別是: l 協(xié)議 狀態(tài)代碼 描述 l 響應頭(Response Header) l 響應正文 示例: HTTP/1.1 200 OK Server:ApacheTomcat/5.0.12 Date:Mon,6 Oct 2003 13:23:42 GMT Content-Length:112 <html> <head> <title>HTTP響應示例</title> </head> <body> Hello HTTP! </body> </html> HttpServlet的功能 它首先必須讀取HTTP請求的內(nèi)容。Servlet容器負責創(chuàng)建HttpRequest對象,并把HTTP請求信息封裝到HttpRequest對象中。 HttpServletRequest的常用方法
HttpServletResponse的常用方法
除了這兩張表列出的方法外,在HttpServletRequest的ServletRequest中提供了讀取客戶請求的通用方法,在HttpServletResponse的父類ServletResponse中提供了生成服務器響應的通用方法。 創(chuàng)建HttpServlet的步驟 (1)擴展HttpServlet抽象類. (2)覆蓋HttpServlet的部分方法,如覆蓋doGet()或doPost()方法。 (3)獲取HTTP請求信息,例如通過HttpServletRequest對象來檢索HTML表單所提交的數(shù)據(jù)或URL上的查詢字符串。無論是HTML表單數(shù)據(jù)還是URL上的查詢字符串,在HttpServletRequest對象中都以參數(shù)名/參數(shù)值的形式存放,可以通過以下方法檢索參數(shù)信息: l getParameterNames():返回一個Enumeration對象,它包含了所有的參數(shù)名信息。 l getParameter(String name):返回參數(shù)名name對象的參數(shù)值。 l getParameterValue():返回一個Enumeration對象,它包含了所有參數(shù)值信息。 (4)生成HTTP響應結(jié)果。 通過利用HttpServletResponse對象的getWriter()方法,可以獲得一個PrintWriter對象。使用PrintWriter的print()或println()方法可以向客戶端發(fā)送字符串數(shù)據(jù)流。 |
|