




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
JavaWeb應用開發計算機與軟件學院第12章JSP技術■本章要點:
JSP基本語法靜態包含與動態包含隱藏對象Cookie對象Session對象JDBC的實現12.1
JSP語法JSP的全稱是JavaServerPage(Java服務器頁面)。JSP是由Sun公司倡導、許多其他公司參與建立的一種動態網頁技術標準。JSP頁面從形式上來看是在傳統的網頁HTML文件中加入Java程序片段和JSP標簽。Servlet/JSP容器收到客戶端發出的請求時,會執行其中的程序片段,然后將執行結果以HTML格式響應給客戶端。12.1
JSP語法JSP與HTML、Servlet的不同靜態HTML頁面的請求過程:當用戶請求訪問http://.../hello.htm,Web服務器會讀取本地文件系統中的hello.htm文件中的數據,把它作為響應的正文發送給用戶的瀏覽器。htm(或html文件)文件事先已經存儲于web服務器端的文件系統中,無論客戶請求多少次這個文件,都會得到相同的內容,也正因此稱之為“靜態”。12.1
JSP語法Servlet通過Java程序代碼來讀取客戶端的請求參數,通過PrintWriter對象向客戶端發送動態生成的HTML標簽和數據。隨著客戶端不同的請求,Servlet類產生的HTML代碼不同,發送給客戶端的響應頁面內容也就不同。12.1
JSP語法在傳統的HTML文件中加入Java程序片段和JSP標記,就構成了JSP文件。從形式上看JSP更接近HTML頁面,它能夠和HTML文件一樣,直接表達網頁的外觀。但JSP頁面和HTML頁面有本質的區別,HTML文檔是靜態文檔(內容是不會變化的),而JSP和Servlet一樣,都能動態生成HTML文檔。12.1
JSP語法JSP指令JSP指令語法形式為:<%@指令名
屬性1=“屬性值”屬性2=“屬性值”…%>,常用的指令有三種:page、include、taglib。Page指令用于指定編程語言、編碼方式和導入的軟件包等page指令的屬性12.1
JSP語法JSP指令page指令的屬性12.1
JSP語法JSP聲明在<%!%>內聲明與JSP對應的Servlet類的成員變量和方法。聲明語法塊會被翻譯到Servlet的類體中,即service()方法外面。所以聲明塊中不能直接編寫Java語句,除非是變量的聲明;JSP聲明語法塊中的代碼會按照先后順序被翻譯到Servlet類體中。JSP聲明對應的Servlet
12.1
JSP語法Java表達式Java表達式的語法為<%=%>,使用它可以將表達式的值輸出到網頁上,即可以將java變量/表達式的值嵌入到網頁文本中。語法:<%=變量或表達式%>例如:<%=newDate()%>JSP引擎在翻譯腳本表達式時,會將程序數據轉成字符串,然后在相應的位置用out.print()將數據輸出給客戶端,上面的的例子會翻譯成out.print(newDate());。12.2
靜態包含與動態包含靜態包含與動態包含靜態包含在JSP文件中可以使用include指令來包含其他文件的內容,被包含的文件可以是HTML也可以是JSP。語法形式為:<%@includefile=“目標頁面的URL”%>靜態包含發生在解析JSP源文件的階段,被包含的目標文件內容會被原封不動地添加到JSP源文件中,然后再對融合過的JSP源文件進行翻譯和編譯。如果客戶端訪問a.jsp的時候,服務器一定會檢查a.jsp是否是發生了修改,是否需要重新的翻譯和編譯。但是不一定會檢測被包含的b.jsp是否發生了變化,因此如果b.jsp發生了變化,最好要經過重新的翻譯和編譯過程,才能保證結果是最新的。因此靜態包含主要用于包含不常發生變動的頁面。12.2
靜態包含與動態包含靜態包含與動態包含動態包含使用include操作可以包含靜態或者動態文件,如果包含進來的是動態文件,這個被包含的動態文件也會被JSP容器執行。語法形式為:
<jsp:includepage=“目標頁面url”>動態包含發生在運行JSP對應的servlet類的階段,被包含的JSP目標文件的響應結果被包含到JSP源文件的響應結果中。在servlet中,相當于此句:request.getRequestDispatcher(“目標url").include(request,response);。12.2靜態包含與動態包含
無論是靜態還是動態include,源組件和被包含組件,均使用同一個request對象和response對象。源組件請求中存儲的參數和屬性,目標組件中均能得到。靜態包含中,被包含組件的代碼都被融合在源組件代碼中,最終產生一個servlet源文件,兩者的代碼均在servlet的sevice方法中,自然是共用方法的參數request和response。而動態包含,在調用被包含組件的service方法時,把源組件的request和response對象也傳遞給了service(類似forward),因此兩者也是共用request和response。靜態包含中,源組件和被包含組件不能有同名變量(塊級變量除外),因為它們最終都在同一個service方法里,方法里的局部變量不能重名。12.3隱藏對象簡單的說,JSP中的隱含對象,就是無需定義,就可以在JSP文件中直接使用的那些對象,例如request。下面是一個普通的JSP頁面文件,該文件被第一次訪問時,Web服務器將對其進行轉譯,將它翻譯成一個servlet類。12.3隱藏對象JSP的隱藏對象12.4
Cookie對象如何在用戶首次訪問網站的任一組件時,給用戶一個唯一的id?當用戶后續訪問此網站下其它組件時,如何保證瀏覽器把這個id號提交給服務器?為了維護用戶和用戶行為之間的關聯性,主要有下面幾種方法:URL重寫技術、隱藏表單技術、Cookie技術。12.4
Cookie對象URL重寫技術將會話信息以請求參數的形式嵌入到服務器發出的每個超鏈接中。這樣每次用戶點擊超鏈接的時候,都會把這個參數發給服務器,服務器就能區分用戶了。為了保持URL的簡潔,通常這個嵌在URL中的會話信息是一個由服務器生成的代表客戶的唯一性的ID號,在URL的表現形式上,它通常是作為URL請求參數的形式出現的,如:
http://.../servlet/Rewritten?sessionid=67888URL重寫技術的優點:用戶是匿名的;在Web服務器實現上得到普遍的支持。URL重寫技術的缺點:由于會話信息作為查詢參數在URL上是可見的,因此會話存在一定的安全隱患;需要對所有動態生成的URL進行重寫,代碼比較繁瑣;只能用于動態產生的文檔如Servlet和JSP頁面,而不能用于HTML文檔。12.4
Cookie對象隱藏表單技術HTML表單允許把一些字段信息隱藏起來,而在瀏覽器上不被顯示出來,但是當表單提交時,這種隱藏表單元素的信息可以被作為參數提交。<inputtype=“hidden”name=“***”value=”…”>將用戶的會話信息(例如唯一的ID號)寫在隱藏表單里,用戶看不見,但是當表單提交時,信息會作為參數提交給服務器。服務器可以利用request對象的getParameter()方法讀取出來。同重寫URL技術相比,隱藏表單技術是利用表單來傳遞會話信息,而URL重寫技術是使用GET請求參數來傳遞會話信息(例如超鏈接)。除了這點,二者并無根本區別。它們都屬于非持久化會話方案,都使用頁面動態修改技術,因此不支持靜態HTML,代碼編寫方式很相似。12.4
Cookie對象Cookie技術Cookie可以隨著請求和響應在瀏覽器和服務器之間傳遞。在首次訪問Web服務器資源時,服務器將Cookie連同響應發送到客戶端保存起來。客戶端再次訪問同一個Web服務器時,主動查找與服務器匹配的Cookie并隨請求發往服務器。服務器根據Cookie決定響應。服務端使用下面語句創建Cookie,并把Cookie添加到響應中,發往客戶端瀏覽器。
Cookiecookie=newCookie(“cookie名”,“cookie值”);
response.addCookie(cookie);當瀏覽器再次訪問該網站時,瀏覽器會將此網站的Cookie隨著請求發送給網站服務器(訪問百度/搜狐時把百度/搜狐Cookie發給百度服務器),瀏覽器會找到對應的Cookie進行發送。12.4
Cookie對象Cookie的傳遞形式Cookie屬性12.4
Cookie對象使用Cookie維護會話的工作過程如下:1.用戶第一次訪問某網站時,服務器生成一個Cookie,格式為:“Cookie的名字:客戶的ID號”,并把這個Cookie隨著響應發送給客戶端。例如:baidu:13f4a4b4c21b2.客戶端瀏覽器存儲該Cookie,當用戶再次訪問同一個Web服務器時,瀏覽器會檢查本地的Cookie,并將其原樣發送給Web服務器。3.服務器從客戶發回的Cookie中取出客戶ID號,并以此為索引獲得該客戶的會話信息,并進行維護處理。12.4
Cookie對象利用Cookie維護會話的優點有:目前大多數瀏覽器都可以識別和處理來自Web服務器的Cookie,因此兼容性較好。因為Cookie可以保存在客戶端的小文件中,因此Cookie支持持久性的維持會話信息,哪怕瀏覽器關閉也可以維護。利用Cookie維護會話的缺點有:Cookie的名聲不太好,個別網站可能在用戶不知情的情況下采集客戶個人信息。用戶可以禁用Cookie。12.5
Session對象URL重寫、隱藏表單、Cookie,都需要程序員進行大量的程序編寫,比較繁瑣。ServletAPI規范定義了一個HttpSession接口,允許Servlet容器針對每一個會話建立一個HTTP會話對象(即HttpSession對象),該會話對象將會自動被賦予一個唯一的“會話編號”(sessionID),而無需程序員編程實現。同時,HttpSession對象提供了一組存取會話屬性的方法,這樣就可以很容易的在服務器端存放用戶會話狀態。12.5
Session對象Session對象與Cookie的聯系內置對象session和cookie的聯系為:session對象由servlet容器自動創建,并賦予一個唯一的編號。這個編號隨著一個名為“JSESSIONID”的Cookie發送給客戶端。如圖所示。session對象的生命周期和作用范圍和名為“JSESSIONID”的Cookie緊密聯系在一起。服務器根據Cookie查找Session對象,如圖所示。通過ID號123456找到Session對象-A,通過ID號654321找到Session對象-B。12.5
Session對象Session對象的生存期session對象默認的過期時間是1800秒,也就是30分鐘。過期指的是連續n分鐘沒有訪問過應用內的任意組件。超過這個時間后,服務端的session對象會被銷毀。可以為session對象設置過期的時間,下面代碼設置為30秒,只要客戶端有30秒鐘未訪問該應用的任何組件,session過期,服務器會銷毀該session對象。session.setMaxInactiveInternal(30);與Session對象關聯的JSSESSIONIDcookie是存于瀏覽器進程中的(maxAge=-1),瀏覽器關閉就會失效。如果瀏覽器重啟后,再訪問同一服務器,將不會發送此cookie。12.5
Session對象Session對象的重建session對象重建的場景有瀏覽器關閉導致session對象重建和session過期重建。當瀏覽器首次訪問服務器時,未攜帶任何cookie,服務器為其生成一個JSESSIONID為123456的cookie,并通過response對象返回給瀏覽器。當重啟瀏覽器,瀏覽器端保存的JSESSIONID沒有了,123456Session對象還在服務器,但是由于客戶端丟失了id,已經無法找到匹配的cookie,造成session需要重建。服務器發現請求里沒有JSESSIONIDcookie,認為這是首次訪問的新會話,又創建了一個新session對象,并賦予一個新id65432112.5
Session對象當用戶n分鐘沒有訪問過應用的任何頁面,Session會過期重建。如圖所示。當瀏覽器首次訪問服務器時,未攜帶任何Cookie,服務器為其生成一個JSESSIONID為123456的Cookie,并通過response對象返回給瀏覽器。當用戶n分鐘沒有訪問過應用的任何頁面后,服務器發現請求里的id號123456,但是這個id號對應的seesion對象已經不存在了,又創建了一個新session對象。12.5
Session對象向HttpSession對象中存取屬性在servlet中,可以使用HttpServletRequest對象獲得HttpSession對象。publicvoiddoPost(HttpServletRequestrequest, HttpServletResponseresponse){
HttpSessionsession=request.getSession();}在JSP頁面中可以直接使用session對象,該session對象就是HttpSession的一個實例。可以用setAttribute方法和getAttribute方法在session對象中存取屬性,存入session對象中的屬性,可以在會話范圍內被共享。使用setAttribute向session中存儲屬性(attribute)。
session.setAttribute(“c”,newCircle(5));使用getAttribute從session中按屬性名取得屬性值:Circlecircle=(Circle)session.getAttribute(“c”);12.6
隱含對象request對象12.6隱含對象response對象12.6隱含對象response對象12.6隱含對象application對象12.6隱含對象pageContext對象12.7
JDBCJDBC,全稱為JavaDataBaseConnectivity,它是一個面向對象的應用程序接口(API),是由Java編程語言編寫的類及接口組成,同時它為程序開發人員提供了一組用于實現對數據庫訪問的JDBCAPI,并支持SQL語言。利用JDBC可以將JAVA代碼連接到Oracle、DB2、SQLServer、MySQL等數據庫,從而實現對數據庫中的操作。12.7
JDBCJDBCAPIJDBC中常用類和接口有連接到數據庫(Connection)、建立操作指令(Statement)、獲得查詢結果(ResultSet)等。驅動程序管理類(DriverManager):DriverManager類是JDBC的管理類,作用于用戶和驅動程序之間。它跟蹤可用的驅動程序,并在數據庫和相應驅動程序之間建立連接。負責加載各種不同驅動程序(Driver),并根據不同的請求,向調用者返回相應的數據庫連接(Connection)。不同的數據庫(sqlserver2000,Sqlserver2005,Oracle,mysql,Sybase等)驅動不同,由數據庫廠商提供,
DriverManager加載驅動的代碼也有區別。Connectioncon=DriverManager.getConnection(url,"sa","123");12.7
JDBC常見數據庫驅動字符串12.7
JDBC數據庫連接類(Connection):Connection對象代表與數據庫的連接。連接過程包括所執行的SQL語句和在該連接上返回的結果。一個應用程序可與單個數據庫有一個或多個連接,或者可與很多數據庫有連接。與數據庫建立連接的標準方法是調用DriverManager.getConnection()方法。Stringurl="jdbc:mysql://:3306/E-Store";Stringuser="root";Stringpassword="root";DriverManager.getConnection(url,user,password);12.7
JDBCConnection類常用方法12.7
JDBCDriver:驅動程序,會將自身加載到DriverManager中去,并處理相應的請求并返回相應的數據庫連接(Connection)。常見的連接字符串如表所示。user是數據庫用戶名,password為用戶的密碼。12.7
JDBC聲明類(Statement):Statement對象用于將SQL語句發送到數據庫中。實際上有三種Statement對象,它們都作為在給定鏈接上執行SQL語句的包容器:Statement、PreparedStatement(它從Statement繼承而來)和CallableStatement(它從PreparedStatement繼承而來)。它們都專用于發送特定類型的SQL語句:(1)Statement對象用于執行不帶參數的簡單的SQL語句
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 福建省福州市金山中學2025年高三下學期4月開學英語試題含解析
- 云南省龍陵一中2025年高三《天府大聯考》(二)物理試題試卷含解析
- 吉林建筑科技學院《蒙古族民間文學概論》2023-2024學年第二學期期末試卷
- 贛州師范高等專科學校《醫學影像信息學》2023-2024學年第一學期期末試卷
- 個人述職與未來規劃
- 廣東科貿職業學院《軟件測試綜合實踐》2023-2024學年第二學期期末試卷
- 肋骨骨折并血胸護理查房
- 廣東省廣州市三元里中學2025屆中考預測密卷:化學試題試卷含解析
- 大連醫科大學中山學院《人類遺傳病》2023-2024學年第二學期期末試卷
- 肋骨骨折的護理
- 肺彌散功能測定標準
- 肌少癥的診斷評估與治療專家共識(2023年版)
- 國際疾病分類ICD11編碼庫
- 醫療廢物管理條例課件
- 升壓斬波電路
- 產品特殊價格申請表
- 2023年河南鄭州大學第二附屬醫院經開院區招聘藥學工作人員筆試備考題庫及答案解析
- 衛生部手術分級目錄(2023年1月份修訂)
- 鋼棧橋施工監理細則
- 優秀員工榮譽證書模板
- 金蝶PLM詳細介紹
評論
0/150
提交評論