




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、 Servletservelt:(基于網絡的)什么是Servelt:運行在web服務器或應用服務器上的java程序,他是一個中間層負責連接來自web瀏覽器或其他HTTP客戶程序的請求和HTTP服務器上的數據庫或應用程序。為什么使用servlet:Servlet是一種服務器端的Java應用程序,具有獨立于平臺和協議的特性,可以生成動態的Web頁面。 它擔當客戶請求(Web瀏覽器或其他HTTP客戶程序)與服務器響應(HTTP服務器上的數據庫或應用程序)的中間層。 Servlet是位于Web 服務器內部的服務器端的Java應用程序,與傳統的從命令行啟動的Java應用程序不同,Servlet由Web服
2、務器進行加載,該Web服務器必須包含支持Servlet的Java虛擬機。Servlet的優點:servlet是用Java編寫的,所以它們一開始就是平臺無關的。這樣,Java編寫一次就可以在任何平臺運行(write once,run anywhere)的承諾就同樣可以在服務器上實現了。servlet還有一些獨特優點:servlet是持久的。servlet只需Web服務器加載一次,而且可以在不同請求之間保持服務(例如一次數據庫連接)servlet是與平臺無關的。如前所述,servlet是用Java編寫的,它自然也繼承了Java的平臺無關性。servlet是可擴展的。由于servlet是用Java編
3、寫的,它就具備了Java所能帶來的所有優點。Java是健壯的、面向對象的編程語言,它很容易擴展以適應你的需求。servlet自然也具備了這些特征。servlet是安全的。從外界調用一個servlet的惟一方法就是通過Web服務器。這提供了高水平的安全性保障,尤其是在你的Web服務器有防火墻保護的時候。setvlet可以在多種多樣的客戶機上使用。由于servlet是用Java編寫的,所以你可以很方便地在HTML中使用它們。總結:servlet高效、可移植、功能強大且在行業中廣泛采用和實際的部署服務器無關,可以在桌面計算機上運行免費的服務器用于開發我們項目中用到的servlet的作用:讀取客戶發送
4、的所有數據,查詢HTTP請求中包含的任何其他請求信息,處理數據并生成結果,設置合適的HTTP的響應參數,將響應信息回送給客戶端web:什么是web:含有瀏覽器的客戶端和服務器端,客戶端和服務器端通過有線的或無線的網絡連接起來的,什么是有線,就例如我們家里用的寬帶,無線呢,就例如我們平時用的wiffy,通過這些網絡服務器端和客戶端產生的一些交互,就是平時我們上網看電影,購物就是訪問web.那么我們接下來做的web項目就是能夠在瀏覽器中訪問我們做的項目。就是用戶發送請求,例如我想搜一下美女圖片,我們是不是應該在客戶端打開瀏覽器,這個瀏覽器是不是有很多種,比如IE瀏覽器,第一步:在瀏覽器里輸入“美女
5、圖片”,那么輸入的這個“美女圖片”然后回車,這就是客戶端向服務器發送了一次請求,告訴服務器端我要干什么,這個過程是不是就是我發送的一次請求。第二步就是在瀏覽器中我看到了美女圖片,圖片是不是瀏覽器顯示出來的?就是我告訴服務器我要美女圖片,服務器就給我了美女圖片,那么這個過程就是服務器端對客戶端發送的請求給的回應。那么總結一下,請求就是瀏覽器到服務器端,響應就是服務器端到瀏覽器端。什么是請求和響應?HTTP請求信息:請求的組成部分:(1).請求行:由3個標記方法組成,請求方法,請求URL和HTTP版本,用空格分隔(2).請求頭域:有關鍵字/值對組成,每行一對,關鍵字和值用冒號分開。(3).空行:最
6、后一個請求頭標之后是一個空行(4).請求數據:使用Post傳送數據,最長使用的是Content-Type和Content-length頭標HTTP響應信息:響應信息的組成部分:(1).狀態行:HTTP版本,響應代碼和響應描述(2).響應頭標:像請求頭標一樣,他們指出服務器的功能,標識響應數據細節(3).空行:最后一個響應頭標之后是一個空行(4).響應數據:HTML文檔等TTP協議:(Hypertext Transfer Protocl)Hypertext:超文本 Transfer:傳輸 Protocol: 協議1.0版本和1.1版本(我們用) HHTTP協議規定web的基本運作過程,基于客戶/
7、服務器通信模式,客戶端發出請求,服務器端接收HTTP請求,再返回相應的HTTP響應結果http是一種協議,那么它是有狀態的還是無狀態的呢?HTTP無狀態:瀏覽器和服務器之間不需要建立持久的聯系,例如:上網看新聞,我打開了一個網頁,發送了一次請求,給了我響應,但是并沒有記錄我看過新聞,這就是無狀態HTTP有狀態:瀏覽器和服務器之間建立了持久的聯系,也可以是一段時間的聯系,例如,我到網上買東西,我把一件東西放到購物車中,記錄我放入購物車里的東西,當我下次登錄的時候還會看到購物車里的東西。這就是有狀態。超文本傳輸協議:采用客戶/服務器通信模式,服務器端為HTTP服務器,也稱web服務器,客戶端為HT
8、TP客戶程序,瀏覽器是最常見的HTTP客戶程序HTTP請求方式:(1) GET:客戶程序通過這種請求方式,訪問服務器上的一個文檔,并由服務器把文檔發送給客戶程序,存儲數據量小,不安全,傳輸快,地址欄長度有限制,最多2kb,編碼格式不支持中文,ISO 8859-1(2) POST:客戶程序通過這種方式向服務器發送大量信息,在HTTP請求中除了包含要訪問的文檔的URL,還包括大量的請求正文,會包含HTTP表單數據,存儲量大,安全,傳輸慢,地址欄長度在IE中最多為2G,編碼格式為對應的網頁的編碼格式(3) HEAD(4) PUT(5) DELETE(6) OPTIONS(7) TRACE在頁面中我們
9、最常用的請求方式就是get和post,而為了安全我們在編程的過程中最常用的是Post狀態碼:1*:信息提示,表示臨時的響應2*:響應成功,表示服務器成功的接收到客戶端的請求3*:重定向4*:客戶端錯誤,表明客戶端可能出現問題5*:服務器錯誤,表明服務器由于遇到某種錯誤而不能響應客戶端請求常見的狀態碼:200:響應成功302:臨時重定向401:未經授權400:錯誤的請求,客戶發送的HTTP請求不正確404:文件不存在,在服務器上沒有客戶要訪問的文檔(不允許請求的方法)405:服務器不支持客戶的請求500:服務器內部錯誤501:服務器不支持能夠滿足請求的功能503:服務器不可用URL和 URI的區
10、別:(絕對路徑和相對路徑的區別)URL:統一資源定位符(Uniform Resource Locator),用于完整的描述Inteernet上網頁和其他資源的地址的一種標識方法 組成:協議+服務器地址(端口)+具體資源路徑,如果端口號是該協議的標準端口號,可以省略端口號htmlURI:統一資源標識符(Uniform Resource Identifier),相對于URL是指資源相對于當前頁面的地址,它包含從當前頁面指向目標頁面位置的路徑3種寫法:(1).同一目錄下只需要輸入連接的文件名 (2).上一級目錄在目錄名和文件名前加“./” (3).下一級目錄輸入目錄名和文件名之間用“/”隔開Tomc
11、at:什么是Tomcat?Tomcat是一個免費的開放源代碼的web應用服務器,它是Apatche軟件基金會(Apache Softwar Foundation )的JAKARTA項目中的一個核心項目,由Apache和SUN還有一些其他公司及個人共同完成的。由于有了SUN的參與和支持最新的SERVLE和JSP規范總能在Tomcat中體現出來因為Tomcat性能穩定,而且免費,所以深受JAVA愛好者的喜愛,并得到了部分軟件開發商的認可,成為當前比較流行的web應用服務器。Tomcat目錄結構:(8) Bin:存放啟動和關閉tomcat腳本。 (9) Conf:存放不同的配置文件,如server.
12、xml ,Tomcat的主要配置信息,端口號,HTTP協議版本等都在里面,tomcat-users.xml,tomcat的角色。端口號的范圍:0-65535(10) Work:存放JSP編譯后產生的class文件。 (11) Webapps:Tomcat的主要Web發布目錄。(12) Logs:存放Tomcat執行時的日志文件。 (13) Temp:Java虛擬機處理文件用的文件夾(14) Lib:存放tomcat服務器所需的各種jar包訪問本機的tomcat的三種方法::8080 :8080 9:8080常見的端口號:21:ft
13、p 80:http 8080:tomcat mysql:3306 1521:oracle環境變量:Path:指定機器中javac和java的路徑,到jdk的bin路徑Classpath:尋找servlet相關所在的路徑,到jdk中lib下的servlet-api.jarJava_home:啟動時需要找到jvm,到jdk為了確保tomcat正常啟動,必須配置java_home,其他兩個可以沒有,三個變量都配置的目的:為了正常開發web項目應用程序,并且能夠發布訪問web應用程序。啟動Tomcat: E:姚璐Javaapache-tomcat-6.0.36binstartup.bat關閉Tomca
14、t: E:姚璐Javaapache-tomcat-6.0.36binshutdown.batCS與BS C/S(Client/Server)結構程序,就是指(客戶端/服務器)程序,我們主要用cs結構來開發面向桌面的應用程序,他最大的特點就是如果你想用這個程序,你必須安裝他的客戶端到你的電腦上才能使用,并且如果服務器端更新,客戶端必須也更新,不然無法使用。比如:qq和一些大型的網絡游戲都是典型的C/S結構程序。 B/S(Browser/Server)結構程序,就是指(瀏覽器/服務器)程序,我們主要用bs結構來開發面向Internet的應用程序。程序完全部署在服務器上,用戶通過瀏覽器訪問應用程序,
15、它是基于Internet的產物。比如:一些購物網站、論壇等都是B/S結構程序。目前在應用程序開發方面,以B/S結構應用程序開發的比較多,市場比較廣,所以我們的課程也主要學習B/S結構程序的開發。通過下面的圖進一步理解B/S結構程序的運行流程Servlet容器:Servlet容器有時候也叫做Servlet引擎,是Web服務器或應用程序服務器的一部分,用于在發送的請求和響應之上提供網絡服務。Servlet不能獨立運行,它必須被部署到Servlet容器中,由容器來實例化和調用Servlet的方法,Servlet容器在Servlet的生命周期內包容和管理Servlet。Servlet類必須部署在一個服
16、務器中才能運行,我們可以管這個服務器叫做Servlet容器。Servlet的作用:讀取客戶發送的所有數據,查詢HTTP請求中包含的任何其他請求信息,處理數據并生成結果,設置合適的HTTP響應參數,將響應信息回送給客戶端,servlet本領高的兩個原因:(1)由java語言編寫的,(2)由servlet容器創建Servlet的特點:(1) 提供了可被服務器動態加載并執行的程序代碼,為來自客戶的請求提供相應的服務(2) Servlet完全java語言編寫,因此運行servlet的服務器必須支持java語言(3) Servlet完全在服務器端運行,因此它的運行不依賴瀏覽器,不管瀏覽器是否zhichi
17、java語言,都能請求訪問服務器端的servletServletJavax.servlet包:接口:ServletConfig ServeltContext RequestDispatcher Servlet ServletRequest ServletResponse 類:GenericServletJavax.servlet.http包:類:HttpServlet 繼承GenericServlet接口:HttpServletRequest 繼承ServletRequest HttpServletResponse 繼承ServletResponseServlet常用武器:(1).請求對象:S
18、ervletRequest和HttpServletRequest,獲取來自客戶端的請求信息(2).響應對象:ServletResponse和HttpServletResponse,生成響應結果(3).Servlet配置對象ServletConfig,當容器初始化一個Servlet對象時會向servlet提供一個ServletConfig對象,通過該對象獲取初始化參數信息以及ServletContext對象(4).Servlet上下文對象,ServletContext,訪問容器當前web應用提供的各種資源(5).各接口之間的關系(6).動態結構,各種對象在運行時的協作過程,以及各種對象的生命周期
19、定義一個servlet步驟定義一個Servlet類,在javax.servlet包中定義了所有的Servlet類都必須實現或擴展的的通用接口和類.在javax.servlet.http包中定義了采用HTTP協議的HttpServlet類。我們自己定義的servlet需要繼承HttpServlet,而GenericServlet是HttpServlet的父類,我們為什么不繼承GenericServlet而是繼承了HttpServlet?GenericServlet是抽象類,并且沒在http包中,HttpServlet類,是抽象類,繼承了GenericServlet,實現了Servlet接口,位于
20、http包中。我們的請求和響應都是基于http協議的,所以我們自定義的servlet類需要繼承HttpServlet類。在多數的網絡應用中,都是客戶端(瀏覽器)通過http協議去訪問服務器的資源,而我們所編寫的servlet也主要是應用于http協議的請求和響應。為了快速開發應用于這個協議的servlet類,sun公司提供了HttpServlet這個類。HttpServlet簡介:(抽象類)適合用于運行在與客戶端采用Http協議通信的servlet容器或者服務器中,在Java Web應用時,自定義的Servlet類一般都擴展HttpServlet,HttpServlet實現了Servlet接口
21、中的service(ServletRequest req ,ServletResponse res)方法,該方法實際上調用的是它的重載方法service(HttpServletRequest req,HttpServletResponse res),service處理請求時首先調用HttpServletRequest類型的參數的getMethod()方法,從而獲得客戶端的請求方式,再根據請求方式調用方法,如果是Get就調用doGet方法,如果是Post 就調用doPost方法 HttpServletRequest和HttpServletResponse接口Servlet由Servlet容器來管
22、理,當客戶請求到來時,容器創建一個ServletRequest對象,封裝請求數據,同時創建一個ServletResponse對象,封裝相應數據。而ServletResponse和ServletRquest還有子接口HttpServletRequest和HttpServletResponse接口,父接口是通用的請求和響應,但是我們目前應用的都是基于http協議的,所以用他的子接口。HttpServletRequest,代表客戶端傳送過來的請求,包含了ip地址、form表單的參數等信息。HttpServletResponse,代表服務器給客戶端的響應。HttpServletRequest和Http
23、ServletResponse專門來處理http請求和響應。Web.xml文件:當我們編寫好servlet之后,如何讓tomcat知道,這個java類是和某個請求路徑對應的呢,就是通過web.xml配置文件。servlet-name用于指定servlet名字,在同一個web程序中,每一個servlet的名字必須是唯一的,該元素的內容不能為空。servlet-class用于指定servlet類的完全限定名;servlet-mapping節點用于在servlet于url之間定義一個映射,這里面的servlet-name的值必須與上面的一致,url-pttern用于指定對應的url路徑。配置例子:&
24、lt;servlet><servlet-name>myfirst</servlet-name> 指定servlet的邏輯名<servlet-class>HelloServlet</servlet-class> 對應的類名(完全限定名)不要忘了包名</servlet><servlet-mapping><servlet-name>myfirst</servlet-name> 邏輯名 與上面的一致<url-pattern>/helloServlet</url-pattern>
25、 指定客戶端在地址欄里面輸入什么能訪問到這個servlet(斜杠表示從項目名開始)</servlet-mapping> Servlet生命周期不同階段調用的不同方法Servlet運行在Servlet容器中,其生命周期由容器(如:Tomcat)來管理。Servlet的生命周期通過javax.servlet.Servlet接口中的init( )、service( )、destroy( )等方法來完成。init(ServletConfig config):初始化Servlet對象,容器在創建好Servlet對象后就調用service(ServletRequest req,ServletR
26、esponse res):響應客戶請求,當容器接收到客戶端要求訪問特定的Servlet對象時就會調用destroy():釋放Servlet對象占用的資源,當servlet對象結束生命周期時,容器就會調用(服務器重啟或者web項目重新加載時調用)getServletConfig():返回ServletConfig對象,在該對象中包含了servlet初始化信息getServletInf():Servlet的生命周期包含了四個階段:實例化階段創建servlet類的對象初始化階段對象調用初始化方法服務階段-調用service()方法,根據提交方式調用doget或dopost方法銷毀階段-調用destr
27、oy()方法銷毀在這幾個生命周期中會分別調用servlet的不同方法,其中實例化階段調用servlet的缺省構造函數,創建servlet對象后,會立即調用init()方法,根據請求,調用service方法。通過下圖進一步理解Servlet的生命周期:當客戶端一個請求到來時,tomcat首先根據請求的URL得到相應的servlet,然后調用該servlet的service()方法,并根據是get還是post請求調用doget和dopost方法,這兩個方法的輸出作為響應內容發送給客戶端。當我們要關閉tomcat時,tomcat在退出前,還要負責釋放servlet所釋放的資源。通過程序驗證四個階段的
28、執行特點Servlet中獲取數據通過請求參數request來獲取的,可以通過HttpServletRequest中的方法來獲取數據。String getParameter(String name) 根據頁面表單組件名稱獲取頁面提交數據String getParameterValues(String name) 獲取表單中多值控件提交的信息 ,參數為控件名稱。如復選框中的值Servlet中實現輸出html頁面需要通過參數response來作出響應,可以通過HttpServletResponse中的方法來實現。PrintWriter getWriter( ) 返回PrintWriter對象 Pri
29、ntWriter可以向客戶端輸出字符。通常我們習慣給這個類型的對象起名叫做out。Servlet中代碼實現PrintWriter out=response.getWriter();out.println("用戶名:"+name+"<br>");out.println("密碼:"+pwd+"<br>");解決亂碼問題設置提交信息的字符編碼,通過HttpServletRequest中的方法來實現: ,參數為”utf-8”時,設置提交字符編碼為支持中文。例:request.setCharacter
30、Encoding("utf-8");設置響應信息的字符編碼,HttpServletResponse中的方法來實現:例:response.setContentType("text/html; charset=UTF-8");或response.setCharacterEncoding("utf-8");請求轉發請求轉發就是指將用戶的請求轉發給另外一個Servlet或頁面,然后由它們進行處理并產生對請求的響應。HttpServletRequest中具有方法getRequestDispatcher,這個方法是ServletRequest中的
31、方法,方法的返回值是RequestDispatcher類型的對象。public RequestDispatcher getRequestDispatcher (java.lang.String path)在Servlet中,利用RequestDispatcher對象,可以將請求轉發給另外一個Servlet或JSP頁面,甚至是HTML頁面,來處理對請求的響應。RequestDispatcher對象具有的public void forward(ServletRequest request, ServletResponse response)這個方法能夠實現將請求轉發給另外的頁面。request.g
32、etRequestDispatcher("success.html").forward(request, response);HttpServletRequest對象的生命周期:從一個請求開始,到這個請求處理結束。而且只要刷新頁面,request也將失效。請求轉發的特點:請求轉發后,不會產生新的請求,會繼續沿用原來的請求 請求轉發后,地址欄顯示的是原頁面的URL請求轉發時用到的接口RequestDispatcher,在這個接口中定義了兩個方法:1)forward(ServletRequest request,ServletResponse response)必須在響應提交給
33、用戶之前調用。2)include(ServletRequest request,ServletResponse response)3)區別:include()將請求轉發給其他的Servlet,被調用的Servlet對該請求做出的響應將并入原先的響應對象中,原先的Servlet還可以繼續輸出響應信息。forward():將請求轉發給其他的Servlet,將由被調用的Servlet負責對請求做出響應,而原先Servlet的執行則終止。重定向重定向就是指將用戶的請求重定向給另外一個Servlet或頁面,然后由它們進行處理并產生對請求的響應。HttpServletResponse 類的public v
34、oid sendRedirect(java.lang.String location) 能夠實現重定向的頁面跳轉。但是與請求轉發的原理不一樣。Response.sendRedirect(“success”); 重定向的特點:重定向后,會產生一個新的請求重定向后,地址欄顯示的是目標頁面的URL請求轉發和重定向的區別2種跳轉完成同樣的功能,但是區別非常大:在地址欄中,用重定向跳轉后地址欄會顯示目標頁面。請求轉發地址欄顯示源頁面區別在于請求的次數:請求轉發 請求沒變;重定向 會產生新的請求request.getRequestDispatch(“T2.jsp”).forward(request,res
35、ponse);相當于將本次的請求和響應轉發給你請求轉發不能跳轉到其他項目中,只能在本項目內跳轉,重定向可以跳轉到其他項目中HTTP協議的特點HTTP協議是無狀態的協議,發送的請求不記錄用戶的狀態,不記錄用戶的信息。就相當于它被訪問了2次,不知道是哪兩人訪問的,或者是一個人訪問兩次。正是因為HTTP協議的這一特點,用戶的活動發生在多個請求和響應之中,作為web服務器,必須能夠采用一種機制來唯一地標識一個用戶,同時記錄該用戶的狀態。比如說我們平時上的qq.可以設置登錄狀態,記住密碼,之后我們在一段時間內就可以不用輸入密碼直接輸入,那么Http協議是無狀態的,我們怎么可以讓他記住我們的狀態呢,就是通
36、過會話跟蹤技術什么是會話:就像我和一個人之間的對話會話跟蹤技術有哪幾種?Cookie Session 隱藏表單域(hidden) URL重寫什么是Cookie:Cookie的中文意思是點心的意思Cookie是保存到客戶端的一個文本文件,與特定客戶相關。Cookie是一種由服務器發送給客戶的片段信息,存儲在客戶端瀏覽器的內存中或硬盤上,cookie存活在本地,在客戶隨后對該服務器的請求中發回它。Cookie以“鍵-值”對的形式記錄會話跟蹤的內容,服務器利用響應報頭set-cookie來發送cookie信息。創建cookie創建Cookie:new Cookie(name,value)可以使用Co
37、okie 的setXXX方法來設定一些相應的值setName(String name)/getName()setValue(String value)/getValue()setMaxAge(int age)/getMaxAge()利用HttpServletResponse的addCookie(Cookie)方法將它設置到客戶端利用HttpServletRequest的getCookies()方法來讀取客戶端的所有Cookie,返回一個Cookie數組cookie的分類Cookie分兩種 放在內存中 一旦瀏覽器關閉 就消失了Cookie c1=new Cookie("",&
38、quot;");response.addCookie(c1);一種是屬于文本 有生命周期的可以通過serMaxAge(600);這個方法設置 毫秒為單位 表示這個cookie的有效時間保存到硬盤上的cookie可以在多個瀏覽器之間共享,也就是說,兩個瀏覽器在訪問同一個url時,使用的是同一個cookie信息。cookie的缺點Cookie對用戶是透明的,并且保存在磁盤上,持久性高,可以長時間的跟蹤用戶,了解用戶上網的習慣,并且保存用戶的名和密碼等敏感信息有很大的安全隱患,而用戶在網上的一舉一動,就有可能成為某些網站的賺錢機會,這就會造成一些隱私權和安全性方法的問題。而且我們也可以在瀏
39、覽器中禁用cookie,就可以阻止所有的cookie,那么只要跟cookie相關的操作就失效了cookie的應用1設置cookieCookie cookie = new Cookie("Session-Cookie-" + i, "Cookie-Value-S" + i);response.addCookie(cookie);/ 設置cookie的有效時間 單位為毫秒cookie.setMaxAge(600);response.addCookie(cookie);讀取客戶端的Cookie Cookie cookies = request.getCooki
40、es(); if (cookies != null) Cookie cookie; for(int i=0; i<cookies.length; i+) cookie = cookiesi; out.println("<TR>n" + " <TD>" + cookie.getName() + "</TD>n" + " <TD>" + cookie.getValue() + "</TD></TR>n" ); out.pr
41、intln("</TABLE></BODY></HTML>"); session客戶端可以阻止服務器寫入cookie 所以說cookie不太可靠 另外也不安全更安全的是基于session的HttpSession對象服務器為每個會話創建一個HttpSession對象 每個會話對象都有一個唯一的ID 把用戶的數據保存在相應的HttpSession對象內原理:用戶第一次發送請求的時候,服務器創建一個HttpSession對象,并把該對象的id返回給用戶,同時服務器在內存中開辟一空間,用來保存該對象數據,服務器將此id發送回客戶端做出響應;用戶第
42、二次發送請求的時候把id一起發送給服務器,服務器根據id號尋找相應的數據。創建和使用session會話的創建使用HttpServletRequest 的 getSession() 方法創建會話,獲取session對象兩個方法:getSession();(=getSession(true);) getSession(boolean b);,HttpSession session = request.getSession(true); true: 返回與當前關聯的會話,如果沒有就創建后將其返回false: 返回與當前關聯的會話,如果沒有返回null使用sessionsession.setAttri
43、bute(String param,Object value);存值session. getAttribute(String param);取值 session的生命周期session的創建瀏覽器訪問服務器時,服務器為每個瀏覽器創建不同的session對象session的關閉調用session. invalidate()方法,使session對象失效(安全退出)訪問時間間隔大于非活動時間間隔, session對象失效關閉瀏覽器時,session對象失效(也相當于第二種現象)可以設置session的有效時間,服務器默認30分鐘。一般點擊退出的時候,會調用invalidate()這個方法 生命周期
44、總結:從一個客戶端打開瀏覽器并連接到服務器開始,到客戶端關閉瀏覽器離開這個服務器為止,或調用方法主動卸載session對象,或session對象存在時間超時后被自動卸載,在這期間被稱為一個會話 。 每個客戶端擁有自己獨立的session對象session與cookie的區別1.cookie會把信息記錄在客戶端 就是本地 Session會記錄在服務器端,服務器端創建sessionid后,需要把sessionid保存在客戶端,就是保存到cookie中,可以采用cookie或url重寫的方式保存。如果cookie被禁用了,cookie不好用,session就會不好用2.保存sessionid的coo
45、kie在關閉瀏覽器后就刪除了,不能在多個瀏覽器中共享。而普通的cookie在關閉瀏覽器后再次打開時,仍然存在,可以在多個瀏覽器進程間共享。解釋: 通常將用于會話跟蹤的cookie叫做會話cookie,在servlet規范中,用于會話跟蹤的cookie名字必須為JSESSIONID,通常保存在瀏覽器的內存中。所以在內存中得cookie不能被不同的瀏覽器共享。對于保存在磁盤中得cookie,因為是在外部的存儲設備存儲,所以可以再多個瀏覽器進程中共享。3.cookie只能寫文本 有長度限制 4096字節 session沒有限制誤區:很多人認為“瀏覽器一旦關閉,session就消失了”,是錯誤的!主要
46、是因為保存sessionid的cookie是存儲在瀏覽器內存中,一旦瀏覽器關閉,cookie將被刪除,sessioinid也丟失了。再次打開時,沒辦法找到之前的sessionid,所以肯定會創建一個新的session了。而這個時候先前的session是仍然存在的,直到session失效,才會被服務器消除。比如:顧客在超市購物存包,購物完畢,忘了取包就走了,但存包處的人不知道顧客走了,所以必須讓柜子繼續使用存放原來顧客的東西,直到長時間沒人來取,工作人員才會消除柜子。URL重寫這種使用session保存用戶信息的方式,我們是通過在客戶端瀏覽器中保存了一個sessionid(其實就是cookie原
47、理)來實現會話跟蹤,現在我們在瀏覽器中禁用cookie,看看還能正常運行么?設置完后,登錄后,還提示沒登陸!訪問TestServlet時,發現每次刷新都是1,都是新的sessionid。這都是因為禁用了cookie,服務器無法從客戶端獲取sessionid了,那每次請求都會創建一個新的session。這樣,當用戶禁用cookie后,session機制也失效了,自然無法實現跟蹤了,我們需要使用URL重寫機制對用戶會話跟蹤。將URL傳給response.encodeURL處理。l如果服務器使用cookie,它原封不動地返回URL。l如果服務器使用URL重寫,它將會話信息附加到URL上。l例如:St
48、ring url = "order-page.html"url = response.encodeURL(url);l將URL傳遞給response.encodeRedirectURL(url)當Cookie禁用 還想用Session時 可以通過URL重寫實現會話跟蹤JSP什么是jsp?JSP(Java Server Pages)是指:在HTML中嵌入Java腳本代碼由應用服務器中的JSP引擎來編譯和執行嵌入的Java腳本代碼然后將生成的整個頁面信息返回給客戶端Jsp和html的區別:jsp動態網頁,可以傳遞數據html:靜態網頁,獲取不到數據JSP執行過程web容器處理J
49、SP文件請求需要經過3個階段: 翻譯階段:JSP文件會被Web容器中的JSP引擎轉換成Java源碼 編譯階段:Java源碼會被編譯成可執行的字節碼 執行階段:容器接受了客戶端的請求后,執行編譯成字節碼的JSP文件;處理完請求后,容器把生成的頁面反饋給客戶端進行顯示JSP與Servlet的關系 JSP技術是出現在Servlet之后,由于servlet輸出HTML標簽太麻煩,為了方便程序員編寫動態網頁,sun公司對servlet做了一些改進,對于網頁中不會變化的部分,還是用HTML代碼來書寫,而對于需要根據請求動態生成的內容,才使用java程序來書寫。這就是JSP技術,實際JSP是serlvet的
50、衍生,JSP本質還是serlvet,Servlet是JSP技術的基礎。 JSP與Servlet的技術是相同的,表面上看jsp類似html,servlet類似java類。Jsp是往html里面插入java代碼,servlet是往java中插入html標簽。 頁面中java的多,就用servlet,如果靜態html的多,就用jsp,一般一個項目中jsp和servlet搭配使用JSP的頁面組成 一個JSP頁面由元素和模板數據組成。一個JSP頁面中可以包括HTML靜態文本、指 令、表達式、小腳本、聲明、標準動作、注釋等內容。 一個JSP頁面: <% page language="jav
51、a" import="java.util.*,java.text.*" contentType="text/html; charset=GBK" pageEncoding="GBK"%> 指令 <html> <head> <title>輸出當前日期</title> 靜態內容 </head> <!- 這是HTML注釋(客戶端可以看到源代碼)-> 注釋 <%- 這是JSP注釋 (客戶端不可以看到源代碼) -%> <body> &
52、lt;% Int a=10; %> 表達式 </body> </html>指令元素 指令元素主要用于為轉換階段提供整個JSP頁面的相關信息,指令不會產生任何的輸出。JSP中的指令元素有page指令、include指令、taglib指令。page指令,通過設置內部的多個屬性來定義整個頁面的屬性。語法:<% page 屬性1="屬性值" 屬性2="屬性值1,屬性值2" 屬性n="屬性值n"%>page指令常用屬性屬性描述默認值Language指定JSP頁面使用的腳本語言javaImport通過該屬
53、性來引用腳本語言中使用到的類文件無contentType用來指定JSP頁面所采用的編碼方式text/html, ISO-8859-1<% page language="java" import="java.util.*" contentType="text/html; charset=gb2312" pageEncoding="ISO-8859-1" extends = "" session ="true|false" buffer = "none|sizek
54、b"autoFlush="true|false" isThreadSafe="true|safe" info="info_text" errorPage = "error_url" isErrorPage = "true|false" isELIgnored = "true|false" deferredSyntaxAllowedAsLiteral= "true|false" trimDirectiveWhitespaces = "tr
55、ue|false"%> 指令元素之include指令include指令用于在JSP頁面中靜態包含一個文件,該文件可以是JSP頁面、HTML網頁、文本文件或一段Java代碼。使用了include指令的JSP頁面在轉換時,JSP容器會在其中插入所包含文件的文本或代碼。語法:<% include file="file URL"%>file URL寫相對于當前JSP頁面的URL。可以將一些共性的內容寫入一個單獨的文件中,然后通過include指令引用該文件,從而降低代碼的冗余問題,也便于修改共性內容。例子:想用代碼實現訪問控制,沒登錄不允許看到主頁,這個
56、功能就可以使用include指令來簡化。 創建登錄驗證文件 checklogin.jsp<% page import="s2jsp.sg.ch07.User"%><%User user = (User) session.getAttribute("LOGINED_USER");if (user = null) response.sendRedirect(“login.html");%> 在后臺首頁面(index.jsp)中使用include指令引用登錄驗證文件<% include file="checkl
57、ogin.jsp"%>指令元素之taglib指令taglib指令允許頁面使用用戶定制的標簽。用來引入標簽庫。語法:<% taglib uri="URIToTagLibrary" prefix="tagPrefix" %>其中uri屬性用來指定標簽庫的存放位置,prefix屬性用來指定該標簽庫使用的前綴。JSP腳本及動作元素JSP腳本元素JSP 腳本元素是用來嵌入Java代碼的,主要用來實現頁面的動態請求JSP 腳本元素包括:小腳本 表達式 聲明JSP 腳本元素之表達式表達式是對數據的表示,系統將其作為一個值進行計算和顯示語法:
58、<% = Java表達式/變量 %> 注意:在書寫表達式的時候,一定不要在表達式后面添加任何的標點符號。例子:<html><body><%=30*20%></body></html>使用表達式顯示數據。顯然,表達式更有利于在HTML中顯示數據。使用小腳本也可以顯示數據<html><% out.println(30*20);%></html> JSP 腳本元素之聲明聲明腳本元素用于聲明在JSP頁面的腳本中使用的變量和方法。聲明必須是完整的聲明語句,遵循Java語言的語法。語法: < % ! Java 代碼 %>JSP動作元素動作元素為請求處理階段提供信息。JSP2.0規范中定義了20個標準動作元素。<jsp:userBean><jsp:setProperty><jsp:getProperty><
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 天津天獅學院《基礎泰語(2)》2023-2024學年第一學期期末試卷
- 桂林航天工業學院《中國特色美食文化鑒賞》2023-2024學年第一學期期末試卷
- 鐵嶺衛生職業學院《聲樂基礎訓練Ⅱ》2023-2024學年第一學期期末試卷
- 平頂山學院《法國歷史與文化》2023-2024學年第一學期期末試卷
- 杭州職業技術學院《外國文學史(2)》2023-2024學年第一學期期末試卷
- 濟南護理職業學院《無線通信網絡優化》2023-2024學年第一學期期末試卷
- 世界骨髓捐獻者活動方案
- 業主做月餅活動方案
- 業主服務接待日活動方案
- 業余健身活動方案
- 高考英語讀后續寫:三大主題語境結尾金句
- 直飲水施工合同協議
- 老年護理技能和知識培訓
- 供應商現場審核計劃管理制度
- 售電業務知識培訓課件
- 預防病人走失
- 2025-2030中國抗體藥物結合物(ADC)行業市場發展趨勢與前景展望戰略研究報告
- 2025-2030中國安全儀表系統行業市場發展趨勢與前景展望戰略研究報告
- 2025年非高危行業生產經營單位主要負責人安全培訓(復訓)考試題庫-下(判斷題)
- 2025年江蘇防雷考試試題及答案
- T-SBIAORG 001-2023 間充質干細胞外泌體質量控制標準
評論
0/150
提交評論