1.1 Jsp中腳本片段,宣告,運算式
1.1.1 腳本片段 <% %>
<% String str1 = "區域變數"; // 區域代碼段,這里面的代碼都是區域的 %>
1.1.2 宣告 <%! %>
<%! String str1 = "全域變數"; // 全域代碼段,這里面的代碼都是全域的 %>
1.1.3 運算式<%= >
<%= //稱作jsp運算式,用于將已經宣告的變數或者運算式輸出到網頁上面, %>
1.2 注釋
1.2.1 html注釋
<!--
<%
System.out.println("html注釋里面的代碼依舊會執行");
%>
-->
1.2.2 jsp注釋
<%--
System.out.println("jsp注釋中的代碼不會執行");
--%>
1.3 jsp 本質
jsp本質是servlet;
jsp編譯后或變成xxx_jsp.java,xxx_jsp.class;
jsp編譯后放的目錄:作業空間\.metadata.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost\myWeb01\org\apache\jsp
1.3.1編譯后的路徑

1.3.2 編譯后的代碼

3、JSP9大內置物件
final javax.servlet.http.HttpServletRequest request; // request請求物件 作用域
final javax.servlet.http.HttpServletResponse response; // response回應物件
final javax.servlet.jsp.PageContext pageContext; // pageContext 當前頁面背景關系 作用域
javax.servlet.http.HttpSession session = null; // session 會話 作用域
final javax.servlet.ServletContext application; // application 服務器 作用域
final javax.servlet.ServletConfig config; // config 配置物件
javax.servlet.jsp.JspWriter out = null; // out 輸出物件
final java.lang.Object page = this; // page 當前頁面物件
exception // exception 例外物件
4、亂碼問題
4.1 請求亂碼問題
4.1.1 post請求亂碼
request.setCharacterEncoding("utf-8");
4.1.2 get請求亂碼問題
tomcat8以后默認編碼格式是utf-8,之前是iso-8859-1,所以所以現在的get請求很少有亂碼問題;
//get請求亂碼處理,兩種方式:
//方式1:修改server.xml,強制指定引數傳輸中的字符集編碼方式
//在修改tomcat默認埠配置項中,增加一個引數
URIEncoding="UTF-8"
//注意tomcat8.5版本后,默認對get請求已經變成了utf-8,不需要增加,以前是ISO-8859-1
//方式2:修改server.xml,在修改tomcat默認埠中,
增加useBodyEncodingForURI = "true"
//注意此配置是針對get請求亂碼,讓其使用post的請求處理方式(一般不需要)
//方式3:強制轉碼,前提你要知道來源編碼,才可以轉目標編碼URIEncoding="ISO-8859-1" ->目標編碼 UTF-8
userName = new String(userName.getBytes("ISO-8859-1"),"UTF-8");
4.2 回應亂碼
//設定回應頭的編碼,頁面接收回應的編碼,頁面以什么編碼接收后端回應回來的內容
response.setHeader(“Content-Type”, “text/html;charset=UTF-8”);
//后端以什么編碼回應給前端
response.setCharacterEncoding(“UTF-8”);
5、轉發和重定向的區別
5.1 轉發和重定向
//轉發到成功頁面
//轉發是客戶端行為
request.getRequestDispatcher("success.jsp").forward(request, response);
//重定向到登錄頁面
//重定向是客戶端行為
response.sendRedirect("userLogin.jsp");
5.2 跳轉資源不同
轉發訪問的資源僅限于服務內部所有資源,不可以訪問外部資源,但是重定向可以(除WIN-INFO之外);
//使用重定向跳轉到百度頁面 可以
response.sendRedirect("https://www.baidu.com");
//使用重定向跳轉到百度頁面 可以
response.sendRedirect("https://www.baidu.com");
5.3 對WEB-INFO的訪問不同
轉發可以訪問到WEB-INFO下的資源,重定向不可以訪問到;
//使用轉發,跳轉到WEB-INF安全目錄中的頁面 可以
request.getRequestDispatcher("../WEB-INF/OK.jsp").forward(request, response);
//使用重定向跳轉到WEB-INF安全目錄中的頁面 不可以
response.sendRedirect("../WEB-INF/OK.jsp");
5.4 "/"代表的含義不同
// 此處的 / 交給服務器進行決議,代表的是應用根目錄(ip+埠+專案發布資源名)
request.getRequestDispatcher("/success.jsp").forward(request, response);
//導航欄跳轉的路徑:http://localhost:8096/kh96-01/doLogin2.jsp "/"表示ip+埠+專案發布資源名
//此處的 /交給瀏覽器進行決議,代表的是站點(ip+埠)
response.sendRedirect("/userLogin.jsp");
//導航欄跳轉的路徑:http://localhost:8096/userLogin.jsp "/"表示ip+埠 沒有專案名
5.5 總結
轉發和重定向的區別(牢記:轉發是服務器端行為,重定向是客戶端行為):
- 轉發訪問的資源僅限于服務內部所有資源,不可以訪問外部資源,但是重定向可以(除WIN-INFO之外);
- 轉發轉發的地址欄顯示的地址是首次訪問的地址,后續所有的轉發操作都是內部實作的,地址欄看不到,只顯示第一次請求的地址,但是重定向的地址欄顯示的是最后一次的地址欄;
- 轉發"/"代表的含義不同,轉發是交給服務器處理,而重定向是交給瀏覽器處理,代表站點;
- 轉發轉發會攜帶請求,不會重新發起請求,全程request物件只用一個;重定向每次都是瀏覽器發起的,都是一個新的請求,即request物件每次都是新的;
6、request 請求物件 (作用域)
可以轉發;
| 方法 | 說明 |
|---|---|
| getParameter("name") | 獲取表單提交的資料 |
| setArrribute(Stirng key,Obbject value); | 保存一次請求的資料 |
| getArrribute(Stirng key) | 過去請求中存放的資料 |
7、response 回應物件
可以重定向;
8、session 會話 (作用域)
session的會話跟蹤機制:
-
session是瀏覽器和服務器之間的一次通話,首次訪問任何一個jsp頁面,服務端會自動給當前訪問的用戶創建一個唯一的session物件并將該session物件的唯一標識sessionid回傳給瀏覽器,瀏覽器拿到該sessionid后,會自動保存到瀏覽器的記憶體中,當瀏覽器再次發起新的請求時,會自動將記憶體中保存的sessionid作為引數提交到服務端,如:JSESSIONID=6F3973CF90CE1401DA6987D35CB6BD10
-
服務端拿到該sessionid,就可以自動獲取到對應的那個session物件,進而就可以通過session物件獲取用戶資料,當瀏覽器關閉(退出行程),記憶體中保存的sessionid就自動釋放,重新打開瀏覽器,訪問jsp請求到服務器端,由于沒有了sessionid,服務器端就不知道session物件是哪個,默認是新用戶請求,會重新再創建新的session物件,回傳給瀏覽器端,重復上述操作,
| 方法 | 說明 |
|---|---|
| getId() | 獲取sessionId |
| session.setAttribute("key","value"); | 存放引數 |
| session.getAttribute("keys"); | 獲取引數 |
| session.invalidate(); | 清除session物件 |
| session.removeAttribute("key"); | 移除引數 |
| session.setMaxInactiveInterval(10); | 設定session超時時間,秒 |
8.1session會話清除機制
8.1.1 方式1:程式主動清除session物件,session.invalidate();
//通知服務器端,立刻洗掉當前用戶的session物件,服務器中對應的session物件就不存在,之前保存的用戶資訊就無效,下一次就必須登錄
session.invalidate();
8.1.2 session.removeAttribute(String key);
// 方式2:程式主動洗掉屬性,是服務器端session物件中保存的某個屬性,session.removeAttribute(String key);
session.removeAttribute("sessionUser");
8.1.3 務器主動洗掉,通過設定服務器端session會話物件的超時時長
// 方式3:服務器主動洗掉,通過設定服務器端session會話物件的超時時長,達到時長,自動洗掉,單位是 秒
session.setMaxInactiveInterval(10);
8.1.4 服務器主動洗掉,通過修改服務器默認session超時時長配置
// 方式4:服務器主動洗掉,通過修改服務器默認session超時時長配置,tomcat中默認session物件的超時時長是:30分鐘
// tomcat的默認組態檔:tomcat目錄下/conf/web.xml中有默認配置,如果需要修改,就講如下配置,拷貝到自己專案中的web.xml中
<session-config>
<session-timeout>10</session-timeout>
</session-config>
// 注意:不是說session物件超時就是30分鐘,如果在30分鐘內有操作session物件,超時會順延,只有沒有操作到達30分鐘,才會洗掉,
9、四大作用域
| 作用域 | 范圍 |
|---|---|
| pageContext | 當前頁面 |
| request | 當前請求 |
| session | 當前會話 |
| application | 當前服務器(應用) |
范圍大小:pageContext < request < session < application;
10、cookie
cookie創建:Cookie cookie = new Cookie("userRem",userName+"-"+userPwd);
| 方法 | 說明 |
|---|---|
| cookie.setMaxAge(10 * 60); | 設定過期時間,單位:秒 |
| response.addCookie(cookie); | 回應回傳cookie |
| request.getCookies(); | 從請求中獲取cookie陣列 |
| cookie.getName(); | 獲取cookie的name |
| cookie.getValue(); | 獲取cookie的value |
11、定制錯誤頁面
<!-- 可能會發生錯誤的頁面 -->
<%@page errorPage="500.jsp" %>
<!-- 定制的錯誤頁面 -->
<%@ isErrorPage = "true"%> <!-- 只用寫了這個才能使用exception物件 -->
<%=exception.getMessage() %> <!-- 通過ecxeption物件輸出錯誤資訊 -->
12、引入頁面
12.1 靜態匯入
先將頁面jsp匯入,再將兩個頁面合成的jsp再編譯;(注意變數沖突,引入頁面的變數和本頁面的變數會沖突)
<%@ include file="top.jsp"%>
舉例:
main.jsp
<!--引入頂部頁面 -->
<%@ include file="top.jsp"%>
top.jsp
<h2>頂部頁面</h2>

12.2 動態匯入
先編譯你兩個頁面,再引入頁面;(不會產生變數沖突)
<jsp:include page="botton.jsp"/>
舉例:
main.jsp
<!--引入頂部頁面 -->
<jsp:include page="botton.jsp"/>
botton.jsp
<h2>底部頁面</h2>

被編譯后的檔案目錄:

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/500751.html
標籤:其他
