1. 程式人生 > 其它 >JSP與Servlet的職責與區別

JSP與Servlet的職責與區別

JSP與Servlet各自的職責與區別筆記

JSP 與 Servlet

執行在伺服器端的一個應用程式

1. Servlet與JSP的職責(☆)

  • Servlet職責:用來接收並處理使用者的請求,設定字元編碼、收集表單引數、呼叫Dao層、跳轉JSP頁面
  • JSP的職責:負責資料的展現

2. Servlet跳轉JSP頁面(☆)

Servlet跳轉JSP頁面有兩種方式,分別如下:
  • 轉發:轉發是Web伺服器(Tomcat)內部控制權的轉讓,使用者傳送請求到Servlet,Servlet處理好請求後把內容轉移到JSP頁面上,給使用者瀏覽後,完成整個請求。程式碼如下:request.getRequestDispatcher("頁面路徑").forward(request,response);
  • 重定向:重定向是根據業務邏輯判斷,傳送一個狀態碼給瀏覽器,讓瀏覽器重新請求一個新的地址,所以瀏覽器地址會發生改變,重定向可以防止表單的重複提交。程式碼如下:response.sendRedirect("頁面路徑");

3. JSP中傳遞物件(☆)

JSP中傳遞物件有四個,並且是JSP內建物件,分別如下:
物件 範圍
pageContext 本頁面有效
request 下一個頁面有效
session 整個網頁會話有效(一個瀏覽器)
application 整個應用專案有效(一個Web伺服器)

4. 轉發與重定向的區別(☆)

轉發重定向
轉發是伺服器內部控制權的轉讓,多個頁面之間傳遞,使用一個request 重定向是告知瀏覽器重新發送一個請求,實現多個頁面之間的跳轉,使用兩個request
轉發只用了一個request,所以瀏覽器地址不會改變,顯示最初請求的地址 重定向使用了兩個request,瀏覽器地址顯示最後一次請求的地址
轉發只能在專案內部跳轉 重定向可以跳轉到專案外部
轉發傳遞引數:request、session、application三個物件進行傳遞,可以傳遞物件 重定向傳遞引數只能通過URL傳參(?形式),並且只能傳遞字串
轉發後地址重新整理網頁會重複提交表單 重定向後地址重新整理網頁不會重複提交表單
轉發的效率高於重定向

5. Request

Request代表使用者的請求,常用方法:
方法 描述
setCharacterEncoding("UTF-8") 設定字元編碼
setAttbute(key, value) 把物件存入到request中
getAttribute(key) 在request中獲取指定的物件,到下個頁面有效
getParameter("表單的name屬性") 獲取表單引數
getRequestDispatcher("跳轉路徑") 轉發路徑
getParameterValues("表單的name屬性") 表單引數存在多個值,使用此方法,比如:複選框
getRequestURL() 獲取訪問的絕對路徑
getRequestURI() 獲取訪問的相對路徑
getQueryString() 獲取訪問的引數字串
getServerName() 獲取專案的機器名(IP地址)
getServerPort() 獲取訪問埠
getContentPath() 獲取專案名稱
getParameterMap() 獲取表單所有引數

6. Get與Post區別

  • Get方式:
    1. get提交會在瀏覽器地址顯示引數,不安全
    2. get提交字元編碼與Tomcat有關(request、tomcat、網頁字元編碼)
    3. get提交引數長度有限制
  • Post方式:
    1. post提交不會在瀏覽器地址顯示引數,安全
    2. post提交字元編碼與Tomcat無關(request、網頁字元編碼)
    3. post提交引數沒有限制

Form表單:預設為Get方式
瀏覽器直接訪問:Get方式
JS頁面跳轉:window.location.href="";Get方式

7. JSP與Servlet區別(☆)

  • 相同點:

    • JSP就是Servlet,是一個簡易的Servlet,都可以用來處理使用者請求
  • 不同點:

    • Servlet是一個類,用來處理使用者請求,做業務邏輯的處理
    • JSP是一個頁面,用來呈現資料給使用者
    • Servlet側重於業務邏輯處理
    • JSP側重於頁面展現

8. 九大內建物件對應的類或介面

物件 超類 描述
page java.lang.Object 當前網頁物件
pageContext javax.servlet.jsp.PageContext 網頁的上下文內容
request javax.servlet.http.HttpServletRequest 當前的請求物件
response javax.servlet.http.HttpServletReponse 響應請求的物件
session javax.servlet.http.HttpSession 網頁會話
application javax.servlet.ServletContext 當前應用物件
config javax.servlet.ServletConfig 獲取配置資訊物件
out servlet.jsp.JspWriter 網頁輸出物件
exceprion java.lang.Throwable 網頁異常物件

9. Session

9.1 什麼是Session?

Session是一次網頁會話,一個瀏覽器與伺服器的一次通話,包括瀏覽器與伺服器之間的多次跳轉

9.2 Session作用(☆)

Session用來儲存使用者資訊,一個使用者對應一個Session,Session與Session之間是獨立的,不會共享資料。
同一個瀏覽器同一個伺服器不能登入多個使用者

