官术网_书友最值得收藏!

3.3 JSP指令

上一節介紹了JSP表達式的用法以及示例,讀者已經可以應用前面章節的知識編寫簡單的JSP動態網頁了,但要編寫出功能強大、復雜的JSP頁面還需要學習更多的內容。本節介紹JSP的另一元素:指令。JSP指令包括:page指令、include指令、taglib指令。

3.3.1 與頁面屬性相關的page指令

page指令用來設置JSP頁面的屬性和相關功能,基本語法形式有兩種,如下:

      <%@ page attribute1="value1" […attribute2="value n"]%>

或者

      <jsp:directive.page attribute1="value1" […attribute2="value n"] />

提示

第2種形式的表達現在很少使用,大多使用第1種表達形式。

page指令有多種屬性,但使用最多的是language、import、pageEncoding這3個,其中language是必須設置的,目前JSP頁面使用Java語言,所以其默認值是java。Import用來聲明需要導入的包,pageEncoding屬性設置頁面的編碼。在所有的屬性中除import可以聲明多個外,其他的屬性都只能出現一次。page其他的屬性見表3.1。

表3.1 page指令的常用屬性

3.3.2 引入文件的include指令

include指令是在JSP頁面生成Servlet時引入需要包含的頁文件,可以是HTML文件也可以是JSP文件,還可以是其他文件(例如js文件)。include指令的作用是在標簽插入的位置插入靜態的文件內容,使其與JSP文件組合成新的JSP頁面,然后由JSP引擎翻譯成Servlet文件。這樣做有兩個優點:

頁面的代碼可以復用,因為被引入的文件是靜態文件,所以在其他的JSP頁面中要是需要也可以導入;

JSP頁面的代碼結構顯得清晰易懂,維護也比較簡單。

include指令的基本語法如下:

      <%@include file="URL"%>

file屬性是指向要包含的文件,一定要注意引入的路徑是否正確,一旦路徑出錯在編譯的時候將不能通過。

include指令經常用來包含網站中經常出現的相同頁面。例如,一般網站為每個頁面都設置導航欄,把它放在頁面的頂端或者左邊,這部分的代碼在每個頁面都重復。那么就可以用include來解決這類問題,它能夠為開發者省去這些重復的動作。下面的例子將對include指令進行演示。

【例3.3】演示include指令。

index.jsp是首頁,其源代碼如下:

      ----------------- index1.jsp ----------------
      <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
      <! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
      <html>
      01    <head>
      02      <meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
      03      <title>JSP include指令演示</title>
      04    </head>
      05    <body>
      06         <%@include file="john.html" %>
      07         <br/>
      08        <div align="center">JSP include指令演示</div>
      09         <%@include file="copyRight.jsp" %>
      10    </body>
      11   </html>

John.html是內嵌頁面,用來顯示內容,其源代碼如下:

      ----------------- john.html ----------------
      01   <table align="center" border="1" width="600">
      02      <tr>
      03          <td align="center" height="18" width="100%">
      04              <span>This is top page.</span>
      05          </td>
      06      </tr>
      07   </table>

copyRight.jsp是顯示版權信息的頁面,其源代碼如下:

      ----------------- copyRight.jsp ----------------
      01   <%@ page language="java" import="java.util.*, java.text.SimpleDateFormat"
      02           pageEncoding="UTF-8"%>
      03   <%
      04      Date d = new Date();
      05      SimpleDateFormat sdf = new SimpleDateFormat("yyyy");
      06      String t = sdf.format(d);
      07      String copyRightsMess = "John 版權所有 2010-"+t;
      08   %>
      09   <br/>
      10   <div align="center" ><%=copyRightsMess%></div>

本例頁面效果如圖3.4所示。

圖3.4 index.jsp頁面的運行結果

提示

include指令在JSP頁面被轉換成Servlet時才將文件導入,這與<jsp:include>動作不同。

3.3.3 與標簽相關的taglib指令

taglib指令(又名標簽指令)是JSP新增的一個指令,用戶可以自定義新的標簽在頁面中執行。taglib指令的語法如下:

      <%taglib  uri="tagliburl" prefix="tagPre" %>

其中uri屬性用來表示自定義標簽庫的存放位置。prefix屬性是為了區分不同標簽庫的標簽名,在頁面中引用標簽也是以prefix開頭的。

現在比較流行的JSTL、EL標簽,看下它們如何在JSP中使用。下面的例子是用JSTL標簽輸出1~10。

提示

JSTL標簽庫會在后續的章節詳細說明,這里先演示它的基本用法。

【例3.4】演示taglib指令。

      ----------------- index.jsp ----------------
      01   <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
      02   <%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c"%>
      03   <! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
      04   <html>
      05    <head>
      06      <meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
      07      <title>JSP taglib指令演示</title>
      08    </head>
      09    <body>
      10         <table>
      11            <tr>
      12              <td>輸出值</td>
      13            </tr>
      14            <c:forEach begin="1" end="10" var="num">
      15               <tr>
      16                 <td><c:out value="${num}"></c:out></td>
      17               </tr>
      18            </c:forEach>
      19         </table>
      20    </body>
      21   </html>

