厲害了!清華學霸梳理的JSP基礎知識點,2小時帶你從入門到入墳

Hello,今天給各位童鞋們分享的是JSP,趕緊拿出小本子記下來吧

厲害了!清華學霸梳理的JSP基礎知識點,2小時帶你從入門到入墳

一、課程目標

【掌握】servlet註解開發

【理解】jsp原理

【瞭解】jsp標籤指令

【掌握】jsp指令碼書寫

二、servlet註解開發

servlet的jar包是由tomcat進行提供,用於處理客戶端傳送至伺服器的請求,隨著技術的不斷髮展進行版本的更新,現一般使用的版本為3。0之前版本與3。0之後的版本,功能是一樣的,只不過對配置與書寫上進行了更新,但是實際使用時根據不同的需求進行選擇,本質執行原理是一樣的

servlet3。0為了簡化配置 提供了相應的註解開發的功能

語法:

書寫在類宣告之上。標註當前類為servlet指定servlet的name與url

厲害了!清華學霸梳理的JSP基礎知識點,2小時帶你從入門到入墳

name可以省略預設會使用當前類名當做name

urlPatterns是陣列形式的地址,可以書寫多個地址執行同一個servlet

簡寫

當只進行url配置且,url只有一個時可以簡化註解的書寫

@WebServlet(“/my”)

注意:註解形式雖然簡化了配置,但使得專案進行維護時更加繁瑣,所以在實際開發過程中根據實際需求進行書寫。本質註解開發與配置開發是一樣的,只不過在載入時發現相應註解後會執行相應的配置

三、jsp

在使用servlet返回頁面過程中,雖然可以返回動態頁面,但是如果頁面擁有各種樣式與功能,那麼servlet中的程式碼就會很多,而且會出現在java中書寫html字串的形式,對於後臺開發很不友好,所以,開發出了jsp(java server page)java書寫的服務頁面用於解決這個問題。

jsp的執行流程

客戶端請求jsp,在第一次請求時,伺服器會將jsp解析為servlet,建立servlet進行處理,再次請求時如果jsp已經被解析且沒有被修改,則直接返回之前解析的servlet進行處理,否則重寫解析

3.1 建立jsp頁面

開發工具一般都提供jsp頁面的建立

厲害了!清華學霸梳理的JSP基礎知識點,2小時帶你從入門到入墳

sp透過特殊的語法,將servlet變為了可以直接書寫html程式碼的檔案,只需要在首行標識這本質是一個servlet頁面即可,之後可以完全按照html頁面書寫的語法進行書寫,在執行過程中會自動建立輸出流物件將html程式碼輸出至頁面

可以讓前臺將靜態頁面書寫完畢後透過新增<%@ page language=“java” contentType=“text/html; charset=UTF-8” pageEncoding=“UTF-8”%>指令的形式使其變為可執行的java程式碼並書寫相應的java命令

3.2 page指令

書寫在jsp首行用於jsp頁面設定的指令,擁有很多的屬性

語法:

< %@ page 屬性1=“屬性值” 屬性2=“屬性值1,屬性值2”… 屬性n=“屬性值n”%>

厲害了!清華學霸梳理的JSP基礎知識點,2小時帶你從入門到入墳

在jsp中擁有大量的指令操作透過設定完成不同的功能

3.3 指令碼

由於jsp是通特殊語法可以直接書寫html程式碼並透過out物件輸出到客戶端,但是本質是java程式碼,為了與直接輸出到客戶端的html程式碼區分,所以需要使用指令碼塊將書寫在jsp頁面的java程式碼進行包裹,這樣在將html頁面輸出到客戶端的過程中,就不會講java程式碼當做html程式碼進行輸出

語法:

< % java程式碼 %>

厲害了!清華學霸梳理的JSP基礎知識點,2小時帶你從入門到入墳

雖然jsp本質是servlet可以直接書寫java程式碼進行邏輯操作,但是頁面出現大量的java程式碼會影響書寫,所以一般在進行書寫時都會將邏輯操作交由servlet進行處理

3.4 方法宣告

語法:

由於jsp可以理解為servlet中的某一個請求,所以不能直接進行方法的宣告,需要透過特殊的宣告語法

厲害了!清華學霸梳理的JSP基礎知識點,2小時帶你從入門到入墳

3.5 其他指令

厲害了!清華學霸梳理的JSP基礎知識點,2小時帶你從入門到入墳

3。5。1 編譯指令

指的是書寫在jsp頁面中不會進行直接顯示與功能的指令,在jsp被請求編譯時進行使用的指令

語法格式:

<%@deriective attr1=val1 attr2=val2…… %>

<%@ 指令 屬性名=“值” 屬性名=“值” 屬性名=“值”%>

page指令

主要設定jsp相關屬性,如:頁面編碼、快取大小、錯誤處理頁面等,page指令中除了import屬性之外,其他屬性只能出現一次;

<%@ page language=“java” contentType=“text/html,ISO-8859-1” import=“java。util。*,java。sql。*,java。io。*”

session=“true|flase” buffer=“none|8kb|sizekb” autoFlush=“true|false” info=“一段字串內容”

pageEncoding=“ISO-8859-1”%>

厲害了!清華學霸梳理的JSP基礎知識點,2小時帶你從入門到入墳

include指令

在jsp開發當中,為了避免程式碼冗餘(重複),可以把jsp開發當中多次使用的功能程式碼封裝成一個獨立的jsp檔案。

