亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JSP > 正文

JSP自定義標簽試驗

2019-11-18 16:41:23
字體:
來源:轉載
供稿:網友

一、概述
       jsp中有一塊重要的技術:自定義標簽(Custom Tag),最近這幾天在學習Struts的時候發現Struts中使用了很多自定義標簽,如html、bean等。所以我就做了個簡單的試驗,學習一下這種技術。

       首先介紹一下這種技術吧!

1.優點:
取代了JSP中的java程序,并且可以重復使用,方便不熟悉Java編程的網頁設計人員。

2.開發流程:
(1)       編寫JSP,在JSP中使用自定義標簽。

(2)       在web.xml中指定JSP中使用的標簽的.tld(標簽庫描述文件)文件的位置。

(3)       .tld文件中指定標簽使用的類。

3. 自定義標簽的分類:
(1)       簡單標簽:如< mytag:helloworld/>

(2)       帶屬性標簽:如<imytag:checkinput dbname = “<myBean.getDBName()>”/>

(3)       帶標簽體的標簽:

在自定義標簽的起始和結束標簽之間的部分為標簽體(Body)。Body的內容可以是JSP中的標準標簽,也可以是HTML、腳本語言或其他的自定義標簽。

<mytag:checkinput dbname = “<myBean.getDBName()>”>

      <mytag:log message=”Table Name”>

<mytag:checkinput />

(4)       可以被Script使用的標簽:

定義了id和type屬性的標簽可以被標簽后面的Scriptlet使用。

<mytag:connection id = “oraDB” type = “DataSource” name = “Oracle”>

<%oraDB.getConnection(); %>

 

4.接口及其他
實際上,自定義標簽的處理類實現了Tag Handler對象。JSP技術在javax.servlet.jsp.tagext中提供了多個Tag Handler接口,JSP1.2中定義了Tag、BodyTag、IterationTag接口,在JSP2.0中新增了SimpleTag接口。JSP還提供了上述接口的實現類TagSupport、BodyTagSupport和SimpleTagSupport(SimpleTagSupport只在JSP2.0中才有)。BodyTagSupport實現了BodyTag、Tag和IterationTag接口。

 

接口及其方法

Tag接口
 方法
 
SimpleTag
 dotage
 
Tag
 doStartTag,doEndTag,release
 
IterationTag
 doStartTag,doAfterTag,release
 
BodyTag
 doStartTag,doEndTag,release,doInitBody,doAfterBody
 

 

下表引自Sun的JSP在線教程。

Tag Handler Methods
 
Tag Handler Type
 Methods
 
Simple
 doStartTag, doEndTag, release
 
Attributes
 doStartTag, doEndTag, set/getAttribute1...N, release
 
Body, Evaluation and No Interaction
 doStartTag, doEndTag, release
 
Body, Iterative Evaluation
 doStartTag, doAfterBody, doEndTag, release
 
Body, Interaction
 doStartTag, doEndTag, release, doInitBody, doAfterBody, release
 

 

下表中的EVAL是evaluate的縮寫,意思是:評價, 估計, 求...的值,在下列的返回值中的意思是執行。

返回值
 意義
 
SKIP_BODY
 表示不用處理標簽體,直接調用doEndTag()方法。
 
SKIP_PAGE
 忽略標簽后面的JSP內容。
 
EVAL_PAGE
 處理標簽后,繼續處理JSP后面的內容。
 
EVAL_BODY_BUFFERED
 表示需要處理標簽體。
 
EVAL_BODY_INCLUDE
 表示需要處理標簽體,但繞過setBodyContent()和doInitBody()方法
 
EVAL_BODY_AGAIN
 對標簽體循環處理。
 

 

具體用法可以查看其他參考資料。

Sun的Java教程相關部分:http://java.sun.com/webservices/docs/1.0/tutorial/doc/JSPTags.html

 

 

二、實驗
1.試驗介紹
下面的實驗就是基于上述開發流程開發的。

(1)在JSP中指定taglib的uri:<%@ taglib uri="/helloworld"

(2)在web.xml中配置tag-location:

<taglib>

            <taglib-uri>/helloworld</taglib-uri>

            <taglib-location>/WEB-INF/helloworld.tld</taglib-location>

       </taglib>

       (3)在tag-location中指定的.tld文件中定義實現標簽的處理類:

   <short-name>mytag</short-name>

   <tag>

      <name>helloworld</name>

      <tag-class>mytag.HelloWorldTag</tag-class>

      <body-content>empty</body-content>

  </tag>

(4)執行處理類mytag.HelloWorldTag的doStartTag和doEndTag方法,然后將結果輸入到JSP中,和JSP中的內容一起輸出。實際上自定義標簽和JSP中的其他的內容被WebServer一起編譯成servlet。

 

 

 


