首頁 > 科技

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

2021-06-24 08:31:40

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

一、課程目標

【掌握】servlet註解開發

【理解】jsp原理

【瞭解】jsp標籤指令

【掌握】jsp指令碼書寫

二、servlet註解開發

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

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

語法:

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

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頁面的創建

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中擁有大量的指令操作通過設定完成不同的功能

3.3 指令碼

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

語法:

< % java程式碼 %>

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

3.4 方法聲明

語法:

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

3.5 其他指令

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"%>

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指令

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

<jsp:forward page="index.jsp">----傳到index.jsp頁面

<jsp:param name="name" value="心雨"/>

<jsp:param name="password" value="123"/>

</jsp:forward>

forwoad指令

執行頁面跳轉,將請求的處理轉發到下一個頁面。可以使用參數指令進行資料的傳輸<jsp:forward page=「date.jsp」 />

a.jsp

b.jsp

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

useBean指令

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

setProperty指令

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

getProperty指令

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

include指令

<jsp:include page="index.jsp"/>

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

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

3.6 jsp執行流程

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

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

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

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

3.7 jsp組成

靜態內容:

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

註釋:

<%- 註釋內容 -%>

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

小指令碼 :

<% java程式碼 %>

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

聲明:

<%! 聲明方法 %>

用於在jsp中聲明方法(屬於聲明指令碼)

表示式:

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

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

指令:

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

page/include/taglib

動作指令<jsp:指令 屬性=值/.>

forward/param/include/useBean/setProperty/getProperty

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

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


IT145.com E-mail:sddin#qq.com