include指令:用於引入其他JSP頁面,如果使用include指令引入了其他JSP頁面,那麼JSP引擎將把這兩個JSP翻譯成一個Servlet,所以include指令引入通常也成為靜態引入。

< %@include file=“被包含元件的絕對URL或相對URL“%>

被引入的檔案必須遵循JSP語法。被引入的檔案可以是任意副檔名,即使其副檔名是html,JSP引擎也會按照處理jsp頁面的方式處理它裡面的內容,為了見名知意,JSP規範建議使用。jspf(JSP fragments)作為靜態引入檔案的副檔名。由於使用include指明將會涉及到2個JSP頁面,並會把JSO翻譯成一個Servlet,所以這兩個JSP頁面的指令不能衝突(pageEncoding和導包除外)

就是在jsp編譯之前將指定的jsp頁面載入到當前頁面中,相當於將指定jsp頁面程式碼複製到指定位置

taglib指令

透過使用taglib指令,開發者可以匯入其他的標籤庫,來完成特定的功能。

<%@ taglib prefix=“c” uri=“http://java。sun。com/jsp/jstl/core” %>

雖然後期jsp僅僅用於資料的展示,但是仍然會書寫java程式碼,所以提供了第三方標籤庫,透過taglib指令可以在jsp頁面中引入標籤庫,透過特定的標籤實現原本java的程式碼(在jsp頁面透過這些標籤完成不寫任何java程式碼)

3。5。2 動作指令

指的是在jsp編譯為servlet後執行過程中提供功能的指令(可以理解為將java的程式碼進行了指令的封裝,減少頁面中java程式碼出現的頻率)

語法格式:

<%jsp:deriective attr1=val1 attr2=val2…… %>

<%jsp:指令 屬性名=”值“ 屬性名=”值“ 屬性名=”值“%>

param指令

用於傳遞引數,必須與其他支援引數指令的標籤一起使用。

——傳到index。jsp頁面

forwoad指令

執行頁面跳轉,將請求的處理轉發到下一個頁面。可以使用引數指令進行資料的傳輸

<jsp:forward page=“date.jsp” />

a.jsp

厲害了!清華學霸梳理的JSP基礎知識點,2小時帶你從入門到入墳

b.jsp

厲害了!清華學霸梳理的JSP基礎知識點,2小時帶你從入門到入墳

指令就是透過標籤實現原本java程式碼書寫的功能

厲害了!清華學霸梳理的JSP基礎知識點,2小時帶你從入門到入墳

厲害了!清華學霸梳理的JSP基礎知識點,2小時帶你從入門到入墳

useBean指令

用於呼叫指定類無參構造方法建立物件

厲害了!清華學霸梳理的JSP基礎知識點,2小時帶你從入門到入墳

setProperty指令

用於設定指定物件指定屬性的值

厲害了!清華學霸梳理的JSP基礎知識點,2小時帶你從入門到入墳

getProperty指令

用於獲取指定物件指定屬性的值

厲害了!清華學霸梳理的JSP基礎知識點,2小時帶你從入門到入墳

include指令

<%——將指定頁面匯入當前頁面——%>

include編譯指令與include動作指令的區別

厲害了!清華學霸梳理的JSP基礎知識點,2小時帶你從入門到入墳

厲害了!清華學霸梳理的JSP基礎知識點,2小時帶你從入門到入墳

3.6 jsp執行流程

厲害了!清華學霸梳理的JSP基礎知識點,2小時帶你從入門到入墳

當客戶端請求指定jsp時,首先在已經翻譯好的檔案中查詢,是否修改,如果已存在並且沒有修改則直接進行操作,如果不存在或進行了修改,那麼現將jsp翻譯為servlet,之後編譯servlet初始化建立servlet物件,將請求交由servlet物件進行處理。

翻譯階段:當伺服器中沒有對應servlet例項或對jsp進行修改時,進入翻譯階段,將jsp翻譯成對應的setvlet

編譯階段:將對應的serlvet。java編譯為對應的。class執行檔案

執行階段:呼叫對應servlet初始化方法建立對應的servlet例項物件並儲存至伺服器中,並透過配置獲取註解的形式將例項與url請求進行關聯。再次請求時直接使用對應的例項進行服務的處理

3.7 jsp組成

厲害了!清華學霸梳理的JSP基礎知識點,2小時帶你從入門到入墳

靜態內容:

指的是在jsp中書寫的html相關的靜態頁面資料(包含html、css、js以及前端相應的程式碼)

註釋:

<%- 註釋內容 -%>

書寫在jsp中在編譯時不會進行編譯的內容

小指令碼 :

<% java程式碼 %>

直接在jsp中書寫的java程式碼,在編譯成servlet進行執行的程式碼

宣告:

<%! 宣告方法 %>

用於在jsp中宣告方法(屬於宣告指令碼)

表示式:

<%= 擁有返回值的表示式 %>

將表示式的結果直接輸出到頁面上等價於out。print(表示式)(屬於表示式指令碼)

指令:

編譯指令<%@指令 屬性=值%>

page/include/taglib

動作指令

forward/param/include/useBean/setProperty/getProperty

模仿html標籤樣式,用於減少在jsp頁面書寫大量的java程式碼

好啦,今天的文章就到這裡了,希望能夠幫助到螢幕前迷茫的你們