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