Java web基礎總結九之—— jsp標籤

來源:互聯網
上載者:User

標籤:tag   jstl   國際化   java web   jsp   

Java web基礎總結九之—— jsp標籤

         JSP標籤也稱之為Jsp Action,在前面講過,jsp的設計目的就是作為表現層。我們希望JSP頁面僅用作資料顯示模組,不要嵌套任何java代碼引入任何商務邏輯,但在實際開發中不引入一點商務邏輯是不可能的,但引入商務邏輯會導致頁面出現難看java代碼。jsp的標籤就是為瞭解決這個問題。所以jsp頁面中也內建了一些標籤(這些標籤叫做jsp標籤),開發人員使用這些標籤可以完成頁面的一些商務邏輯。我們也可以開發自訂標籤,使jsp頁面不出現一行java代碼。

一.jsp的內建標籤

     jsp的內建標籤是sun公司在jsp頁面中也內建的一些標籤,不需要通過taglib指令匯入標籤庫,直接可以使用的。下面是一些常用的內建標籤。

1. <jsp:include>標籤

       <jsp:include>標籤的作用是把另外一個資源的輸出內容插入進當前JSP頁面的輸出內容之中,由於是在JSP頁面執行時的引入,所以被稱為動態引入。

文法:<jsp:include page="URL | <%=expression%>"flush="true|false" />

       page屬性用於指定被引入資源的相對路徑,它也可以通過執行一個jsp運算式來獲得。flush屬性指定在插入其他資源的輸出內容時,是否先將當前JSP頁面的已輸出的內容重新整理到用戶端。 

        <jsp:include>與include指令有很大的區別。<jsp:include>標籤是動態引入,<jsp:include>標籤涉及到的2個JSP頁面會被翻譯成2個servlet,這2個servlet的內容在執行時進行合并。而include指令是靜態引入,涉及到的2個JSP頁面會被翻譯成一個servlet,其內容是在源檔案層級進行合并。他們的共同點是,它們都會把兩個JSP頁面內容合并輸出,所以這兩個頁面不要出現重複的HTML架構標籤,否則輸出給用戶端的內容將會是一個格式混亂的HTML文檔。

2.  <jsp:forward>標籤

     <jsp:forward>標籤用於把請求轉寄給另外一個資源。文法:

      <jsp:forwardpage="URL | <%=expression%>" />

    其中的page屬性用於指定請求轉寄到的資源的相對路徑,它也可以通過執行一個運算式來獲得。

3.  <jsp:param>標籤

      <jsp:param>標籤可以看做是前兩個標籤的子標籤。當使用<jsp:include>和<jsp:forward>標籤引入或將請求轉寄給其它資源時,可以使用<jsp:param>標籤向這個資源傳遞參數。<jsp:param>標籤的name屬性用於指定參數名,value屬性用於指定參數值。在<jsp:include>和<jsp:forward>標籤中可以使用多個<jsp:param>標籤來傳遞多個參數。

     與<jsp:include>標籤組合使用時的文法:

<jsp:includepage="URL | <%=expression%>">

          <jsp:paramname="parameterName" value="parameterValue|<%= expression%>" />

</jsp:include>

   與<jsp:forward>標籤組合使用時的文法:

<jsp:forwardpage="URL | <%=expression%>">

          <jsp:paramname="parameterName" value="parameterValue|<%= expression%>" />

</jsp:include>

4.  <jsp:useBean>標籤

       <jsp:useBean>標籤用於在指定的域範圍內尋找指定名稱的JavaBean對象:如果存在則直接返回該JavaBean對象的引用。如果不存在,則執行個體化一個新的JavaBean對象並將它以指定的名稱儲存到指定的域範圍中。

      常用文法:

<jsp:useBeanid="beanName" class="package.class"

                   scope="page|request|session|application"/>

        其中的id屬性用於指定JavaBean執行個體對象的引用名稱和其儲存在域範圍中的名稱。class屬性用於指定JavaBean的完整類名(即必須帶有包名)。scope屬性用於指定JavaBean執行個體對象所儲存的域範圍,值只能是page、request、session和application等四個值中的一個,預設值是page。

 

二.Jstl標籤庫

       JSTL是JSP StandardTag Library的縮寫。它是SUN公司發布的一個針對JSP開發的新組件。JSTL允許你使用標籤(tags)來進行JSP頁面開發,而不是使用java代碼方式開發。JSTL幾乎能夠做到傳統JSP java代碼能做的任何事情。

JSTL標籤根據其功能可以分為以下幾種類型:

 

1. 核心標籤(Core Tags)

   核心標籤以c為首碼,需要使用taglib指令匯入標籤庫:

<%@ tagliburi="http://java.sun.com/jsp/jstl/core" prefix="c" %>

舉個常見的例子,<c:remove>標籤:

  <c:remove>標籤用於刪除四個Web域中的屬性。

其文法格式如下:

<c:remove var="varName"    

          [scope="{page|request|session|application}"]/>

 

2.  格式化標籤(Formatting tags),也稱為國際化標籤。

    JSTL格式標籤可以用來格式化和顯示文本,日期,時間和數位,進行國際化操作。以fmt為首碼,需要使用taglib指令匯入標籤庫:

 <%@ taglibprefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

