成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁 > 知識庫 > jsp自定義標簽用法實例詳解

jsp自定義標簽用法實例詳解

熱門標簽:北票市地圖標注 杭州語音電銷機器人軟件 商洛電銷 電銷機器人是有一些什么技術 四川保險智能外呼系統(tǒng)商家 電銷機器人好賣么 杭州ai語音電銷機器人功能 地圖標注線上教程 高德地圖標注樣式

本文實例講述了jsp自定義標簽用法。分享給大家供大家參考。具體如下:

在JSP中有一種機制,可以讓你在JSP頁面中插入與HTML類似的標記。本文介紹JSP定制標記的基本概念和構成,以及如何開發(fā)和應用JSP定制標記。

什么是標記

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

HTML>
  HEAD>
TITLE>
HELLO WORLD
/TITLE>
/HEAD>
BODY>
HELLO WORLD
/BODY>
/HTML>

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

!—login.jsp-->
%@ taglib uri="/tlds/taglib.tld" prefix="tagclass" %>
html>
 head>
title>login/title>
 /head>
 body>
  tagclass:login width="200" height= "100" >
/tagclass:login>
 /body>
/html>

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

JSP服務器解析標記的過程

那么當一個標記被嵌入JSP頁面后,JSP服務器是如何對這個標記進行解析的呢?各對象的含義如下所示:

Client: 表示客戶端。
JSP-Server:JSP服務器。
JSP-Page:JSP頁面。
TLD:  標記庫描述文件,定義標記和標記的各種屬性和處理文件等。
TagClass 標記處理程序

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

TLD文件

TLD(TLD:Tag Library Descriptor標記庫描述符)文件,標準的XML格式的標記定義文件,被用來存放標記符的信息,下面就是一個典型的TLD文件。

?xml version="1.0" encoding="ISO-8859-1" ?>
!—XML的版本及其字符集-->
!DOCTYPE taglib
PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN"
 " http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
!—文檔類型定義-->
taglib>
!—此標記說明我們開始描述一個標記庫-->
tlibversion>1.0/tlibversion>
 !—標記庫的版本-->
jspversion>1.1/jspversion>
 !—所使用的JSP的版本-->
 shortname>tagclass/shortname>
 !—缺省的名稱-->
tag>
  name>login/name>
  !—標記的名稱-->
tagclass>
tagclass.login.login
!—處理這個Tag的相應的類的名稱-->
/tagclass>
  info>
   !—對本標記符的描述-->
  /info>
attribute>
!—開始定義標記的屬性-->
  name>height/name>
    !—屬性的名稱-->
  required>true/required>
    !—表示這個屬性是不是必須的-->
  rtexprvalue>true/rtexprvalue>
!—表示這個屬性是否可以用JSP的程序段的結果輸出-->
  /attribute>
attribute>
  name>width/name>
  required>true/required>
  rtexprvalue>true/rtexprvalue>
  /attribute>
/tag>
/taglib>

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

TagLib指令

那么當JSP服務器在解析一個標記符時,它是如何定義一個標記庫的呢?這就是TagLib指令的主要責任。

Taglib 指令

定義一個標記庫以及其自定義標記的前綴.

JSP 語法

復制代碼 代碼如下:
%@ taglib uri="URIToTagLibrary" prefix="tagPrefix" %>

例子

%@ taglib uri="/tlds/taglib.tld" prefix="tagclass" %>
html>
 head>
title>login/title>
 /head>
 body>
  tagclass:login width="200" height= "100" >
/tagclass:login>
 /body>
/html>

描述

% @ taglib %>指令聲明此JSP文件使用了自定義的標記,同時引用標記庫,
也指定了他們的標記的前綴。 你必須在使用自定義標記之前使用% @ taglib %>指令。

屬性

uri="URIToTagLibrary" :Uniform Resource Identifier (URI)根據(jù)標記的前綴對自定義的標記進行唯一的命名,URI可以是一個相對或絕對的路徑。
  prefix="tagPrefix":在自定義標記之前的前綴。如上例中的/tagclass:login>

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

我們還是以一個例子來看下如何實現(xiàn)一個Tag handle。首先是看一下它的類圖:
讓我們再看一下它的代碼:

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("APPLET CODEBASE=applet/login/ CODE=login.class width=200 height=100 > /APPLET>");
}
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;
}

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

