JSP數(shù)據(jù)交互(一)Requset Response Session

一、JSP內(nèi)置對象
????jsp內(nèi)置對象,是指可以不加聲明和創(chuàng)建就可以在JSP頁面腳本(Java程序片和Java表達(dá)式)中使用的成員變量。
分別為:request、response、session、application、out、pagecontext、config、page、exception
二、request
????用來與客戶端交互用,在客戶端發(fā)出每個請求時,服務(wù)器都會創(chuàng)建一個request對象,并把請求數(shù)據(jù)封裝到request中,然后在調(diào)用Servlet.service()方法時傳遞給service()方法,這說明在service()方法中可以通過request對象來獲取請求數(shù)據(jù)。
? ? 或者說客戶端的請求內(nèi)容存放在request里。
?(1)常用方法:
1.String getParameter(String name);根據(jù)表單名稱獲取數(shù)據(jù)
?request.getParameter(“password”) 獲取名字為“password”的標(biāo)簽的值,只能獲取單個值。
?
2.String[ ] getParameterValues(String name) 用法同上,但是會獲取所有符合條件的值,可能會獲取多個?

3.void setCharacterEncoding(String charset),制定請求的編碼例如:
? ?request.setCharacterEncoding("utf-8");
此方法為 “POST” 方式提交時使用
使用“GET”提交時編碼方式為
// 讀取用戶名和密碼String name = request.getParameter("name");
// 對請求數(shù)據(jù)進(jìn)行字符編碼
name = new String(name.getBytes("ISO-8859-1"), "UTF-8");
或者直接在sever.xml 設(shè)置端口處添加 URIEncoding="UTF-8"?

4.RequestDispatcher getRequestDispatcher(String path),返回一個RequestDispatcher對象,執(zhí)行轉(zhuǎn)發(fā)時使用
例如:?
RequestDispatcherrd=request.getRequestDispatcher("Sys/aa.jsp");
rd.foward(request,response);

5.void setAttribute(key,val) / Object ?getAttribute(key)
set方法為設(shè)置鍵值對為參數(shù),get方法為根據(jù)鍵獲取值。

(2)request 轉(zhuǎn)發(fā)
RequestDispatcherrd=request.getRequestDispatcher("Sys/aa.jsp");
rd.foward(request,response);
注意:轉(zhuǎn)發(fā)是服務(wù)器行為。
? ? ? ? ? 轉(zhuǎn)發(fā)時,瀏覽器url地址欄不變
? ? ? ? ? 轉(zhuǎn)發(fā)前后的request是共享的,是同一個request。
? ? ? ? ? 轉(zhuǎn)發(fā)只能轉(zhuǎn)發(fā)web項目內(nèi)的地址,web項目外的不可轉(zhuǎn)發(fā)。?

三、response 重定向
response.sendRedirect("http://baidu.com");
注意:重定向時客戶端行為。
? ? ? ? ? 重定向后,瀏覽器url地址發(fā)生改變
? ? ? ? ? 重定向后的數(shù)據(jù)不共享,但是可以用拼接url("aa.jsp?a=10")的方式來傳遞參數(shù)。
? ? ? ? ? 重定向可以看做是兩次request,因此速度較慢,request為第一選擇。

詳情見:Request與Response的區(qū)別

