欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

JSP中自定義標(biāo)記符的使用(轉(zhuǎn))-創(chuàng)新互聯(lián)

JSP中自定義標(biāo)記符的使用 (轉(zhuǎn))[@more@]

10年的陽(yáng)明網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開(kāi)發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。營(yíng)銷型網(wǎng)站的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整陽(yáng)明建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無(wú)論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)從事“陽(yáng)明網(wǎng)站設(shè)計(jì)”,“陽(yáng)明網(wǎng)站推廣”以來(lái),每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。

JSP中自定義標(biāo)記符的使用

 

摘要

   在JSP中有一種機(jī)制,可以讓你在JSP頁(yè)面中插入與HTML類似的標(biāo)記。本文介紹JSP定制標(biāo)記的基本概念和構(gòu)成,以及如何開(kāi)發(fā)和應(yīng)用JSP定制標(biāo)記。XML:namespace prefix = o ns = "urn:schemas-microsoft-com:Office:office" />

 關(guān)鍵字

JSP,XML,TLD,標(biāo)記符

什么是標(biāo)記

使用HTML語(yǔ)言我們可以這樣去編輯我們的網(wǎng)頁(yè):

 

    

</p><P> HELLO  WORLD</p><P>

 

 

HELLO WORLD

在這里我們把,,<BODY>稱為標(biāo)記。HTML 標(biāo)記( HTML Markup)是HTML文檔的控制語(yǔ)言,用于指定瀏覽器顯示和打印文檔的方式.它是用小于號(hào)"<"和大于號(hào)">"括起來(lái)的短語(yǔ)和符號(hào),如<Html>、</Body>等。許多HTMl標(biāo)記以成對(duì)的方式出現(xiàn),如<TITLE>、 等。在JSP中我們也可以定制自己的標(biāo)記,以供JSP頁(yè)面使用,如下例所示

<%@ taglib uri="/tlds/taglib.tld" prefix="tagclass" %>

   

  login

   

   

     

 

   

在上例中就是一個(gè)JSP定制標(biāo)記符。widtht、height是這個(gè)標(biāo)記的屬性。<%@ taglib uri="/tlds/taglib.tld" prefix="tagclass" %>是一個(gè)標(biāo)記庫(kù)定義指令,在稍后我們將會(huì)討論。在JSP中定制標(biāo)記符,實(shí)質(zhì)上就是以標(biāo)記的形式封裝了一個(gè)俱有獨(dú)立功能的Java類。標(biāo)記的使用減少了直接嵌入JSP頁(yè)面的Java代碼,方便了頁(yè)面的布局,并且有利于代碼的復(fù)用,提高了開(kāi)發(fā)的效率。

JSP服務(wù)器解析標(biāo)記的過(guò)程

那么當(dāng)一個(gè)標(biāo)記被嵌入JSP頁(yè)面后,JSP服務(wù)器是如何對(duì)這個(gè)標(biāo)記進(jìn)行解析的呢?下面讓我們一起看一下它的順序圖:

圖中各對(duì)象的含義如下所示:

Client:  表示客戶端。

JSP-Server:JSP服務(wù)器。

JSP-Page:JSP頁(yè)面。

TLD:   標(biāo)記庫(kù)描述文件,定義標(biāo)記和標(biāo)記的各種屬性和處理文件等。

TagClass  標(biāo)記處理程序