2. 完成后的試驗的目錄結構
應用myjsp放在Tomcat的webapps下。

myjsp中包含J2EE標準目錄結構:WEB-INF和hello.jsp。WEB-INF中包含子目錄classes和lib及web.xml,tld文件可以放在WEB-INF下,也可以放在WEB-INF的子目錄下。

 

 

 


3.開始實驗
3.1.編寫JSP
 

< !—hello.jsp的源碼 -- >

<%@ page contentType="text/html; charset=GBK" %>

<%@ taglib uri="/helloworld" prefix="mytag" %>

<html>

<head>

<title>

jsp1

</title>

</head>

<body bgcolor="#ffffc0">

<h1>

下面顯示的是自定義標簽中的內容

</h1>

 

<br><br>

<mytag:helloworld></mytag:helloworld>

 

<br>

 

</form>

</body>

</html>

 

3.2.編寫web.xml
 

< !—web.xml的源碼 -- >

<?xml version="1.0" encoding="UTF-8"?>

<!-- edited with XMLSPY v5 rel. 4 U (http://www.xmlspy.com) by Williams (501) -->

<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web application 2.3//EN"

"

<web-app>

<taglib>

        <taglib-uri>/helloworld</taglib-uri>

        <taglib-location>/WEB-INF/helloworld.tld</taglib-location>

</taglib>

</web-app>

 

3.3  編寫tld文件
 

< !—helloworld.tld的源碼 -- >

<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"

   "

<taglib>

   <tlib-version>1.0</tlib-version>

   <jsp-version>1.2</jsp-version>

   <short-name>mytag</short-name>

   <tag>

       <name>helloworld</name>

       <tag-class>mytag.HelloWorldTag</tag-class>

       <body-content>empty</body-content>

   </tag>

</taglib>

 

3.4  編寫標簽實現類
 

< !—標簽的實現類HelloWorldTag.class的源碼 -- >

package mytag;   

 

import java.io.IOException;

import javax.servlet.jsp.*;

import javax.servlet.jsp.tagext.*;

 

public class HelloWorldTag extends TagSupport {    

  public HelloWorldTag() {

  }

  public int doStartTag() throws JspTagException{

    return EVAL_BODY_INCLUDE;

  }

  public int doEndTag() throws JspTagException{

    try {

      pageContext.getOut().write("Hello World");

    }

    catch (IOException ex) {

      throw new JspTagException("錯誤");

    }

    return EVAL_PAGE;

  }

}

 

 

3.5  執行效果
部署到Tomcat的WebApps目錄下,啟動Tomcat,輸入:
http://localhost:8080/myjsp/hello.jsp

 

“Hello World”就是我們定義的標簽部分的處理類輸出的結果。

3.6  注意:
這個試驗我做了2天,總是報錯,弄得很是灰心,開始時以為tld文件或web.xml文件配置不正確,但怎么也找不到原因。

今晚我終于找到原因了,是因為.class文件一定要放在classes文件夾中,我放到了lib中。

.jar或servlet文件要放在lib目錄中,而.class要放在classes目錄中,如果要放到lib目錄中,必須把mytag中的文件打包成.jar文件,然后把mytag.jar放到lib目錄中。

 

希望你不要犯我犯過的這個錯誤!^_^

有時間我會再寫一篇介紹Struts詳細處理流程的筆記。

這篇筆記整理的的確是JSP1.2的自定義標簽,在JSP2.0中xml文件的格式變了,其他的就不太了解了!但我想變化應該不會太大,另外標準是向下兼容的,感興趣的朋友可以看看,這是我的學習筆記,可能會對別人有些用處,所以貼出來獻丑了!


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲电影免费观看高清完整版在线| 亚洲国产97在线精品一区| 91精品综合久久久久久五月天| 久热精品视频在线| 91精品啪在线观看麻豆免费| 欧美性极品xxxx做受| 亚洲国产高清高潮精品美女| 欧美黄色三级网站| 中文字幕欧美专区| 亚洲国产欧美日韩精品| 亚洲国产精品热久久| 青青久久av北条麻妃海外网| 欧美激情视频免费观看| 亲爱的老师9免费观看全集电视剧| 国产美女主播一区| 成人午夜小视频| 久久精品青青大伊人av| 亚洲欧美国产日韩中文字幕| 日韩有码在线电影| 两个人的视频www国产精品| 91高清视频在线免费观看| 亚洲国产成人久久综合一区| 中文字幕综合一区| 亚洲欧洲一区二区三区在线观看| www欧美xxxx| 欧美性受xxxx黑人猛交| 中文字幕日韩在线观看| 精品成人久久av| 91精品国产九九九久久久亚洲| 欧美在线观看网址综合| 国产精品欧美一区二区三区奶水| 国产在线精品一区免费香蕉| 欧美日韩国产丝袜另类| 欧美性xxxxx极品娇小| 欧美俄罗斯乱妇| 粉嫩老牛aⅴ一区二区三区| 欧美日韩亚洲一区二区| 亚洲成人性视频| 亚洲精品久久久久久久久久久久久| 一区二区欧美日韩视频| 国产精品视频一区国模私拍| 超碰日本道色综合久久综合| 色偷偷综合社区| 91中文在线观看| 成人444kkkk在线观看| 国产免费一区二区三区在线能观看| 亚洲第一av网站| 欧美贵妇videos办公室| 国产亚洲成精品久久| 日韩精品视频免费在线观看| 91日本视频在线| 国产日韩在线看| 日韩电影大全免费观看2023年上| 日韩色av导航| 精品国产一区二区三区久久久| 久久久视频精品| 91在线无精精品一区二区| 日韩电影在线观看免费| 久久伊人精品天天| 日韩亚洲综合在线| 在线看国产精品| 欧美最近摘花xxxx摘花| 国产精品久久久久久久久影视| 日韩中文在线中文网三级| 亚洲女人天堂网| 日韩av电影在线播放| 国产精品精品久久久久久| 这里精品视频免费| 久久久99免费视频| 亚洲成av人乱码色午夜| 91精品视频免费看| 色伦专区97中文字幕| 欧美尺度大的性做爰视频| 成人免费自拍视频| 欧美成人在线免费视频| y97精品国产97久久久久久| 国产视频综合在线| 日韩欧美精品网址| 国产啪精品视频网站| 欧美中文字幕精品| 一个人www欧美| 亚洲一区二区久久久久久久| 欧美一区二区影院| 精品国产成人在线| 91免费的视频在线播放| 欧美激情欧美激情| 色久欧美在线视频观看| 成人欧美一区二区三区在线| 欧美国产日本高清在线| 欧美日韩在线观看视频小说| 精品无码久久久久久国产| 亚洲色图狂野欧美| 精品久久久久久久久久久久久| 欧美日韩在线第一页| 日韩久久免费视频| 欧美另类老女人| 日韩免费看的电影电视剧大全| 精品国产乱码久久久久久虫虫漫画| 日韩福利视频在线观看| 久久香蕉精品香蕉| 中文字幕亚洲一区二区三区五十路| 成人性生交大片免费看视频直播| www.日韩视频| 亚洲色无码播放| 久久精品国产成人精品| 久久九九热免费视频| 国产小视频91| 国产精品免费一区二区三区都可以| 国产成人精品日本亚洲| 亚洲人成啪啪网站| 国产精品美女av| 欧美激情国内偷拍| 久久久久久久色| 6080yy精品一区二区三区| 欧美一区亚洲一区| 欧美一区二区三区艳史| 成人午夜在线影院| 亚洲成人黄色网址| 欧美网站在线观看| 国产精品视频网站| 亚洲国语精品自产拍在线观看| 一本色道久久综合亚洲精品小说| 欧洲中文字幕国产精品| 亚洲高清福利视频| 在线免费观看羞羞视频一区二区| 亚洲电影免费观看高清完整版在线观看| 日韩免费在线看| 欧美一级淫片aaaaaaa视频| 欧美日韩国产精品一区二区三区四区| 国产日韩欧美夫妻视频在线观看| 欧美日韩国产中文字幕| 91亚洲人电影| 日韩欧美在线免费观看| 亚洲国产精品一区二区三区| 亚洲成人久久久| 欧美日韩亚洲国产一区| 日韩在线不卡视频| 色噜噜狠狠狠综合曰曰曰| 免费不卡欧美自拍视频| 性日韩欧美在线视频| 亚洲国产精品大全| 在线日韩中文字幕| 日韩高清免费在线| 黑人巨大精品欧美一区二区一视频| 欧美成人激情在线| 欧美激情视频网站| 日韩乱码在线视频| 成人激情综合网| 孩xxxx性bbbb欧美| 2020久久国产精品| 国产精品91久久久| 日韩中文字幕视频| 国产乱人伦真实精品视频| 亚洲国产成人av在线| 久久综合久久八八| 亚洲高清色综合| 在线观看视频99| 久久影视电视剧凤归四时歌| 国产这里只有精品| 不卡伊人av在线播放| 欧美资源在线观看| 亚洲韩国欧洲国产日产av| 欧美性理论片在线观看片免费| 91久久精品国产91久久性色|