四、Session會話(基于Cookie實現(xiàn))
????一個會話就是在一段時間內(nèi),一個客戶端與Web服務(wù)器的一連串相關(guān)的交互過程。
? ? session將用戶的信息寫入用戶獨占的session中,在同一個瀏覽器中,每個網(wǎng)站用戶都有一個獨立的session.并且一個瀏覽器獨占一個session, 舉例:
????(1)登錄京東賬號后,關(guān)閉京東頁面,再次打開京東頁面仍然是登錄狀態(tài),但是點擊淘寶頁面,及時賬號密碼相同但仍然不會登錄。表明session每個web項目用戶都會有一個獨有的session.
? ? (2)用360登錄京東后,再用谷歌打開京東你發(fā)現(xiàn)仍然需要登錄,表明每個瀏覽器獨占一個session,即使是相同的網(wǎng)站仍然會是不同的session.
session在實際使用過程中的流程。
? ? ?session創(chuàng)建時間:session在用戶連接上網(wǎng)站時就會創(chuàng)建。
? ? ?session銷毀時間:session銷毀時間有兩種,第一種使用代碼主動銷毀,第二種session的生命周期到了會自動銷毀,因此僅僅關(guān)閉瀏覽器并不會銷毀之前的session,再次打開瀏覽器需要重新登錄僅僅是因為session是重新生成的罷了,一個新的session,里面沒有存儲相關(guān)信息所以需要重新登錄。?
????綜上所述:session在用戶連接web應(yīng)用時由服務(wù)器端創(chuàng)建,之后會session的id號,以cookie的形式回寫給客戶端(瀏覽器),服務(wù)器發(fā)現(xiàn)當(dāng)客戶端帶著session id 過來就會根據(jù)id查找內(nèi)存中對應(yīng)的session為之服務(wù)。?
? ? session的數(shù)據(jù)保存在內(nèi)存中(當(dāng)然也可以通過代碼使其持久化)?

Session常用方法

每個session對象都與一個瀏覽器窗口對應(yīng) ,重新開啟一個瀏覽器窗口,可以重新創(chuàng)建一個session對象(不同版本瀏覽器可能有所差別)

通過超鏈接打開的新窗口,新窗口的session與其父窗口的session相同

?
?關(guān)于session失效
手動設(shè)置失效:invalidate()

超時失效

通過setMaxInactiveInterval( )方法,單位是秒
<%session.setAttribute("login","admin");
session.setMaxInactiveInterval(600);
response.sendRedirect("admin.jsp");%>

通過設(shè)置項目的web.xml或Tomcat目錄下的/conf/web.xml文件,單位是分鐘<session-timeout>10<session-timeout>

五、include指令
將session的驗證指令單獨寫入一個jsp,文件然后可以重復(fù)引用
<%String login = (String) session.getAttribute("login");
if (login == null) {
response.sendRedirect("index.jsp");
return;
} %>
????在后臺首頁面中使用include指令引用登錄驗證文件
<%@ include file="loginControl.jsp" %>? ?

六、補充
????一般來說,除了跳轉(zhuǎn)登錄及跳轉(zhuǎn)Web項目之外的頁面需要重定向,其余情況用轉(zhuǎn)發(fā)為首選。
? ? 1.轉(zhuǎn)發(fā)速度快,url地址欄不變,可以遮掩項目文件路徑,所以轉(zhuǎn)發(fā)首選,但不能轉(zhuǎn)發(fā)到Web項目之外的地址
? ? 2.跳轉(zhuǎn)登錄時需要清空request,而且請求內(nèi)容簡單,所以直接用重定向。?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • JSP總結(jié)(經(jīng)典) day1 JSP 定義: 1)Java Server Page, Java EE 組件,本...
    91數(shù)據(jù)閱讀 3,667評論 0 13
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,715評論 19 139
  • JSP(Java Server Pages),其根本是一個簡化的 Servlet 設(shè)計,實現(xiàn)了在 Java 當(dāng)中使...
    靜候那一米陽光閱讀 1,079評論 0 1
  • 0. 引言 學(xué)習(xí)Jsp的目的是為了解技術(shù)從前后端強(qiáng)耦合到前后端分離的過程,增加自己的技術(shù)積淀。了解并且體會這個過程...
    付凱強(qiáng)閱讀 1,274評論 0 5
  • 我發(fā)現(xiàn)越是真心的朋友,在你懷疑自己的能力的時候,總會給予你信心,給予你贊美。當(dāng)我到達(dá)一種連我自己都無力吐槽的狀況時...
    二十五六歲閱讀 322評論 0 2

友情鏈接更多精彩內(nèi)容