當(dāng)一個(gè)用戶訪問(wèn)一個(gè)JSP頁(yè)面時(shí),這個(gè)請(qǐng)求被發(fā)送到JSP服務(wù)器,JSP服務(wù)器會(huì)根據(jù)這個(gè)請(qǐng)求去調(diào)用相應(yīng)的頁(yè)面,如果這個(gè)頁(yè)面中有自定義的標(biāo)記,JSP服務(wù)就會(huì)根據(jù)頁(yè)面指令<%@ taglib>去訪問(wèn)TLD得到處理程序的相關(guān)信息,接著調(diào)用該處理程序的構(gòu)造器方法,啟動(dòng)標(biāo)記符處理程序,并讀取標(biāo)記符的屬性和相應(yīng)值。對(duì)每個(gè)沒(méi)有設(shè)置屬性的,調(diào)用相應(yīng)的set方法。當(dāng)標(biāo)記符第一次使用時(shí),它的任何屬性都不會(huì)做過(guò)設(shè)置,因此對(duì)每個(gè)屬性都調(diào)用set方法。屬性設(shè)置完以后,JSP服務(wù)器調(diào)用處理程序的doStartTag(),然后再調(diào)用doEndTag()方法。最后JSP服務(wù)器會(huì)繼續(xù)處理剩下的頁(yè)面,在頁(yè)面結(jié)尾調(diào)用release()方法,清理占用的所有資源。

TLD文件

TLD(TLD:Tag Library Descriptor標(biāo)記庫(kù)描述符)文件,標(biāo)準(zhǔn)的XML格式的標(biāo)記定義文件,被用來(lái)存放標(biāo)記符的信息,下面就是一個(gè)典型的TLD文件。

  PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN"

   "http://java.sun.com/J2EE/dtds/web-jsptaglibrary_1_1.dtd">

  1.0

 

  1.1

 

 tagclass

 

 

     login

    

tagclass.login.login

     

      

     

      height

       

      true

       

      true

     

      width

      true

      true

     

 

在這個(gè)TLD文件中定義了只有一個(gè)標(biāo)記符的標(biāo)記符庫(kù),這個(gè)名為login的標(biāo)記符會(huì)調(diào)用一個(gè)Applet以驗(yàn)證用戶的合法性。處理這個(gè)標(biāo)記的類就是tagclass.login.login。width、height是這個(gè)標(biāo)記的兩個(gè)屬性。屬性是在使用標(biāo)記符時(shí)作為參數(shù)發(fā)送的值。我們可以在上面的示例中增加幾個(gè)標(biāo)記,也可以為每個(gè)標(biāo)記添加幾個(gè)屬性。我們開(kāi)發(fā)標(biāo)記符庫(kù)時(shí)不一定非要從頭開(kāi)始,自己編寫(xiě)一個(gè)全新TLD。我們可以使用某個(gè)集成的開(kāi)發(fā)的環(huán)境,也可以修改上面的例子。

TagLib指令

那么當(dāng)JSP服務(wù)器在解析一個(gè)標(biāo)記符時(shí),它是如何定義一個(gè)標(biāo)記庫(kù)的呢?這就是TagLib指令的主要責(zé)任。

Taglib 指令

定義一個(gè)標(biāo)記庫(kù)以及其自定義標(biāo)記的前綴.

JSP 語(yǔ)法

<%@ taglib uri="URIToTagLibrary" prefix="tagPrefix" %>

例子
<%@ taglib uri="/tlds/taglib.tld" prefix="tagclass" %>

   

  login

   

   

     

 

   

描述

<% @ taglib %>指令聲明此JSP文件使用了自定義的標(biāo)記,同時(shí)引用標(biāo)記庫(kù),

也指定了他們的標(biāo)記的前綴。 你必須在使用自定義標(biāo)記之前使用<% @ taglib %>指令。

屬性

uri="URIToTagLibrary" :UnifoRM Resource identifier (URI)根據(jù)標(biāo)記的前綴對(duì)自定義的標(biāo)記進(jìn)行唯一的命名,URI可以是一個(gè)相對(duì)或絕對(duì)的路徑。
  prefix="tagPrefix":在自定義標(biāo)記之前的前綴。如上例中的

標(biāo)記符的處理程序(Tag handle)

我們還是以一個(gè)例子來(lái)看下如何實(shí)現(xiàn)一個(gè)Tag handle。首先是看一下它的類圖:

讓我們?cè)倏匆幌滤拇a:

package  tagclass.login;

import javax.servlet.jsp.tagext.TagSupport;

import javax.servlet.jsp.*;

import java.io.*;

public class login extends TagSupport

{

  public login()

  {

  super();

   }

  public int doStartTag() throws JspTagException

  {

     JspWriter out = pageContext.getOut();

     try

     {

   out.println(" ");

}

     catch(Exception e)

     {

     }

  return SKIP_BODY;

}

publicc int doEndTag()throws JsptagException

{

  return EVAL_PAGE;

}

  public void release()

  {

     super.release();

  }

  public void setWidth(String language)

  {

  this.width = width;

  }

  public String getWidth()

  {

   return this.width;

  }

  public void setHeight(String height)

  {

   this.height=height;

  }

  public String getHeight()

  {

   return this.height;

  }

  private String width;

  private String height;

 }

從以上我們可以看出,實(shí)現(xiàn)一個(gè)簡(jiǎn)單的標(biāo)記符處理程序有幾個(gè)要求:①增加一個(gè)類,使之繼承java.Servlet.jsp.tagext.TagSupport類。這個(gè)類提供了java.Servlet.jsp.tagext.Tag接口所要求的所有的方法。另外,還需要使用一些基本的api,使JSP容器能夠調(diào)用我們自己提供的標(biāo)記符處理程序。②必須為每個(gè)標(biāo)記符屬性分別創(chuàng)建一個(gè)get和set方法,JSP容器需要使用這些方法處理程序傳遞參數(shù)。③要為標(biāo)記符處理程序創(chuàng)建一個(gè)構(gòu)造器和自毀器。JSP需要使用構(gòu)造器啟動(dòng)處理程序。自毀器是在realease()方法中定義的。在處理程序的生命周期結(jié)束時(shí),需要調(diào)用自毀器釋放所占用的資源。④創(chuàng)建兩個(gè)名為doStartTag()和doEndTag()的方法,執(zhí)行具體的處理和輸出動(dòng)作。這兩個(gè)方法是在處理自定義標(biāo)記符的起始位置和結(jié)束位置調(diào)用的。它們的返回值是在Tag Interface里定義的靜態(tài)int,這幾個(gè)靜態(tài)值分別是:

SKIP_BODY隱含0  :跳過(guò)了開(kāi)始和結(jié)束標(biāo)簽之間的代碼。

EVAL_BODY_INCLUDE隱含1:將body的內(nèi)容輸出到存在的輸出流中

SKIP_PAGE隱含5 : 忽略剩下的頁(yè)面。

EVAL_PAGE隱含6:繼續(xù)執(zhí)行下面的頁(yè)

  當(dāng)然標(biāo)記符也有它自己的缺點(diǎn)。很不方便的封裝過(guò)程,有限的功能。對(duì)于一些不太復(fù)雜和功能單一的邏輯描述,需要傳遞的參數(shù)要求不高時(shí),使用JSP標(biāo)記,要方便的多。對(duì)于大多數(shù)的商業(yè)邏輯應(yīng)用,還是使用bean要好的多,也宜于servlet控制。

附錄:文章中所用示例的完整代碼

JSP代碼:login.jsp

<%@ taglib uri="/tlds/taglib.tld" prefix="tagclass" %>

 

 

 

 

 

 

 

標(biāo)記符描述庫(kù):taglib.tld

  PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN"

   "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">

  1.0

  1.1

 tagclass

 

     login

tagclass.login.login

     

    

      height

      true

      true

     

      width

      true

      true

     

 

標(biāo)記符處理程序:login.java

package  tagclass.login;

import javax.servlet.jsp.tagext.TagSupport;

import javax.servlet.jsp.*;

import java.io.*;

public class login extends TagSupport

{

  public login()

  {

  super();

   }

  public int doStartTag() throws JspTagException

