天天看點

JSP實作資料傳遞和儲存 筆記分享JSP實作資料傳遞和儲存

JSP實作資料傳遞和儲存

回顧

搭建Web開發環境

  1. 伺服器軟體:Tomcat
    1. log目錄 日志
    2. webapps目錄 存放web程式 一個個的檔案夾
    3. work目錄 JSP檔案翻譯成的Java檔案
  2. 實作靜态網站的部署
  3. 實作動态網站的部署

初識JSP

  1. HTML代碼(頁面顯示效果) + Java代碼 = JSP頁面
  2. JSP中的Java腳本
    1. 聲明:

      <%! %> 可以編寫變量聲明 方法聲明

    2. 腳本:

      <%%> 可以編寫變量聲明 調用方法等

    3. 表達式:

      <%= %> 可以用于向頁面輸出内容 能調用有傳回值的方法和直接輸出一些變量 結尾不能編寫;号

  3. JSP的原理
    1. 第一次通路此頁面時/改動後再次通路
    2. Tomcat的Jasper元件幫助你将JSP(模闆)翻譯成對應的Java檔案
      1. 聲明 -> Java類的成員位置内容
      2. 腳本 -> Java類的_jspService()方法内 局部内容
      3. 表達式 -> Java類的_jspService()方法内一個輸出語句

        out.print()

        out:PrintWriter 可以向浏覽器頁面進行輸出内容
      4. HTML代碼也都通過PrintWriter的write()幫你将頁面展示出來
    3. 對Java檔案進行編譯
    4. 正常顯示到浏覽器上

JSP内置對象

1. 掌握request和response的使用

1.1 request和response的常用API

request:Java EE用于接收和處理請求資訊的

  • 從請求中根據鍵取值:String getParamepter(String name);
  • 從請求中根據鍵擷取多個值:String[] getParameterValues(String name);
  • 頁面跳轉(請求轉發):RequestDispatcher getRequestDispatcher(String path相對位址);
    • void forward(request,response);
  • 在請求中攜帶資料:void setAttrbute(String name,Object value); 作用域request可以存儲資訊,但是此資訊隻能保證在同一個請求中有效。是以一般在request作用域中存儲資訊 都會建議使用請求轉發來進行頁面跳轉。
  • 在請求中取出攜帶的資料:Object getAttribute(String name);
  • 擷取項目的根路徑:String getContextPath();
    • 例如:localhost:8080/day51-jsp-2/xxxx.jsp 的項目根路徑是:day51-jsp-2

response:Java EE用于響應用戶端的一個對象

  • 頁面跳轉(重定向):void sendRedirect(String path絕對位址<帶有項目根路徑>);

1.2 掌握解決請求中文亂碼問題

GET請求:

  • 先解碼再編碼 每個都需要這麼處理
  • 編輯server.xml中的配置 将URL編碼更改為UTF-8
  • 更新到8.0.0版本以後的Tomcat

POST請求:

  • 先解碼再編碼
  • request.setCharacterEncoding(“UTF-8”)

1.3 掌握轉發和重定向的差別

相同點:都可以實作頁面跳轉

不同點:

  • 請求轉發:它是伺服器内部的資源跳轉,隻能跳轉到伺服器内部的一些頁面(資源)
    • 請求位址不改變:例如:登入界面 -> 處理登入的頁面 -> 轉發到其他頁面(登入頁面) 位址還是處理登入的頁面
    • 請求轉發是一次請求的多次跳轉
  • 重定向:它是可以跳轉到任意的資源位址。 例如你可以用它跳轉到百度網站。
    • 位址會改變為對應的跳轉位址。
    • 重定向是開啟新的請求,與之前請求無關

聯想借錢案例。

2. 掌握session對象的使用

session也是JSP的内置對象之一,其實它是HttpSession的執行個體。

生命周期: 一次會話是由第一次通路伺服器時,Tomcat配置設定的。隻要沒有完全關閉浏覽器,都是同一個會話。

  • 不同浏覽器,會話獨立。
  • 預設從無操作起會話有效期為:30分鐘
    • 修改全局的web.xml
      <!-- ==================== Default Session Configuration ================= -->
        <!-- You can set the default session timeout (in minutes) for all newly   -->
        <!-- created sessions by modifying the value below.                       -->
      <session-config>
          <session-timeout>30</session-timeout>
      </session-config>
                 
    • 在自己的web.xml中單獨修改此資訊,優先級會比它的高

它表示一次會話,多次請求和響應的過程就是會話。

  • void setAttribute(String name,Object obj); 在一次會話中有效存儲資料(會話共享資料) session作用域
  • Object getAttribute(String name);
  • 每一次會話都會有一個會話id,擷取會話id:String getId();
  • 廢棄,銷毀session:void invalidate();

3. 掌握cookie和session的差別

3.1 Cookie的概述

HTTP協定:是用于請求和響應的一種協定,但是它是無狀态的協定。

cookie是浏覽器用于在本地存儲一些網站狀态的。

  • 網站打開之後,登入頁面就存儲着登入使用者名
  • 本地的搜尋記錄
  • 表單資料

常用API:

  • 建立Cookie:Cookie(String name,String value);
  • 重新設定值:cookie.setValue(String value);
  • 擷取鍵名:String getName();
  • 擷取值:String getValue();
  • 設定有效期:setMaxAge(int seconds); 如果不設定它 cookie是一種會話級的内容,意味着和session一樣關閉就消失了。
  • 删除Cookie:可以通過setMaxAge(0) 删除 隻需要到時候将name相同的Cookie設定後再響應回去就會覆寫
  • 設定cookie有效路徑:setPath(String path);
    • 例如:我們在localhost:8080/smbms/cookie/index.jsp 存儲了一個cookie 預設是在/cookie路徑下的内容可以取到cookie

向浏覽器存儲Cookie:

  • response的API:addCookie(Cookie cookie);

從浏覽器取出Cookie:

  • request的API:Cookie[] getCookies();

3.2 Cookie和Session的差別

位置不同:

  • Cookie是處于浏覽器端
  • Session是處于伺服器端

安全性不同:

  • Cookie由于在浏覽器端 是以極其容易被竊取,不安全
  • Session是處于服務端 是以擷取等不容易 相對比較安全

生命周期不同:

  • Session是從用戶端第一次請求開始,由伺服器配置設定,當浏覽器完全關閉或者無操作逾時則銷毀
  • Cookie是由伺服器端響應回來之後才開始生效,預設是會話級的Cookie,但是也可以設定為持久級。

存儲值不同:

  • Session可以存儲Object類型
  • Cookie隻能存儲String類型

Session實際上就是通過Cookie而産生的一種技術,HTTP是無狀态協定,無法儲存網站和用戶端之間的聯系,是以我們用戶端第一次請求伺服器時,伺服器就會根據用戶端産生一個唯一的session id,并且将其通過cookie的形式緩存到用戶端。當下次請求時,用戶端會自動将cookie通過請求頭傳遞給伺服器,伺服器識别到此資訊之後找到對應的session内容然後進行其他操作。

4. 掌握application對象的使用

四大作用域:用于在JSP中共享資料

  • page作用域
    • 僅在目前頁面有效 this
  • request作用域
    • 一次請求内,同一個request
  • session作用域
    • 一次會話内,同一個session
  • application作用域
    • 全局,伺服器開啟産生 伺服器關閉銷毀

注:筆記思路來自查老師!!

jsp