筆記四
得到表單數據:
1、String str = request.getParameter(String)//根據表單名得到表單值,如果是多個同名的鍵值,返回第一個值。
2、String[] str= request.getParameterValues(String)//根據表單名得到表單值的數組,將同名鍵值對封裝成數組.
上傳文件所需的條件:
1、表單必須以POST提交
2、表單中必須加上enctype="multipart/form-data",將請求流 消息體的格式設置為郵件格式,郵件格式才能將客戶端的文件,
以二進制方式提交給服務器。
3、在servlet中,必須加入@MultipartConfig註解,告訴服務器,以郵件格式去解析請求消息體。
請求轉發只發一次請求,轉發的是本身服務器的資源。
forward()方法意味著把請求和響應派發給別的資源後,就不會再去做任何處理了 ,不包含本身servlet輸出的結果。
include() 方法意味著請求別人幫助處理請求,但這並不是完全移交,只是暫時地把控制交給別人,本地servlet和目標資源均會輸出。
request.getRequestDispatcher("/page/login.html").(forward|include)(request, response);
web應用程序的路徑問題:
請求轉發和得到真實路徑,都是在服務器內部進行資源的查找。在/以後,不需要加工程名。
其余的資源的查找和鏈接,在/後需要加工程名。(頁面和重定向)
請求轉發和重定向的區別:
1、request.getRequestDispatcher("/page/login.html").(forward|include)(request, response);
response.sendRedirect("/webhomework/login");
2、請求轉發一次請求,可以共享request中綁定的共享數據,重定向二次請求不能共享。
3、請求轉發只能轉發到服務器內部的資源,重定向可以在第二次訪問別的服務器。
web應用中狀態跟蹤的方式:
1、隱藏表單
2、cookie(模擬存折)
3、session(模擬銀行卡)
4、URL重寫
cookie工作流程:
客戶端訪問服務器,服務器調用response.addCookie()將cookie信息添加到響應對象,產生響應時,
在響應頭中有set-cookie鍵值對,set-cookie對應的值就是cookie信息。下次訪問時服務器會將之前給客戶端的cookie信息進行狀態跟蹤。
cookie的分類:
1、保存在客戶端瀏覽器的緩存中,瀏覽器接收了cookie信息後,會在發送請求時,一直向服務器發送cookie信息。
但瀏覽器關閉後,緩存信息,cookie信息也會隨之消失,再發送請求時,不會再有cookie信息,這是默認的方式。
2、保存在客戶端的文件中,如果設置了cookie的過期時間,會以文件形式保存在客戶端。在過期範圍內,客戶端瀏覽器都會讀取cookie文件中
的cookie信息,然後發送給服務器。
session工作流程:
客戶端請求服務器,服務器調用request.getSession()方法,產生Session對象,用於保存當前用戶的信息。同時給session對象產生一個唯一標識
sessionID。為了管理不同用戶的session對象,以sessionID為鍵,以session對象為值,保存進一個Map集合。
產生響應時,服務器會將sessionID以set-cookie響應頭的方式發送給客戶端。客戶端再次請求服務器,會將sessionID以cookie請求頭方式,
發送給服務器,服務器根據sessionID從MAP集合中找到對應的session對象,從而跟蹤狀態。
//服務器端專門為保存客戶端信息而產生的對象。有session對象直接返回,沒有就創建
HttpSession session = request.getSession();
客戶端和服務器之間的交互通過session的sessionID,可以保證安全。sessionID是保存在客戶端的,只要瀏覽器不關閉就可以用sessionID訪問。
關閉後session信息消失,這時服務器會重新產生一個新的session對象。
session對象也有setAttribute()和getAttribute(),也可以綁定對象共享,範圍在一次會話中。只要瀏覽器不關閉,就可以一直講sessionID發送
給服務器,找到session對象,從而得到session對象中綁定的共享數據。
筆記四