從上述代碼可以看出,JSTL標簽使得JSP頁面十分的簡潔,它不需要定義或初始化對象、方法。但凡事都不能只看表面,應該注重本質,標簽的制定在頁面顯示是如此的簡單,但在編制時是個復雜的過程,它通過一定的編程步驟將JSP代碼和Java代碼聯系起來。標簽制定的最大好處就是使得開發者的職責分工更加地明細,標簽制定者無需關注業務邏輯的實現,而頁面編程人員直接使用標簽即可。這樣兩者就不會沖突,分工明確。下面簡單介紹定制標簽的過程。

1.標簽庫

標簽庫用于定義標簽的XML文件。該文件中包含了標簽的屬性、和標簽的名稱、JSP在處理標簽時所需的類文件等信息。在使用自定義標簽時,必須指明標簽庫所在目錄;在執行標簽功能作用時,通過定義標簽屬性來決定顯示的內容。下面看一段標簽的源代碼,其中包括了標簽名的定義、屬性定義以及標簽對應的Java類。

      01   <? xml version="1.0" encoding="UTF-8" ? >
      02   <! DOCTYPE taglib
      03    PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
      04    "http://java.sun.com/dtd/web-jsptaglibrary_1_3.dtd">
      05   <taglib>
      06       <tlib-version>1.0</tlib-version>
      07       <jsp-version>1.2</jsp-version>
      08       <short-name>lms</short-name>
      09      <! --  頁面引用的url地址 -->
      10      <uri>/lms-tags</uri>
      11
      12       <tag>
      13          <! --  標簽名稱 -->
      14           <name>page</name>
      15          <! --  標簽處理類 -->
      16           <tag-class>com.common.model.PageTag</tag-class>
      17           <body-content>JSP</body-content>
      18          <! --  標簽描述 -->
      19          <description>分頁</description>
      20          <! --  標簽屬性 -->
      21           <attribute>
      22              <! --  標簽屬性名稱 -->
      23               <name>object</name>
      24              <! --  標簽屬性是否為必需,true是必需,false不是必需 -->
      25               <required>true</required>
      26              <! --  標簽屬性對應的處理類 -->
      27               <type>com.common.model.PageObject</type>
      28              <! --  標簽屬性描述 -->
      29              <description>PageObject對象</description>
      30           </attribute>
      31       </tag>
      32
      33     <tag>
      34          <! --  標簽名稱 -->
      35           <name>substring</name>
      36          <! --  標簽處理類 -->
      37           <tag-class>com.gsta.common.tag.SubStringTag</tag-class>
      38           <description>substring</description>
      39           <attribute>
      40               <name>content</name>
      41               <required>true</required>
      42               <type>java.lang.String</type>
      43           </attribute>
      44       </tag>
      45   </taglib>

上述代碼中第6~8行分別定義標簽的版本、JSP的版本、標簽的簡稱,代碼第12~31行定義page標簽,代碼第21~30行定義page標簽的屬性,在定義屬性名稱的時候,可以定義該標簽的數據類型以及該屬性是否是必需的。例如上述代碼第41行定義的,JSP頁面就會根據其定義在執行的時候檢查相關的錯誤信息。

2.標簽處理類

標簽處理類其實就是一個Java類,該Java類實現標簽接口(javax.Servlet.jsp.Tag),當自定義標簽被JSP處理時即被執行。每個標簽中都需要執行的方法是:

      Public int doStartTag() throws JspException

該方法定義了標簽被執行時的方法。在標簽中定義的屬性,那么在Java類中就必須有這些屬性并且設定其get/set方法。例如,在上面標簽源碼中與substring標簽對應的標簽Java類是一個用于返回結果的Java類,在substring標簽定義時,必須定義其content屬性并給出get/set方法,如下代碼所示:

      01   private String content;
      02   public void setContent(String content) {
      03       this.content = content;
      04   }
      05
      06   public void setLength(int length) {
      07       this.length = length;
      08   }

上述代碼中,給出了屬性content的get/set方法。

主站蜘蛛池模板: 印江| 淳化县| 区。| 长乐市| 和静县| 贺兰县| 宜城市| 龙游县| 军事| 云浮市| 大埔区| 吴桥县| 西华县| 咸阳市| 澄城县| 资阳市| 开远市| 西宁市| 兴海县| 诸暨市| 新绛县| 柏乡县| 永昌县| 汉沽区| 陇西县| 株洲市| 横山县| 台南市| 额敏县| 略阳县| 梓潼县| 博兴县| 海城市| 九龙城区| 朝阳区| 楚雄市| 南江县| 铜陵市| 葵青区| 灵川县| 长泰县|