Javaweb02-jsp

来源:https://www.cnblogs.com/xiaoqigui/archive/2022/08/03/16542845.html
-Advertisement-
Play Games

1.1 Jsp中腳本片段,聲明,表達式 1.1.1 腳本片段 <% %> <% String str1 = "局部變數"; // 局部代碼段,這裡面的代碼都是局部的 %> 1.1.2 聲明 <%! %> <%! String str1 = "全局變數"; // 全局代碼段,這裡面的代碼都是全局的 % ...


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 總結

轉發和重定向的區別(牢記:轉發是伺服器端行為,重定向是客戶端行為):

  1. 轉發訪問的資源僅限於服務內部所有資源,不可以訪問外部資源,但是重定向可以(除WIN-INFO之外);
  2. 轉發轉發的地址欄顯示的地址是首次訪問的地址,後續所有的轉發操作都是內部實現的,地址欄看不到,只顯示第一次請求的地址,但是重定向的地址欄顯示的是最後一次的地址欄;
  3. 轉發"/"代表的含義不同,轉發是交給伺服器處理,而重定向是交給瀏覽器處理,代表站點;
  4. 轉發轉發會攜帶請求,不會重新發起請求,全程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>

被編譯後的文件目錄:


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 使用django+websocket+redis+channels實現簡易聊天室 1.創建一個django項目 從存儲項目的文件夾進入cmd命令行終端,輸入以下命令創建chatroom項目 django-admin startproject chatroom 然後再進入項目文件夾,打開cmd命令行終 ...
  • 0、綜合案例功能介紹 以上是在綜合案例要實現的功能。除了對數據的增刪改查功能之外,還有一些複雜的功能,如批量刪除,分頁查詢,條件查詢等功能 批量刪除功能:每條數據前都有覆選框,當我們選中多條數據並點擊批量刪除按鈕後,會發送請求到後端並刪除資料庫指定的多條數據 分頁查詢功能:當資料庫中有很多數據的時候 ...
  • selenium介紹 由於requests模塊不能執行js,有的頁面內容,我們在瀏覽器中可以看到,但是請求下來沒有。 selenium模塊:模擬操作瀏覽器,完成人的行為。 selenium本質是通過驅動瀏覽器,完全模擬瀏覽器的操作,比如跳轉、輸入、點擊、下拉等,來拿到網頁渲染之後的結果,可支持多種瀏 ...
  • 基於JSP&Session&Cookie的學生管理系統 因為本次系統僅作為練手和熟悉基本的MVC編程,所以僅供參考 1、環境準備 1.0、項目配置文件準備 WEB-INF/web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="h ...
  • 1、什麼是servlet 第一個servlet應用程式,實現servlet介面 定義:凡是實現了servlet api介面(或者繼承servlet api介面的實現類)的類就是servlet應用程式; 命周期: 創建servlet應用程式的實例:只會執行一次,在首次通過url-pattern映射訪問 ...
  • 今天特意寫了一篇關於如何利用Vue命令行快速創建項目案例,希望對大家有幫助,首先需要環境要求:安裝有 Node.js、 vue、 vue-cli ...
  • Java常用類 1.包裝類 1.1什麼是包裝類? Java 是面向對象的語言,但不是“純面向對象”的,比如我們經常用到的基本數據類型就不是對象。 在我們實際應用中,經常需要將基本數據轉換成對象,以便於操作。為瞭解決這個不足,Java在設計類時,為每個基本數據類型分別設計了一個對應的類進行代表,這樣的 ...
  • Request&Response Request 獲取請求數據 Response 設置響應數據 1、Request 1.1、Request繼承體系 1、Tomcat需要解析請求數據,封裝為request對象,並且創建request對象傳遞到service方法中 2、使用request對象,查閱Jav ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...