JSP與Servlet的職責與區別
阿新 • • 發佈:2021-11-30
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方式:
- get提交會在瀏覽器地址顯示引數,不安全
- get提交字元編碼與Tomcat有關(request、tomcat、網頁字元編碼)
- get提交引數長度有限制
- Post方式:
- post提交不會在瀏覽器地址顯示引數,安全
- post提交字元編碼與Tomcat無關(request、網頁字元編碼)
- 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與主JSP各自編譯,產生兩個Servlet,上下文內容不能關聯,稱為動態嵌入
<jsp:include page="頁面路徑"></jsp:include>
- 嵌入的JSP與主JSP各自編譯,產生兩個Servlet,上下文內容不能關聯,稱為動態嵌入
12.2 靜態嵌入與動態嵌入的區別(☆)
靜態嵌入 | 動態嵌入 |
---|---|
靜態嵌入使用的是JSP的標籤指令<%@ include file="頁面路徑"%> |
動態嵌入使用的是JSP動作<jsp:include page="頁面路徑"></jsp:include> |
靜態嵌入使用一個Servlet | 動態嵌入使用兩個Servlet |
靜態嵌入上下文內容能關聯 | 動態嵌入上下文內容不能關聯 |
13. Cookie
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九大內建物件 |