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

首頁 > 編程 > JSP > 正文

使用自定義標簽實現JSP頁面和代碼的分離

2024-09-05 00:19:12
字體:
來源:轉載
供稿:網友

test.jsp
<!doctype html public "-//w3c//dtd html 4.01 transitional//en">
<html>
  <head>
    <title>my jsp 'test.jsp' starting page</title>
  </head>
 
  <body>
    this is my jsp page. <br>
    date : <%= new java.util.date().tostring() %> <br>
    file : <input value="<%= request.getservletpath() %>" />
  </body>
</html>

為了將這個這個test.jsp改成自定義標簽方法,我們分別使用簡單標簽和內容標簽兩種不同的方式實現。

1. 簡單標簽

由于我們需要輸出兩個內容(日期和文件名),因此我們為標簽創建一個參數。具體代碼:

demotag.java
package com.mycompany;

import java.util.date;

import javax.servlet.http.*;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;

public class demotag extends tagsupport {
 
  public int dostarttag() throws jspexception {   
    try {
      httpservletrequest request = (httpservletrequest)pagecontext.getrequest();
      jspwriter out = pagecontext.getout();     
     
      if (parameter.comparetoignorecase("filename") == 0)
        out.print(request.getservletpath());
      else
        out.print(new date());
     
    } catch (java.io.ioexception e) {
      throw new jsptagexception(e.getmessage());
    }
   
    return skip_body;
  }
 
  private string parameter = "date";
 
  public void setparameter(string parameter) {
    this.parameter = parameter;
  }
 
  public string getparameter() {
    return parameter;
  }
}

接下來,我們創建標簽文件 mytaglib.tld。標簽文件其實只是一個xml格式的說明文件,內容也很簡單。

mytaglib.tld
<?xml version="1.0" encoding="iso-8859-1"?>
<taglib>
<tlib-version>1.0</tlib-version>
<jsp-version>1.2</jsp-version>

<tag>
  <name>demo</name>
  <tag-class>com.mycompany.demotag</tag-class>
  <body-content>empty</body-content>
  <attribute>
    <name>parameter</name>
    <required>false</required>
    <rtexprvalue>true</rtexprvalue>
  </attribute>
</tag>

</taglib>

在這個標簽文件中,我們將我們創建的標簽取名 demo,并聲明了類型和參數(parameter)。將該文件保存在 /web-inf 下面。
當然,我們還需要將我們自定義的標簽添加到 web.xml 中,否則還是無法使用。

web.xml
<?xml version="1.0" encoding="utf-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" version="2.4" xsi:schemalocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

  <jsp-config>
    <taglib>
      <taglib-uri>/web-inf/mytaglib</taglib-uri>
      <taglib-location>/web-inf/mytaglib.tld</taglib-location>
    </taglib>
  </jsp-config>

</web-app>

你可能在別處看到過類似的聲明,只是沒有外面的 jsp-config,但是我們使用的是dtd 2.4,如果不加,eclipse 會提示出錯。

到此為止,我們的自定義標簽算是創建完畢。接下來,我們可以開始改寫那個jsp文件來分離代碼了。

test.jsp
<!doctype html public "-//w3c//dtd html 4.01 transitional//en">
<%@taglib uri="/web-inf/mytaglib" prefix="mytag"%>
<html>
  <head>
    <title>my jsp 'test.jsp' starting page</title>
  </head>
 
  <body>
    this is my jsp page. <br>
    date : <mytag:demo parameter="date" /><br>
    file : <mytag:demo parameter="filename" />
  </body>
</html>

上面這些想必你已經很熟悉,我就不做多說了。

2. 內容標簽

創建過程和上面大抵相同,只是程序文件和配置內容有些差異。

demotag2.java
package com.mycompany;

import java.io.ioexception;
import java.util.date;

import javax.servlet.http.*;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;

public class demotag2 extends bodytagsupport {
 
  public int dostarttag() throws jsptagexception {   
    return eval_body_buffered;
  }
 