SKIP_BODY隱含0 :跳過了開始和結束標簽之間的代碼。
EVAL_BODY_INCLUDE隱含1:將body的內容輸出到存在的輸出流中
SKIP_PAGE隱含5 : 忽略剩下的頁面。
EVAL_PAGE隱含6:繼續(xù)執(zhí)行下面的頁

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

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

JSP代碼:login.jsp

%@ taglib uri="/tlds/taglib.tld" prefix="tagclass" %>
html>
head>
title>/title>
/head>
body>
tagclass:login width="200" height= "100" >
/tagclass:login>
/body>
/html>

標記符描述庫:taglib.tld

?xml version="1.0" encoding="ISO-8859-1" ?>
!DOCTYPE taglib
PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN"
 " http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
taglib>
tlibversion>1.0/tlibversion>
jspversion>1.1/jspversion>
 shortname>tagclass/shortname>
tag>
  name>login/name>
tagclass>
tagclass.login.login
/tagclass>
  info>
  /info>
attribute>
  name>height/name>
  required>true/required>
  rtexprvalue>true/rtexprvalue>
  /attribute>
attribute>
  name>width/name>
  required>true/required>
  rtexprvalue>true/rtexprvalue>
  /attribute>
/tag>
/taglib>

標記符處理程序: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("APPLET CODEBASE=applet/login/ CODE=login.class width=200 height=100 > /APPLET>");
}
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;
}

標記符處理程序中所使用的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)
{
}
}

希望本文所述對大家的JSP程序設計有所幫助。

您可能感興趣的文章:
  • JSP自定義標簽Taglib實現(xiàn)過程重點總結
  • jsp struts1 標簽實例詳解
  • jsp頁面中如何將時間戳字符串格式化為時間標簽
  • JSP自定義標簽rtexprvalue屬性用法實例分析
  • JSP頁面中如何用select標簽實現(xiàn)級聯(lián)
  • JSP自定義分頁標簽TAG全過程
  • JSP中常用的JSTL fmt(format格式化)標簽用法整理
  • Jsp自定義標簽和方法詳解

標簽:宿州 紅河 云浮 貴州 丹東 西藏 青島 江西

