2jsp基礎(chǔ)和內(nèi)置對象ppt課件_第1頁
2jsp基礎(chǔ)和內(nèi)置對象ppt課件_第2頁
2jsp基礎(chǔ)和內(nèi)置對象ppt課件_第3頁
2jsp基礎(chǔ)和內(nèi)置對象ppt課件_第4頁
2jsp基礎(chǔ)和內(nèi)置對象ppt課件_第5頁
已閱讀5頁,還剩43頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、JSP簡介 JSP的優(yōu)勢 JSP頁面構(gòu)成 JSP的生命周期 JSP的處理過程 JSP異常處理機制 以下的Servlet代碼有何缺陷?.out.print(部門信息管理);out.print();out.print(table”);out.print();out.print(在線招聘系統(tǒng)注冊);out.print(“”);.所有的內(nèi)容必須在Java代碼中完成,包括HTML代碼同樣需要嵌入到程序代碼中來生成靜態(tài)內(nèi)容不利于分工 因HTML代碼出現(xiàn)的小問題也需要由熟悉Java Servlet的程序員來解決 1.1 為什么需要JSP?JSPJava Server Pages是指:在HTML中嵌入Java

2、腳本語言由應(yīng)用服務(wù)器中的JSP引擎來編譯和執(zhí)行嵌入的Java腳本語言命令將生成的整個頁面信息返回給客戶端JSP頁面頁面 數(shù)據(jù)庫數(shù)據(jù)庫服務(wù)器服務(wù)器應(yīng)用應(yīng)用服務(wù)器服務(wù)器編譯、執(zhí)行編譯、執(zhí)行客戶端客戶端嵌入嵌入Java腳本語言腳本語言 1234返回頁面信息返回頁面信息JSP技術(shù)解決界面顯示問題 Servlet主要解決內(nèi)部邏輯問題商品顯示列表功能 內(nèi)容動態(tài)生成與靜態(tài)表示分離可重復(fù)使用的組件簡化頁面開發(fā)跨平臺 JSP基礎(chǔ)入門今天是:靜態(tài)內(nèi)容指 令表達式ScriptletHTML靜態(tài)文本以“ ” 完畢,例如:聲 明標準動作以“jsp:動作名開場,以“”完畢,例如:注釋輸出當前日期你好,jack!今天是指令

3、靜態(tài)內(nèi)容Scriptlet表達式注釋在瀏覽器中觀看運行結(jié)果u查看網(wǎng)頁源文件可以通過源代碼查看HTML注釋的內(nèi)容所有注釋內(nèi)容都不可見合理、詳細的注釋有利于代碼后期的維護和閱讀在JSP文件的編寫過程中,共有3種注釋方法HTML的注釋方法:JSP注釋標記:在JSP腳本中使用 缺點:不安全,加重了網(wǎng)絡(luò)傳輸?shù)呢摀?dān)頁面初始化處理客戶端請求并做出應(yīng)答 退出JSP 該方法中可以進行一些資源的分配,或者初始化變量和屬性 JSP處理客戶請求并應(yīng)答時會調(diào)用_jspService()方法JSP在頁面結(jié)束之前(主要是關(guān)閉服務(wù)器)會調(diào)用_jspDestroy()方法 服務(wù)器根據(jù)接收到的客戶請求來加載被請求的JSP文件We