  public int doendtag() throws jsptagexception {
    string body = this.getbodycontent().getstring();
    httpservletrequest request = (httpservletrequest)pagecontext.getrequest();
   
    body = body.replace("$date", new date().tostring());
    body = body.replace("$filename", request.getservletpath());
   
    try {
      pagecontext.getout().print(body);
    }
    catch (ioexception e) {
      throw new jsptagexception(e.getmessage());
    }
   
    return skip_body;
  }
}

我們將新的標簽 demotag2 加入到上面的標簽文件中。

mytaglib.tld
<?xml version="1.0" encoding="iso-8859-1"?>
<taglib>
<tlib-version>1.0</tlib-version>
<jsp-version>1.2</jsp-version>

<tag>
  <name>demo</name>
  <tag-class>com.mycompany.demotag</tag-class>
  <body-content>empty</body-content>
  <attribute>
    <name>parameter</name>
    <required>false</required>
    <rtexprvalue>true</rtexprvalue>
  </attribute>
</tag>

<tag>
  <name>demo2</name>
  <tag-class>com.mycompany.demotag2</tag-class>
  <body-content>jsp</body-content>
</tag>

</taglib>

web.xml 文件無需修改。

看看同時使用兩種標簽的test.jsp效果。

test.jsp
<!doctype html public "-//w3c//dtd html 4.01 transitional//en">
<%@taglib uri="/web-inf/mytaglib" prefix="mytag"%>
<html>
  <head>
    <title>my jsp 'test.jsp' starting page</title>
  </head>
 
  <body>
    this is my jsp page. <br>
    date : <mytag:demo parameter="date" /><br>
    file : <mytag:demo parameter="filename" />

    <hr>

    <mytag:demo2>
    date: $date<br>
    file: $filename
    </mytag:demo2>
  </body>
</html>

至此,兩種標簽方式都完成。
本文并沒有就相關技術細節做出說明,建議您看看sun有關jsp自定義標簽的官方文檔。

