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
  • Timer是什麼 Timer 是一種用於創建定期粒度行為的機制。 與標準的 .NET System.Threading.Timer 類相似,Orleans 的 Timer 允許在一段時間後執行特定的操作,或者在特定的時間間隔內重覆執行操作。 它在分散式系統中具有重要作用,特別是在處理需要周期性執行的 ...
  • 前言 相信很多做WPF開發的小伙伴都遇到過表格類的需求,雖然現有的Grid控制項也能實現,但是使用起來的體驗感並不好,比如要實現一個Excel中的表格效果,估計你能想到的第一個方法就是套Border控制項,用這種方法你需要控制每個Border的邊框,並且在一堆Bordr中找到Grid.Row,Grid. ...
  • .NET C#程式啟動閃退,目錄導致的問題 這是第2次踩這個坑了,很小的編程細節,容易忽略,所以寫個博客,分享給大家。 1.第一次坑:是windows 系統把程式運行成服務,找不到配置文件,原因是以服務運行它的工作目錄是在C:\Windows\System32 2.本次坑:WPF桌面程式通過註冊表設 ...
  • 在分散式系統中,數據的持久化是至關重要的一環。 Orleans 7 引入了強大的持久化功能,使得在分散式環境下管理數據變得更加輕鬆和可靠。 本文將介紹什麼是 Orleans 7 的持久化,如何設置它以及相應的代碼示例。 什麼是 Orleans 7 的持久化? Orleans 7 的持久化是指將 Or ...
  • 前言 .NET Feature Management 是一個用於管理應用程式功能的庫,它可以幫助開發人員在應用程式中輕鬆地添加、移除和管理功能。使用 Feature Management,開發人員可以根據不同用戶、環境或其他條件來動態地控制應用程式中的功能。這使得開發人員可以更靈活地管理應用程式的功 ...
  • 在 WPF 應用程式中,拖放操作是實現用戶交互的重要組成部分。通過拖放操作,用戶可以輕鬆地將數據從一個位置移動到另一個位置,或者將控制項從一個容器移動到另一個容器。然而,WPF 中預設的拖放操作可能並不是那麼好用。為瞭解決這個問題,我們可以自定義一個 Panel 來實現更簡單的拖拽操作。 自定義 Pa ...
  • 在實際使用中,由於涉及到不同編程語言之間互相調用,導致C++ 中的OpenCV與C#中的OpenCvSharp 圖像數據在不同編程語言之間難以有效傳遞。在本文中我們將結合OpenCvSharp源碼實現原理,探究兩種數據之間的通信方式。 ...
  • 一、前言 這是一篇搭建許可權管理系統的系列文章。 隨著網路的發展,信息安全對應任何企業來說都越發的重要,而本系列文章將和大家一起一步一步搭建一個全新的許可權管理系統。 說明:由於搭建一個全新的項目過於繁瑣,所有作者將挑選核心代碼和核心思路進行分享。 二、技術選擇 三、開始設計 1、自主搭建vue前端和. ...
  • Csharper中的表達式樹 這節課來瞭解一下表示式樹是什麼? 在C#中,表達式樹是一種數據結構,它可以表示一些代碼塊,如Lambda表達式或查詢表達式。表達式樹使你能夠查看和操作數據,就像你可以查看和操作代碼一樣。它們通常用於創建動態查詢和解析表達式。 一、認識表達式樹 為什麼要這樣說?它和委托有 ...
  • 在使用Django等框架來操作MySQL時,實際上底層還是通過Python來操作的,首先需要安裝一個驅動程式,在Python3中,驅動程式有多種選擇,比如有pymysql以及mysqlclient等。使用pip命令安裝mysqlclient失敗應如何解決? 安裝的python版本說明 機器同時安裝了 ...