TagLib

TagLib--1- -

复习一下TagLib

一、概要:

1JSP标签技术始于JSP1.1

2、作用:代码复用;JSP页面简洁

3四个步骤:
     A
、创建实现标签功能的JAVA类(BeanServlet
     B
、创建标签库的描述文件
     C
web.xml中添加标签库说明
     D
JSP页面中添加标签库说明,及使用标签

4、标签可以访问的数据范围类型:application;session;request;page.
     ------------------------[
主要是为了说明什么时候用JavaBeanTagLib]

二、TagLib常用知识点

1JSP Tag API----标签处理类必须是此API[只两种,且任一种即可]的子类
    -----javax.servlet.jsp.TagSupport
    -----javax.servlet.jsp.BodyTagSupport

2TagSupport主要方法[8]及重要属性[2]
     1)
主要方法:
       
Servlet容器处理TAG开关相关的方法:
        A
doStartTag()---Servlet容器遇到自定义标签的起始标志时调用该方法
        B
doEndTag()----Servlet容器遇到自定义标签的结束结志时调用该方法
        
       
与标签处理类中值相关的方法:
        C
setValue(String k,Object o)---标签处理类中设置key/value
        D
getValue(String k)--------------在标签处理类中根据参数key返回相应的
value
        E
removeValue(String k)---------删除标签处理类中的相应的
key/value
        
       
Servlet容器相关,设置页面上下文相关的方法:

        F
setPageContext(PageContext pc)--设置PageContext对象,该方法由Servlet容器
                       在调用doStartTagdoEndTag方法前调用
       
       
与标签嵌套相关的方法:
        G
setParent(Tag t)----------------设置嵌套了当前标签的上层标签的处理类,该方法由
                                                        Servlet
容器在调用doStartTagdoEndTag方法前调用
        H
getParent()---------------------- 返回嵌套了当前标签的上层标签的处理类

   2)重要属性:
        A
parent---代表了嵌套了当前标签的上层标签的处理类
        B
pageContext----代表了Web应用中的javax.servlet.jsp.PageContext对象
       
两点说明:
        C
Servlet容器在调用doStartTag()或doEndTag()方法前,会先调用
             setPageContext()
setParent()方法,调置pageContextparent.
        D
、在doStartTag()doEndTag()方法中可以通过getParent()方法获取上层标签的处理类;

            
TagSupport类中定义了protected类型的pageContext成员变量,因此在标签处理类
            
中可以直接访问pageContext变量。

3pageContext类的几点说明:
     A
pageContext类提供了保存及访问WEB应用共享数据的方法:
          ---public void setAttribute(String name,Object value,int scope)
          ---public Object getAttribute(String name,int scope)
     B
scope---用来指定数据的作用范围。可选值如下:
          PageContext.PAGE_SCOPE
          PageContext.REQUEST_SCOPE
          PageContext. SESSION_SCOPE
          PageContext.APPLICATION_SCOPE
   
如:setAttribute("userName","dxm",PageContext.SESSION_SCOPE);

 

二、TagLib常用知识点  

4javax.servlet.jsp.TagSupport的两个基础方法的重申:
       ---public int doStartTag() throws JspException
       ---public int doEndTag() throws JspException
    1)doStartTag()
方法:
     A
、当servlet容器遇到自定义标签的起始标志,就会调用doStartTag()方法。
     B
doStartTag()方法会返回一个整数值,用来决定程序的后续流程。它有两个可选值:
          ----Tag.SKIP_BODY
                
表示忽略掉标签之间的内容
          ----Tag.EVAL_BODY_INCLUDE
               
表示标签之间的肉容要正常执行
        
如:
                  ... ...
                 Dxm,Hello!
                  ... ...
     
       
若的doStartTag()方法返回Tag.SKIP_BODY,“Dxm,Hello!”字样即不会出现在页
       
面;若返回Tag.EVAL_BODY_INCLUDE,则页面上显示出"Dxm,Hello!"字样。

   2)doEndTag()方法:
   A
、当servlet容器遇到自定义标签的结束标志,就会自动调用doEndTag()方法
   B
doEndTag()方法也会返回一个整数值,用来决定程序的后续流程。它也有两个可选值:
        ---Tag.SKIP_PAGE
            
表示立刻停止执行JSP网页,网页上未处理的静态内容和JSP程序均被忽略,任何已有的输出
            