4、b服務(wù)器中的JSP引擎將被加載的JSP文件轉(zhuǎn)化為Servlet代碼JSP引擎將生成的Servlet代碼編譯成class文件服務(wù)器執(zhí)行這個class文件服務(wù)器將執(zhí)行結(jié)果發(fā)送到瀏覽器進行顯示客戶端JSP文件文件Servlet文件文件class文件文件Servlet實例實例1.請求請求JSP頁面頁面2.轉(zhuǎn)換轉(zhuǎn)換3.編譯編譯3. 執(zhí)行執(zhí)行5.返回響應(yīng)返回響應(yīng)JSP容器容器JSP執(zhí)行過程執(zhí)行過程 % String citys=beijin,shanghai,wuhan;/這里故意設(shè)置了一個異常這里故意設(shè)置了一個異常for(int i=0;i不捕獲異常時的顯示結(jié)果軟件用戶感到突然,不知所措改進之后顯示友好

5、的界面6.1 在Java Web中的異常出現(xiàn)錯誤頁面的異常通常是同一種類型,為每個頁面書寫相同的捕獲異常代碼,不利于代碼重用有一些異常的處理無法通過頁面設(shè)置完成,例如:用戶輸入網(wǎng)站中一個不存在的文件,這時應(yīng)告訴用戶文件不存在在Web應(yīng)用程序中trycatch捕獲異常有什么缺陷?如何解決這些問題? java.lang.NullPointerException /nullPointer.jsp. . . 500 /500.jsp . . . 1.配置web.xml為每個類型配置異常處理為每個錯誤代碼配置異常處理400錯誤:錯誤請求401錯誤:訪問被拒絕403錯誤:文件被禁止訪問404錯誤:文件沒有

6、找到405錯誤:文件在運行過程中發(fā)生末知錯誤空指針錯誤空指針錯誤 HIS系系統(tǒng)統(tǒng) 對象沒有實對象沒有實例化例化 2.編寫異常處理頁面 加入isErrorPage page指令 3.編寫測試頁面 4.運行結(jié)果 JSP表達式表達式Expression用于向頁面中輸出信息 格式: JSP表達式普通變量含返回值的方法Java表達式普通變量可以返回值的方法Java表達式 產(chǎn)生的隨機變量值是: /定義一個Test類public class Test /定義一個返回值的方法doWithpublic static String doWith(String people) return +people+; 本次

7、幸運之星是: =家家樂超市收銀系統(tǒng)家家樂超市收銀系統(tǒng)=應(yīng)付款:應(yīng)付款: =家家樂超市收銀系統(tǒng)家家樂超市收銀系統(tǒng)=表達式可以應(yīng)用在JSP頁面中的如下位置 生成動態(tài)的鏈接地址 使form表單提交到不同的頁面為通過循環(huán)語句生成的元素命名 a href=鏈接到鏈接到 form action=” % for int i=1;ifile:input type=”text” name=”file”file1:file2:聲明標識格式:注意幾點在“%”與“!”之間無須加空格 聲明的語法與在Java語言中聲明變量和方法時一樣 在頁面中通過“聲明標識聲明的變量和方法,在整個頁面內(nèi)都有效,它們將成為JSP頁面被轉(zhuǎn)換

8、為類文件中的屬性和方法,并且會被多個線程即多個用戶共享 變量或方法的生命周期從創(chuàng)建到服務(wù)器關(guān)閉后結(jié)束 實現(xiàn)一個簡單的網(wǎng)頁計數(shù)器 網(wǎng)頁計數(shù)器網(wǎng)頁計數(shù)器 你是第你是第位訪客位訪客關(guān)閉瀏覽器關(guān)閉Tomcat如果把代碼修改如下 : 你是第位訪客能實現(xiàn)網(wǎng)頁計數(shù)器嗎?腳本程序Scriptlet)格式:注意它在形式上與表達式的區(qū)別在于“”中沒有“=” 中間是一段Java代碼,不是表達式,每條Java語句要以分號結(jié)尾位于Scriptlet中定義的變量和方法不會被其他線程共享,當前用戶對該變量的操作不會影響到其它用戶 當變量所在的頁面關(guān)閉后就會被銷毀 通過“聲明標識聲明的變量與位于Scriptlet中變量的區(qū)別

9、 num的值是:的值是: num1的值是:的值是:第一次運行結(jié)果 刷新3次運行結(jié)果 什么是指令標識通過指令標識可以使服務(wù)器按照指令的設(shè)置來執(zhí)行動作通過指令可設(shè)置在整個JSP頁面范圍內(nèi)有效的屬性在一個指令中可以設(shè)置多個屬性,這些屬性的設(shè)置可以影響到整個頁面 page指令page指令稱為頁面指令,利用頁面指令可以定義在整個JSP頁面范圍內(nèi)有效的屬性 include指令include指令用于在運行時將HTML文件或JSP頁面嵌入到另一個JSP頁面 taglib指令taglib指令的作用是在JSP頁面中,將標簽庫描述符文件TLD引到該頁面中,并設(shè)置前綴,利用標簽的前綴去使用標簽庫描述符文件中的標簽 P

10、age指令格式:page指令可以放在JSP頁面中的任意位置,但習(xí)慣上放在文件的開始部分,提高程序的可讀性 page指令具有多種屬性,通過這些屬性的設(shè)置可以影響到當前的JSP頁面屬性名屬性名作用作用extends 用于指定一個JSP頁面轉(zhuǎn)換為Servlet后繼承的類 session默認值為true,表示當前頁面支持session。設(shè)為false表示不支持session buffer 設(shè)置out對象使用緩沖區(qū)的大小 info該屬性可設(shè)置為任意字符串,如當前頁面的作者或其它有關(guān)的頁面信息 errorPage 該屬性用來指定一個當前頁面出現(xiàn)異常時所要調(diào)用的頁面 isErrorPage 表示此頁面是否為