無論是用自定義標簽,還是使用javabean,都沒有太大的區別,各人或者團隊可以根據自己的習慣使用。如果需要在獨立類庫中封裝一些供頁面使用的單元,自定義標簽應該更適合些。不過現在的ide環境(myeclipse)在編寫自定義標簽的時候可能有些不太舒服的情況,界面開發人員使用javabean方式可能更方便些,免得莫名其妙的提示干擾您的工作。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美午夜片欧美片在线观看| 91深夜福利视频| 伊人久久久久久久久久久久久| 中文字幕在线日韩| 欧美美女操人视频| 国产欧洲精品视频| 国产精品69久久久久| 九九精品在线观看| 神马国产精品影院av| 国产精品白丝av嫩草影院| 欧美丰满少妇xxxx| 91大神福利视频在线| 日韩av男人的天堂| 精品久久久久久久中文字幕| 夜夜嗨av一区二区三区四区| 日韩欧美在线国产| 精品国产一区二区三区在线观看| 午夜精品在线视频| 亚洲欧美精品中文字幕在线| 欧美极品第一页| 2019精品视频| 日韩成人在线视频网站| 中文字幕欧美日韩va免费视频| 一区二区成人精品| 欧美亚洲成人网| 精品久久久91| 精品免费在线视频| 日韩av中文在线| 蜜月aⅴ免费一区二区三区| 国产综合在线观看视频| 欧美福利视频网站| 久久久精品久久久久| 亚洲欧洲在线播放| 久久影院中文字幕| 欧美疯狂xxxx大交乱88av| 91免费观看网站| 日韩经典中文字幕在线观看| 亚洲美女精品久久| 国产精品亚洲视频在线观看| 性色av一区二区三区红粉影视| 亚洲女人被黑人巨大进入al| 91日本视频在线| 狠狠躁夜夜躁久久躁别揉| 国内外成人免费激情在线视频| 国产免费一区二区三区在线观看| 久久久精品视频成人| 国产婷婷成人久久av免费高清| 另类少妇人与禽zozz0性伦| 欧美国产欧美亚洲国产日韩mv天天看完整| 亚洲自拍另类欧美丝袜| 国产亚洲美女精品久久久| 国产精品久久久久福利| 欧美午夜精品久久久久久浪潮| 久久久精品免费视频| 亚洲欧美日韩另类| 亚洲色图av在线| 欧美日韩国产成人| 欧美精品videossex性护士| 中文字幕日韩欧美精品在线观看| 亚洲香蕉成人av网站在线观看| www.xxxx欧美| 狠狠久久五月精品中文字幕| 91久久久久久久久久久久久| 川上优av一区二区线观看| 亚洲精品国产精品自产a区红杏吧| 欧美激情亚洲一区| 久久久免费在线观看| 91亚洲精华国产精华| 欧美华人在线视频| 综合激情国产一区| 欧美国产一区二区三区| 日韩小视频在线观看| 亚洲国产小视频在线观看| 亚洲乱码av中文一区二区| 亚洲欧美国产精品专区久久| 国产精品爱久久久久久久| 4438全国亚洲精品在线观看视频| 国产精品爽黄69| 91在线免费看网站| 亚洲精品色婷婷福利天堂| 欧美丰满老妇厨房牲生活| 欧美日韩午夜视频在线观看| 在线观看不卡av| 亚洲a在线播放| 欧洲成人在线视频| 成人自拍性视频| 68精品国产免费久久久久久婷婷| 欧美激情国内偷拍| 国产成人亚洲综合青青| 日韩在线观看精品| 久久6免费高清热精品| 国产精品va在线播放我和闺蜜| 最近免费中文字幕视频2019| 国产精品男女猛烈高潮激情| 视频在线一区二区| 亚洲精品99久久久久中文字幕| 在线视频日本亚洲性| 成人福利免费观看| 亚洲福利视频网站| 欧美激情亚洲一区| 国产精品丝袜白浆摸在线| 久久精品国产96久久久香蕉| 91产国在线观看动作片喷水| 福利一区福利二区微拍刺激| 久久久国产成人精品| 91免费国产网站| 国产精品扒开腿做爽爽爽的视频| 日韩在线观看免费网站| 国产精品香蕉国产| 日本免费一区二区三区视频观看| 日韩高清电影免费观看完整版| 成人欧美一区二区三区在线| 日韩在线播放av| 国产91在线高潮白浆在线观看| 亚洲视频欧洲视频| 久久久精品视频成人| 亚洲午夜av久久乱码| 成人免费xxxxx在线观看| 欧美刺激性大交免费视频| 欧美激情2020午夜免费观看| 国产精品视频久久| 欧美大片免费观看在线观看网站推荐| 欧美老女人xx| 成人免费看黄网站| 日韩电影免费在线观看中文字幕| 欧美一区二区三区艳史| 欧美极品少妇与黑人| 亚洲人成免费电影| 欧美电影免费在线观看| 国产精品久久久久久久一区探花| 成人有码在线视频| 国产精品吹潮在线观看| 亚洲永久在线观看| 久久人人爽人人爽爽久久| 久久婷婷国产麻豆91天堂| 国产欧美在线视频| 国产91精品高潮白浆喷水| 亚洲韩国欧洲国产日产av| 欧美人在线视频| 国产亚洲欧洲黄色| 亚洲国产女人aaa毛片在线| 日韩久久免费视频| 亚洲在线视频观看| 91探花福利精品国产自产在线| 国产精品视频自拍| 亚洲精美色品网站| 日韩欧美国产中文字幕| 国产精品久久久久久久久久尿| 欧美视频二区36p| 亚洲xxx自由成熟| 日韩激情av在线免费观看| 欧美精品aaa| 欧美国产极速在线| 国产一区二区三区高清在线观看| 91精品久久久久久久久久久久久久| 成人网页在线免费观看| 国模gogo一区二区大胆私拍| 在线精品91av| 91久久精品美女高潮| 欧美日韩中文在线观看| 久久人人97超碰精品888| 欧美性xxxxxxxxx| 欧美成人免费va影院高清| 国产精品亚洲一区二区三区|