内容立刻返回到客户的浏览器上。
        ---Tag.EVAL_PAGE
            
表示按正常的流程继续执行JSP网页。

5、用户自定义标签属性:
A
、标签中可以包含自定义的属性,如:


... ...

B、但标签处理类中应将这个属性做为成员变量来使用,并给出赋值及取值的方法。如:
      private String username;
      public setUsername(String value){
           this.username=value;
     }
     public  String getUsername(){
           return username;
     }

三、一个简单的范例
1
、创建hello标签:定义一个名为mytaglib的标签库,它包含一个简单的hello标签,这个标签能够将
     JSP
页面中所有的解析为字符串"hello".
     A
hello标签的处理类:

          public int doEndTag() throws JspException{
                 try{
                          pageContext.getOut().print("hello");
                      }catch(Exception e){
                          throw new JspTagException(e.getMessage());
                      }
                      return EVAL_PAGE;
          }
     B
、创建标签库描述文件:.tld文件存放位置;标签库名,标签名,属性,对应的处理类。
         
     C
web.xml中引入标签库:
         
               ... ...
               
                         /mytaglib
                         /WEB-INF/tld/mytaglib.tld
               
               ... ...
         
     D
JSP页面中引入标签库说明,并使用标签:
           
          taglib
指令中,prefix属性值用作指代mytaglib标签库。

TagLib---3- -

                                      

四、另一个标签
1
创建一个能替换helloapp应用中JSP网页的静态文本的标签,这个标签名为message,它放在mytaglib标签库中。
2
hellowithtag2.jsp文件中使用message标签的代码如下:
    (A)TagSupport类中定义了session成员变量,直接调用它的getAttribute()方法即可。

(B)在标签处理类TagSupport类中定义了pageContext成员变量,先通过它的getSession()方法获得当前的HttpSession对象,再调用HttpSession对象的getAttribute()方法。


   当客户访问hello.jsp网页时,message标签的处理类会根据属性key的值从一个文本文件中找到与key匹配的字符串。假定这个字符串为Hello,然后将这个字符串输出到网页上。
3
、创建包含JSP网页静太文本的文件
   messageresource.properties:
  
hello.title=Title of hello.jsp
   hello.hello=hello

4
、由DispatcherServlet类的init方法负责从静态文本中读取静态文本,然后把它们装载到Properties对象中,最后再把这个Properties对象作为属性保存到ServletContext中。
5
DispatcherServlet类的init方法:
    public void init(ServletConfig config) throws ServletException{
          super.init(config);
          Properties ps=news Properties();
          SevletContext context=config.getServletContext();
          InputStream in=context.getResourceAsStream("/WEB-INF/messageresource");
          ps.load(in);
          in.close();

         context.setAttribute("ps",ps);
    }

6、为保证在WEB应用启动时就加载DispathcherServlet,应该在web.xml中配置这个Servlet时的设置load-on-startup属性:
   
  
     dispacher
     mypack.DspacherServlet
     1
  
  

        dispatcher

        mypack.DispatcherServlet

        1

     7、创建MessageTag标签处理类
      MessageTag
包含一个成员变量key ,它与message标签的属性key 对应,在MessageTag
     
中定义了getKeysetKey 方法。
     private String key=null;
     public String getKey(){

           return this.key;

  }

    public void setKey(String key)

          this.key=key;

}

 MessageTagdoEndTag方法中,首先从pageContext中读取包含静态文本的Properties对象:
 Properties ps=(Properties)pageContext.getAttribute("ps",pageContext.APPLACTION_SCOPE);

然后从Properties对象中读取key对应的静态文本,最后输出该文本:
String message=null;
message=(String)ps.get(key);
pageContext.getOut.print(message);

8mytaglib库中定义message标签:

    message
    mypack.MessageTag
    empty
    produce message by key
   
     key
     true
    
后记:
        1/
问题:在标签处理类中,如何访问session范围内的共享数据? 
           选项:
       (B)在标签处理类TagSupport类中定义了pageContext成员变量,先通过它的
            getSession()方法获得当前的HttpSession对象,再调用HttpSession
            象的getAttribute()方法。

       备注: 所有内容源于如下网址,在此表示感谢。
直接去看,非常详尽。。。。。

http://www.javathinker.org/train/alesson/javaweb/07_taglib.files/frame.htm

 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值