你不得不知道的JSP知識點

“擁有夢想只是一種智力,實現夢想纔是一種能力”
你好,我是夢陽辰!期待與你相遇!

在這裏插入圖片描述

01.JSP概述

在Java程序中存在前端的代碼。擴展功能時,改變前端代碼時,需要重新編譯。而JSP可以很好的解決了這個問題。

JSP是什麼?
JavaServer Pages
基於java語言實現的服務器端頁面。
JSP是JavaEE規範之一。

JSP文件通常存放在什麼位置?
JSP可以放到WEB-INF目錄外。
在實際開發中,有很多是將JSP放到WEB-INF目錄中,保護JSP。
WEB-INF目錄中的數據是相對安全的。

JSP文件的後綴。
默認是.jsp
但是jsp文件的後綴也可以修改的,通過CATALINA_HOME/conf/web.xml文件。

JS和JSP的區別
JS:javaScript,運行在瀏覽器中,和服務器沒有關係。

JSP:JavaServer Pages,運行在服務器中,JSP底層就是java程序,運行在JVM中。其翻譯生成的class文件,在CATALINA_HOME/work目錄下。

JSP(全稱JavaServer Pages)是由Sun Microsystems公司主導創建的一種動態網頁技術標準。JSP部署於網絡服務器上,可以響應客戶端發送的請求,並根據請求內容動態地生成HTML、XML或其他格式文檔的Web網頁,然後返回給請求者。JSP技術以Java語言作爲腳本語言,爲用戶的HTTP請求提供服務,並能與服務器上的其它Java程序共同處理複雜的業務需求。

JSP將Java代碼和特定變動內容嵌入到靜態的頁面中,實現以靜態頁面爲模板,動態生成其中的部分內容。JSP引入了被稱爲“JSP動作”的XML標籤,用來調用內建功能。另外,可以創建JSP標籤庫,然後像使用標準HTML或XML標籤一樣使用它們。標籤庫能增強功能和服務器性能,而且不受跨平臺問題的限制。JSP文件在運行時會被其編譯器轉換成更原始的Servlet代碼。JSP編譯器可以把JSP文件編譯成用Java代碼寫的Servlet,然後再由Java編譯器來編譯成能快速執行的二進制機器碼,也可以直接編譯成二進制碼。

JSP全稱Java Server Pages,是一種動態網頁開發技術。它使用JSP標籤在HTML網頁中插入Java代碼。標籤通常以<%開頭以%>結束。

JSP是一種Java servlet,主要用於實現Java web應用程序的用戶界面部分。網頁開發者們通過結合HTML代碼、XHTML代碼、XML元素以及嵌入JSP操作和命令來編寫JSP。

JSP通過網頁表單獲取用戶輸入數據、訪問數據庫及其他數據源,然後動態地創建網頁。

JSP標籤有多種功能,比如訪問數據庫、記錄用戶選擇信息、訪問JavaBeans組件等,還可以在不同的網頁中傳遞控制信息和共享信息。

02.JSP的執行原理

瀏覽器上訪問的路徑雖然是.jsp結尾,訪問的是jsp文件,其實底層執行的是jsp對應的java程序。
Tomcat服務器負責將jsp文件翻譯生成.java源文件,並且將java源文件編譯生成.class字節碼文件。
Tomcat服務器內置了一個JSP翻譯引擎,專門負責翻譯JSP文件,編譯java源文件。

index.jsp會被翻譯生成index_jsp.java,編譯生成index_jsp.class
index_jsp這個類繼承了HttpJspBase,而HttpJspBase繼承了HttpServlet。
所以說JSP就是Servlet,只不過職責不同,JSP強項是做頁面展示。

通過學習JSP語法,你就可以在JSP中寫java程序,比如:

//_jspService方法中
<%
java程序
%>
//出現在類中
<!%
java程序
%>

在JSP文件中編寫的HTML,CSS,JavaScript都以字符串的形式被翻譯到:out.wirter(“這裏”)。將其翻譯成.java源代碼,就是JSP規範。

與純 Servlet 相比:JSP可以很方便的編寫或者修改HTML網頁而不用去面對大量的println語句。
與JavaScript相比:雖然JavaScript可以在客戶端動態生成HTML,但是很難與服務器交互,因此不能提供複雜的服務,比如訪問數據庫和圖像處理等等。

與靜態HTML相比:靜態HTML不包含動態信息。

第一次訪問jsp文件
啓動JSP翻譯引擎
需要一個翻譯的過程
需要一個編譯的過程
需要Servlet對象創建的過程
init方法調用
service方法調用…

jsp也是單實例多線程環境下運行的一個Servlet對象。

只要jsp文件改動,就會被重新翻譯(根據最後修改時間)。

03.JSP語法

小腳本
1.jsp註釋(不會翻譯到java源文件中)

<%--
--%>

2.關於jsp的小腳本scriptlet:

<%
java語句
%>

小腳本的java語句被翻譯到Servlet的service方法中,所以小腳本必須編寫“java語句”,java語句以分號結尾。

3.在JSP文件中編寫的HTML,CSS,JavaScript都以字符串的形式被翻譯到:out.wirter(“這裏”)。

