国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > 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。可以訪問一切jsp頁可以訪問的對象。
  3。可以修改請求頁面生成的response。
  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://m.survivalescaperooms.com)



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 威信县| 蓬莱市| 保亭| 调兵山市| 城市| 威海市| 长阳| 察哈| 东港市| 河东区| 乌拉特后旗| 格尔木市| 黄大仙区| 揭西县| 靖江市| 肥乡县| 洛扎县| 施秉县| 全南县| 阿勒泰市| 沅江市| 铁岭市| 简阳市| 静乐县| 仁怀市| 华坪县| 陕西省| 涿州市| 新闻| 怀仁县| 新蔡县| 隆回县| 灵山县| 沂源县| 垦利县| 温宿县| 防城港市| 彝良县| 河曲县| 玉山县| 定州市|