11、錯誤處理頁面,默認為false isELIgnored 表示此頁面是否忽略EL表達式。默認為false,表示不會忽略EL表達式 pageEncoding 用來設(shè)置JSP頁面字符的編碼,默認值為”ISO-8859-1” include指令格式:include指令只支持file屬性,該屬性指定要在編譯時嵌入的文件名 頁面的名稱應(yīng)當在編譯時已知,文件的內(nèi)容將被嵌入include指令所在的 JSP頁面為什么要使用include指令使用include指令引用外部文件,可減少代碼冗余 Logo圖片區(qū)側(cè)欄動態(tài)內(nèi)容頁 尾遇到這樣的頁面模板怎么辦?在JSP中,因為對部分Java對象做了聲明,因此即使不聲明這些對

12、象,也可以使用。 這些內(nèi)建對象在JSP頁面初始化時生成,由容器實現(xiàn)和管理,不需要由JSP開發(fā)人員進行實例化。 在所有的JSP頁面中都能使用這些內(nèi)建對象,起到簡化頁面的作用。out對象主要用來向客戶端輸出各種數(shù)據(jù)類型的內(nèi)容,并且管理應(yīng)用服務(wù)器上的輸出緩沖區(qū)。 緩沖區(qū)默認值一般是8KB,可以通過頁面指令page來改變默認值。 在使用out對象輸出數(shù)據(jù)時,可以對數(shù)據(jù)緩沖區(qū)進行操作,及時清除緩沖區(qū)中的殘余數(shù)據(jù),為其他輸出讓出緩沖空間。out對象被封裝為javax.servlet.jsp.JspWriter類的對象,在實際應(yīng)用中out對象會通過JSP容器變換為java.io.PrintWriter類的對

13、象。 out對象的常用方法:2.1 out輸出對象out對象的print()方法:out對象的print()方法是把數(shù)據(jù)輸出到頁面。輸出的數(shù)據(jù)可以是整型、字符型、布爾型等。print()方法既可輸出單純的文字,例如:“你好”,也可以輸出HTML標記。 % out.print(out.print()方法示例); out.print(我是一只); out.print(); out.print(小); out.print(小); out.print(小); out.print(); out.print(鳥); out.print(想要飛也飛不高); out.print(=out.print()方法示

14、例=); %out對象的clearBuffer()方法:out對象的clearBuffer()方法可清除緩沖區(qū)數(shù)據(jù)。 % out.print(); out.print(hello!hello!hello!hello!); out.print(); out.clearBuffer(); %沒有任何輸出結(jié)果out對象的flush()方法:out對象的flush()方法可把緩沖區(qū)中的數(shù)據(jù)輸出到網(wǎng)頁上。 數(shù)據(jù)送入緩沖區(qū)后,需要清除緩沖區(qū)中的數(shù)據(jù),但在清除緩沖區(qū)前,還需將緩沖區(qū)數(shù)據(jù)送入頁面中顯示,此時可使用flush()方法。 % out.print(); out.print(hello!hello!h

15、ello!hello!); out.print(); out.flush();/在清除緩沖區(qū)之前,先輸出緩沖區(qū)的數(shù)據(jù) out.clearBuffer();/清空緩沖區(qū) %out對象的close()方法:out對象的close()方法是關(guān)閉輸出流。如果out對象的輸出流已經(jīng)關(guān)閉,則不能再向頁面輸出數(shù)據(jù)。 % for(int i=1;i=1;j-) out.print();for(int j=1;j=2*i-1;j+) out.print(); out.print(); out.print(ok); out.print(輸出流已經(jīng)關(guān)閉!); out.close();/關(guān)閉輸出流 out.print

16、(再次輸入數(shù)據(jù),該數(shù)據(jù)不會顯示); %request對象表示客戶端的請求,包含了所有的請求信息。例如:請求的來源,Cookies和客戶端請求相關(guān)的數(shù)據(jù)??梢栽贘SP頁面中直接使用request對象,通過它的方法來獲取請求相關(guān)數(shù)據(jù)。request對象常用方法 :方法名稱方法名稱方方 法法 描描 述述String getParameter(String name)根據(jù)頁面表單組件名稱獲取請求頁面提交的數(shù)據(jù)String getParameterValues(String name)獲取頁面請求中一個表單組件對應(yīng)多個值時用戶的請求數(shù)據(jù)String getRequestURI()獲取請求字符串的客戶端地

