1. 程式人生 > >JSP 之 三大指令、四大基本語法、七大動作、九大內建物件

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的語法規則。

執行步驟:

  1. tomcat收到*.jsp請求,則會到org.apache.jasper.servlet.JspServlet
    處理(tomcat的web.xml中有配置)。
  2. JspServlet呼叫相應的java類,及jsp引擎根據hi.jsp生成的java類(位於:tomcat子目錄work下面:hi_jsp.java,
    hi_jsp.class)。
  3. 執行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,來了解九大物件的具體方法。