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

首頁 > 編程 > JSP > 正文

菜鳥學jsp(三)

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

  雖然jsp中使用scriplet及javaBean可以完成很多動態操作如:訪問數據庫,實現E-mail,BBS等等。誠然直接使用scriplet在jsp中插入java代碼是方便快潔的,但是這也給日后的維護帶來了一定的困難。做為一種替代方案jsp提供了一種叫做定制標(custom tag)的機制,使用這種機制你可以按你的需要擴展jsp,用自己定義的標記封裝常用的功能,使jsp頁面更加簡潔,更易開發與維護。

  一旦你定制好了你的標記,你就可以象使用SUN給你提供的標記一樣使用它們開發了。其語法是一樣的都是<PRefix:tag></prefix:tag>

  既然有這么多達的好處我們就來看看到底什么是custom tag吧。
  
  按SUN的定義custom tag就是由用戶定義的jsp標記(is a user-defined JSP language element)。
并且有如下一些特點:
  1。由請求頁面處取得參數。
  2??梢栽L問一切jsp頁可以訪問的對象。
  3??梢孕薷恼埱箜撁嫔傻膔esponse。
  4??梢曰ハ嘟换?。你可以在使一個tag建立一個JavaBean,而在另一個tag中使用它。
  5??苫ハ嗲短?。(就是<Html><head></head></html>的意思)

  下面我們就從一個簡單的例子入手一步步的了解jsp tag.

  要使用tag,你必須首先完成以下兩件事:
  1。聲明一個標記庫(tag library)。
  2。實現聲明的標記庫。

   要聲明標記庫先要建立一個tld(tag library descriptor)文件,這是一個xml文件,但是以tld為擴展名,比如database.tld。建立好的tld文件一般放在WEB-INF(在前兩次的文章中提到過這個目錄)目錄下。

  好了現在我們在WEB-INF下來建立一個tld文件,比如就是database.tld。然后將下面代碼copy到tld文件的開頭:
  
  
 <?xml version="1.0" encoding="ISO-8859-1" ?>
   <!DOCTYPE taglib
        PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
       "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">


                        code 3

  以上就是每個tld文件在最開始必不可少的東東了。至于web-jsptaglibrary_1_2.dtd這個文件你可以在tomcat4或更新的版本中在%CATALINA_HOME%/common/lib的servlet.jar中找到(有興趣的話可以打開看看,如果沒有不看也罷),具體位置是 servlet.jar/javax/servlet/jsp/resources,并且在這個文件夾下你還會找到一個老的版本:web-jsptaglibrary_1_1.dtd。但是SUN的文檔建議盡可能的使用新的版本。(以后所有出現的tld文件如不聲明都假定在開頭以添加了上面的code 3)。