例如,格式化數位<fmt:formatNumber>標籤:

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%><%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> <html><head>  <title>JSTL fmt:formatNumberTag</title></head><body><h3>NumberFormat:</h3><c:setvar="num" value="120000.2309" /><p>FormattedNumber: <fmt:formatNumber value="${num}"           type="currency"/></p></body></html>

輸出的結果是:

FormattedNumber: £120,000.23

 

3.  SQL標籤(SQL tags)

     JSTL的SQL標籤庫標籤可以用來代替操作關係型資料庫的java代碼,

以sql為首碼,需要使用taglib指令匯入標籤庫:

<%@ taglibprefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>

  例如,使用<sql:setDataSource>標籤設定資料庫的資料來源:

<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%><%@taglib uri="http://java.sun.com/jsp/jstl/sql"prefix="sql"%><html><head><title>sql Tag</title></head><body> <sql:setDataSourcevar="snapshot" driver="com.mysql.jdbc.Driver"     url="jdbc:mysql://localhost:3306/test"     user="root"  password="root"/></body></html>


 4.  XML標籤(XML tags)

        JSTL XML標記用於在jsp中建立和操作XML文檔。可以實現XML解析,轉換XML資料等。以xml為首碼,需要使用taglib指令匯入標籤庫:

<%@ taglib prefix="x"uri="http://java.sun.com/jsp/jstl/xml" %>

    還需要把XercesImpl.jar和xalan.jar這兩個jar包複製到<Tomcat安裝目錄> 的\lib目錄。由於使用的比較少,就不多說了.

三.開發自訂標籤庫

       要開發自訂的標籤移除jsp頁面中的java代碼,需要完成以下兩個步驟:首先編寫一個實現Tag介面的Java類(標籤處理器類)。然後編寫標籤庫描述符(tld)檔案,在tld檔案中對標籤處理器類進行描述。 

1. 實現了Tag介面的自訂標籤處理器的執行流程

     JSP引擎將遇到自訂標籤時,首先建立標籤處理器類的執行個體對象,然後按照JSP規範定義的通訊規則依次調用下面的方法。

         public voidsetPageContext(PageContext pc), JSP引擎執行個體化標籤處理器後,將調用setPageContext方法將JSP頁面的pageContext對象傳遞給標籤處理器,標籤處理器以後可以通過這個pageContext對象與JSP頁面進行通訊。

         public void setParent(Tag t),setPageContext方法執行完後,WEB容器接著調用的setParent方法將當前標籤的父標籤傳遞給當前標籤處理器,如果當前標籤沒有父標籤,則傳遞給setParent方法的參數值為null。

         public int doStartTag(),調用了setPageContext方法和setParent方法之後,WEB容器執行到自訂標籤的開始標記時,就會調用標籤處理器的doStartTag方法。

         public int doEndTag(),WEB容器執行完自訂標籤的標籤體後,就會接著去執行自訂標籤的結束標記,此時,WEB容器會去調用標籤處理器的doEndTag方法。

         public void release(),通常WEB容器執行完自訂標籤後,標籤處理器會駐留在記憶體中,為其它請求伺服器,直至停止web應用時,web容器才會調用release方法。

         由於實現Tag介面完成自訂標籤有些繁瑣,所以在JSP 2.0中定義了一個更為簡單的SimpleTag介面來實現標籤的功能。實現SimpleTag介面的標籤通常稱為簡單標籤。

2. 實現一個簡單的輸出HelloWorld的自訂標籤。(1).首先編寫一個實現了Tag介面的標籤處理器類。

HelloworldTag.java代碼如下:

public class HelloworldTag implements Tag {private PageContext pageContext;public int doStartTag() throws JspException {HttpServletRequest request = (HttpServletRequest) pageContext.getRequest();JspWriter out = pageContext.getOut();String string = "Hello World";    try {out.write(string);} catch (IOException e) {throw new RuntimeException(e);}return 0;}public int doEndTag() throws JspException {return 0;}public Tag getParent() {return null;}public void release() {}public void setPageContext(PageContext arg0) {this.pageContext = arg0;}public void setParent(Tag arg0) {}}


(2). 在web-inf/目錄下建立tld檔案,並且在tld檔案中對標籤處理器進行描述。

hello.tld檔案:

<?xml version="1.0" encoding="UTF-8" ?><taglib xmlns="http://java.sun.com/xml/ns/j2ee"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"    version="2.0">        <description>A tag library exercising SimpleTag handlers.</description>    <tlib-version>1.0</tlib-version>    <short-name>SimpleTagLibrary</short-name>    <uri>/hello</uri>       <tag>        <name>helloWorld</name>  <tag-class>com.cc.HelloworldTag</tag-class><body-content>empty</body-content>    </tag></taglib>


(3). 在jsp頁面中使用taglib指令匯入標籤庫,並使用自訂標籤。

 

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@taglib uri="/hello" prefix="hello" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>  <head>    <title>輸出hello world</title>  </head>    <body>     輸出:<hello:helloWorld/>  </body></html>

 

 

Java web基礎總結九之—— jsp標籤

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.