巨人網(wǎng)絡通訊聲明:本文標題《jsp自定義標簽用法實例詳解》,本文關鍵詞  jsp,自定義,標簽,用法,實例,;如發(fā)現(xiàn)本文內容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《jsp自定義標簽用法實例詳解》相關的同類信息!
  • 本頁收集關于jsp自定義標簽用法實例詳解的相關信息資訊供網(wǎng)民參考!
  • 推薦文章
    国产精品一区二区三区久久| 成人免费毛片高清视频| 精品一区二区三区电影| 三上悠亚国产精品一区二区三区| 一本久道中文字幕精品亚洲嫩| 成人在线观看免费完整| 99久热re在线精品视频| 一本色道综合久久欧美日韩精品| 国产精品日韩一区| 精品免费国产一区二区三区四区| 自由色视频.| 亚洲高清久久| 簧片在线免费看| 国产精品一区二区小说| 91精品国产综合久久香蕉922| 三级a在线观看| 亚洲视频分类| 先锋影音av资源站| 欧美三级午夜理伦三级老人| 久播影院第一理论片| 无码国产精品久久一区免费| 国产精品久久一| 亚洲精品mv| 精品在线视频一区二区三区| 欧洲美女免费图片一区| 国产精品天美传媒入口| 久久精品国内一区二区三区水蜜桃| 一二三在线视频| 亚洲特色特黄| 美女精品在线| 精品一区二区在线观看视频| 免费在线观看你懂的| 国产欧美一区视频| 最近2018年中文字幕在线| 99sesese| 蜜桃成人在线视频| 色欲AV无码精品一区二区久久| 我看黄色一级片| 狠狠精品干练久久久无码中文字幕| 黄色一区二区视频| 国产偷国产偷精品高清尤物| 欧美h视频在线| 欧美亚洲精品一区二区| 色狠狠色噜噜噜综合网| 国产成人午夜电影| www日韩在线观看| 国产免费专区| 欧美a级在线观看| 精品国产欧美日韩不卡在线观看| 一本色道久久精品| 鲁丝一区二区三区免费| 欧美日韩亚洲在线观看| 在线观看欧美一区| 成人免费看黄yyy456| 日韩vs国产vs欧美| 亚洲人成网站色在线观看| 精品少妇一区二区三区免费观看| 欧美在线观看你懂的| 99久久99久久精品免费| xxx成人少妇69| 永久免费的av网站| 色综合久久久久久中文网| 欧美99在线视频观看| 国产香蕉久久精品综合网| 又黄又湿又爽又免费又色| 草莓福利社区在线| 五月国产精品| 好吊色在线观看| 成人免费在线视频| 国产成人无码一二三区视频| 老司机精品视频在线| 中文字幕亚洲一区二区va在线| 午夜性爽视频男人的天堂| 欧美一级片免费看| 日本视频在线免费| 天堂va蜜桃一区二区三区| av色综合久久天堂av色综合在| 成人免费视频久久| 少妇无套高潮一二三区| 成人av电影免费观看| 国产成人午夜99999| 国产永久av在线| 天天做夜夜爱爱爱| 国产视频中文字幕在线观看| 国产成人3p视频免费观看| 久久成人人人人精品欧| 日韩一本大道| 中文字幕永久在线不卡| 欧美一区二区免费在线观看| 中文字幕有码在线| 国产又粗又长又黄的视频| 99久热在线精品视频| 黄色网址网站在线观看| 国产精品二区一区二区aⅴ污介绍| 亚洲人成网站色ww在线| 国产精品亚洲视频在线观看| 午夜精品在线播放| 国内一区在线| 天天色影综合网| 欧美做暖暖视频| 精品视频高清无人区区二区三区| 韩国三级成人在线| 久久激五月天综合精品| 免费成人小视频| 欧美精品vⅰdeose4hd| 性色av无码久久一区二区三区| japanese国产在线观看| 欧美亚洲愉拍一区二区| 亚洲精品国产片| 欧美24videosex性欧美| 超碰在线最新| 欧美日韩成人一区二区| 欧美一区久久久| 理论片鲁丝二区爱情网| 五月天亚洲婷婷| 在线免费看av的网站| 日本精品久久电影| 大型av综合网站| 国产成人精品一区二区三区免费| 色呦呦视频在线| 高清一区二区三区四区五区| 在线观看免费不卡av| 乱熟女高潮一区二区在线| 牛牛澡牛牛爽一区二区| 三级毛片在线看| 91香蕉国产视频| 久久综合99re88久久爱| 欧美视频一区二区三区四区| 自拍偷拍亚洲一区| 欧美性猛交xxxx黑人| 久久精品综合视频| 精品国产乱码久久久久久蜜坠欲下| av无码精品一区二区三区| 欧美激情无毛| 综合精品久久| 金瓶狂野欧美性猛交xxxx| 免费h在线看| 熟女少妇在线视频播放| 日韩黄在线观看| 亚洲福利免费| 日韩脚交footjobhdboots| 中文在线免费二区三区| 在线观看一区二区三区四区| 国产一级片av| 精品国产精品久久一区免费式| 久久久国内精品| 中文字幕免费高清视频| 国产成人精品免高潮费视频| 国模大尺度一区二区三区| 91成人在线| 伊人色综合久久久天天蜜桃| 久久福利影院| 成人免费在线视频网| 国产一区二区三区电影在线观看| 水蜜桃在线视频| 2022国产麻豆剧果冻传媒剧情| 国产69精品久久久久9| 里番在线观看网站| 亚洲一区二区三区高清视频| 成人高清在线观看免费| 妺妺窝人体色WWW精品| 亚洲午夜电影网| 免费在线国产视频| 91无套直看片红桃在线观看| 香蕉亚洲视频| 美洲精品一卡2卡三卡4卡四卡| 国产欧美日韩在线一区二区| 欧美一级片免费| 亚洲人成网www| 国产福利不卡视频| 国精产品久拍自产在线网站| 樱花视频在线免费观看| 亚洲国产精品无码观看久久| 好吊妞视频一区二区三区| 欧美一区二区视频在线观看| 亚洲最新在线视频| 国内一卡2卡三卡四卡在线| 日韩av黄色在线观看| 亚洲综合中文网| 少妇性饥渴无码a区免费| 美女网站免费看| 999免费视频| 欧美色18zzzzxxxxx| 国产精品99久久久久久董美香| 精品一区电影国产| 欧美xx视频| 天天插天天操天天射| 国产玉足榨精视频在线观看| 欧美变态挠脚心| 欧美日韩视频免费在线观看| wwwwxxxx日本| 欧美三级午夜理伦三级中视频| 黄色一级影院| 久久国产乱子精品免费女| 天天操天天射天天舔| 亚洲成人精品av| 丝袜美腿美女被狂躁在线观看| 福利一区二区免费视频| 十大黄色软件免费看| 精品一区二区三区日本| 国产一区二区久久精品| 57pao国产一区二区| 免费极品av一视觉盛宴| 野花视频免费在线观看| 无码人妻丰满熟妇区bbbbxxxx| 国产福利91精品一区二区| 91精品国产91久久久久游泳池| 人妻少妇偷人精品久久久任期| 精品国内片67194| 成人免费观看在线观看| av在线播放国产| 成人免费视频视频在线观看免费| 国产精品高潮呻吟久久久久| 美女少妇一区二区| 91国产视频在线播放| av一本久道久久波多野结衣| 国产性网软件大全| 国产一级黄色大片| 久热中文字幕精品视频在线| 麻豆传媒mv| 日本一区二区三区播放| 国产调教在线观看| 天堂久久一区二区三区| 中文字幕av在线| 亚洲美腿欧美偷拍| 天堂网在线播放| 欧美大片免费高清观看| 99这里只有精品| 国模雨婷捆绑高清在线| 色综合天天综合给合国产| 2025韩国理伦片在线观看| 少妇毛片一区二区三区| www.啪啪.com| 欧美成人首页| 久久九九有精品国产23| 亚洲小说欧美另类婷婷| 日韩精品久久久久久| 亚洲第一视频在线| 免费亚洲精品视频| 黄色电影免费在线观看| 欧美性受极品xxxx喷水| 国产成人精品a视频一区| 一区二区三区在线视频播放| 久久99久久99小草精品免视看| 成人蜜桃视频网站网址| av网址在线看| 亚洲人体视频| 好久没做在线观看| 激情综合色综合久久综合| 国产大学生校花援交在线播放| 久久这里只有精品免费| 在线播放日韩专区| 亚洲图片欧美| 久久夜色精品亚洲噜噜国产mv| 免费看片91| 久久品道一品道久久精品| 成人福利视频导航| 亚洲v精品v日韩v欧美v专区| av网站在线播放| 99九九视频| 波多野结衣视频在线看| 全网国产福利在线播放| 久久中文字幕在线观看| 在线视频观看一区| 在线观看中文字幕不卡| 9999热视频在线观看| av一区在线观看| 一本本久综合久久爱| 黄色动漫在线免费看| 亚洲小视频在线播放| 在线看a视频| 日本在线视频一区二区三区| 亚洲影院色在线观看免费| 亚洲天堂日韩av| h无码动漫在线观看| av在线免费在线观看| 狂野欧美激情性xxxx| 4438成人网| 一个人看的www片免费高清视频| 免费不卡中文字幕视频| 自拍视频在线观看一区二区| 在线视频一区二区| 护士精品一区二区三区| 一本色道久久综合亚洲精品婷婷| 2018天天弄| 91国产视频在线播放| 天天干夜夜艹| 中文字幕免费在线观看视频| 精品人妻伦一区二区三区久久| 一区二区高清视频| 日韩精品中文字| 五月婷婷伊人网| 中文字幕不卡在线视频极品| 4438x成人网全国最大| xfplay每日更新av资源| 午夜激情视频在线观看| ㊣最新国产の精品bt7086| 亚洲国产精彩中文乱码av| 久久久国产精彩视频美女艺术照福利| 男人的天堂在线视频免费观看| 国产欧美高清在线| 国产精品高潮呻吟久久久久| 四虎影视1304t| 先锋影音网一区二区| 亚洲av无码一区二区三区性色| 97精品人妻一区二区三区香蕉| 国产精品综合av一区二区国产馆| 伊伊综合在线| 悠悠资源网久久精品| 亚洲图片在线视频| 一区二区三区.www| 欧美极品少妇与黑人| 亚洲精品国产一区黑色丝袜| 国产日本韩国在线播放| 欧美日韩国产一区二区在线观看| 欧美.日韩.国产.一区.二区| 一区二区在线观看av| 精品国产污污免费网站入口| 不卡av电影在线观看| 色老头在线观看| 欧美a级一区二区| 久久久久亚洲视频| 欧美三级特黄| 貂蝉被到爽流白浆在线观看| 欧美丝袜丝交足nylons图片| 亚洲精品日韩综合观看成人91| 4388成人网| 国产免费一区二区三区网站免费|