*****************************************************************************
(在這我要特別說明我在學習過程中還發現了
  另一種開頭:
 <?xml version="1.0" encoding="ISO-8859-1" ?>
  <!DOCTYPE taglib
        PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
"http://java.sun.com/j2ee/dtd/web-jsptaglibrary_1_2.dtd">
  如果用以上做開頭編譯后會告訴你找不到外部文件http file://java.sun.com/j2ee/dtd/
  web-jsptaglibrary_1_2.dtd,我想可能是上述URI用于企業版里,而我沒有安裝j2ee所造   成的。如果我說的不對請大蝦們指正,我的E-mail:flyhelleryuanwei@yahoo.com.cn。

******************************************************************************

  有了以上的基礎我們可以向剛剛建立的文檔中添加內容了。


  <taglib>
    <tlib-version>1.0</tlib-version>
    <jsp-version>1.2</jsp-version>
    <uri>heller.database</uri>
    <description>
    A simple tab library for the database
    </description>
    ... ...
  </taglib>

                               code 4
  在code4中taglib是tld文檔的根(root)元素(只能有一個)。tlib-version指明標記庫的版本,同樣jsp-version指明了jsp的版本。uri給出了一個唯一的URI來定位標記庫。description是對標記庫的一個簡短描述。(還有一些可選項感興趣的人可以參考SUN的文檔http://java.sun.com/webservices/docs/1.0/tutorial/doc/JSPTags.html)。

    在code4中有省略號的地方可以插入一個或多個tag元素。比如我們加入如下:
  

     ... ...
    <tag>
       <name>simtag</name>
       <tag-class> temp.simtag </tag-class>
       <body-content> JSP </body-content>
     </tag>
     ... ...

                                           code 5

  以上在tag元素中的name為你定義的tag指定了一個唯一的名字,tag-class是用來指出處理此標記的class名。body-content指出在<prefix:tag></prefix:tag>之間允許出現的內容類型。一般來說用JSP就可以了。因為這個選項并不影響處理tag的class對tag內容的處理,所以其實只是在使用某些開發工具是描述才會有用。
  以下就是完成后的tld文檔:

 <?xml version="1.0" encoding="ISO-8859-1" ?>
  <!DOCTYPE taglib
        PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
"http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">

  <taglib>
    <tlib-version>1.0</tlib-version>
    <jsp-version>1.2</jsp-version>
    <uri>heller.database</uri>
    <description>
     A simple tab library for the database
    </description>

    <tag>
      <name>simtag</name>
      <tag-class> temp.simtag </tag-class>
      <body-content> JSP </body-content>
    </tag>
</taglib>

下面我們來實現在以上定義的temp.simtag類。


package temp;

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

public class simtag extends TagSupport {
   private static int guestNum = 0;

   public int doStartTag() throws JspException {
    try {
       guestNum++;
       pageContext.getOut().println("Hello!");
       pageContext.getOut().println("You are the " + guestNum + "st guset!");
     } catch (Exception ex) {
       throw new JspTagException("SimpleTag: " +
         ex.getMessage());
     }
     return SKIP_BODY;
   }

   public int doEndTag() {
     return EVAL_PAGE;
   }
}

                                      code 5

  也許你以下子看不太懂,沒關系,我們先來看看結果。編譯上代碼,而后在第一偏文章中提到的WEB-INF文件夾中建立一個名為classes的文件夾,而后將編譯生成的temp文件夾copy到classes文件夾下,在將以下代碼添加到在第一篇文章中建立的web.xml改寫成如下:

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

<!DOCTYPE web-app
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web application 2.3//EN"
    "http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>

<taglib>
  <taglib-uri>/database.tld</taglib-uri>
  <taglib-location>
    /WEB-INF/database.tld
  </taglib-location>
</taglib>

</web-app>
                               code 6

  這是為了使服務器知道如何由taglib-uri定義的邏輯名找到你的database.tld(記得嗎?你將它放在了WEB-INF下)。以后你就可以用“/database.tld”這個邏輯名引用database.tld了。

好了馬上就大工告成了,將你原來寫的hello.jsp改寫成如下:

 <%@ taglib uri="/database.tld" prefix="database" %>
  <%@ page contentType="text/html; charset=GBK" %>
  <%@ page import="java.io.*" %>

  <html>
  <head>
  <title>
  hello
  </title>
  </head>
  <body bgcolor="#00ffff">
  <h1>
  <database:simtag>
  </database:simtag>
  </h1>
  </body>
  </html>
                                  code 7

OK!現在你的home目錄應是以下的狀態:

  
home
  
   jsp
   hello.jsp
  
   WEB-INF
       classes
            temp
              simtag.class
       web.xml
       database.tld

  好了,run你的tomcat(方法見第一篇文章),在127.0.0.1:8080/home/jsp/hello.jsp你就可以看到成果了。
你會發現其結果與第二篇文章中最后完成的jsp是一樣的,只是頁面清爽了一些。在下一偏文章中我們將進一步學習custom tag,到時code5中代碼的意思也就顯而易見了。

bill-轉自:csdn

(出處:http://www.49028c.com)



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日本最新高清不卡中文字幕| 日韩极品精品视频免费观看| 国内精品免费午夜毛片| 国产精品露脸自拍| 久久视频精品在线| 日韩精品视频免费专区在线播放| 欧美一级在线播放| 亚洲欧美制服中文字幕| 成人激情春色网| 色综合久久精品亚洲国产| 超碰精品一区二区三区乱码| 日韩黄色高清视频| 欧美猛交ⅹxxx乱大交视频| 国产色婷婷国产综合在线理论片a| 亚洲人成网站色ww在线| 97人人做人人爱| 精品国产电影一区| 亚洲女在线观看| 在线观看久久久久久| 在线观看国产精品日韩av| 亚洲国产欧美日韩精品| 91精品国产色综合久久不卡98| 亚洲四色影视在线观看| 精品国产一区二区三区久久狼5月| 国产欧美日韩免费| 欧美精品在线视频观看| 欧美日本国产在线| 免费91麻豆精品国产自产在线观看| 91久久精品美女高潮| 色av吧综合网| 精品国产欧美成人夜夜嗨| 久久夜精品va视频免费观看| 国产va免费精品高清在线| 日本午夜精品理论片a级appf发布| 色综合视频一区中文字幕| 成人精品一区二区三区| 欧美日韩裸体免费视频| 国产精品1234| 国产一区二区欧美日韩| 亚洲一区二区精品| 欧美精品国产精品日韩精品| 97精品国产97久久久久久免费| 成人在线免费观看视视频| 色婷婷av一区二区三区在线观看| 亚洲自拍偷拍福利| 久久精品国产2020观看福利| 亚洲精品狠狠操| 亚洲午夜国产成人av电影男同| 久久精品国产亚洲一区二区| 欧美日韩激情视频| 久久视频在线看| 亚洲free性xxxx护士hd| www.亚洲男人天堂| 亚洲xxx自由成熟| 最近2019中文字幕一页二页| 国产精品热视频| 清纯唯美亚洲综合| 久久亚洲国产精品| www.久久撸.com| 亚洲性生活视频在线观看| 国产免费久久av| 久久久久久久久亚洲| 91精品国产综合久久香蕉的用户体验| 97成人精品区在线播放| 91成人国产在线观看| 国产精品视频久久久| 日韩免费观看在线观看| 91免费视频网站| 韩国欧美亚洲国产| www.日韩视频| 91久久久久久久久久久| 亚洲女人天堂视频| 欧美亚洲免费电影| 日韩毛片在线看| 国产成人精品免高潮费视频| 欧美日韩国产色视频| 欧美一级大片在线观看| 亚洲国产成人精品一区二区| 亚洲欧美日韩中文在线| 精品视频在线播放免| 国产99视频精品免视看7| 国产精品一区电影| 亚洲日本欧美中文幕| 精品小视频在线| 欧美国产日本高清在线| 91综合免费在线| 精品丝袜一区二区三区| 亚洲国产成人精品久久久国产成人一区| 国产中文字幕91| 欧美黄色成人网| 亚洲精品不卡在线| 久久综合免费视频影院| 成人动漫网站在线观看| 色噜噜狠狠狠综合曰曰曰88av| 成人美女免费网站视频| 国产丝袜一区视频在线观看| 国产福利精品av综合导导航| 深夜福利日韩在线看| 成人黄色短视频在线观看| 亚洲精品美女在线| 国产精品久久在线观看| 欧美电影在线观看| 国产97在线亚洲| 久久精品亚洲热| 国产精品人人做人人爽| 久久久成人的性感天堂| 成人夜晚看av| 国产精品毛片a∨一区二区三区|国| 久操成人在线视频| 精品国产欧美一区二区三区成人| 日韩精品免费视频| 91av视频在线播放| 国产精品女人久久久久久| 亚洲综合日韩在线| 久久久久久久久久久91| 欧美久久久精品| 亚洲精品一区中文| 久久久久亚洲精品成人网小说| 国产精品久久久久久久久借妻| 亚洲自拍小视频| 亚洲97在线观看| 欧美综合国产精品久久丁香| 久久久99久久精品女同性| 欧美成人中文字幕| 91sa在线看| 欧美激情videoshd| 日本一区二区三区在线播放| 一区二区成人精品| 欧美激情一级二级| 亚洲色图校园春色| 国产主播在线一区| 国产精品视频在线播放| 日本高清视频一区| 一区二区三区黄色| 亚洲日本欧美中文幕| 精品亚洲一区二区三区四区五区| 国产69久久精品成人看| 久久久久日韩精品久久久男男| 久久精品国产精品亚洲| 欧美高清不卡在线| 福利微拍一区二区| 这里只有精品视频在线| 精品免费在线观看| 久久中文久久字幕| 国产有码在线一区二区视频| 成人h猎奇视频网站| 亚洲国产99精品国自产| 日韩精品中文字幕视频在线| 一本色道久久综合狠狠躁篇的优点| 欧美一级黑人aaaaaaa做受| 青青在线视频一区二区三区| 成人国产精品久久久久久亚洲| 国产精品999999| 日韩在线视频播放| 国产精品久久久久久av福利软件| 91成人在线观看国产| 国产成人在线播放| 国产精品在线看| 亚洲精品乱码久久久久久按摩观| 亚洲最大福利网| 成人xvideos免费视频| 欧美日韩aaaa| 久久中文字幕一区| 欧美激情亚洲一区|