javascript
JSP中response,session,cookie,application的作用及区别
目錄
- 1.response :響應對象
- 2.session(服務端)
- 3.使用Cookie實現 記住用戶名 功能
- 4.session :會話
- 5.session機制:
- 6.session:
- 7.session方法:
- 8.cookie和session的區別:
- 9.appliation 全局對象
- 10.JSP9大內置對象
- 11.四種范圍對象(小1->大4)
- a.pageContext
- b.request
- c.session
- d.application
- 12.源碼如何關聯
1.response :響應對象
提供的方法:
void addCookie( Cookie cookie ); 服務端向客戶端增加cookie對象
void sendRedirect(String location ) throws IOException; :頁面跳轉的一種方式(重定向)
void setContetType(String type):設置服務端響應的編碼(設置服務端的contentType類型)
示例:登陸
login.jsp -> check.jsp ->success.jsp
| 地址欄是否改變 | 不變(check.jsp) | 改變(success.jsp) | |
| 是否保留第一次請求時的數據 | 保留 | 不保留 | –4種范圍對象 |
| 請求的次數 | 1 | 2 | |
| 跳轉發生的位置 | 服務端 | 客戶端發出的第二次跳轉 |
?
轉發、重定向:
轉發:
張三(客戶端) -> 【 服務窗口 A (服務端 ) -> 服務窗口B 】重定向:
張三(客戶端) -> 服務窗口 A (服務端 ) ->去找B 張三(客戶端) -> 服務窗口 B (服務端 ) ->結束2.session(服務端)
Cookie(客戶端,不是內置對象):Cookie是由 服務端生成的 ,再發送給客戶端保存。相當于 本地緩存的作用: 客戶端(hello.mp4,zs/abc)->服務端(hello.mp4;zs/abc)
作用:提高訪問服務端的效率,但是安全性較差。
Cookie: name=value javax.servlet.http.Cookiepublic Cookie(String name,String value)String getName():獲取nameString getValue():獲取valuevoid setMaxAge(int expiry);最大有效期 (秒)服務端準備Cookie:
? response.addCookie(Cookie cookie)
頁面跳轉(轉發,重定向)
客戶端獲取cookie: request.getCookies();
a.服務端增加cookie :response對象;客戶端獲取對象:request對象
b.不能直接獲取某一個單獨對象,只能一次性將 全部的cookie拿到
通過F12可以發現 除了自己設置的Cookie對象外,還有一個name為 JSESSIONID的cookie
建議 cookie只保存 英文數字,否則需要進行編碼、解碼
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body><% //客戶端獲取cookie Cookie[] cookies= request.getCookies(); for(Cookie cookie:cookies){out.print(cookie.getName()+"----"+cookie.getValue()+"<br/>");} %> </body> </html> <%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body><%//服務端Cookie cookie1 = new Cookie("name","zx");Cookie cookie2 = new Cookie("pwd","abc");response.addCookie(cookie1);response.addCookie(cookie2 );//頁面跳轉到客戶端(轉發,重定向)response.sendRedirect("result.jsp");%></body> </html>3.使用Cookie實現 記住用戶名 功能
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <%!//登陸 String uname;%> <% boolean falg=false;Cookie [] cookies= request.getCookies() ; for(Cookie cookie: cookies ){if(cookie.getName().equals("uname")){uname=cookie.getValue();falg=true;} } if(!falg){out.print("cookie失效"); }else{out.print("cookie"+uname); }%><form action="check.jsp" method="post"> 用戶名:<input type="text" name="uname" value="<%=(uname==null?"":uname) %>"><br/> 密碼:<input type="password" name="upwd"><br/> 提交:<input type="submit" value="登陸"><br/> </form></body> </html> <%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body><%request.setCharacterEncoding("utf-8");String name = request.getParameter("uname");String pwd = request.getParameter("upwd");//將用戶名放到Cookie里面Cookie cookie = new Cookie("uname", name); //建議 cookie只保存 英文數字,否則需要進行編碼、解碼cookie.setMaxAge(10) ;response.addCookie(cookie);response.sendRedirect("A.jsp");%></body> </html> <%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body></body> </html>4.session :會話
a.瀏覽網站:開始-關閉
b.購物: 瀏覽、付款、退出<%@ page language=“java” contentType=“text/html; charset=UTF-8”
pageEncoding=“UTF-8”%>
5.session機制:
客戶端第一次請求服務端時,(jsessionid-sessionid)服務端會產生一個session對象(用于保存該客戶的信息);
并且每個session對象 都會有一個唯一的 sessionId( 用于區分其他session);
服務端由會 產生一個cookie,并且 該cookie的name=JSESSIONID ,value=服務端sessionId的值;
然后 服務端會在 響應客戶端的同時 將該cookie發送給客戶端,至此 客戶端就有了 一個cookie(JSESSIONID);
因此,客戶端的cookie就可以和服務端的session一一對應(JSESSIONID - sessionID)
客戶端第二/n次請求服務端時:服務端會先用客戶端cookie種的JSESSIONID 去服務端的session中匹配sessionid,如果匹配成功(cookie jsessionid和sesion sessionid),說明此用戶 不是第一次訪問,無需登錄;
例子:
客戶端: 顧客(客戶端)
服務端: 存包處 - 商場(服務端)
顧客第一次存包:商場 判斷此人是 之前已經存過包(通過你手里是否有鑰匙)。
如果是新顧客(沒鑰匙) ,分配一個鑰匙 給該顧客; 鑰匙 會和 柜子 一一對應;
第二/n次 存包:商場 判斷此人是 之前已經存過包(通過你手里是否有鑰匙)
如果是老顧客(有鑰匙),則不需要分配;該顧客手里的鑰匙 會 和柜子 自動一一對應。
6.session:
a. session存儲在服務端(同一次會話共享,比如瀏覽同一個網頁)
b. session是在 同一個用戶(客戶)請求時 共享
c. 實現機制:第一次客戶請求時 產生一個sessionid 并復制給 cookie的jsessionid 然后發給客戶端。最終 通過session的sessionid-cookie的jsessionid
7.session方法:
String getId() :獲取sessionId boolean isNew() :判斷是否是 新用戶(第一次訪問)void invalidate():使session失效 (退出登錄、注銷)void setAttribute()Object getAttribute();void setMaxInactiveInterval(秒) :設置最大有效 非活動時間 int getMaxInactiveInterval():獲取最大有效 非活動時間 比如你設置的是一小時,在這期間你一直在瀏覽該頁面,不會有影響,但是如果你去吃個飯回來,會讓你重新登陸。示例:
登錄
客戶端在第一次請求服務端時,如果服務端發現 此請求沒有 JSESSIONID,則會創建一個 name=JSESIONID的cookie 并返回給客戶端
Cookie:
a.不是內對對象,要使用必須new
b.但是,服務端會 自動生成一個(服務端自動new一個cookie) name=JSESIONID的cookie 并返回給客戶端
8.cookie和session的區別:
| 保存的位置 | 服務端 | 客戶端 |
| 安全性 | 較安全 | 較不安全 |
| 保存的內容 | Object | String |
9.appliation 全局對象
String getContextPath() 虛擬路徑
String getRealPath(String name): 絕對路徑(虛擬路徑 相對的絕對路徑)
10.JSP9大內置對象
pageContext JSP頁面容器
request 請求對象
session 會話對象
appliation 全局對象
response 響應對象
config 配置對象(服務器配置信息)
out 輸出對象
page 當前JSP頁面對象(相當于java中的this)
exception 異常對象
11.四種范圍對象(小1->大4)
| 2request | 請求對象 | 同一次請求有效 |
| 3session | 會話對象 | 同一次會話有效 |
| 4appliation | 全局對象 | 全局有效(整個項目有效) |
| 1pageContext | JSP頁面容器 (page對象) | 當前頁面有效 |
以上4個對象共有的方法:
Object getAttribute(String name):根據屬性名,或者屬性值
void setAttribute(String name,Object obj) :設置屬性值(新增,修改)
setAttribute(“a”,“b”) ;//如果a對象之前不存在,則新建一個a對象 ;
如果a之前已經存在,則將a的值改為b
void removeAttribute(String name):根據屬性名,刪除對象
a.pageContext
pageContext 當前頁面有效 (頁面跳轉后無效)
<%=pageContext.getAttribute("hello") %>b.request
request 同一次請求有效;其他請求無效 (請求轉發后有效;重定向后無效)
response.sendRedirect("rq1.jsp"); request.getRequestDispatcher("rq1.jsp").forward(request, response);c.session
session 同一次會話有效 (無論怎么跳轉,都有效;關閉/切換瀏覽器后無效 ; 從 登陸->退出 之間 全部有效)
session.setAttribute("hello", "word"); response.sendRedirect("ss1.jsp");d.application
application
全局變量;整個項目運行期間 都有效 (切換瀏覽器 仍然有效);關閉服務、其他項目 無效
->多個項目共享、重啟后仍然有效 :JNDI
1.以上的4個范圍對象,通過 setAttribute()復制,通過getAttribute()取值;
2.以上范圍對象,盡量使用最小的范圍。因為 對象的范圍越大,造成的性能損耗越大。
12.源碼如何關聯
1.進入官網,下載對應版本源碼
官網(https://www.apache.org/)
Tomcat官網(https://tomcat.apache.org/download-90.cgi)
下載源代碼
然后導入即可!
總結
以上是生活随笔為你收集整理的JSP中response,session,cookie,application的作用及区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 解决方案仅用于执行startup.bat
- 下一篇: Mavan的配置,以及与IDEA版本不一