4.jsp規範,就是sun公司制定好的一些翻譯規則,按照翻譯規則進行翻譯,生成對應的java源程序。不同的web服務器,翻譯的結果是完全相同的。

5.小腳本的數量隨意,可以多個,小腳本中編寫的java程序出現在service方法中,service方法的代碼時有執行順序的,所以小腳本的程序也是有順序的。

6.方法不可以嵌套,方法中的局部變量不能用pritvate,public修飾,不能編寫靜態語句塊。

聲明語法格式

1.jsp的聲明語法格式:

<%!
實例變量
靜態變量
方法
靜態語句塊
構造函數
......
%>
注:聲明塊中的java程序會被jsp翻譯引擎翻譯到service方法之外。
聲明塊中不能直接編寫java語句(因爲在類中)。
可以定義方法,聲明變量。 

2.關於jsp的九大內置對象
1.什麼是內置對象?
可以在jsp文件中拿來使用的引用。

2.九大內置對象名稱。

內置對象名稱               完整類名
pageContext(頁面範圍)    javax.servlet.jsp.PageContext
request(請求範圍)       javax.servlet.http.HttpServletRequest
session(會話範圍)       javax.servlet.hhtp.HttpSession
out (應用範圍)          javax.servlet.jsp.JspWriter
response(響應)                 javax.servlet.http.HttpServletResponse
config(Servlet配置信息對象)                  javax.servlet.ServletConfig
exception                java.lang.Throwable 異常引用(isErrorPage="true")
page                     java.lang.Object[page=this] 很少用

以上內置對象只能在service方法中直接使用。

3.<% out.print();%>
等同於
<%= %>

4.動態的輸出h1到h6標題字

<% 
for(int i=1;i<=6;i++){
	
%>
<h<%=i %>>標題字</h<%=i 5>>
<% 
}
%>

04.jsp指令

1.指令的作用
指導jsp的翻譯引擎如何翻譯jsp代碼。

2.jsp中共三個指令。

*page              頁面指令
*include           包含指令
*taglib            標籤庫指令

3.指令的使用語法格式:

<%@指令名 屬性名=屬性值 屬性名=屬性值......%>

4.page指令,常用的屬性
contentType(設置jsp的響應內容類型)
pageEncoding(設置jsp響應時的 字符編碼方式)

<%@page contentType="text/html; pageEncoding=UTF-8"%>

import(組織導入)

<%@page import="java.util.Date" %>

session(設置當前jsp頁面中是否可以直接使用session內置對象)

<%=session %>
關於page指令中的session屬性:
-session="true"
表示在當前JSP中可以直接使用內置對象session

程序執行的時候獲取當前的session會話對象,若獲取不到則新建session對象。
-session="false"
表示在當前JSP中不可以直接使用內置對象session


errorPage(錯誤頁面)
當前頁面出錯之後要跳轉的頁面。

<%@page contentType="text/html; charset=UTF-8" errorPage="頁面地址" %>

isErrorPage(是否是錯誤頁面)
isErrorPage=“false” 表示內置對象exception無法使用。【缺省情況位false】
isErrorPage=“true” 表示內置對象exeption可以使用。

使用內置對象exception打印異常堆棧追蹤信息。

<%
exception.printStackTrace();

isELIgnored(是否是EL表達式)

include指令

<body>       
<%@include file="地址" %>
</body>
包含展示地址頁面的內容

優點:便與維護。
在網頁中有一些主體框架,例如:網頁頭、網頁腳,這些都是固定不變的。
我們可以將網頁頭和網頁腳等固定不變的單獨編寫到某個jsp文件中。

底層實現原理
include實現原理:
1.編譯器包含
2.a.jsp包含b.jsp,底層功一個java源文件,一個class字節碼文件,翻譯器包含/編譯器包含/靜態聯編
3.靜態聯編的時候,多個jsp中可以共享同一個局部變量。
因爲最終翻譯之後service方法只有一個。

jsp的動作

語法格式:<jsp:動作名 屬性名=屬性值 屬性名=屬性值...>
</jsp:動作名>

轉發(是一次請求)

<jsp:forward page="/index2.jsp"></jsp:forword>

重定向

//java實現
response.serdRedirect(request.getContextPath()+"/index2.jsp");

jsp主要用於頁面展示,最好在jsp文件中少的編寫java源代碼。以後會通過EL表達式+JSEL標籤庫來代替jsp的java源代碼。當然使用某些動作也能代替java源代碼。

include動作
1.a.jsp包含b.jsp,底層分別生成兩個java源文件,兩個class字節碼文件。
2.編譯階段並沒有包含,編譯階段是兩個獨立的class字節碼文件,生成兩個Servlet,兩個獨立的service方法。
3.使用include動作屬於運行階段包含,實際上是在運行階段a中的service方法調用了b中的service方法,達到了包含效果。
4.a.jsp包含b.jsp,若兩個jsp文件中有重名的變量,只能使用動態包含。其餘都可以使用靜態包含。
5.include動作完成的動態包含,被稱位動態編聯。

” 你怎麼過一天,就怎麼過一生“

關注公衆號【輕鬆玩編程】回覆關鍵字“電子書”,“計算機資源”,“Java從入門到進階”,”JavaScript教程“,“算法”,“Python學習資源”,“人工智能”等即可獲取學習資源。
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章