9.3 常用方法

方法 描述
request.getSession() 獲取session
setAttribute(key, value) 把物件存入session中
getAttribute(key) 從session中獲取物件
removeAttribute(key) 根據key值刪除session中的物件
setMaxInactiveInterval(int second) 設定session的時長,單位為秒
getMaxInactiveInterval() 獲取session的時長,單位為秒
getId() 獲取session的唯一標識
invalidate() 把session置成無效,清除session中的所有物件

9.4 Session的生命週期(☆)

Session儲存的資料放在伺服器端的記憶體中

  • 誕生
    • 第一次訪問伺服器時,產生一個session
  • 銷燬
    • 關閉瀏覽器
    • 超時
    • 手動把session置成物件,呼叫invalidate()方法

9.5 設定Session的時長

  • 在Tomcat下修改web.xml檔案中的Session時長,影響整個Tomcat下所有專案的Session時長
  • 修改專案中web.xml檔案中的Session時長,隻影響本專案中Session的時長
  • 在Sevlet中設定Session時長(session.setMaxInactiveInterval(10);),經過此Servlet就會影響Session的時長

10. Application

10.1 什麼是Application?

Application物件類似於系統的全域性變數,使用者與使用者之間可以共享資料

10.2 Application的生命週期

  • 誕生
    • Tomcat啟動時會產生一個Application物件,並且只有一個,一個專案一個Application物件
  • 銷燬
    • Tomcat關閉時回收Application物件

10.3 Application的常用方法

方法描述
session.getServletContext() 獲取Application
request.getServletContext()
this.getServletContext()
setAttribute(key, value) 把物件存入Application中
getAttribute(key) 從Application中獲取物件
getInitParameter(引數的key值) 獲取web.xml中全域性引數

11. Config

11.1 什麼是Config物件?

Config物件是獲取Servlet或者JSP的配置資訊

11.2 Config的常用方法

方法 描述
getInitParameter(引數的key值) 獲取Servlet中初始化引數

12. JSP內嵌入JSP

12.1 在JSP頁面中可以嵌入另一個JSP,有兩種方式:

  • 靜態嵌入

    • 把JSP頁面內容嵌入到另一個JSP中,產生一個Servlet,上下文內容能關聯,稱為靜態嵌入
      • <%@ include file="頁面路徑" %>
  • 動態嵌入

    • 嵌入的JSP與主JSP各自編譯,產生兩個Servlet,上下文內容不能關聯,稱為動態嵌入
      • <jsp:include page="頁面路徑"></jsp:include>

12.2 靜態嵌入與動態嵌入的區別(☆)

靜態嵌入 動態嵌入
靜態嵌入使用的是JSP的標籤指令<%@ include file="頁面路徑"%> 動態嵌入使用的是JSP動作<jsp:include page="頁面路徑"></jsp:include>
靜態嵌入使用一個Servlet 動態嵌入使用兩個Servlet
靜態嵌入上下文內容能關聯 動態嵌入上下文內容不能關聯

13.1 什麼是Cookie?

Cookie是Web伺服器在客戶端儲存的一系列的文字檔案,儲存客戶端有一定的時間週期,週期過了會失效

13.2 建立Cookie

13.2.1 建立Cookie物件

Cookie cookie = new Cookie(name, value);

13.2.2 設定生命週期,單位:秒

cookie.setMaxAge(int second);

13.2.3 寫入Cookie

response.addCookie(cookie)

13.2.4 讀取
	String egg = "";
	Cookie[] cookies = request.getCookies();
	if (cookies != null) {
		for (Cookie cookie : cookies) {
			if (cookie.getName().equals("egg")) {
				egg = URLDecoder.decode(cookie.getValue(),"UTF-8");
			}
		}
	}

13.3 Cookie的優缺點

優點缺點
Cookie資訊儲存在客戶端電腦的硬碟中,可以減輕伺服器壓力 Cookie資訊透明儲存在客戶端,資訊容易被洩漏,安全性較差
Cookie可以用來提高使用者體驗度 資訊儲存在客戶端,由瀏覽器管理,容易被使用者刪除
注:可有可無的資料儲存在Cookie中,用來提高使用者的體驗度,比如:登入時記住使用者名稱

13.4 Cookie檔案的特點

  • 檔案的字尾名一般都是txt
  • Cookie儲存的資訊都是文字資訊
  • Cookie檔案大小不會超過20KB
  • Cookie檔案由瀏覽器管理
  • Cookie檔案有生命週期,超過時間會失效

13.5 Cookie與Session的區別(☆)

Cookie Session
Cookie資訊儲存在客戶端的硬碟中 Session資訊儲存在伺服器的記憶體中
Cookie只能儲存文字(String) Session可以儲存物件
Cookie超出有效時間內才會失效 Session隨著會話關閉而消失
Cookie一般儲存不重要資訊,用來提高使用者體驗度 Session一般儲存重要資訊,不可以丟失的資訊
Cookie不是JSP記憶體物件,需要手動new Session是JSP九大內建物件