引言:
當需要在遊覽器上動態的輸出網頁內容時 例如:“在瀏覽器上動態輸出當前日期”,顯然無法通過靜態HTML完成這個效果,這時JSP的出現補充了這一功能。
一、JSP頁面基本構成:
1、JSP概述:
JSP(Java Server Pages)是指:在HTML中嵌入Java腳本語言由應用服務器中的JSP引擎來編譯和執行嵌入的Java腳本語言命令然後將生成的整個頁面信息返回給客戶端。
例:上面所提到的 在瀏覽器上動態輸出當前日期:
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<html>
<head><title>輸出當前日期</title></head>
<body>
你好! 今天是
<% java.util.Date now = new java.util.Date(); %>
<%=now %>
</body>
</html>
運行結果:
JSP和Servlet的對比:
Servlet的功能非常強大,但是:
- 使用println()輸出HTML非常不便。
- 對輸出HTML文檔的維護也非常不便。
JSP無需打包、部署,簡單方便,但是:
- 將java代碼拆分成多個程序塊,不便於維護。
2、JSP執行過程:
Web容器處理JSP文件請求需要經過3個階段:
- 翻譯階段:JSP文件會被Web容器中的JSP引擎轉換成Java源碼。
- 編譯階段:Java源碼會被編譯成可執行的字節碼。
- 執行階段:容器接受了客戶端的請求後,執行編譯成字節碼的JSP文件;處理完請求後,容器把生成的頁面反饋給客戶端進行顯示。
第一次請求之後,Web容器可以重用已經編譯好的字節碼文件。
注意:如果對JSP文件進行了修改,Web容器會重新對JSP文件進行翻譯和編譯 。
3、JSP頁面構成:
- JSP代碼中包含了模版元素(HTML+Javascript +CSS)和JSP元素構成。
- 模版元素指的是JSP引擎不處理的部分。
- JSP元素則指的是由JSP引擎直接處理的部分,這一部分必須符合JSP語法,否則會導致編譯錯誤。
JSP頁面大致由以下構成:
這裏以顯示當前日期的JSP爲例:
二、腳本元素:
1、JSP 腳本元素是用來嵌入Java代碼的,主要用來實現頁面的動態請求。
2、JSP 腳本元素包括:
1、表達式:
1、用於在執行階段
- 對錶達式進行計算,並轉換成字符串。
- 並將轉換後的字符串插入到Servlet輸入流中。
- 在servlet中產生類似
out.println(expression)
的代碼。 - 可以在表達式中使用預先定義的對象 (如內置對象等等)。
2、語法爲:
<%= Expression %>
注意:不允許在表達式後面出現分號。
例:輸出計算結果
<%=1+2+3%%>
<%=getDate( )%>
2、小腳本:
1、用於向生成servlet後的jspService()方法中插入代碼。
2、可以執行任何表達式無法完成的任務。
- 設置響應頭部和狀態碼
- 寫入服務器日誌
- 更新數據庫
- 執行包含循環,條件判斷語句的java程序
3、可以使用預定義的變量 (如內置對象)。
4、語法格式爲:
<% Java code %>
例:
顯示請求查詢字符串:
<%
String queryData = request.getQueryString();
out.println(“Attached GET data: “ + queryData);
%>
設置響應頭部:
<% response.setContentType(“text/plain”); %>
3、聲明:
1、用於定義插入到Servlet類中成員變量、方法等。
- 聲明語法中聲明的代碼出現在 _jspSevice()之外。
- 聲明語法中不能夠直接使用內置對象。
成員變量在整個JSP頁面內都有效(與書寫位置無關),因爲JSP引擎將JSP頁面轉譯成Java文件時,將這些變量作爲類的成員變量,這些變量的內存空間直到服務器關閉才釋放。任何用戶對JSP頁面成員變量操作的結果,都會影響到其他用戶。
2、語法格式爲:
<%! 變量、方法以及內部類 %>
例:
<%!
private String randomHeading()
{return(“<H2>” + Math.random() + “</H2>”);}
%>
<%= randomHeading() %>
4、註釋:
在JSP文件的編寫過程中,共有三種註釋方法:
- HTML的註釋方法:
<!-- html註釋-->
(可在客戶端看到源碼) - JSP註釋標記:
<%-- JSP註釋--%>
- 在JSP腳本中使用註釋:
<% //單行註釋 %>
<% /*多行註釋 */ %>
三、指令元素:
指令元素的作用是通過設置指令中的屬性在JSP運行時,控制JSP頁面的某些特性。
1、Page指令:
Page指令:用來設定JSP頁面的全局屬性和相關功能。
作用於整個JSP文件,可以放到JSP頁面的任何位置,但爲了便於閱讀和格式規範,通常放到JSP頁面開始的位置。
注意:一個JSP文件可以包含多個page指令,指令之間是獨立的,並且除import屬性以外,每個屬性只能定義一次,否則在JSP頁面編譯的過程中將會出現錯誤!
例:
<%@ page language="java" import="java.util.*" contentType=“text/html;charset=GBK” pageEncoding="GBK"%>
errorPage屬性:
- 指定當前頁面產生異常時的處理文件。
- 當前頁面發生錯誤時候,由該目標文件進行異常處理,JSP容器會將處理結果發送到瀏覽器顯示。
例如,指定當前頁面出錯時,調用handleError.jsp頁面處理錯誤的格式如下:
<%@ page errorPage=“handleError.jsp”%>
isErrorPage屬性:
- isErrorPage屬性說明當前頁面是否爲異常處理頁面。
- 如果值爲“true”,說明是異常處理頁面,能夠使用exception對象,如果爲“false”,則不是。
- 默認爲false。
2、include指令:
-
include:指定將JSP文件轉成Servlet類時所需插入的資源,可以是文本、代碼、HMTL文件或JSP文件。
-
一旦JSP文件完成編譯,資源內容就不可改變,如果發生變化,JSP引擎就會對JSP文件重新進行編譯,不同的服務器會產生不同的效果。
-
利用include指令可以將一個服務的JSP文件拆分成不同的部分,如head.jsp、body.jsp、tail.jsp,然後在同一網站的不同JSP頁面中用include指令包含head.jsp和tail.jsp,方便對JSP頁面進行管理。
-
格式:
<%@include file=“要引入資源的地址”>
例:包含了其他三個jsp頁面。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Include</title>
</head>
<body>
<%@ include file="head.jsp"%> <br/>
<%@ include file="content.jsp"%> <br/>
<%@ include file="copyright.jsp"%>
</body>
</html>
3、taglib指令:
taglib指令:用來自定義標籤,可以把一些需要反覆顯示的內容定義成一個標籤,從而增加代碼的重用度,並使頁面便於維護。
定義標籤的三個步驟:
- 定義一個標籤處理類,用於實現標籤的功能;
- 定義標籤庫描述文件(擴展名爲tld),對標記的相關信息進行說明;
- 最後在配置文件Web.xml中配置。
taglib格式:
<%@taglib uri=“uri”|tagdir=“url” prefix=“tagprefix” %>
- uri,說明描述文件和標記庫的路徑,uri可以爲URL、絕對或相對路徑、標記庫描述文件;
- tagdir是2.0版本中新引入的屬性,用來指明標記文件(擴展名爲tag)的位置。
- prefix,定義了JSP頁面中要引用該標籤的前綴,用來區分多個自定義標籤,注意,前綴不可以是jsp、jspx、java、javax、sun、servlet、sunw
🆗,大致就這些了。