JSP 之 三大指令、四大基本語法、七大動作、九大內建物件
JSP
什麼是JSP?
JSP全名為Java Server Pages,中文名叫java伺服器頁面,其根本是一個簡化的Servlet設計,它[1] 是由Sun Microsystems公司倡導、許多公司參與一起建立的一種動態網頁技術標準。JSP技術有點類似ASP技術,它是在傳統的網頁HTML(標準通用標記語言的子集)檔案(.htm,.html)中插入Java程式段(Scriptlet)和JSP標記(tag),從而形成JSP檔案,字尾名為(*.jsp)。 用JSP開發的Web應用是跨平臺的,既能在Linux下執行,也能在其他作業系統上執行。
JSP的本質是servlet,因此servlet裡的物件可當作jsp的物件處理。
為什麼需要JSP?
servlet
- 優點:邏輯處理方便
- 缺點:頁面表現麻煩
JSP
- 優點:頁面表現方便
- 缺點:處理邏輯麻煩
所以要互補使用,一般採用:JSP+Servlet+Javabean
JSP本質
Jsp就是servlet, 所以jsp也是java類,通過jsp引擎把jsp轉譯成了servlet。
XML中JSP的定義
通過對字尾為.jsp 和.jspx的servlet進行對映。
其對映的jsp經過該java類處理。
該類中包含的資訊就是JSP的語法規則。
執行步驟:
- tomcat收到*.jsp請求,則會到org.apache.jasper.servlet.JspServlet
處理(tomcat的web.xml中有配置)。 - JspServlet呼叫相應的java類,及jsp引擎根據hi.jsp生成的java類(位於:tomcat子目錄work下面:hi_jsp.java,
hi_jsp.class)。 - 執行hi_jsp.class。將HTML資料輸出給tomcat。Tomcat再將這些資料輸出給客戶端。
JSP三大指令
一、page指令:page 指令指明與JSP容器的溝通方式
page 指令裡的常用屬性如下:
<%@ page
language=“Java” 選擇編碼語言
import=“importList” 匯入java類庫(唯一可以重複使用的屬性,其他屬性最多隻能使用一次)
contentType=“contentTyepInfo” 內容的型別
session=“true|false” 是否開啟Session
isThreadSafe=“true|false” 是否執行緒安全,預設為true
info=“infoText”
errorPage=“errorPageUrl” 指定錯誤頁面:如果發生異常,則會跳到這個錯誤頁面
isErrorPage=“true|false” 指定當前這個頁面是否為錯誤頁面。如果其他的頁面發生錯誤,就會調到這裡來。
%>
二、include指令:
include指令是在JSP頁面被轉換成Servlet之前將指定的檔案包含進來。這種特性允許你建立可重用的導航欄、聯絡人資訊部分、頁面計數等。(重複利用的理解:比如說,可能有多頁面都需要用到某個標題頁面,就可以把這個公共的標題頁面使用include指令包含進來,然後在其他的頁面中直接匯入標題頁面就行了)
include指令共有兩種形式
1、靜態匯入(多個頁面編譯成一個頁面,耦合性高,解析執行速度快)
格式:
<%@include file="fileURL"%>
過程:
在JSP程式的轉換時期先把file屬性設定的檔案包含進來,然後開始執行轉換及編譯的工作。
舉例:
新建一個content.jsp檔案
將該頁面引入進index.jsp
執行效果如下:
注意:
include靜態包含,只能包含靜態的資源,編譯後形成一個檔案。其實,title.jsp和content.jsp合起來只形成一個.java檔案,最後編譯為一個.class檔案。
2、動態匯入(生成兩個java原始檔,不會互相干擾)
格式:
<jsp:include page="fileURL"></jsp:include>
注意:
動態包含的主要區別在於,其每個頁面單獨生成JAVA原始檔,不會互相干擾。
二、taglib指令:
JSP四大語法
一、註釋
在jsp頁面中,註釋共有三種形式。
1.HTML註釋
<!-- 我是HTML註釋 -->
2.我是JAVA註釋
<% //我是JAVA註釋 %>
3.我是JSP註釋
<%-- 我是JSP註釋 -->
jsp註釋是最強大的,其註釋的內容,即使在JAVA原始檔中也不會顯示,實現了完完全全的註釋!
二、宣告
格式:
<%! %>
宣告中 常常用於宣告變數。
例如:
<%! int a=5 %>
在<%! %>裡面寫的東西是jsp生成的這個類的成員變數
還有一種是宣告在指令碼段中的變數
<% b=5 %>
在<% %>裡面寫的東西在_jspservice方法中,是區域性變數
三、表示式
格式:
<%= a %>
其本質是out.print 用於輸出資訊到網頁端
四、指令碼段
格式:
<% int a=5;method(); %>
內可嵌入java程式碼。
JSP七大動作
一、jsp:forward(請求轉發)
格式:
<jsp:forward page="content.jsp"></jsp:forward>
Java生成檔案:
從圖中可以看出,其實現的底層是呼叫了一個請求轉發,同時如果呼叫成功,會直接return 掉,後續程式碼不繼續執行。
二、jsp:plugin(插入外掛)
元素用於在瀏覽器中播放或顯示一個物件(典型的就是applet和Bean),而這種顯示需要在瀏覽器的java外掛
格式:
<jsp:plugin type="" code=""></jsp:plugin>
屬性
- type=”bean | applet” .將被執行的外掛物件的型別,你必須得指定這個是Bean還是applet,因為這個屬性沒有預設值.
- code=”classFileName” 將會被Java外掛執行的Java
Class的名字,必須以.class結尾。這個檔案必須存在於codebase屬性指定的目錄中. - codebase=”classFileDirectoryName” 將會被執行的Java
Class檔案的目錄(或者是路徑),如果你沒有提供此屬性,那麼使用的jsp檔案的目錄將會被使用. - name=”instanceName” 這個Bean或applet例項的名字,它將會在Jsp其它的地方呼叫.
- archive=”URIToArchive, …”
一些由逗號分開的路徑名,這些路徑名用於預裝一些將要使用的class,這會提高applet的效能. align=”bottom | top | middle | left | right” 圖形,物件,Applet的位置,有以下值:
- bottom
- top
- middle
- left
- right
height=”displayPixels” width=”displayPixels”
Applet或Bean將要顯示的長寬的值,此值為數字,單位為象素.- hspace=”leftRightPixels” vspace=”topBottomPixels”
Applet或Bean顯示時在螢幕左右,上下所需留下的空間,單位為象素. - jreversion=”JREVersionNumber | 1.1” Applet或Bean執行所需的Java Runtime
Environment (JRE) 的版本. 預設值是 1.1. - nspluginurl=”URLToPlugin” Netscape
Navigator使用者能夠使用的JRE的下載地址,此值為一個標準的URL,如http://www.aspcn.com/jsp - iepluginurl=”URLToPlugin”
IE使用者能夠使用的JRE的下載地址,此值為一個標準的URL,如http://www.aspcn.com/jsp
三、jsp:usebean(引入javabean)
格式:
<jsp:usebean id="物件名" class="包名.類名" scope="作用範圍(request/page/application/session)"></jsp:usebean>
用於引入javabean,通常配合setProperty以及setProperty使用
四、jsp:setProperty(在bean中設定一個或多個屬性)
格式:
<jsp:setProperty name="javaBean物件id" property="javaBean物件屬性名(javabean引入的方法名,可填入 * 來引入全部方法" </jsp:setProperty>
用於設定屬性,只有設定了屬性後,才可以獲取相應的屬性。
可使用萬用字元 * ,來將引入的javabean中的全部屬性設定。就相當於可以呼叫usebean中引入的java類的全部屬性。
五、jsp:getProperty(獲取屬性)
格式:
<jsp:getProperty name="javaBean物件id" property="javaBean物件屬性名" />
例如:
六、jsp:include(動態匯入頁面)
格式:
<jsp:include page="fileURL"></jsp:include>
注意:
動態包含的主要區別在於,其每個頁面單獨生成JAVA原始檔,不會互相干擾。
七、jsp:param(傳遞引數)
到達跳轉頁面可以通過 request.getParameter(“引數名”)方式取出引數值
jsp:param操作被用來以“名-值”對的形式為其他標籤提供附加資訊。它和
jsp:include、jsp:forward一起使用。
格式
<jsp:param name="paramName" value="paramValue"/>
其中,name為與屬性相關聯的關鍵詞,value為屬性的值。
例如
includeAction.jsp
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>Include</title>
</head>
<body>
<%double i = Math.random();%>
<jsp:include page="come.jsp">//載入come.jsp
<jsp:param name="number" value="<%=i%>" />//傳遞引數
</jsp:include>
</body>
</html>
come.jsp
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>come</title>
</head>
<body bgcolor=cyan>
<Font Size=3>
<%//獲得includeAction.jsp傳來的值:
String str = request.getParameter("number");
double n = Double.parseDouble(str);
%>
The value form includeAction is:<br> <%=n%>
</Font>
</body>
</html>
九大內建物件
九大內建物件,包括
4大作用域物件(pageContext、request、session、application)[作用域範圍從低到高]+
3大打醬油物件(page[頁面物件]、config[配置物件]、exception[例外物件])+
2大輸出物件(out[輸出物件]、response[響應物件])
一、request(請求物件)
“request” 物件代表的是來自客戶端的請求,例如我們在FORM表單>中填寫的資訊等,是最常用的物件。關於它的方法使用較多的是getParameter、getParameterNames,getParameterValue,
通過呼叫這幾個方法來獲取請求物件中所包含的引數的值.
二、response(請求物件)
“response” 物件代表的是對客戶端的響應,也就是說可以通過“response”物件來組織傳送到客戶端的資料。但是由於組織方式比較底層,所以不建議使用,需要向客戶端傳送文字時直接使用“out” 物件即可。
三、session(請求物件)
“session” 物件代表伺服器與客戶端所建立的會話,當需要在不同的JSP頁面中保留客戶資訊的情況下使用,比如線上購物、客戶軌跡跟蹤等。
四、application(請求物件)
“application” 物件負責提供應用程式在伺服器中執行時的一些全域性資訊,常用的方法有getMimeType和getRealPath等。
五、out(請求物件)
“out” 物件代表了向客戶端傳送資料的物件,與“response” 物件不同,通過“out” 物件傳送的內容將是瀏覽器需要顯示的內容,是文字一級的,可以通過“out” 物件直接向客戶端寫一個由程式動態生成HTML檔案。常用的方法除了print和println之外,還包括clear、clearBuffer、flush、getBufferSize和getRemaining,這是因為“out” 物件內部包含了一個緩衝區,所以需要一些對緩衝區進行操作的方法。
六、config(請求物件)
“config” 物件提供一些配置資訊,常用的方法有getInitParameter和getInitParameterNames,以獲得Servlet初始化時的引數。
七、page(請求物件)
“page” 物件代表了正在執行的由JSP檔案產生的類物件,一般不建議使用。
八、exception(請求物件)
“exception” 物件則代表了JSP檔案執行時所產生的例外物件,此物件不能在一般JSP檔案中直接使用,而只能在使用了“<%@ page isErrorPage=”true “%>”的JSP檔案中使用
九、pageContext(請求物件)
封裝了當前jsp頁面的執行資訊,它提供了返回jsp頁面的其他隱式物件的方法 :
getRequest(), getResponse(), getPage()
getServletContext() , getApplication(), getOut()
getSession(), getException(), getServletConfig()
由於Jsp就是servlet,因此,jsp九大內建物件,就是servlet的九個物件。因此可查閱javaEE的api,來了解九大物件的具體方法。