JSP基礎 Cookie Session

(一),JSP入門
一.什麼叫JSP?
JSP全稱爲Java Server Page。JSP是運行在服務器端的腳本語言,用來開發動態網頁,是JavaWeb開發的重要技術。通過提供JSP提供的語法,可以在HTML中寫Java代碼,也可以使用JSP的標籤。
二.JSP的作用
Servlet:
缺點:不適合設置HTML響應體
優點:可以編程,是動態的資源
html:
缺點:靜態網頁,不能包含動態信息
優點:可以直接使用各種HTML標籤
JSP:
優點:在原有html基礎上加上Java腳本,構成JSP頁面
三.JSP和Servelet的分工
JSP:
作爲請求發起頁面:超鏈接,表單
作爲請求結束頁面:顯示數據
Servlet:
作爲請求中處理數據的環節.
四,JSP的組成
JSP由HTML,java腳本,jsp標籤構成.
在JSP中無需創建就可以使用的對象,有九個,也就是九大內置對象.比如request,out等.
JSP中的三種Java腳本:(也就是可以在這三種格式中寫java代碼)
<% 代碼 %>:可以在這個格式中正常的寫java代碼,可以在java的方法中寫什麼,就可以在這裏寫什麼。


    <%
        //在這裏面可以寫所有(可以在java中寫的)代碼
        int a=2;
        String b="哈哈";
        //out就是內置對象
        //jsp中的內置對象,就是不用聲明,不用創建
        //可以直接使用的對象
        //out對象,可以將信息輸出到頁面上顯示
        out.println(a+"</br>");
        這裏面的a是局部變量,只作用當前<% %>%>

<%= 代碼 %>:java表達式,常用於輸出一條表達式的結果,或者一個變量的值.

<%! 代碼 %>:聲明,可以用來定義類的成員變量,成員方法(過時了不用)

<%!
    //這裏面可以定義成員變量,成員方法,甚至可以創建類
    int a=5;
%>
<%=++this.a%>
這裏的a指的是成員變量,作用於整個對象中。

五.基本原理
頁面第一次訪問時,服務器會把JSP文件編譯成Java文件(就是一個Servlet類)
這裏寫圖片描述所以上面四中,聲明類的成員變量,就是在聲明這個JSP文件編譯成Java文件後的成員變量
然後再把.java文件編譯成.class字節碼文件
執行.class文件創建該類對象
調用該對象的service()方法
若該文件沒被修改過,則第二次請求同一jsp文件時,直接調用service方法
六.JSP的九大內置對象:
out:向瀏覽器輸出信息
config:就是Servlet中的ServletConfig
page:表示當前這個jsp頁面
request:封裝了請求數據的對象
response:用來向客戶端傳輸信息
session:用來保存一次會話中需要存儲的數據.
application:就是ServletContext,表示應用程序上下文
exception:錯誤處理頁面中才有該對象,封裝了錯誤信息
pageContext:當前JSP頁面的上下文,可以通過這個對象獲得其他的八個對象.

(二).Cookie
一.HTTP協議與Cookie
Cookie是服務器保存到客戶端的!由服務器創建,保存到客戶端!
當客戶端訪問服務器時,會將上次請求得到的Cookie再發送給服務器.
實際上,Cookie就是由服務器保存到客戶端瀏覽器的一個鍵值對…又見鍵值對…
二.Cookie的用途
保存服務器想存儲在客戶端的信息,比如用戶的用戶名,下次再訪問該服務器直接輸入密碼就可以了,再比如各種廣告.Cookie一般都用在這裏,不排除特殊情況。
三.服務器保存Cookie
發送響應頭的方式保存到本地:
response.addHeader(“Set-Cookie”,”aaa=AAA”);
response.addHeader(“Set-Cookie”,”bbb=BBB”);
保存的Cookie
key:aaa value:AAA
key:bbb value:BBB
獲取請求頭的方式獲取發送到服務器的Cookie:
request.getHeader(“Cookie”);
直接保存Cookie對象到本地:
response.addCookie(cookie);
獲取瀏覽器歸還的Cookie對象:
request.getCookies();得到Cookie[]
四.Cookie的相關屬性
name與value只是最基本的.
maxAge:可保存的最大時長,單位爲秒
maxAge>0:瀏覽器將Cookie保存到硬盤上,有效時長有maxAge決定
maxAge<0:瀏覽器只將Cookie保存到瀏覽器內存中,用戶關閉瀏覽器,Cookie被銷燬
maxAge=0:瀏覽器會直接刪除該Cookie,可以用來刪除原有Cookie
不設置maxAge屬性,則Cookie默認保存到關閉瀏覽器時.

 response.setHeader("Set-Cookie", "a=A");
 response.setHeader("Set-Cookie", "b=B");
 response.setHeader("Set-Cookie", "c=C");
 使用set創建A B 都被C所覆蓋

 Cookie cookie=new Cookie("d","D");
 cookie.setMaxAge(10);
 我這個設置的是10秒鐘

