版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
期末復(fù)習(xí)第1章
Web2.0下的JSPJSP(JavaServerPages)是由SunMicrosystem公司推出的新技術(shù),是基于JavaServlet以及Java體系的Web開(kāi)發(fā)技術(shù)。一種先進(jìn)、安全和跨平臺(tái)的動(dòng)態(tài)網(wǎng)頁(yè)開(kāi)發(fā)技術(shù)JSP可以一次編寫(xiě),處處運(yùn)行JSP頁(yè)面可以將內(nèi)容的動(dòng)態(tài)生成部分和靜態(tài)顯示部分進(jìn)行分離
JSP概述P3——JSP概念Tomcat介紹Tomcat是一個(gè)可以直接提供Web服務(wù)的JSP服務(wù)器,同時(shí)也支持Servlet的工具安裝Tomcat下載(
)apache-tomcat-6.0.18.zip解壓到JDK所在的根目錄測(cè)試Tomcat啟動(dòng)Tomcat在瀏覽器地址欄中輸入
如果看到tomcat的歡迎頁(yè)面說(shuō)明安裝成功了JSP運(yùn)行環(huán)境:JDK+Tomcat
/bin:存放各種平臺(tái)下啟動(dòng)和關(guān)閉Tomcat的腳本文件/work:Tomcat把各種由jsp生成的servlet文件放在這個(gè)目錄下/webapps:web應(yīng)用的發(fā)布目錄,把java開(kāi)發(fā)的web站點(diǎn)或war文件放入這個(gè)目錄下就可以通過(guò)tomcat服務(wù)器訪問(wèn)了/conf:Tomcat的各種配置文件/lib:存放Tomcat服務(wù)器和所有web應(yīng)用都能訪問(wèn)的JARTomcat的目錄結(jié)構(gòu)及其用途JSP運(yùn)行機(jī)制P16
否是否第一次調(diào)用JSP引擎代碼轉(zhuǎn)換是直接調(diào)用Java編譯器請(qǐng)求響應(yīng)第2章
JSP頁(yè)面元素JSP頁(yè)面基本結(jié)構(gòu)一個(gè)JSP頁(yè)面有兩部分組成JSP頁(yè)面的靜態(tài)部分,如HTML,CSS標(biāo)記等,用來(lái)完成頁(yè)面布局和顯示樣式JSP頁(yè)面的動(dòng)態(tài)部分,如腳本程序,JSP標(biāo)簽等,用來(lái)完成數(shù)據(jù)處理JSP頁(yè)面動(dòng)態(tài)部分包括:腳本元素腳本元素用來(lái)嵌入Java代碼,這些代碼將成為轉(zhuǎn)換得到的Servlet的一部分腳本元素又劃分為聲明、表達(dá)式和腳本執(zhí)行程序指令:指令用來(lái)從整體上控制Servlet的結(jié)構(gòu)動(dòng)作:動(dòng)作用來(lái)引入現(xiàn)有的組件或者控制JSP引擎的行為注釋JSP頁(yè)面構(gòu)成元素程序腳本元素表達(dá)式在運(yùn)行后被自動(dòng)轉(zhuǎn)化為字符串,然后插入到這個(gè)表達(dá)式所在的位置顯示。所以用戶(hù)能在一行文本中插入JSP表達(dá)式語(yǔ)法格式如下所示:<%=某個(gè)表達(dá)式%>在JSP表達(dá)式中應(yīng)遵循以下規(guī)則:完整性獨(dú)立性不能以分號(hào)結(jié)尾<%=newString(“JSP”);%>非法表達(dá)式,不能以分號(hào)結(jié)尾JSP表達(dá)式腳本程序包含在兩個(gè)“%”之間,必須符合Java的相關(guān)規(guī)定在運(yùn)行時(shí)被插入到JavaServlet程序的service方法中能夠在腳本程序中:創(chuàng)建需要用到的變量或?qū)ο缶帉?xiě)Java表達(dá)式使用內(nèi)置對(duì)象和用<jsp:useBean>進(jìn)行創(chuàng)建的對(duì)象。完成常見(jiàn)邏輯功能,如計(jì)算求和等JSP腳本程序作用:用來(lái)定義頁(yè)面級(jí)變量以保存信息定義JSP頁(yè)面級(jí)可能需要的支撐功能例如:如果在JSP頁(yè)面重復(fù)代碼太多,通常這些代碼編寫(xiě)成獨(dú)立Java類(lèi)或方法可以進(jìn)行變量,方法和類(lèi)三種聲明語(yǔ)法:聲明都在“<%!聲明%>”標(biāo)記中“<%”與“!”不允許出現(xiàn)空格聲明中要以分號(hào)(;)作為變量分隔符和句子結(jié)束符<%!inti=0;%>是一個(gè)合法的變量聲明JSP聲明Directive(編譯指令)相當(dāng)于在編譯期間的命令。格式:
<%@DirectiveName屬性=“屬性值"%>常見(jiàn)的Directive:pageincludetaglibJSP指令(Directive)page指令主要用于設(shè)置JSP頁(yè)面的屬性如頁(yè)面編碼形式,緩存大小,錯(cuò)誤處理頁(yè)面等。基本格式:<%@page[language="java"][extends="package.class"][import="{package.class|package.*},..."][session="true|false"][buffer="none|8kb|sizekb"][autoFlush="true|false"][isThreadSafe="true|false"][info="text"][errorPage="relativeURL"][isErrorPage="true|false"][contentType="Type[;charset=characterSet]"%>page指令include表示在當(dāng)前頁(yè)面中靜態(tài)包含一個(gè)文件靜態(tài)包含表示被包含的文件在JSP文件翻譯成Servlet文件時(shí)會(huì)被完整地插入到該JSP文件中去。被包含的文件可以是JSP文件、HTML文件、文本文件或者只是一段Java代碼等。語(yǔ)法格式為:<%@includefile="URL"%>注意:JSP頁(yè)面和被包含頁(yè)面共享所有頁(yè)面作用域數(shù)據(jù)不能在file文件中添加參數(shù)進(jìn)行動(dòng)態(tài)內(nèi)容求值<%@includefile=“inc.jsp”%>include指令名稱(chēng)動(dòng)作說(shuō)明jsp:include在頁(yè)面被請(qǐng)求的時(shí)候引入一個(gè)文件jsp:useBean尋找或者實(shí)例化一個(gè)JavaBeanjsp:setProperty設(shè)置JavaBean的屬性jsp:getProperty輸出某個(gè)JavaBean的屬性jsp:forward把請(qǐng)求轉(zhuǎn)到一個(gè)新的頁(yè)面jsp:param不同頁(yè)面之間傳遞參數(shù)jsp:plugin根據(jù)瀏覽器類(lèi)型為Java插件生成OBJECT或EMBED標(biāo)記JSP常見(jiàn)動(dòng)作表<jsp:include>動(dòng)作指令表示在當(dāng)前的JSP頁(yè)面中,動(dòng)態(tài)地包含資源。在JSP頁(yè)面被請(qǐng)求執(zhí)行時(shí)調(diào)用被包含的頁(yè)面可包含txt文件、JSP文件、HTML文件和Servlet文件。語(yǔ)法格式為:<jsp:includepage="{relativeURL|<%=expression%>}"flush="true"/>例如:<jsp:includepage="admin/login.jsp"/><jsp:includepage="copyright.html"/><jsp:includepage="admin/login.jsp">
<jsp:paramname="username"value=“huizhi"/></jsp:include>
<jsp:include>動(dòng)作指令<jsp:forward>用于將請(qǐng)求(頁(yè)面控制權(quán))轉(zhuǎn)發(fā)到另一個(gè)JSP、Servlet或者靜態(tài)資源文件。每當(dāng)遇到此操作時(shí),JSP引擎就停止執(zhí)行當(dāng)前的JSP,轉(zhuǎn)而執(zhí)行被轉(zhuǎn)發(fā)的資源。語(yǔ)法格式為:<jsp:forwardpage={"relativeURL"|"<%=expression%>"}/>
或
<jsp:forwardpage={"relativeURL"|"<%=expression%>"}><jsp:paramname="name"value=“value"/></jsp:forward>例如:
<jsp:forwardpage="/JSPExample/forward1.jsp"/><jsp:forwardpage="/JSPExample/JExample6.jsp"><jsp:paramname="username"value=“huizhi"/></jsp:forward><jsp:forward>轉(zhuǎn)向動(dòng)作指令為了簡(jiǎn)化頁(yè)面開(kāi)發(fā)復(fù)雜性,JSP提供了一些可在腳本中使用的內(nèi)置對(duì)象(內(nèi)置對(duì)象不需要進(jìn)行聲明)。每一個(gè)內(nèi)置對(duì)象都對(duì)應(yīng)一個(gè)特定Java類(lèi)或接口。JSP容器提供以下內(nèi)置對(duì)象:request、response、session、application、config、pageContext、page、out、exception。對(duì)象類(lèi)型描述requestjavax.servlet.HttpServletRequest客戶(hù)端的請(qǐng)求responsejavax.servlet.ServletResponseJSP頁(yè)面的響應(yīng)applicationjavax.servlet.ServletContext全局對(duì)象,用于為多個(gè)應(yīng)用程序保存信息。sessionjavax.servlet.http.HttpSession會(huì)話(huà)對(duì)象,用來(lái)保存每個(gè)用戶(hù)信息,以便跟蹤每個(gè)用戶(hù)的操作狀態(tài)引言對(duì)象類(lèi)型描述outjavax.servlet.jsp.JspWriter代表輸出流對(duì)象,用來(lái)向客戶(hù)端輸出數(shù)據(jù)。configjavax.servlet.ServletConfig頁(yè)面的ServletConfig對(duì)象,表示servlet的配置。pageContextjavax.servlet.jsp.pageContext為JSP頁(yè)面包裝頁(yè)面的上下文,管理對(duì)屬于JSP中特殊可見(jiàn)部分中已命名對(duì)象的訪問(wèn)。pagejava.lang.Object指向頁(yè)面自身的方式。exceptionjava.lang.Throwable在運(yùn)行時(shí)沒(méi)有被Throwable捕獲的錯(cuò)誤。如果一個(gè)JSP頁(yè)面要應(yīng)用此對(duì)象,就必須把isErrorPage設(shè)為true,否則無(wú)法編譯。response對(duì)象封裝了JSP產(chǎn)生的響應(yīng),然后被發(fā)送到客戶(hù)端以響應(yīng)客戶(hù)端的請(qǐng)求。response對(duì)象和request對(duì)象功能恰好相反,request對(duì)象封裝的是客戶(hù)端提交信息,而response對(duì)象封裝的是返回客戶(hù)端的信息。response對(duì)象的作用域和request對(duì)象相同,都是在當(dāng)前頁(yè)面。如果超出了這個(gè)范圍,就會(huì)失效。response方法有三類(lèi),分別為設(shè)定表頭方法、設(shè)定響應(yīng)狀態(tài)碼、重定向方法。
response對(duì)象概述publicabstractStringgetCharacterEncoding()返回響應(yīng)的字符編碼類(lèi)型,如果沒(méi)有指定類(lèi)型,那么字符編碼被默認(rèn)設(shè)置為text/plain。publicabsbactServletOutputStreamgetOutputStream()返回用來(lái)寫(xiě)入響應(yīng)數(shù)據(jù)的輸出流。publicabstractvoidsetContentLength(intlength)設(shè)置返回響應(yīng)的數(shù)據(jù)的長(zhǎng)度。publicabstractvoidsetContentType(Stringtype)設(shè)置響應(yīng)的MIME類(lèi)型。publicabstractvoidaddCookie(Cookiecookie)將指定的Cookie加入響應(yīng)。publicabstractStringencodingRedirect(Stringurl)對(duì)指定的URL進(jìn)行編碼,以便在sendRedirect()方法中使用。publicabstractvoidsetStatus(intcode)設(shè)置響應(yīng)的狀態(tài)代碼,使用默認(rèn)的消息。response方法在動(dòng)態(tài)網(wǎng)站的某些操作中,有時(shí)需要從一個(gè)頁(yè)面轉(zhuǎn)向另外一個(gè)頁(yè)面,如用戶(hù)登錄成功。要達(dá)到頁(yè)面重定向的效果,可以采用前面學(xué)習(xí)的動(dòng)作指令jsp:forward,也可以采用response對(duì)象的sendRedirect
publicabstractvoidsendRedirect(Stringurl)其中url表示轉(zhuǎn)向的頁(yè)面資源,可以是JSP頁(yè)面、HTML頁(yè)面、Servlet等。JSP頁(yè)面還可以用response對(duì)象的sendError方法將頁(yè)面重定向到一個(gè)包含了出錯(cuò)信息的頁(yè)面。sendError方法接收一個(gè)錯(cuò)誤碼以及一個(gè)可選的出錯(cuò)消息,如下所示:<%response.sendError(404,”頁(yè)面沒(méi)有找到!”);%>案例ResponseExample1.jsp、ResponseExample1_1.jsp、
ResponseExample1_2.jsp文件response重定向(1)forward可以在JSP頁(yè)面中使用,也可以在Servlet中實(shí)現(xiàn)。在JSP頁(yè)面中使用<jsp:forwardpage=“目標(biāo)文件”/>,例如要跳轉(zhuǎn)到user.jsp,可以寫(xiě):<jsp:forwardpage="user.jsp"/>在Servlet中使用RequestDispatcher的forward方法,要跳轉(zhuǎn)到user.jsp,可以寫(xiě):RequestDispatcherrd=request.getRequestDispatcher("userlist.jsp");rd.forward(request,response);
sendRedirect使用response.sendRedirect("userist.jsp");(2)請(qǐng)求次數(shù)不同,這是最本質(zhì)的區(qū)別。(3)傳值方式不同。(4)客戶(hù)端在地址欄中看到的地址不同。forward和sendRedirect區(qū)別在把輸出結(jié)果傳送到瀏覽器時(shí),瀏覽器必須啟動(dòng)相應(yīng)的應(yīng)用程序來(lái)處理該文檔。為了標(biāo)識(shí)文檔的類(lèi)型,服務(wù)器通過(guò)HTTP報(bào)頭的Content-Type指定。例如,要發(fā)送一個(gè)MicrosoftExcel文件到客戶(hù)端,那么此時(shí)的MIME類(lèi)型就是“application/vnd.ms-excel”。在大多數(shù)實(shí)際情況中,當(dāng)瀏覽器接收到這個(gè)文件后,會(huì)啟用Execl來(lái)進(jìn)行處理。在JSP中,設(shè)定MIME類(lèi)型的方法是通過(guò)Response對(duì)象的setContentType()方法。每個(gè)MIME類(lèi)型都由兩部分組成:前半部分為數(shù)據(jù)的類(lèi)別,如文本text、聲音audio和圖像image等;后半部分與文檔的擴(kuò)展名相關(guān),為處理數(shù)據(jù)的應(yīng)用程序。動(dòng)態(tài)響應(yīng)contentType屬性服務(wù)器是怎么把信息在用戶(hù)瀏覽器顯示的呢?這由out對(duì)象來(lái)完成。雖然可以用表達(dá)式來(lái)完成輸出,但是表達(dá)式最終也得轉(zhuǎn)換成out對(duì)象輸出。因?yàn)镴SP頁(yè)面中的表達(dá)式,經(jīng)求值以后的結(jié)果將轉(zhuǎn)換成String對(duì)象,隨后該String對(duì)象被發(fā)送到out對(duì)象輸出。out對(duì)象的基類(lèi)是JspWriterout對(duì)象主要的方法是:print()方法和println()方法。out對(duì)象的作用范圍是page(頁(yè)面執(zhí)行期)如果page指令中autoflush=“true”,那么當(dāng)out對(duì)象的緩沖區(qū)被填滿(mǎn)時(shí),out對(duì)象會(huì)自動(dòng)清空緩沖區(qū)的內(nèi)容
<%out.println(“<ahref=’’>新浪網(wǎng)</a>”;)%>
out輸出對(duì)象第4章
JavaBean技術(shù)JavaBean是描述Java的軟件組件模型。它們?cè)谌萜髦羞\(yùn)行并對(duì)外提供具體的業(yè)務(wù)邏輯操作功能。組件:繼過(guò)程性模型和面向?qū)ο竽P椭蟮男乱淮壿嬆P停亲钕冗M(jìn)的軟件重用技術(shù)組件是自含的、可重用的軟件單元JavaBean實(shí)質(zhì)上是一個(gè)Java類(lèi),一個(gè)遵循某種規(guī)則的類(lèi)。當(dāng)用在Web程序中時(shí),會(huì)以組件的形式出現(xiàn),并完成特定邏輯處理功能。一般來(lái)說(shuō)JavaBean被分為兩類(lèi):可視化Bean和不可視化Bean。可視化Bean可以表示為簡(jiǎn)單的GUI組件。例如按鈕組件、菜單等等。不可視化JavaBean在后臺(tái)完成業(yè)務(wù)邏輯處理功能,例如訪問(wèn)數(shù)據(jù)庫(kù)執(zhí)行查詢(xún)操作的JavaBean,這些JavaBean在運(yùn)行時(shí)不需要任何可視的界面。JavaBean介紹可以實(shí)現(xiàn)代碼的重復(fù)使用;易維護(hù),易使用,易編寫(xiě);可在支持Java的任何平臺(tái)上工作,而不需要重新編譯;可以在內(nèi)部網(wǎng)內(nèi)或者網(wǎng)絡(luò)之間傳輸,支持分布式環(huán)境JavaBean的其它特性:(1)自查(introspection)應(yīng)用程序構(gòu)造工具都能分析Bean具有哪些屬性、方法和事件,以及使用它們時(shí)所必需的信息利用標(biāo)準(zhǔn)的Bean信息類(lèi)進(jìn)行顯式的定義以命名約定為基礎(chǔ)的設(shè)計(jì)模式來(lái)定義(2)客戶(hù)定制(customization)開(kāi)發(fā)人員可以利用應(yīng)用程序構(gòu)造工具設(shè)置Bean的屬性值,以定制Bean的外觀和行為。(3)永久性存儲(chǔ)可以在永久性存儲(chǔ)設(shè)備上保存Bean類(lèi),以供今后重用。JavaBean具有以下特性雖然編寫(xiě)JavaBean與編寫(xiě)Java程序沒(méi)有太多區(qū)別,但仍然有以下幾點(diǎn)需要注意。
(1)如果Bean中有構(gòu)造方法,那么這個(gè)構(gòu)造方法不能帶任何參數(shù),并指定為public。
(2)Bean中被JSP頁(yè)面直接訪問(wèn)的成員方法的修飾符必須指定為public。
(3)Bean具有的成員變量名的第一個(gè)字母必須小寫(xiě),aa1、aa2、bb1等的第一個(gè)字母都是小寫(xiě)的。JavaBean編寫(xiě)規(guī)范(4)Bean中的每個(gè)成員變量都有相應(yīng)的get和set方法對(duì)其進(jìn)行讀/寫(xiě)。
(5)在get和set后面跟著成員變量的名字,且這個(gè)成員變量名的第一個(gè)字母必須改為大寫(xiě)字母。例如,成員變量的名字是xy,定義的get方法的方法名必須是getXy;定義的set方法的方法名必須是setXy。
(6)如果成員變量的數(shù)據(jù)類(lèi)型是boolean型的,則可以用isXy方法來(lái)代替上述的getXy方法。packagebeans;publicclassNoteBean{privateStringtitle;privateStringauthor;privateStringcontent;publicStringgetTitle(){returntitle;}publicvoidsetTitle(Stringtitle){this.title=title;}publicStringgetAuthor(){returnauthor;}publicvoidsetAuthor(Stringauthor){this.author=author;}publicStringgetContent(){returncontent;}publicvoidsetContent(Stringcontent){this.content=content;}}下面為一個(gè)留言Bean,實(shí)現(xiàn)作者、標(biāo)題和內(nèi)容的設(shè)置和獲取使用JavaBean我們知道,JavaBean是從JSP頁(yè)面中分離出來(lái)的Java代碼,是JSP頁(yè)面的動(dòng)態(tài)部分。在這里可以以面向?qū)ο蟮姆绞絹?lái)看待JSP頁(yè)面和JavaBean之間的關(guān)系,JSP頁(yè)面是一個(gè)獨(dú)立的對(duì)象,JavaBean是一個(gè)獨(dú)立的對(duì)象,其形式如圖4-1所示:從上圖中可以看出,JSP頁(yè)面和JavaBean組件都是獨(dú)立對(duì)象,JSP頁(yè)面如果要使用JavaBean,必須通過(guò)相應(yīng)語(yǔ)句調(diào)用JavaBean,即JSP動(dòng)作標(biāo)記。在JSP頁(yè)面中使用JavaBean,必須在JSP頁(yè)面中有調(diào)用另外一個(gè)JavaBean對(duì)象的語(yǔ)句。該語(yǔ)句為JSP的動(dòng)作標(biāo)簽<jsp:useBean>,<@pageimport=“包名.類(lèi)名”><jsp:useBeanid=“beanname”class=“classname”scope=“范圍”/>或者<jsp:useBeanid="beanname"class="classname“scope=“范圍”>
初始化代碼</jsp:useBean>useBean標(biāo)記JSP引擎分配給每個(gè)客戶(hù)的Bean是互不相同的,該Bean的有效范圍或生命周期是由<jsp:useBean>動(dòng)作中的Scope屬性的取值確定的。在JavaBean中有4種作用域:application(應(yīng)用程序)、session(會(huì)話(huà))、request(請(qǐng)求)和page(頁(yè)面)。page作用域
page作用域是四個(gè)作用域范圍最小的一個(gè),它只適用于當(dāng)前的JSP頁(yè)面,當(dāng)客戶(hù)離開(kāi)這個(gè)JSP頁(yè)面時(shí)JavaBean就會(huì)失效。如果另外一個(gè)JSP頁(yè)面同時(shí)也使用此JavaBean,二者之間沒(méi)有任何的聯(lián)系。<jsp:useBeanid=“Bean-name”class=“class-name”scope=“page”> 初始化成員 </jsp:useBean>JavaBean作用域范圍request范圍JavaBean實(shí)例可以在處理請(qǐng)求的所有JSP頁(yè)面中存在,這個(gè)對(duì)象只有在請(qǐng)求全部處理完畢后才會(huì)被釋放掉??梢酝ㄟ^(guò)forward標(biāo)簽將Bean傳送給下一個(gè)JSP。當(dāng)一個(gè)JSP程序通過(guò)forward標(biāo)簽將Request對(duì)象傳送給下一個(gè)JSP程序時(shí),屬于RequestScope的Bean也將會(huì)隨著Request對(duì)象送出,此時(shí),由forward標(biāo)簽所串聯(lián)起來(lái)的JSP程序可以共享相同的Bean。語(yǔ)法格式
<jsp:useBeanid=“Bean-name”class=“class-name”scope=“request”> 初始化成員 </jsp:useBean>request對(duì)象request作用域當(dāng)一個(gè)訪問(wèn)者訪問(wèn)站點(diǎn)時(shí),則產(chǎn)生一個(gè)session對(duì)象。一個(gè)訪問(wèn)者開(kāi)始訪問(wèn)站點(diǎn)時(shí),從他訪問(wèn)的起始頁(yè)到隨后訪問(wèn)的所有頁(yè)面的集合,被稱(chēng)為一個(gè)session。session作用域范圍的JavaBean對(duì)象存儲(chǔ)在HTTP會(huì)話(huà)中,常用于共享同一session的JSP頁(yè)面。注意:<%@page%>標(biāo)簽中不要設(shè)置session=false,否則在這個(gè)JSP頁(yè)面中session將不會(huì)起作用。語(yǔ)法格式<jsp:useBeanid=“Bean-name”class=“class-name”scope=“session”> 初始化成員 </jsp:useBean>session作用域application作用域范圍的JavaBean對(duì)所有的用戶(hù)和所有頁(yè)面都起作用,只需創(chuàng)建一次,而且將會(huì)存在于Web應(yīng)用程序執(zhí)行的整個(gè)過(guò)程中。application作用域JavaBean對(duì)于處理需要對(duì)所有用戶(hù)和頁(yè)面都有效的數(shù)據(jù)十分有用。常用于共享同一application的JSP程序。作用域范圍為applcation的JavaBean對(duì)象存儲(chǔ)在ServletContext中,即application對(duì)象,這就意味著這樣的JavaBean的生存周期是整個(gè)應(yīng)用程序,當(dāng)webServer停掉才會(huì)消失掉。語(yǔ)法格式<jsp:useBeanid=“Bean-name”class=“class-name”scope=“application”> 初始化成員 </jsp:useBean>application作用域第5章
Servlet技術(shù)創(chuàng)建并返回一個(gè)包含基于客戶(hù)請(qǐng)求性質(zhì)的、動(dòng)態(tài)內(nèi)容的、完整的HTML頁(yè)面。創(chuàng)建可嵌入到現(xiàn)有HTML頁(yè)面中的一部分HTML片段。處理多個(gè)客戶(hù)機(jī)的連接,接收多個(gè)客戶(hù)機(jī)的輸入,并將結(jié)果廣播到多個(gè)客戶(hù)機(jī)上??梢耘c其它服務(wù)器資源(包括數(shù)據(jù)庫(kù)和基于Java的應(yīng)用程序)進(jìn)行通信,轉(zhuǎn)交請(qǐng)求給其它的服務(wù)器和Servlet,按照任務(wù)類(lèi)型或組織范圍,允許在幾個(gè)服務(wù)器中劃分邏輯上的服務(wù)器。Servlet開(kāi)發(fā)人員可以定義彼此之間共同工作的激活代理,每個(gè)代理都是一個(gè)Servlet,代理者之間可以傳送數(shù)據(jù)。
Servlet的應(yīng)用范圍Servlet由Web服務(wù)器的Servlet引擎負(fù)責(zé)管理運(yùn)行。引擎為每一個(gè)請(qǐng)求創(chuàng)建一個(gè)輕量級(jí)的線(xiàn)程并進(jìn)行管理。Servlet的工作原理瀏覽器向Web服務(wù)器發(fā)出請(qǐng)求Web服務(wù)器響應(yīng)請(qǐng)求后,把發(fā)給Servlet的請(qǐng)求,轉(zhuǎn)交給Servlet引擎處理Servlet引擎檢查對(duì)應(yīng)的Servlet是否已裝載,如果沒(méi)有裝載,則將其載入內(nèi)存并初始化,然后由該Servlet對(duì)請(qǐng)求進(jìn)行處理。如果Servlet中含有訪問(wèn)數(shù)據(jù)庫(kù)的操作,則還要通過(guò)相關(guān)的JDBC驅(qū)動(dòng)程序,與數(shù)據(jù)庫(kù)相連,對(duì)數(shù)據(jù)庫(kù)進(jìn)行訪問(wèn)Servlet通過(guò)JDBC取回結(jié)果,生成HTML頁(yè)面并將頁(yè)面送回Web服務(wù)器Web服務(wù)器將頁(yè)面發(fā)送回瀏覽器Servlet的工作原理Servlet生命周期可以劃分為三個(gè)階段:初始化階段、響應(yīng)客戶(hù)請(qǐng)求階段和終止階段分別對(duì)應(yīng)javax.servlet.Servlet接口中定義的三個(gè)方法init()、service()和destroy()。Servlet生命周期所謂加載Servlet,實(shí)際上是用Web服務(wù)器創(chuàng)建一個(gè)Servlet對(duì)象,調(diào)用這個(gè)對(duì)象的init()方法完成必要的初始化工作。在下列時(shí)刻服務(wù)器加載Servlet:如果配置了自動(dòng)加載選項(xiàng),則在啟動(dòng)Web服務(wù)器時(shí)自動(dòng)加載Servlet。在Web服務(wù)器啟動(dòng)后客戶(hù)端首次向Servlet發(fā)出請(qǐng)求時(shí),自動(dòng)加載Servlet。重新裝載Servlet時(shí)自動(dòng)加載Servlet。
加載Servlet當(dāng)Servlet初始化結(jié)束后,Servlet接收由服務(wù)器傳來(lái)的用戶(hù)請(qǐng)求,調(diào)用service()方法處理客戶(hù)請(qǐng)求。service()方法首先獲得關(guān)于請(qǐng)求對(duì)象的信息,處理請(qǐng)求,訪問(wèn)其它資源,獲得需要的信息。然后,service()方法使用響應(yīng)對(duì)象的方法將響應(yīng)傳回Web服務(wù)器,Web服務(wù)器做相應(yīng)處理后再將其傳送至客戶(hù)端。service()方法也可能激活其它方法(如doGet()、doPost()或用戶(hù)自己開(kāi)發(fā)的新的方法)以處理請(qǐng)求。Servlet能夠同時(shí)運(yùn)行多個(gè)service()方法。對(duì)于每一個(gè)客戶(hù)請(qǐng)求,Servlet都在它自己的線(xiàn)程中調(diào)用service()方法為用戶(hù)服務(wù)。如此循環(huán),但Servlet不再調(diào)用init()方法進(jìn)行初始化,一般情況下只初始化一次。處理客戶(hù)請(qǐng)求當(dāng)Web服務(wù)器要卸載Servlet或重新裝入Servlet時(shí),服務(wù)器會(huì)調(diào)用servlet的destroy()方法,將Servlet從內(nèi)存中刪除,否則它一直為客戶(hù)服務(wù)??傊?,Servlet的生命周期開(kāi)始于將它裝載到Web服務(wù)器,結(jié)束于終止或重新裝載Servlet。當(dāng)Servlet被加載后,主要通過(guò)循環(huán)調(diào)用service()方法為用戶(hù)服務(wù)。結(jié)束Servlet
1.編寫(xiě)Servlet文件P172
2.編譯Servlet文件
3.部署Servlet文件
4.訪問(wèn)Servlet文件<servlet><servlet-name>GoShop</servlet-name><servlet-class>svlt.GoShop</servlet-class></servlet><servlet-mapping><servlet-name>GoShop</servlet-name><url-pattern>/GoShop</url-pattern></servlet-mapping>Servlet實(shí)際應(yīng)用過(guò)程在HttpServlet抽象類(lèi)中的service()方法一般不需要被重寫(xiě),它會(huì)自動(dòng)調(diào)用和用戶(hù)請(qǐng)求對(duì)應(yīng)的doGet()和doPost()方法。doGet()由服務(wù)器通過(guò)service()方法調(diào)用,用于處理HTTP的GET請(qǐng)求。GET請(qǐng)求可供客戶(hù)端向服務(wù)器發(fā)送表單數(shù)據(jù)。有了GET請(qǐng)求,這些表單數(shù)據(jù)就會(huì)附帶在瀏覽器發(fā)送的URL后面,作為查詢(xún)字符串發(fā)送給服務(wù)器??砂l(fā)送的表單數(shù)據(jù)的數(shù)量由URL允許的最大長(zhǎng)度來(lái)限制。doPost()由服務(wù)器通過(guò)service()方法調(diào)用,用于處理HTTP的POST請(qǐng)求。POST請(qǐng)求使客戶(hù)端向服務(wù)器發(fā)送表單數(shù)據(jù)。有了POST請(qǐng)求,這些表單數(shù)據(jù)就會(huì)被單獨(dú)發(fā)送給服務(wù)器,而不是被追加到URL后面,這樣就可以實(shí)現(xiàn)發(fā)送大量表單數(shù)據(jù)的目的。doGet和doPost方法第6章
JSP訪問(wèn)數(shù)據(jù)庫(kù)(1)導(dǎo)入JDBC標(biāo)準(zhǔn)類(lèi)庫(kù)<%@pageimport="java.sql.*"%>(2)注冊(cè)數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序使用Class.forName()方法加載相應(yīng)數(shù)據(jù)庫(kù)的JDBC驅(qū)動(dòng)程序。Class.forName()方法是Java的Class類(lèi)的靜態(tài)方法,它將使Java虛擬機(jī)動(dòng)態(tài)地尋找、載入并連接指定的類(lèi)。如果該類(lèi)無(wú)法找到,則拋出ClaaNotFoundException類(lèi)的異常。(3)建立與數(shù)據(jù)庫(kù)的連接該連接可以分兩部進(jìn)行,其格式為
①
Stringurl=jdbc:<JDBC驅(qū)動(dòng)程序名>:<數(shù)據(jù)源標(biāo)記>;
②
Connectionconn=DriverManager.getConnection(url);一個(gè)JDBC的數(shù)據(jù)庫(kù)連接是用數(shù)據(jù)庫(kù)url來(lái)標(biāo)記的。連接將告訴驅(qū)動(dòng)程序管理器使用哪個(gè)驅(qū)動(dòng)程序和連接哪個(gè)數(shù)據(jù)源。conn表示通過(guò)DriverManager類(lèi)的靜態(tài)方法getConnection()建立的一個(gè)數(shù)據(jù)庫(kù)連接對(duì)象。(4)使用SQL語(yǔ)句對(duì)這個(gè)數(shù)據(jù)庫(kù)對(duì)象進(jìn)行操作。(5)使用close()方法解除JSP與數(shù)據(jù)庫(kù)的連接并關(guān)閉數(shù)據(jù)庫(kù)。
JDBC編程要點(diǎn)DriverManager:負(fù)責(zé)加載各種不同驅(qū)動(dòng)程序,作用于用戶(hù)和驅(qū)動(dòng)程序之間。跟蹤可用的驅(qū)動(dòng)程序,并在數(shù)據(jù)庫(kù)和相應(yīng)驅(qū)動(dòng)程序之間建立連接Driver:驅(qū)動(dòng)程序,會(huì)將自身加載到DriverManager中去,并處理相應(yīng)的請(qǐng)求并返回相應(yīng)的數(shù)據(jù)庫(kù)連接(Connection)。Connection:數(shù)據(jù)庫(kù)連接,負(fù)責(zé)進(jìn)行數(shù)據(jù)庫(kù)間通訊,SQL執(zhí)行以及事務(wù)處理都在某個(gè)特定Connection環(huán)境中進(jìn)行??梢援a(chǎn)生用以執(zhí)行SQL的Statement。Statement:用以執(zhí)行SQL查詢(xún)和更新(針對(duì)靜態(tài)SQL語(yǔ)句和單次執(zhí)行)PreparedStatement:用以執(zhí)行包含動(dòng)態(tài)參數(shù)的SQL查詢(xún)和更新(在服務(wù)器端編譯,允許重復(fù)執(zhí)行以提高效率)。CallableStatement:用以調(diào)用數(shù)據(jù)庫(kù)中的存儲(chǔ)過(guò)程。ResultSet:表示數(shù)據(jù)庫(kù)結(jié)果集的數(shù)據(jù)表,通過(guò)執(zhí)行查詢(xún)數(shù)據(jù)庫(kù)的語(yǔ)句生成。ResultSetMetaData:可用于獲取關(guān)于ResultSet對(duì)象中列的類(lèi)型和屬性信息的對(duì)象JDBC常用接口連接數(shù)據(jù)庫(kù)的常用方式使用純Java數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序連接
這種驅(qū)動(dòng)利用作為中間件的應(yīng)用服務(wù)器來(lái)訪問(wèn)數(shù)據(jù)庫(kù)。應(yīng)用服務(wù)器作為一個(gè)到多個(gè)數(shù)據(jù)庫(kù)的網(wǎng)關(guān),客戶(hù)端通過(guò)它可以連接到不同的數(shù)據(jù)庫(kù)服務(wù)器。應(yīng)用服務(wù)器通常都有自己的網(wǎng)絡(luò)協(xié)議,Java客戶(hù)端程序通過(guò)JDBC驅(qū)動(dòng)程序?qū)DBC調(diào)用發(fā)送給應(yīng)用服務(wù)器,應(yīng)用服務(wù)器使用本地驅(qū)動(dòng)程序訪問(wèn)數(shù)據(jù)庫(kù),從而完成請(qǐng)求。利用作為中間件的應(yīng)用服務(wù)器訪問(wèn)數(shù)據(jù)庫(kù)使用純Java數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序連接
實(shí)例 1.連接前準(zhǔn)備
MySQL數(shù)據(jù)庫(kù)mysql-connector-java-5.0.4-bin.jar
創(chuàng)建數(shù)據(jù)庫(kù)、數(shù)據(jù)庫(kù)表 2.連接數(shù)據(jù)庫(kù)程序
ConnMysql.jsp 3.連接測(cè)試連接數(shù)據(jù)庫(kù)的常用方式更新數(shù)據(jù)庫(kù)中的數(shù)據(jù),可以使用SQL語(yǔ)句UPDATE、INSERT和DELETE操作,然后將包含UPDATE、INSERT、DELETE的SQL語(yǔ)句交給Statement對(duì)象的executeUpdate()方法執(zhí)行。Statement對(duì)象用于執(zhí)行不帶參數(shù)的簡(jiǎn)單SQL語(yǔ)句。在JSP程序中,由于外部環(huán)境的變化,后臺(tái)連接數(shù)據(jù)庫(kù)中的數(shù)據(jù)每隔一段時(shí)間,就需要更新。我們不可能直接打開(kāi)MySQL數(shù)據(jù)庫(kù)進(jìn)行更新,一般情況下都是借助JSP程序進(jìn)行更新。添加、更新與刪除操作普通SQL語(yǔ)句
Stringsql="insertintobookInfo(bookname,publisher,price) values('"+name+"','"+publisher+"','"+price+"')";預(yù)處理語(yǔ)句
Stringsql="insertintobookinfo(bookname,publisher,price) values(?,?,?)";預(yù)處理語(yǔ)句具有兩個(gè)主要的優(yōu)點(diǎn):查詢(xún)只需要被解析(或準(zhǔn)備)一次,但可以使用相同或不同的參數(shù)執(zhí)行多次。傳給預(yù)處理語(yǔ)句的參數(shù)不需要使用引號(hào),底層驅(qū)動(dòng)會(huì)處理這個(gè)。實(shí)現(xiàn)接口:
PreparedStatement接口創(chuàng)建表示預(yù)編譯的SQL語(yǔ)句的對(duì)象。實(shí)例:PreparedTest.jsp使用預(yù)處理語(yǔ)句第7章
Ajax技術(shù)Ajax技術(shù)成功實(shí)現(xiàn)了無(wú)刷新頁(yè)面和數(shù)據(jù)的異步交互Ajax不是單一的技術(shù),而是四種技術(shù)的集合Ajax簡(jiǎn)介(AsynchronousJavaScriptandXML)技術(shù)功能簡(jiǎn)介JavaScriptJavaScript是通用的腳本語(yǔ)言,用來(lái)嵌入在某種應(yīng)用之中。Web瀏覽器中嵌入的JavaScript解釋器允許通過(guò)程序與瀏覽器的很多內(nèi)建功能進(jìn)行交互。Ajax應(yīng)用程序是使用JavaScript編寫(xiě)的CSS(層疊樣式表)CSS為Web頁(yè)面元素提供了一種可重用的可視化樣式的定義方法。它提供了簡(jiǎn)單而又強(qiáng)大的方法,以一致的方式定義和使用可視化樣式。在Ajax應(yīng)用中,用戶(hù)界面的樣式可以通過(guò)CSS獨(dú)立修改DOM(文檔對(duì)象模型)DOM以一組可以使用JavaScript操作的可編程對(duì)象展現(xiàn)出Web頁(yè)面的結(jié)構(gòu)。通過(guò)使用腳本修改DOM,Aja
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 創(chuàng)新職業(yè)服務(wù)協(xié)議模板(2024年)
- DB11∕T 1705-2019 農(nóng)業(yè)機(jī)械作業(yè)規(guī)范 青飼料收獲機(jī)
- 2024年企業(yè)新員工勞動(dòng)協(xié)議細(xì)則
- 2024電子商務(wù)平臺(tái)服務(wù)居間協(xié)議
- 2024美發(fā)沙龍個(gè)人聘用協(xié)議樣本
- 2024挖掘機(jī)購(gòu)銷(xiāo)協(xié)議范本
- 2024智能家居設(shè)備安裝服務(wù)協(xié)議
- 2024年度紀(jì)錄片后期制作服務(wù)協(xié)議
- 夫妻雙方房產(chǎn)分割自愿離婚協(xié)議格式
- 2024物業(yè)管理室內(nèi)裝修協(xié)議
- 《肉牛營(yíng)養(yǎng)需要》教學(xué)課件
- 網(wǎng)易云音樂(lè)用戶(hù)滿(mǎn)意度調(diào)查問(wèn)卷
- 雪佛蘭愛(ài)唯歐說(shuō)明書(shū)
- 經(jīng)營(yíng)分析報(bào)告案例-麥肯錫風(fēng)格
- 煙花爆竹經(jīng)營(yíng)單位主要負(fù)責(zé)人安全培訓(xùn)
- 2023春國(guó)開(kāi)會(huì)計(jì)實(shí)務(wù)專(zhuān)題形考任務(wù)1-4題庫(kù)及答案匯總
- 可疑值的取舍-Q檢驗(yàn)法
- 生物信息學(xué)(上海海洋大學(xué))知到章節(jié)答案智慧樹(shù)2023年
- 核磁共振T臨床應(yīng)用
- 文件與文件夾測(cè)試題(含參考答案)
- 電工安全培訓(xùn)課件
評(píng)論
0/150
提交評(píng)論