Hello,今天給各位童鞋們分享的是JSP,趕緊拿出小本子記下來吧一、課程目標【掌握】servlet註解開發【理解】jsp原理【瞭解】jsp標籤指令【掌握】jsp指令碼書寫二、servlet註解
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程式碼
好啦,今天的文章就到這裡了,希望能夠幫助到螢幕前迷茫的你們
相關文章
Hello,今天給各位童鞋們分享的是JSP,趕緊拿出小本子記下來吧一、課程目標【掌握】servlet註解開發【理解】jsp原理【瞭解】jsp標籤指令【掌握】jsp指令碼書寫二、servlet註解
2021-06-24 08:31:40
通常情況下,技術人員在某一領域工作3-5年後,會成為團隊內或者公司裡的核心技術骨幹,這個時候他們也會面臨幾個問題:技術學習的困惑: 當達到一個瓶頸時,可以學習的參考系越來越少,首
2021-06-24 08:30:44
熱門手機數碼資訊早知道,快來關注作者。編輯|孫鳳新稽核|文崢說到高性價比手機,大家第一時間想到的肯定是小米,而Redmi(紅米)系列則是高性價比中的翹楚。例如由當紅明星王一博代言
2021-06-24 08:11:30
華為曾是國內市場份額最高的手機品牌,一度佔據國內接近一半的市場份額;作為一個全球知名的大品牌,華為在智慧手機市場的佈局是非常合理的——既有價格不高的暢享、暢玩系列,也有
2021-06-24 08:10:55
你的ofo押金退還了嗎?天眼查App顯示,近日,ofo小黃車關聯公司東峽大通(北京)管理諮詢有限公司被北京市海淀區人民法院列為被執行人,執行標的13416156元,關聯案件為東峽大通(北京)管理
2021-06-24 08:10:16
【6月24日】導語,在全球晶片製造產業鏈中,臺積電、三星一直都是全球最高階的晶片製造頭號玩家,也是目前全球唯二能夠掌握5nm晶片量產技術的廠商,但隨著美國在2020年五月份頒發了
2021-06-24 08:08:37