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九大內置對象 |