  {

     JspWriter out = pageContext.getOut();

     try

     {

   out.println(" ");

}

     catch(Exception e)

     {

     }

  return SKIP_BODY;

}

publicc int doEndTag()throws JsptagException

{

  return EVAL_PAGE;

}

  public void release()

  {

     super.release();

  }

  public void setWidth(String language)

  {

  this.width = width;

  }

  public String getWidth()

  {

  return this.width;

  }

  public void setHeight(String height)

  {

   this.height=height;

  }

  public String getHeight()

  {

   return this.height;

  }

  private String width;

  private String height;

 }

標(biāo)記符處理程序中所使用的Applet : login.java

import java.awt.*;

import java.awt.event.*;

import java.applet.*;

public class login extends Applet implements ActionListener

{

  private String s_username;

  private String s_userpassword;

  private Button b_ok;

  private Button b_register;

  private Label l_username;

  private Label l_userpassword;

  private TextField t_username;

  private TextField t_userpassword;

  private GridLayout g_gridlayout;

  public void init()

  {

  b_ok=new Button("ok");

  b_register=new Button("register");

  l_username= new Label("name");

  l_userpassword=new Label("password");

  t_username=new TextField();

  t_userpassword=new TextField();

  b_ok.addActionListener(this);

  b_register.addActionListener(this);

  g_gridlayout=new GridLayout(3,2,10,10);

  this.setLayout(g_gridlayout);

  //this.setBackground(Color.blue);

  add(l_username);

  add(t_username);

  add(l_userpassword);

  add(t_userpassword);

  add(b_ok);

  add(b_register);

  }

  public void actionPerformed(ActionEvent ev)

  {

    String s_label=ev.getActionCommand();

    if (s_label.equals("ok"))

    {

  t_username.setText("name");

    }

    if (s_label.equals("register"))

    {

  t_userpassword.setText("password");

  }

  }

  public void paint(Graphics g)

  {

   }

}


標(biāo)題名稱:JSP中自定義標(biāo)記符的使用(轉(zhuǎn))-創(chuàng)新互聯(lián)
文章轉(zhuǎn)載:http://aaarwkj.com/article10/dsjggo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)、軟件開(kāi)發(fā)全網(wǎng)營(yíng)銷推廣、網(wǎng)站導(dǎo)航、企業(yè)建站、網(wǎng)站排名

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都app開(kāi)發(fā)公司
欧美日韩国产精品精品| 亚洲最大午夜福利视频| 日本在线看片一区二区| 日韩国产欧美亚洲一区不卡 | 久久精品国产亚洲av不卡| 亚洲福利影院一区久久| 日韩看片一区二区三区高清| av中文字幕在线激情| 国产一区日本二区欧美三区| 人成午夜视频在线播放| 欧美三级视频一区二区三区| 国产精品久久久久久老熟女| 性生活视频在线观看免费| 日本熟女午夜福利视频| 国产一区 亚洲精品| 成人性生交大片免费看久久| 欧美日韩在线观看不卡视频| 日韩国产精品视频二区| 丰满人妻二区三区性色| 精品少妇人妻久久av免费| 中午字幕人妻少妇久久| 久久精品性少妇一区=区三区| 美国真人性做爰视频免费| 人妻少妇一区二区三区四区| av成人黄色片在线播放| 日韩精品福利片午夜免费| 国产欧美日韩一区二区三区不卡 | 在线欧美日韩一区二区三区| 日韩视频在线一区二区三区| 欧美一区二区三区四区久久| 丝袜美腿亚洲综合第一区| 99久久这里只有精品视频| 亚洲成熟中老妇女视频| 免费看男人添女人无遮挡| 92午夜福利精品视频| 日韩精品女性三级视频| 国产日本福利在线综合网| 最新亚洲av熟女播放| 人人妻人人澡人人爽人人dvd| 琪琪精品免费一区二区三区| 国产三级久久精品三级91|