版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第十二章 JSP的JavaBean實(shí)現(xiàn)JAVA語言程序設(shè)計(jì)1Website to reference: :/ :/ 參考教材:?JSP實(shí)用教程? 清華大學(xué)出版社,耿詳義,張躍平編著2目錄12.1 JSP簡介12.2 JSP與JavaBean12.3 JSP標(biāo)簽庫12.4 JSP與Servlet12.5 本章小結(jié)312.1 JSP簡介servlet和JSPJavaServer Page已成為開發(fā)電子商務(wù)等動態(tài)網(wǎng)站的首選技術(shù),它們都是運(yùn)行在效勞器上的Java程序servletServlet 類使Java程序員能開發(fā)基于B/S構(gòu)架的Web應(yīng)用程序,使用servlet類使HTTP請求和響應(yīng)封裝在標(biāo)準(zhǔn)的
2、Java類中,從而實(shí)現(xiàn)各種web應(yīng)用方案Servlet語言將程序的邏輯控制代碼與輸出網(wǎng)頁文檔內(nèi)容混合著一起,使得控制網(wǎng)頁文檔內(nèi)容的顯示和布局較困難。使用print語句生成HTML并不容易,非Java開發(fā)人員很難處理這些HTML412.1.1 什么是JSP程序JSPJSP是建立在Servlet模型之上的表達(dá)層技術(shù),是對Servlet API的一種擴(kuò)展。同Servlet一樣,JSP頁是效勞器端的技術(shù)。在后臺被自動轉(zhuǎn)換成servlet,Servlet在編譯后載入到效勞器內(nèi)存中,初始化并被執(zhí)行。JSP彌補(bǔ)了Servlet的缺陷,對網(wǎng)頁中的動態(tài)內(nèi)容采用Java代碼,而對固定不變的HTML靜態(tài)內(nèi)容采用普通
3、的HTML頁面方式編寫。從而,使用靜態(tài)頁面和動態(tài)頁面編寫得以別離。JSP運(yùn)行在Web效勞器上,被Web效勞器轉(zhuǎn)換成Servlet后運(yùn)行靜態(tài)內(nèi)容的輸出都采用標(biāo)準(zhǔn)的HTML,而java語言編寫頁面中生成動態(tài)內(nèi)容的代碼包括在特殊的標(biāo)簽中 。JSP頁面僅在修改后的第一次被訪問時(shí),才會被轉(zhuǎn)換成servlet并進(jìn)行編譯,創(chuàng)立JSP唯一的一個(gè)一實(shí)例,并調(diào)用_jspInit完成初始化,之后每個(gè)用戶請求都會創(chuàng)立一個(gè)調(diào)用JSP實(shí)例的_jspService方法的線程。因而多個(gè)并發(fā)請求會導(dǎo)致多個(gè)線程同時(shí)調(diào)用_jspServiceTomcat中,默認(rèn)目錄下的JSP文件被轉(zhuǎn)換生成的servlet文件及編譯后生成的clas
4、s文件被放在install_dir/work/ Catalina/ localhost/ _/org/apache/jsp目錄下JSP簡介5Web瀏覽器JSPServletHTML客戶請求生成HTMLJSP運(yùn)行流暢6JSP與Servlet的轉(zhuǎn)換welcome.jspwelcome_jsp.javaJSP 轉(zhuǎn)為Servlet7根本的JSP結(jié)構(gòu) /JSP標(biāo)簽 /HTML標(biāo)簽8 First Example11 in JSP這是一個(gè)簡單的JSP頁面 % for(i=1;i 1到100的連續(xù)和是:JSP TabHTML TabVariable DeclarationExpressionJava prog
5、ram slice9JSP文件在效勞器的部署Tomcat中JSP的默認(rèn)目錄是install_dir/webapps/ROOT,只要把編寫好的JSP文件直接放在此目錄下即可例如install_dir/webapps/ROOT/SomeDirectory/SomeFile.jsp那么對應(yīng)的URL為 :/host:port/SomeDirectory/SomeFile.jsp例題訪問路徑: :/localhost:8080/Example1-1.jspJSP簡介10注意:如果需要建立新的web效勞目錄,并讓用戶使用虛擬目錄訪問,那么需修改conf/server.xml修改方法:在前參加假設(shè)新建目錄為
6、F:/testjsp 訪問: :/localhost:8080/test/*.jsp1112.1.1 什么是JSP程序 JSP頁面被請求后的操作JSP簡介 將JSP頁面轉(zhuǎn)換為servlet編譯servlet將servlet載入到服務(wù)器內(nèi)存中調(diào)用jspInit調(diào)用_jspService頁面初次創(chuàng)建請求1有有有有有請求2無無無無有服務(wù)器重啟后請求3無無有有有請求4無無無無有頁面修改后請求5有有有有有請求6無無無無有1212.1.2 JSP語法概述 JSP頁面元素腳本元素scripting elements使你可以向JSP文件產(chǎn)生的servlet文件中插入代碼腳本元素由三局部組成:變量和方法聲明、表
7、達(dá)式、程序片腳本代碼注釋語句1312.1.2 JSP語法概述 JSP指令元素JSP指令不直接產(chǎn)生輸出代碼,它用來向JSP容器發(fā)出一些指令來控制JSP頁面的特性。如:發(fā)送消息到容器、設(shè)置頁面屬性、聲明要導(dǎo)入到類、定義輸出類型等JSP中共有三個(gè)指令page指令:用于定義include指令:用于在JSP頁面中包含另外一個(gè)文件的內(nèi)容taglib指令:使用戶定義自己的標(biāo)簽注意:這里的指令和屬性值并不是自己定義的,而是JSP標(biāo)準(zhǔn)中定義的屬性的標(biāo)準(zhǔn),在程序設(shè)計(jì)中根據(jù)不同的需求選擇不同的指令和屬性,1412.1.2 JSP語法概述除了標(biāo)準(zhǔn)的HTML以外,JSP主要包括三類組件腳本元素scripting ele
8、ments使你可以向JSP文件產(chǎn)生的servlet文件中插入代碼腳本元素由三局部組成:表達(dá)式、程序片腳本代碼、變量和方法聲明指令標(biāo)簽directives用來定義整個(gè)JSP頁面的屬性和屬性的值將影響由JSP頁產(chǎn)生的servlet的總體結(jié)構(gòu)動作標(biāo)簽actions影響JSP運(yùn)行時(shí)的功能JSP簡介151、腳本元素向JSP文件產(chǎn)生的servlet文件中插入代碼聲明語句:用于聲明一個(gè)或多個(gè)變量和方法%! public String f(int i) if (iJSP簡介12.1.2 JSP語法概述 腳本元素16聲明的內(nèi)容包括變量和方法,將被插入到生成servlet的類體中,在_jspService方法之外
9、,成為類變量和類方法,直到效勞器關(guān)閉才被釋放聲明的變量整個(gè)JSP頁面有效,當(dāng)JSP引擎將JSP頁面轉(zhuǎn)譯程Java文件時(shí),將這些變量做為類的成員變量,當(dāng)有多個(gè)用戶請求JSP頁面時(shí)都會影響其它用戶Example2_2.jsp當(dāng)多個(gè)客戶請求一個(gè)JSP頁面時(shí),多個(gè)線程將共享這些變量和方法,因而任何一個(gè)用戶對這些變量操作的結(jié)果,都會影響到其他用戶Example2_4.jsp17Variable, method and class declarationVariable declaration: Member variable and available inside JSP pageMemory spa
10、ce for member variable is kept before server is closedJSP engine starts a thread for each clientAny change in member variable can affect each otherExample2_2.jsp for member variable18 You are the customer to visit our website.19Method declaration Local variable: Available inside methodExample2_3.jsp
11、20 You are the customer to visit our website.21Class declarationClass is available inside JSP pageObject can be created in the java program slice22Class declaration:Available inside JSP pageObject created by the class can be instanced inside JSPArea is: 2312.1.2 JSP語法概述 腳本元素表達(dá)式 %和=之間不能有空格。expression
12、必須能求值,效勞器計(jì)算出值后以字符串形式發(fā)送到客戶端顯示程序片JSP的代碼局部,該局部幾乎可以使用Java的任何語法一個(gè)JSP頁面可以有許多,它們將被插入到生成的servlet文件的_jspService方法中每次客戶端請求都會新開一個(gè)線程,調(diào)用servlet的service方法,service方法再調(diào)用_jspService方法24 GOODMORNING GOODAFTERNOON2512.1.2 JSP語法概述 JSP指令標(biāo)簽2、指令標(biāo)簽:JSP指令不直接產(chǎn)生輸出代碼,它用來向JSP容器發(fā)出一些指令來控制JSP頁面的特性。如:發(fā)送消息到容器、設(shè)置頁面屬性、聲明要導(dǎo)入到類、定義輸出類型等J
13、SP中共有三個(gè)指令page指令:用于定義include指令:用于在JSP頁面中包含另外一個(gè)文件的內(nèi)容taglib指令:使用戶定義自己的標(biāo)簽注意:這里的指令和屬性值并不是自己定義的,而是JSP標(biāo)準(zhǔn)中定義的屬性的標(biāo)準(zhǔn),在程序設(shè)計(jì)中根據(jù)不同的需求選擇不同的指令和屬性,26page指令定義整個(gè)JSP頁面的屬性和屬性值可放在文檔內(nèi)的任何位置,該指令對整個(gè)頁面有效可以定義一個(gè)或多個(gè)大小寫敏感的屬性,包括import、contentType、isThreadSafe、Session、buffer等import屬性為JSP頁面引入Java核心包中的類,這樣就可以在腳本局部使用這些類,如: 可以為import屬
14、性指定多個(gè)值,這些值用逗號分割,這樣就可以引入假設(shè)干個(gè)包或類也可使用多個(gè)page指令來指定屬性及其值,如: JSP頁面默認(rèn)import屬性已經(jīng)有如下的值:java.lang.*, javax.servlet.*,.*,.*“除import屬性外,Page指令的其它屬性只能指定一個(gè)值Example2_9.jspJSP簡介12.1.2 JSP語法概述 指令標(biāo)簽/page指令27contentType屬性定義JSP頁面相應(yīng)的MIMEMultipurpose Internet Mail Extension,多用途Internet 郵件擴(kuò)展類型和JSP頁面字符編碼其屬性使用以下兩種格式之一 或者例如其屬
15、性默認(rèn)值為 常用: JSP簡介12.1.2 JSP語法概述 指令標(biāo)簽/page指令28Language 屬性Define script using by JSP- extends 屬性用于聲明所繼承的類29isThreadSafe屬性用來設(shè)置JSP頁面是否可多線程訪問設(shè)為true時(shí),JSP頁面能同時(shí)響應(yīng)多個(gè)客戶的請求設(shè)為false時(shí),同一時(shí)刻只能處理一個(gè)客戶的請求,其它客戶須等待其默認(rèn)值為truesession屬性表示當(dāng)前JSP頁面是否參與HTTP會話用于設(shè)置是否需要使用內(nèi)置的session對象設(shè)為true時(shí),可以使用內(nèi)置的類型的一個(gè)名為session的對象設(shè)為false時(shí),那么該對象不被創(chuàng)立
16、默認(rèn)值為trueJSP簡介12.1.2 JSP語法概述 指令標(biāo)簽/page指令30isELIgnored屬性JSP2.0 的特點(diǎn),支持表達(dá)語言屬性值為true時(shí),JSP頁面的EL將被無視,false時(shí),EL將被正常顯示31buffer屬性內(nèi)置輸出對象out負(fù)責(zé)將效勞器的某些信息或運(yùn)行結(jié)果發(fā)送到客戶端,buffer屬性用來指定out設(shè)置的緩沖的大小,如果設(shè)置為none,那么不使用緩沖區(qū)默認(rèn)值是8kb例如 autoflush屬性控制out的緩沖區(qū)在裝滿時(shí)的處理,默認(rèn)為true設(shè)為true時(shí),裝滿時(shí)那么自動去除緩沖區(qū)設(shè)為false時(shí),裝滿后那么會出現(xiàn)異常buffer的值是none時(shí)將autoflus
17、h設(shè)為false是不合法的JSP簡介12.1.2 JSP語法概述 指令標(biāo)簽/page指令32info屬性指定JSP頁面信息,定義一個(gè)字符串,并可以通過getServletInfo方法可從servlet中檢索到所定義的信息格式為 isErrorPage屬性指明當(dāng)前頁是否能充當(dāng)其它JSP頁面的錯(cuò)誤處理頁。采用以下兩種格式之一或者 。如果為true表示該頁其它JSP頁面可以使用此頁來處理異常errorPage屬性和isErrorPage配合使用。errorPage屬性設(shè)置一個(gè)處理異常錯(cuò)誤的JSP的URL,如:這個(gè)URL指定的錯(cuò)誤頁的isErrorPage屬性必須被設(shè)為true方可使用JSP簡介12.
18、1.2 JSP語法概述 指令標(biāo)簽/page指令33include指令與page指令不同,該指令應(yīng)該放在你想要將外部文件插入的位置,它可以將文件整體插入到該處其格式為 其作用是在JSP頁面出現(xiàn)該指令的位置處靜態(tài)插入一個(gè)文件。插入文件將與JSP頁面合成一個(gè)新的JSP頁面,然后JSP引擎將新的JSP頁面轉(zhuǎn)譯成Java類文件。Example2_10.jsp Example_comp.jsp12.1.2 JSP語法概述 指令標(biāo)簽/include指令JSP簡介34我是firstExample.jsp頁面35 This is test for include tab! Successful!36!Examp
19、le_comp.jsp,包含JSP文件please input a integer, then click button37!Computer.jsp % String a=request.getParameter(ok); if(a=null) a=1; try double number=Integer.parseInt(a); out.print(+Math.sqrt(number); catch(NumberFormatException e) out.print(+Please input number); %注:合并后見Example_comp_1.jsp38taglib指令JSP
20、1.1標(biāo)準(zhǔn)中新增的指定一個(gè)標(biāo)記庫,用于擴(kuò)充標(biāo)準(zhǔn)的JSP標(biāo)記集taglib通常定義在tag標(biāo)簽庫中,這種標(biāo)簽庫存放著自己定義的tag標(biāo)簽。自定義tag標(biāo)簽主要用于操作隱藏對象、處理html提交表單、訪問數(shù)據(jù)庫或其它企業(yè)級的效勞完成三個(gè)任務(wù)首先,它通知JSP效勞器,頁面使用一個(gè)標(biāo)記庫其次,它指定包含標(biāo)記庫標(biāo)志符的特殊jar文件的位置最后,它指定一個(gè)用于唯一區(qū)分這些新標(biāo)記的標(biāo)記前綴格式為:uri屬性:一個(gè)引用標(biāo)記庫描述符文件后綴名為TLD:Tag Library Descriptor的絕對或相對URLprefix屬性:指定一個(gè)將要在TLD文件定義的標(biāo)記名前面使用的前綴如果TLD文件定義了一個(gè)名為ta
21、g1的標(biāo)記,并且prefix屬性的值設(shè)為test,那么實(shí)際的標(biāo)記名將為test:tag112.1.2 JSP語法概述 指令標(biāo)簽/taglib指令JSP簡介393、動作標(biāo)簽一種特殊的標(biāo)簽,影響JSP運(yùn)行時(shí)的功能格式為action_name代表動作名稱attribute代表屬性名稱value代表屬性值分為兩類Resource動作JavaBean動作JSP簡介12.1.2 JSP語法概述 動作標(biāo)簽40 Resource動作include動作標(biāo)簽告訴JSP頁面動態(tài)包含一個(gè)文件,即JSP頁面運(yùn)行時(shí)才將文件參加與include指令標(biāo)簽不同,例如: 不把JSP頁面與include所包含文件進(jìn)行合并,而是在J
22、SP在運(yùn)行時(shí)即Java字節(jié)碼文件加載才包含進(jìn)來。如果包含的是普通的文本文件,就將文件的內(nèi)容發(fā)送到客戶端,由客戶端負(fù)責(zé)顯示如果包含的是JSP文件,JSP引擎就執(zhí)行這個(gè)文件,然后將執(zhí)行的結(jié)果發(fā)送到客戶端顯示注意:文本文件需同當(dāng)前JSP頁面在同一Web效勞目錄中Example2_16.jspJSP簡介12.1.2 JSP語法概述 動作標(biāo)簽/Resource動作41Param標(biāo)簽以“名-值對應(yīng)形式為其它標(biāo)簽提供附件信息,可和jsp:include, jsp:forword, jsp:plugin標(biāo)簽一起使用1當(dāng)同jsp:include使用時(shí)結(jié)合param指令,將param標(biāo)簽中的值傳遞到include
23、指令加載的文件中去pass value to included file格式為: 被包含的文件通過JSP的內(nèi)置對象request調(diào)用getParameter方法獲得參數(shù)值。 request.getParameter(“name);parameter.jsp, param_sum.jsp42 Load: 43 % String str=request.getParameter(computer); int n=Integer.parseInt(str); int sum=0; for(int i=1; i the sum from 1 to is: 內(nèi)置對象request調(diào)用getParamet
24、er方法獲得參數(shù)computer的值44 Load: jsp:param name=computer value=/ 45 % String str=request.getParameter(computer); int n=Integer.parseInt(str); int sum=0; for(int i=1; i the sum from 1 to is: 46forward動作標(biāo)簽告訴JSP頁面從該指令處停止當(dāng)前頁面的繼續(xù)執(zhí)行,而轉(zhuǎn)向其他的一個(gè)頁面,當(dāng)前頁面后邊的內(nèi)容將不被執(zhí)行,例如: 該標(biāo)簽也可結(jié)合param指令,向要轉(zhuǎn)到的頁面?zhèn)魉托畔?,格式同include標(biāo)簽Example2_1
25、2_1.jspJSP簡介12.1.2 JSP語法概述 動作標(biāo)簽/Resource動作47plugin動作標(biāo)簽當(dāng)瀏覽器不支持Java小應(yīng)用程序時(shí),可以通過plugin動作標(biāo)簽指示JSP頁面加載Java plugin。該插件由用戶負(fù)責(zé)下載 prompt message提示信息,用來提示用戶的瀏覽器是否支持插件下載 12.1.2 JSP語法概述 動作標(biāo)簽/Resource動作JSP簡介48JavaBean動作(后面講)useBean動作標(biāo)簽格式為或者效勞器將加載該bean類的一個(gè)對象setProperty動作標(biāo)簽設(shè)置bean的屬性getProperty動作標(biāo)簽獲取bean屬性的值并輸出12.1.2
26、JSP語法概述 動作標(biāo)簽/JavaBean動作JSP簡介4912.1.3 JSP內(nèi)置對象JSP的內(nèi)置對象在JSP頁面的腳本元素中,有些不用聲明就可以使用的對象包括out、request、response、session、application等out對象是類的實(shí)例,JspWriter包含的方法大多數(shù)與類一樣這個(gè)輸出流對象用來向客戶端輸出數(shù)據(jù),其可調(diào)用的方法如下表JSP簡介5012.1.3 JSP內(nèi)置對象(續(xù)) out對象可使用的方法名稱解釋print(Boolean b)輸出一個(gè)布爾值print(char c)輸出一個(gè)字符print(double d)輸出一個(gè)雙精度的浮點(diǎn)數(shù)print(floa
27、t f)輸出一個(gè)單精度的浮點(diǎn)數(shù)print(long l)輸出一個(gè)長整型數(shù)據(jù)print(String s)輸出一個(gè)字符串newLine()輸出一個(gè)換行符flush()輸出緩沖區(qū)里的內(nèi)容close()關(guān)閉流JSP簡介51request對象是的實(shí)例客戶每次請求頁面時(shí),JSP引擎創(chuàng)立一個(gè)request對象代表該請求封裝了用戶提交的信息,這些信息包括HTTP請求的請求行HTTP頭信息體調(diào)用相應(yīng)的方法可以獲取封裝的信息,最常用的方法是request.getParameter(param_name)12.1.3 JSP內(nèi)置對象(續(xù)) request對象JSP簡介5212.1.3 JSP內(nèi)置對象(續(xù)) req
28、uest對象的常用方法名稱解釋getProtocal()獲取客戶向服務(wù)器提交信息使用的通訊協(xié)議getServletPath()獲取JSP文件的目錄getContentLength()獲取提交信息的長度getMethod()獲取客戶提交信息的方式,例如post或getgetHeaderNames()獲取頭名字的一個(gè)枚舉getHeader(String s)獲取HTTP頭文件中由s指定的屬性的值,例如“content-type”,“cookie”等getRemoteHost()獲取客戶機(jī)的名稱getRemoteAddr()獲取客戶機(jī)的IP地址getServerName()獲取服務(wù)器的名稱getSe
29、rverPort()獲取服務(wù)器的端口號getParameterNames()獲取客戶提交的信息體部分中所有參數(shù)的名字getParameter(String_name)獲取指定參數(shù)名字的參數(shù)值JSP簡介53Language propertyimport propertyImport java classescontentType propertyResponse type and code typeDefault: “text/html; charset=ISO-8859-1session propertyDefault: truebuffer property outFlush propert
30、yDefault: 8kb54Request 根本操作Client submit information through HTML formFORM method=get or post action=“destination page Request package the information submitted by clientRequest also can be used to get information submitted request.getParameter(“stName);Exmaple: put_post555657 response對象的實(shí)例與request對
31、象相對應(yīng),我們可以用response對象對客戶的請求做出動態(tài)響應(yīng),向客戶端發(fā)送數(shù)據(jù)。類似于HTTP請求,HTTP響應(yīng)也由三個(gè)根本局部組成狀態(tài)行:包括使用的協(xié)議以及狀態(tài)代碼,表示請求是否成功頭:包含關(guān)于效勞器和返回的文檔的消息,例如效勞器名稱和文檔類型等信息體使用這個(gè)對象的一些方法可以完成如下任務(wù)動態(tài)設(shè)置contentType屬性頁面重定向設(shè)置返回狀態(tài)碼等JSP簡介12.1.3 JSP內(nèi)置對象(續(xù)) response對象58JSP簡介12.1.3 JSP內(nèi)置對象(續(xù)) resnponse對象的常用方法名稱解釋setStatus(int sc)設(shè)置返回狀態(tài)碼setContentType(Strin
32、g type)設(shè)置被發(fā)送文檔的MIME類型setHeader(String name, String value)設(shè)置頭中指定屬性name為指定值valuesetRedirect(String location)重定向到指定URL 59ResponseDynamically change properties of contentType by using response object setContentType (String s);Value for stext/htmltext/plainapplication/x-msexcel(Excel方式翻開)application/mswo
33、rdword方式翻開Example_response2.jspview.jsp, table.txt60616263會話的概念從一個(gè)客戶翻開瀏覽器連接到效勞器的某個(gè)效勞目錄,到客戶關(guān)閉瀏覽器離開該效勞目錄稱為一個(gè)會話每個(gè)會話只對應(yīng)于一個(gè)客戶,并且可以跨多個(gè)頁面session對象的實(shí)例,對應(yīng)于會話的概念用于在使用無狀態(tài)連接協(xié)議如HTTP的情況下跟蹤關(guān)于某個(gè)客戶的信息,對識別客戶是非常重要的在客戶首次訪問某效勞目錄中的任何一個(gè)JSP頁面時(shí)創(chuàng)立,并且具有一個(gè)獨(dú)一無二的Id號,直到客戶關(guān)閉瀏覽器或這個(gè)session對象到達(dá)了最大生存時(shí)間,效勞器端該客戶的session對象才被取消調(diào)用相應(yīng)的方法可以存儲
34、客戶在訪問各個(gè)頁面期間提交的各種信息,比方姓名、編號等JSP簡介12.1.3 JSP內(nèi)置對象(續(xù)) session對象64JSP簡介12.1.3 JSP內(nèi)置對象(續(xù)) session對象的常用方法名稱解釋int getMaxInactiveInterval()返回會話過期前需要經(jīng)過的秒數(shù)void setMaxInactiveInterval(int interval)設(shè)置某個(gè)會話的生命期long getCreationTime()返回創(chuàng)建會話的時(shí)間long getLastAccessedTime()返回上次使用此會話的時(shí)間void invalidate()使得session對象無效boolea
35、n isNew()判斷是否是個(gè)新會話String getId()返回識別客戶的獨(dú)一無二的字符串Enumeration getIds()返回一個(gè)包含當(dāng)前所有會話Id的枚舉值void setAttribute(String key, Object value)在session對象中添加obj,并指定索引關(guān)鍵字為keyObject getAttribute(String name)從session對象獲取關(guān)鍵字為key的對象void removeAttribute(String name)從session中刪除指定索引關(guān)鍵字的對象Enumeration getAttributeName( )獲取se
36、ssion對象存儲的所有鍵名65Example_sessionA.jspFirst1.jspaccount.jsp66application對象的實(shí)例。比session對象的生存時(shí)期更長。效勞器啟動后,就產(chǎn)生了這個(gè)application對象,直到效勞器關(guān)閉,該對象才被取消所有客戶共享這個(gè)內(nèi)置的application對象,所以任何客戶對該對象中存儲的數(shù)據(jù)的改變都會影響到其他客戶,因此,在某些情況下,對該對象的操作需要同步處理 12.1.3 JSP內(nèi)置對象(續(xù)) application對象JSP簡介6712.1.3 JSP內(nèi)置對象(續(xù)) application對象的常用方法名稱解釋void set
37、Attribute(String key, Object obj)將obj對象添加到application對象中,并為obj指定一個(gè)索引關(guān)鍵字key。Object getAttribute(String key)獲取application對象中指定關(guān)鍵字的對象Enumeration getAttributeNames( )返回application對象的所有索引關(guān)鍵字void removeAttribute(String key)刪除指定索引的對象JSP簡介6812.1.4 一個(gè)簡單的JSP程序在表單中輸入一個(gè)自然數(shù),計(jì)算從1到該數(shù)的累加和%! int continuousSum(int n)
38、 int sum=0; for(int i=1;iJSP簡介6912.1.4 一個(gè)簡單的JSP程序(續(xù)) 計(jì)算連續(xù)和 請輸入一個(gè)自然數(shù) input type=text name=number value= 的連續(xù)和是JSP簡介7012.1.4 一個(gè)簡單的JSP程序(續(xù)) 例12_1運(yùn)行結(jié)果JSP簡介71練習(xí)將12_1拆分成兩個(gè)jsp文件,其中信息提交放在req.jsp中,計(jì)算及結(jié)果顯示放在count.jsp中7212.2 JSP與JavaBean指令標(biāo)簽和動作標(biāo)簽都可以嵌入代碼。前者實(shí)際上是將代碼插入行內(nèi),后者是將另一個(gè)頁面的輸出插入原來的頁面這些方法無助于別離表示邏輯和業(yè)務(wù)邏輯,它們都造成了
39、顯著的可伸縮性問題,不利于開發(fā)人員分工合作JavaBean解決了這個(gè)問題,它將一系列相關(guān)的屬性和方法組合在一個(gè)Java類中,構(gòu)成了一個(gè)組件在JSP程序中,只要使用JavaBean動作標(biāo)簽調(diào)用該組件就可以了7312.2.1 JavaBean簡介JavaBean其實(shí)就是Java類必須使用一組相當(dāng)簡單而又標(biāo)準(zhǔn)的設(shè)計(jì)和命名約定,因而調(diào)用它們的應(yīng)用程序無須理解其內(nèi)部工作原理,就可以很容易的使用JavaBean的方法JavaBean類的一個(gè)實(shí)例叫做一個(gè)bean通常我們將JavaBean文件取名為XxxBeanJSP與JavaBean7412.2.1 JavaBean簡介(續(xù)) JavaBean的設(shè)計(jì)要求對
40、于JSP中使用的JavaBean,有三個(gè)設(shè)計(jì)要求必須擁有一個(gè)默認(rèn)無參數(shù)的構(gòu)造函數(shù)如果未聲明任何構(gòu)造函數(shù),默認(rèn)的構(gòu)造函數(shù)會被自動創(chuàng)立JSP元素創(chuàng)立bean時(shí),會調(diào)用默認(rèn)構(gòu)造函數(shù)類中不應(yīng)該有公開的屬性對于類內(nèi)的屬性,通常應(yīng)該提供設(shè)置和獲取其值的方法public void setXxx(Objec_type value)方法進(jìn)行設(shè)置public Object_type getXxx()方法進(jìn)行獲取,如果該屬性是布爾類型的,允許使用public boolean isXxx()獲取屬性值如果某個(gè)屬性只有g(shù)etXxx或isXxx方法 ,叫做只讀屬性JSP與JavaBean75可以使用JSP腳本元素訪問類的
41、任意方法訪問bean的標(biāo)準(zhǔn)JSP動作只能使用那些遵循getXxx/setXxx或isXxx/setXxx命名約定的方法12.2.1 JavaBean簡介(續(xù))JSP對JavaBean的訪問JSP與JavaBean76設(shè)計(jì)一個(gè)描述員工信息的JavaBean類。包括編號、姓名、性別、工資、職務(wù)屬性package myBeans;public class EmployeeBean private int id=0,salary=0;private String name=none,occupation=none;private boolean male=true;public int getId()
42、 return id; public void setId(int id) this.id=id; public String getName() return name; public void setName(String name) =name; public boolean isMale() return male;public void setMale(boolean male) this.male=male; public int getSalary() return salary; public void setSalary(int salary) this.salary=sal
43、ary;public String getOccupation() return occupation; public void setOccupation(String occupation)this.occupation=occupation;JSP與JavaBean12.2.1 JavaBean簡介(續(xù))例12_277EmployeeBean類滿足成為JavaBean的條件沒有公開的實(shí)例變量沒有聲明任何顯式的構(gòu)造函數(shù),從而也就擁有了一個(gè)默認(rèn)的無參數(shù)的構(gòu)造函數(shù)它的屬性的設(shè)置和獲得都使用了標(biāo)準(zhǔn)的形式JSP與JavaBean12.2.1 JavaBean簡介(續(xù)) 例12_2說明7812.2.
44、2 在JSP程序中使用JavaBeanJavaBean類在Web應(yīng)用中的部署不能放在含有JSP文件的目錄中,而應(yīng)該放在安裝servlet的目錄中,且一定要使用包單個(gè)JavaBean類的字節(jié)碼文件的正確位置是webAppDir/WEB-INF/classes/PackageName/JSP2.0后class 文件要放到package中含有bean類的JAR文件應(yīng)該放在webAppDir/WEB-INF/lib/目錄中在JSP頁面中,可以使用三種JavaBean動作標(biāo)簽構(gòu)建和操作JavaBean組件useBean動作標(biāo)簽setProperty動作標(biāo)簽getProperty動作標(biāo)簽JSP與JavaB
45、ean79 表示建立一個(gè)bean類的對象class指定的bean類的類名id指定該實(shí)例的名字scope屬性表示bean的有效范圍,有4個(gè)可選值PageRequestSessionApplication如果已經(jīng)存在scope和id相同的實(shí)例,那么訪問現(xiàn)存的實(shí)例JSP與JavaBean12.2.2 在JSP程序中使用JavaBean(續(xù)) 建立JavaBean80Page默認(rèn)值,有效范圍是當(dāng)前請求訪問的JSP頁面表示每次請求訪問JSP頁面時(shí)都會創(chuàng)立新的bean,并將其放在PageContext對象中servlet可以通過預(yù)定義變量pageContext的getAttribute方法訪問它Reque
46、st有效范圍是當(dāng)前的請求將bean放在HttpServletRequest對象中,如果已經(jīng)存在,那么調(diào)用之,可通過getAttribute方法訪問在使用jsp:include,jsp:forward,或者RequestDispatcher的include或forward方法時(shí),兩個(gè)JSP頁面,或JSP頁面和servlet將會共享該bean12.2.2 在JSP程序中使用JavaBean(續(xù)) 建立JavaBeanJSP與JavaBean81Session有效范圍是客戶的會話期間表示要將bean實(shí)例存儲到與當(dāng)前請求相關(guān)的HttpSession對象中如果這個(gè)客戶在多個(gè)頁面中相互鏈接,每個(gè)頁面都包含
47、有一個(gè)useBean標(biāo)簽,這些useBean標(biāo)簽中id的值相同,并且scope的值都是session,那么該客戶在這些頁面得到的bean是相同的一個(gè)Application表示要將bean實(shí)例存儲在ServletContext中,ServletContext由Web應(yīng)用中多個(gè)servlet和JSP頁面共享所有客戶共享這個(gè)bean,如果一個(gè)客戶改變這個(gè)bean的某個(gè)屬性的值,那么所有客戶的這個(gè)bean的屬性值都發(fā)生了變化這個(gè)bean直到效勞器關(guān)閉才被取消JSP與JavaBean12.2.2 在JSP程序中使用JavaBean(續(xù)) 建立JavaBean82 表示讀取bean屬性的值bean的名稱由
48、name項(xiàng)指定,與useBean標(biāo)簽的id項(xiàng)對應(yīng)property項(xiàng)指定屬性名稱該語法只能讀取在JavaBean類文件中有g(shù)etXxx方法的屬性也可用JSP腳本元素得到相同的結(jié)果JSP與JavaBean12.2.2 在JSP程序中使用JavaBean(續(xù)) 取得Bean的屬性值83 表示設(shè)置bean的屬性值name項(xiàng)指定bean的名稱,與useBean標(biāo)簽的id相對應(yīng)property項(xiàng)指定屬性名稱value項(xiàng)指定屬性的值該語法只能設(shè)置JavaBean類文件中有setXxx方法的屬性也可以用JSP腳本元素得到相同的結(jié)果JSP與JavaBean12.2.2 在JSP程序中使用JavaBean(續(xù))
49、設(shè)置Bean的屬性值84建立JSP文件Ex12_3.jsp使用上節(jié)建立的EmployeeBean使用JavaBean 初始值: 名字是: 編號是: 是否男性? 工資是:元 職務(wù)是: 修改后: 名字是: 編號是: 是否男性? 工資是:元 職務(wù)是: 12.2.2 在JSP程序中使用JavaBean(續(xù)) 例12_3JSP與JavaBean85 首先顯示初始值,修改后,顯示新值JSP與JavaBean12.2.2 在JSP程序中使用JavaBean(續(xù)) 例12_3運(yùn)行結(jié)果86通過表單使用上節(jié)建立的EmployeeBean。使用JavaBean 姓名:性別: 男 女 編號: 職務(wù): 工資: 名字是:
50、 編號是: 是否男性? 工資是:元 職務(wù)是: 12.2.2 在JSP程序中使用JavaBean(續(xù)) 例12_4JSP與JavaBean8712.2.2 在JSP程序中使用JavaBean(續(xù)) 例12_4運(yùn)行結(jié)果在表單中填入信息后,將顯示填入的信息JSP與JavaBean88File manipulate in JSPServer can access file for client requirementsFile objects are used to get properties of a file (see File class)InputStream and OutputStrea
51、m are still used for input and outputInformation are kept in session objectExample Example4_8.jsp899091Database in JSPMechanisms are all same as J2SEExample faq.jsp92939412.3 JSP標(biāo)簽庫JSP標(biāo)簽庫除了使用JavaBean,JSP還可以使用定制的標(biāo)記,便于Web開發(fā)人員實(shí)現(xiàn)內(nèi)容和功能的別離相對于使用JavaBean,用戶自定義的標(biāo)簽庫有如下優(yōu)點(diǎn)beans不可以操縱JSP的內(nèi)容,但標(biāo)簽庫可以使用標(biāo)簽比bean可以用更加簡單
52、的形式完成復(fù)雜的功能,JSP通過指令標(biāo)簽中的taglib指令使用標(biāo)簽庫9512.3 JSP標(biāo)簽庫(續(xù))使用自定義標(biāo)簽比使用bean要復(fù)雜一些,它需要3個(gè)局部實(shí)現(xiàn)標(biāo)簽行為的標(biāo)簽處理類將XML元素名稱映射到標(biāo)簽實(shí)現(xiàn)上的標(biāo)簽庫描述文件后綴名為tld使用標(biāo)簽的JSP程序JSP標(biāo)簽庫9612.3.1 標(biāo)簽處理類標(biāo)簽處理類是一個(gè)Java類,用來告訴系統(tǒng)在JSP程序中遇到標(biāo)簽后應(yīng)該做些什么必須實(shí)現(xiàn)接口通常通過擴(kuò)展如下兩類來實(shí)現(xiàn)JSP標(biāo)簽庫9712.3.1 標(biāo)簽處理類(續(xù))TagSupport類及其doStartTag方法如果在taglib指令標(biāo)簽中沒有屬性或標(biāo)簽體,即標(biāo)簽的引用形式為,這樣的標(biāo)簽類應(yīng)該擴(kuò)展T
53、agSupport類該類實(shí)現(xiàn)Tag接口并包含根本標(biāo)簽所需的大量標(biāo)準(zhǔn)功能。只須重載改該類的doStartTag方法,這個(gè)方法中的代碼將在頁面請求時(shí)期遇到標(biāo)簽頭時(shí)執(zhí)行為了產(chǎn)生輸出, doStartTag方法應(yīng)該調(diào)用pageContext類變量的getOut方法獲得JspWriter對象除此之外,調(diào)用pageContext的別的一些方法,還可以獲得和請求相關(guān)的別的數(shù)據(jù)結(jié)構(gòu):例如getRequest、getResponse、getServletContext、getSession如果標(biāo)簽沒有體,doStartTag方法應(yīng)該返回SKIP_BODY常量,這將告訴系統(tǒng)忽略標(biāo)簽起始和結(jié)束之間的內(nèi)容JSP標(biāo)簽庫
54、98實(shí)現(xiàn)一個(gè)標(biāo)簽處理類,當(dāng)JSP程序遇到相應(yīng)標(biāo)簽,可插入一個(gè)100以內(nèi)的隨機(jī)整數(shù)和一行文本package tags;import .*;import .*;import java.io.*;public class ExampleTag extends TagSupportpublic int doStartTag() try JspWriter out=pageContext.getOut (); out.print(int)(Math.random ()*100); out.print( My first tag test!); catch(IOException ioe) System.
55、out.println(Error in ExampleTag:+ioe); return(SKIP_BODY);12.3.1 標(biāo)簽處理類(續(xù)) 例12_5JSP標(biāo)簽庫9912.3.2 標(biāo)簽庫描述文件標(biāo)簽庫描述文件定義了標(biāo)簽處理類后,接下來就是在效勞器上為這個(gè)類命名,并將其和一個(gè)專門的XML標(biāo)簽名關(guān)聯(lián)起來。通過標(biāo)簽庫描述文件可以完成這個(gè)任務(wù)該文件包括一個(gè)XML版本聲明、一個(gè)DOCTYPE聲明、以及一個(gè)taglib容器元素重點(diǎn)是taglib容器元素中的tag元素,對于沒有屬性的標(biāo)簽,tag元素又應(yīng)該包括以下四個(gè)子元素name:該元素定義了將在JSP文件中使用的tagname;tag-class:
56、該元素給出了標(biāo)簽處理類的完整類名,包括包名;body-content:對于沒有體的標(biāo)簽應(yīng)該取值為EMPTY;description:一個(gè)簡短的說明JSP標(biāo)簽庫100 建立一個(gè)標(biāo)簽庫描述文件,將上例建立的標(biāo)簽處理類和example名關(guān)聯(lián)。將其存儲在Chapter12webWEB-INF tldsexample.tld 1.0 example /WEB-INF/tlds/example example tags.ExampleTag empty Insert a random integer 12.3.2 標(biāo)簽庫描述文件(續(xù)) 例12_6JSP標(biāo)簽庫10112.3.3 在JSP文件中使用標(biāo)簽已經(jīng)有
57、了標(biāo)簽處理類和標(biāo)簽庫描述文件,接下來就可以在JSP文件中使用自定義的標(biāo)簽了在首次使用標(biāo)簽之前,需要使用taglib指令標(biāo)簽uri屬性是一個(gè)引用標(biāo)簽庫描述符文件的絕對或相對URLprefix屬性指定一個(gè)將要在標(biāo)簽庫描述符文件定義的標(biāo)簽名前面使用的前綴接下來就可以使用引用標(biāo)簽了JSP標(biāo)簽庫102建立一個(gè)JSP文件,使用剛剛建立的標(biāo)簽處理類和標(biāo)簽庫描述文件使用標(biāo)簽12.3.3 在JSP文件中使用標(biāo)簽(續(xù)) 例12_7JSP標(biāo)簽庫103每次按刷新后結(jié)果都是隨機(jī)的12.3.3 在JSP文件中使用標(biāo)簽(續(xù)) 例12_7運(yùn)行結(jié)果JSP標(biāo)簽庫10412.3.4 自定義標(biāo)簽庫有時(shí)我們需要在JSP文件中指定標(biāo)簽的
58、一些屬性例如我們希望能輸出1000以內(nèi),而不是100以內(nèi)的隨機(jī)整數(shù)這時(shí)的引用形式應(yīng)該是相應(yīng)的需要修改標(biāo)簽處理類和標(biāo)簽庫描述文件JSP標(biāo)簽庫10512.3.4 自定義標(biāo)簽庫(續(xù)) 修改標(biāo)簽處理類NewExampleTag.java使用attribute1將導(dǎo)致調(diào)用標(biāo)簽處理類的setAttribute1方法。所以為了在Ex12_7中能夠指定隨機(jī)整數(shù)的范圍,我們?yōu)閷傩匀∶麨閞ange,并修改標(biāo)簽處理類ExampleTag.java為NewExampleTag.java如下public class NewExampleTag extends TagSupport protected int range
59、=100; public int doStartTag() try JspWriter out=pageContext.getOut (); out.print(int)(Math.random ()*range); out.print( Tag test with attribute! ); catch(IOException ioe) System.out.println(Error in ExampleTag:+ioe); return(SKIP_BODY); public void setRange(String range) try this.range=Integer.parseI
60、nt (range); catch(NumberFormatException nfe) this.range=100; JSP標(biāo)簽庫106此外還需要修改標(biāo)簽庫描述文件,在節(jié)中介紹的tag元素中再增加attribute子元素,這個(gè)子元素又包括三個(gè)孫元素name::定義了屬性名稱,這個(gè)例子中,屬性名為rangerequired:指出是否必須提供該屬性,true是必須提供,false是可以不提供,這個(gè)例子中,range屬性是可選的,如果不選,那么默認(rèn)為100,所以我們將其設(shè)定為falsertexprvalue:是一個(gè)可選孫元素,表示屬性值是否可以是JSP表達(dá)式,以便在請求時(shí)期動態(tài)確定,默認(rèn)狀態(tài)下是
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度車輛維修技師培訓(xùn)貸款合同樣本4篇
- 二零二五年度保險(xiǎn)理賠逾期款項(xiàng)短信催收服務(wù)合同4篇
- 2025年度環(huán)保產(chǎn)業(yè)園區(qū)土地租賃合同3篇
- 2025年度農(nóng)業(yè)機(jī)械設(shè)備租賃與綠色農(nóng)業(yè)推廣協(xié)議4篇
- 二零二五年度木工培訓(xùn)與勞務(wù)承包合作協(xié)議3篇
- 2025版健康養(yǎng)生門面鋪面轉(zhuǎn)租合同3篇
- 二零二五年度電梯行業(yè)標(biāo)準(zhǔn)化制定與實(shí)施合同4篇
- 二零二五年度農(nóng)業(yè)合作社農(nóng)業(yè)保險(xiǎn)股權(quán)合作合同4篇
- 人口遷移與區(qū)域發(fā)展-深度研究
- 2025年度門窗配件供應(yīng)與售后服務(wù)合同4篇
- 獨(dú)家投放充電寶協(xié)議書范文范本
- 2025年高考化學(xué)試題分析及復(fù)習(xí)策略講座
- 世界近代史-對接選擇性必修 課件-高考統(tǒng)編版歷史一輪復(fù)習(xí)
- 2024-2029年中國制漿系統(tǒng)行業(yè)市場現(xiàn)狀分析及競爭格局與投資發(fā)展研究報(bào)告
- 大門封條模板
- 【“凡爾賽”網(wǎng)絡(luò)流行語的形成及傳播研究11000字(論文)】
- ppr管件注塑工藝
- 液化氣站其他危險(xiǎn)和有害因素辨識及分析
- 高中語文教學(xué)課例《勸學(xué)》課程思政核心素養(yǎng)教學(xué)設(shè)計(jì)及總結(jié)反思
- 中國農(nóng)業(yè)銀行小微企業(yè)信貸業(yè)務(wù)貸后管理辦法規(guī)定
- 市政道路建設(shè)工程竣工驗(yàn)收質(zhì)量自評報(bào)告
評論
0/150
提交評論