這是之前設置的,沒有設置最長時間

path:

//path屬性,是瀏覽器請求服務器時
//是否攜帶該Cookie的判斷依據
//如果訪問路徑中含有Cookie的path屬性
//比如訪問:/path/ps
cookie的path屬性爲:/path
那麼會將這個Cookie攜帶着請求服務器

//path的默認值
//訪問文件路徑的父路徑
//比如:訪問/CookieSession(項目名稱)/path/ps
//則父路徑爲:/CookieSession/path
cookie.setPath(“/Path”)
(三),Session
一.HttpSession
Session是一種機制,可以在服務器端保存信息的機制.
JavaWeb中的HttpSession是Java平臺對Session的一種實現規範.
HttpSession是用來追蹤會話的類,是服務器端對象,保存在服務器端.
從用戶首次訪問服務器開始,到用戶關閉瀏覽器爲止,稱爲一次會話.
在Servlet中獲得Session:request.getSession();在JSP中session是九大內置對象之一,可以直接使用.
二.HttpSession域
HttpSession是Servlet三大域對象之一,域對象都有下面的三個方法;
setAttribute();
getAttribute();
removeAttribute();
Servlet三大域對象:request域,session域,application域
三.HttpSession的作用
用來追蹤會話.
什麼是會話?
用戶在瀏覽某個網站時,從進入網站到瀏覽器關閉所經過的這段時間,稱爲一次會話.
會話範圍:
從某個用戶首次訪問服務器開始,到該用戶關閉瀏覽器結束.
服務器會爲每個客戶端創建一個session對象,session主要用於解決單個客戶端訪問同一網站的不同頁面資源時信息的傳遞與控制.
比如用戶A,訪問了服務器的a.jsp,又訪問了b.jsp,那麼這個用戶A的用戶名和密碼等資料怎麼傳遞呢?
當用戶A訪問a.jsp時,可以將信息資料存儲在session中,訪問b.jsp時,可以從session中取出信息
四,得到session對象
Servlet中:request.getSession().getAttribute(“user”)
就是在request請求中,通過session獲得user
session域的相關方法:
setAttribute();
getAttribute();
removeAttribute();
五.HttpSession的原理
服務器不會直接創建session對象,而是在第一次執行request.getSession方法獲取session對象時,纔會創建該對象.

獲取Cookie中的JSESSIONID(如果Cookie中無JSESSIONID,那麼會去獲取url中是否有該JSESSIONID參數):
如果sessionId不存在,創建session,把session保存起來,把新建的sessionId保存到Cookie中.
如果sessionId存在,通過sessionId查找到session對象,如果沒有查找到,創建session,把session保存起來,把新建的sessionId保存到Cookie中.
如果sessionId存在,通過sessionId查找到了session對象,那麼就不會再創建session了.
找到了session後,返回session對象
如果創建了新的session,瀏覽器會得到一個包含了sessionId的Cookie,這個Cookie的生命爲-1,即只在瀏覽器內存中存在, 如果不關閉瀏覽器,那麼Cookie就一直存在.
下次請求時,再次執行request.getSession()方法,因爲可以通過Cookie中的sessionId找到對應的session對象,所以與上一處請求使用的是同一個session對象.
這也就是一次會話中,多次請求明明已經是不同的request對象了,還能找到相同的session對象的原因.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章