JSF(JavaServer Faces)學(xué)習(xí)手冊(cè)-入門篇(1.1)
1.1 Servlet
Servlet是一種用Java寫的Web組件,它的目的是產(chǎn)生動(dòng)態(tài)內(nèi)容。它位于應(yīng)用服務(wù)器端,由Web容器管理它的執(zhí)行和生命周期。在此所討論的應(yīng)用服務(wù)器通常指的是Kingdee Apusic應(yīng)用服務(wù)器。
1.1.1 Lifecycle Phase(生命周期)
Servlet使用HTTP Request-Response協(xié)議間接地通過容器與Web用戶進(jìn)行交互。在Servlet的體系結(jié)構(gòu)中,Web服務(wù)器向應(yīng)用服務(wù)器傳遞請(qǐng)求。應(yīng)用服務(wù)器使用JVM(Java Virtual Machine,Java虛擬機(jī))執(zhí)行Servlet,在并發(fā)處理多個(gè)請(qǐng)求時(shí)啟動(dòng)多個(gè)獨(dú)立的輕量級(jí)線程就可以滿足,對(duì)于Servlet的加載與初始化只有一次,大大降低了系統(tǒng)開銷。當(dāng)請(qǐng)求結(jié)束時(shí),應(yīng)用服務(wù)器在內(nèi)存中保留Servlet,等待新的請(qǐng)求。說明了一個(gè)Servlet生命周期
實(shí)例化:默認(rèn)構(gòu)造函數(shù)-->初始化:init()-->服務(wù)調(diào)用:service()-->銷毀:destroy()
圖表 1?1
init()
public void init(ServletConfig config) throws ServletException
每一次Servlet時(shí),會(huì)調(diào)用init方法,它僅被調(diào)用一次,以通知servlet其已經(jīng)被裝入服務(wù)中,可以重寫此方法,為其提供只需執(zhí)行一次的初始化代碼,比如初始化某些值、裝入數(shù)據(jù)庫驅(qū)動(dòng)程序等。
service()
public abstract void service(ServletRequest servletrequest,
ServletResponse servletresponse) throws ServletException,
IOException;
每次調(diào)用servlet時(shí),servlet容器就會(huì)調(diào)用相應(yīng)servlet的service方法。對(duì)于每個(gè)HTTP請(qǐng)求,servlet容器都會(huì)創(chuàng)建一個(gè)請(qǐng)求對(duì)象和一個(gè)響應(yīng)對(duì)象,請(qǐng)求對(duì)象實(shí)現(xiàn)了javax.servlet.ServletRequest或javax.servlet.http.HttpServletRequest接口,而響應(yīng)對(duì)象實(shí)現(xiàn)了javax.servlet.ServletResponse或javax.servlet.http.HttpServletResponser接口,并將它們傳給service方法。請(qǐng)求對(duì)象封裝了從HTTP請(qǐng)求里解析出來的,并且對(duì)servlet有用的信息,比如請(qǐng)求的URL、請(qǐng)求的HEAD、cookie及請(qǐng)求的參數(shù)等。當(dāng)請(qǐng)求完畢以后,servlet使用響應(yīng)對(duì)象將響應(yīng)發(fā)送回Web客戶端。
destory
public void destroy()
在刪除一個(gè)servlet實(shí)例前,servlet容器會(huì)調(diào)用其destroy方法,這種情況一般發(fā)生在servlet容器需要被關(guān)閉或釋放內(nèi)存時(shí)??梢允褂么朔椒▉砬宄加玫馁Y源(如內(nèi)存、文件句柄及線程等)或確保某些持久化數(shù)據(jù)被保存。
1.1.2 Directory(目錄結(jié)構(gòu))
為了運(yùn)行servlet應(yīng)用,需要一個(gè)servlet容器。Apusic是可用的容器之一,本書的代碼都將在Apusic 5.0測(cè)試通過,但是也可以在其他支持Servlet 2.5規(guī)范的servlet容器來運(yùn)行。
Servlet需要按照J2EE規(guī)范定義的目錄結(jié)構(gòu)打包后才可以部署到應(yīng)用服務(wù)器上運(yùn)行。打包有兩種格式:EAR和WAR,EAR是標(biāo)準(zhǔn)的J2EE應(yīng)用格式,WAR是一個(gè)Web打包文件。無論哪種打包方式,都會(huì)包括META-INF目錄,是應(yīng)用程序配置文件所在目錄,具體說明可以參考《Apusic 5.0安裝參考手冊(cè)》;還會(huì)有WEB-INF目錄,是Web應(yīng)用配置文件所在目錄。
在WEB-INF目錄下包括兩個(gè)子目錄classes和lib,classes目錄包括Web應(yīng)用中用到的所有Java類(Servlet類也屬于Java類一種),目錄結(jié)構(gòu)反映了Java包的名稱;lib目錄包括了Web應(yīng)用中所引用的所有庫文件。
所有與網(wǎng)頁展現(xiàn)相關(guān)的文件(JSP文件是動(dòng)態(tài)的網(wǎng)頁展現(xiàn))都直接存放在WAR根目錄下。為了更好地組織這些文件,可以在WAR中直接建立子目錄。例如:所有的JSP文件都放在jsp子目錄中,所有的圖片文件都放在images子目錄中。除了WEB-INF目錄以外,Web客戶端可以直接訪問WAR中的所有文件。
一般情況下,一個(gè)Web應(yīng)用會(huì)有一個(gè)部署描述符,文件名稱是web.xml的XML文件,其中包含了應(yīng)用的完整描述,此文件也放在WEB-INF目錄下。
1.1.3 Deploy Description(部署描述符)
web.xml(部署描述符)是XML文件,可以使用文本編輯器來編輯它。符合servlet 2.5規(guī)范的應(yīng)用部署描述符格式如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
</web-app>
這個(gè)XML頭指明了該部署描述符的XML模式(XML Schema Description)可以從http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd下載。如果打開這個(gè)文件,可以了解到里面有許多元素,但是這些元素都是可選的,不強(qiáng)制使用任何一個(gè)。
提示 1?1所有的元素都插入到<web-app>與</web-app>之間。
定義Servlet
在Web瀏覽器訪問servlet之前,需要先在web.xml里將其映射到一個(gè)路徑。例如: 程序清單 1?1將一個(gè)叫做MyServlet的servlet文件映射到/MyURL路徑上。
<servlet>
<servlet-name>MyServlet</servlet-name>
<servlet-class>ch01.MyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/MyURL</url-pattern>
</servlet-mapping>
程序清單 1?1 web.xml中的servlet映射
這樣用戶就可以通過http://localhost:6888/appName/MyURL來訪問該servlet。
提示 1?2修改了web.xml后,需要重新啟動(dòng)應(yīng)用才能生效。
定義Context
在web.xml中還可以定義初始化用的上下文參數(shù),這些參數(shù)可以應(yīng)用于所有的servlet/JSP頁面中,從而避免將這些信息硬編碼在servlet的代碼里。例如:程序清單 1?2將userName/zhuyuanxiang和password/apusic進(jìn)行了注入。
<context-param>
<param-name>userName</param-name>
<param-value>zhuyuanxiang</param-value>
</context-param>
<context-param>
<param-name>password</param-name>
<param-value>apusic</param-value>
</context-param>
程序清單 1?2 web.xml中context的定義
1.1.4 Context Parameter(上下文參數(shù))
為了獲取web.xml中定義的上下文參數(shù),首先需要獲得實(shí)現(xiàn)ServletContext接口對(duì)象,然后再調(diào)用接口的兩個(gè)方法:
l getInitParametersName()。不需要傳入?yún)?shù),返回包含所有context參數(shù)名的java.util.Enumeration。
l getInitParameter()。需要傳入一個(gè)String類型參數(shù),參數(shù)是上下文名字,返回包含上下文定義的值。
1.1.5 Listener(偵聽器)
1.1.6 打包及部署應(yīng)用
posted on 2007-09-11 14:04 zYx.Tom 閱讀(862) 評(píng)論(0) 編輯 收藏