17、址String getRemoteAddr()獲取客戶端的IP地址String getServiceName()獲取服務(wù)器名Object getAttribute(String name)返回由name指定的屬性值void setAttribute(String name,Object obj)設(shè)置名字為name的request參數(shù)值request對象應(yīng)用舉例: 用用 戶戶 名:名: 性別:性別: 男男 女女學(xué)歷:學(xué)歷: option value= selected高中高中 option value= 大專大專 option value= 本科本科 option value= 研究生研究生 認

18、知途徑:認知途徑: input name=chkCognition type=checkbox id=chkCognition value= 報紙報紙input name=chkCognition type=checkbox id=chkCognition value= 網(wǎng)絡(luò)網(wǎng)絡(luò)input name=chkCognition type=checkbox id=chkCognition value= 媒體媒體input name=chkCognition type=checkbox id=chkCognition value= 其它其它 . . . /獲取提交過來的用戶名獲取提交過來的用戶名 S

19、tring uid=new String(request.getParameter(txtUid).getBytes(iso-8859-1); /獲取性別獲取性別 String sex=new String(request.getParameter(radSex).getBytes(iso-8859-1); /獲取學(xué)歷獲取學(xué)歷 String graduate=new String(request.getParameter(selGraduate).getBytes(iso-8859-1); /獲取認知途徑獲取認知途徑 String cognitions=request.getParameter

20、Values(chkCognition); /獲取服務(wù)器名獲取服務(wù)器名 String serviceName=request.getServerName(); /獲取獲取IP地址地址 String ip=request.getRemoteAddr();. . .response內(nèi)建對象處理JSP生成的響應(yīng),然后將響應(yīng)結(jié)果發(fā)送給客戶端。response對象常用方法:方法名稱方法名稱方方 法法 描描 述述void sendRedirect(String name)發(fā)送一個響應(yīng)給瀏覽器,指示其請求另一個URLvoid setContentType(String name)設(shè)置響應(yīng)生成的內(nèi)容的類型和字

21、符編碼void setHeader(String name,String value)設(shè)置指定名稱的Http文件頭的值response對象應(yīng)用舉例實現(xiàn)將表格中的內(nèi)容,導(dǎo)入excel。實現(xiàn)瀏覽器定時刷新。 條碼條碼 名稱名稱 單價單價 出產(chǎn)地出產(chǎn)地 62109876543 牙膏 ¥3.4 上海 62109876786 手機 ¥500 深圳 session對象表示用戶的會話狀況。用此項機制可以輕易識別每一個用戶,能保存和跟蹤用戶的會話狀態(tài)。購物車最常使用session的概念,當用戶把商品放入購物車時,再去添加另外的商品到購物車時,之前選購的商品仍然在購物車內(nèi),且用戶不用反復(fù)去做身份驗證。 如果用戶

22、關(guān)閉瀏覽器,則會終止會話。 session對象常用方法: 方法名稱方法名稱方方 法法 描描 述述void setAttribute(String name,Object value)以名稱/值的方式,將一個對象的值存放到session中Object getAttribute(String name)根據(jù)名稱去獲取session中存放的值void removeAttribute(String name)刪除session中與name相關(guān)聯(lián)的屬性boolean isNew()判斷session對象中是否存在新數(shù)據(jù)void invalidate()將保存在session中的數(shù)據(jù)全部清除3.1 ses

23、sion對象用session對象重構(gòu)購物車為購物車增加退回商品、減少數(shù)量、清空購物車等功能。運行效果:編寫產(chǎn)生商品并放入購物車的頁面putCarjsp 放入購物車放入購物車進入購物車進入購物車 編寫顯示購物車showCar.jsp頁面 購物車中的商品如下:購物車中的商品如下: 商品商品數(shù)量數(shù)量操作操作 % Object keyset=car.keySet().toArray(); /得到得到Map的鍵集合的鍵集合 for(int i=0;i a href=backShopServlet?shop=退回商品退回商品 a href=decreaseServlet?shop=減少數(shù)量減少數(shù)量 清空購

24、物車清空購物車 返回返回 編寫用于實現(xiàn)“退回商品功能的Serlvet命名為BackShopServlet.java /獲取要退回的商品獲取要退回的商品int shop=Integer.parseInt(request.getParameter(shop);/從從session中獲取購物車中獲取購物車Map car=(Map)request.getSession().getAttribute(car);/從購物車中刪除該商品從購物車中刪除該商品car.remove(shop);/轉(zhuǎn)發(fā)到顯示購物車頁面轉(zhuǎn)發(fā)到顯示購物車頁面request.getRequestDispatcher(showCar.js

25、p).forward(request, response); u編寫用于實現(xiàn)“減少數(shù)量功能的Servlet命名為DecreaseServlet.java int shop=Integer.parseInt(request.getParameter(shop); /獲取要退回的商品獲取要退回的商品Map car=(Map)request.getSession().getAttribute(car); /從從session中獲取購物車中獲取購物車CarItem carItem=(CarItem)car.get(shop); /獲取購物車項獲取購物車項if(carItem.getQuantity()

26、1)/如果數(shù)量大于如果數(shù)量大于1 carItem.setQuantity(carItem.getQuantity()-1); /則把數(shù)量減少則把數(shù)量減少1 else /否則數(shù)量等于否則數(shù)量等于1,直接在購物車中刪除直接在購物車中刪除 car.remove(shop); /轉(zhuǎn)發(fā)到顯示購物車頁面轉(zhuǎn)發(fā)到顯示購物車頁面 request.getRequestDispatcher(showCar.jsp).forward(request, response); 編寫用于實現(xiàn)“清空購物車功能的Servlet命名為ClearCarServlet.java public class ClearCarServle

27、t extends HttpServlet public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException this.doPost(request, response);public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException response.setContentTyp

28、e(text/html;charset=gbk);PrintWriter out = response.getWriter();/移除移除session中的購物車中的購物車 request.getSession().removeAttribute(car); /轉(zhuǎn)發(fā)到顯示購物車頁面轉(zhuǎn)發(fā)到顯示購物車頁面request.getRequestDispatcher(showCar.jsp).forward(request, response); application對象用于保存所有應(yīng)用系統(tǒng)中的公有數(shù)據(jù),服務(wù)器啟動并且自動創(chuàng)建application對象。只要沒有關(guān)閉服務(wù)器,application對象將

29、一直存在,所有用戶可以共享application對象。 session對象和用戶會話相關(guān),不同用戶的session是完全不同的對象,而用戶的application對象都是相同的一個對象,即共享這個內(nèi)建的application對象。 application對象常用方法: 方法名稱方法名稱方方 法法 描描 述述void setAttribute(String name,Object value)以名稱/值的方式,將一個對象的值存放到application中Object getAttribute(String name)根據(jù)名稱去獲取application中存放的值String getRealPat

30、h(String path)返回虛擬路徑的真實路徑application對象實現(xiàn)網(wǎng)頁計數(shù)器 % int number=0;/設(shè)置設(shè)置number變量用于保存網(wǎng)頁次數(shù)變量用于保存網(wǎng)頁次數(shù) if (application.getAttribute(num)=null)/如果不存在此屬性,表明第一次運行如果不存在此屬性,表明第一次運行 number=1; else /從從application中獲取上一次的訪問計數(shù)器中獲取上一次的訪問計數(shù)器 number=Integer.parseInt(application.getAttribute(num).toString(); number+;/計數(shù)器加計

31、數(shù)器加1 application.setAttribute(num,new Integer(number); /把最新的次數(shù)放入把最新的次數(shù)放入application中中保存保存out.print(該網(wǎng)頁的訪問次數(shù)是:該網(wǎng)頁的訪問次數(shù)是:+number+次次); /輸出目前的訪問輸出目前的訪問次數(shù)次數(shù)% 第一次運行該頁面時 關(guān)閉瀏覽器再次運行關(guān)閉Web服務(wù)器再次運行 用application對象完成的網(wǎng)頁計數(shù)器在Web服務(wù)器關(guān)閉或重啟之后數(shù)據(jù)會丟失,怎樣去實現(xiàn)一個真正的網(wǎng)頁計數(shù)器?pageContext對象使用戶可以訪問頁面作用域中定義的所有內(nèi)建對象。pageContext對象提供方法以訪問內(nèi)建對象在頁面上定義的所有屬性。pageContext對象作用范圍僅

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論