JSTL 自定义标签

3 篇文章 0 订阅
2 篇文章 0 订阅

TagSupport类的生命周期具体执行过程

 

 (1)jsp容器中在解释jsp页面时,如果遇到自定义标签的开始标记,将利用"标签处理类"建立一个"标签处理对象".在建立"标签处理对象"的过程中,jsp容器会回调setPageContext()方法,然后根据自定义标签的属性值来初始化"标签处理对象"的属性.

 

(2)接着jsp容器会运行doStartTag()方法内的程序代码,然后根据此方法的返回值决定后续动作,如果返回SKIP_BODY常量,表示要求jsp容器忽略此标签主体内容;如果返回EVAL_BODY_INCLUDE常量,表示要求jsp容器执行标签主体的内容,并将结果包括在相应中,然后再运行doAfterBody()方法.

 

(3)如果doAfterBody()方法传回EVAL_BODY_INCLUDE常量,表示要求jsp容器再次执行标签主体的内容;如果返回SKIP_BODY常量,jsp容器建会运行doEndTag()方法.

 

(4)最后,jsp容器会运行doEndTag()方法内的程序代码,并根据此方法的返回值决定后续动作----如果返回SKIP_BODY常量,jsp容器会忽略自定义标签以后的jsp内容;如果返回EVAL_BODY_INCLUDE常量,jsp容器会运行自定义标签以后的jsp内容. 

 

 

 

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

pageContext

page内置对象介绍

        page对象有点类似于Java编程中的this指针,就是指当前JSP页面本身。pagejava.lang.Object类的对象。page对象在实际开发过程中并不经常使用。

page对象常用方法

        getClass():返回当时Object的类。
        hashCode()
:返回此时Object的哈希代码。
        toString()
:将此时的Object类转换成字符串。
        equals(Object ob)
:比较此对象是否与指定的对象相等。
        copy(Object ob)
:将此对象复制到指定的对象中。
        clone()
:对此对象进行克隆。

二、

out内置对象介绍

         out对象用来在页面输出数据,是在JSP开发过程中使用得最频繁的对象,然而使用起来也是为简便的。

out对象常用方法

         print():在页面中打印出字符串信息,不换行。
         print()
:在页面中打印出字符串信息,并且换行。
         clear()
:清除缓冲区中尚存的内容。
         clearBuffer()
:清除当前缓冲区中尚存的内容。
         flush()
:清除数据流。
         getBufferSize()
:返回缓冲区的内存大小,单位大小为字节流。如果不进行缓冲区的设置,大小为0
         getRemaining()
:返回缓冲区还剩下多少字节数可以使用。
         isAutoFlush()
:检查当前缓冲区是设置为自动清空,还是满了就抛也异常。
         close()
:关闭输出流。
三、

exception内置对象介绍

         exception内置对象用来处理页面出现的异常错误,它是java.lang.Throwable类的一个对象。在JSP开发过程中,通常是在某个页面(比如A.jsp)中加入page指令的errorPage属性来将其指向一个专门处理异常错误的页面(doError.jsp)。如果这个错误处理页面doError.jsp已经封装了从A.jsp页面收到的错误信息,并且错误处理页面doError.jsp含有的isErrorpage属性设置为true,则这个错误处理页面可以调用exception内置对象来处理这个些错误信息。

exception对象常用方法

        getMessage()getLocalizedMessage():这两种方法分别返回exception对象的异常消息字符串和本地化语言的异常错误。
        printStackTrace()
:显示异常的栈跟踪轨迹。
        toString()
:返回关于异常错误的简单消息描述。
        fillInStackTrace()
:重写异常错误的栈执行轨迹。

四、

config内置对象介绍

        config内置对象是ServletConfig类的一个实例,用于JSP引擎在Servlet初始化时,通过config向它(Servlet)传递信息。这种信息可以是属性名/值匹配的参数,也可以是通过ServletContext对象传递的服务器的有关信息。一般在JSP开发中行少用到config内置对象,只有在编写Servlet时若需要重载Servletinit()方法时才会用到。

config对象常用方法

        getServletContext():返回一个含有服务器相关信息的ServletContext对象。
        getIntParameter(String name)
:返回初始化参数的值。
        getIntParameterNames()
:返回包含了Servlet初始化所需要的所有参数,返回类型是枚举型。
五、

pageContext内置对象介绍

        pageContext内置对象是一个比较特殊的对象,它相当于页面中所有其他对象功能的最大集成者,即使用它可以访问到本页面中所有其他的对象,例如前面已经描述的requestresponseoutpage对象等。由于在JSPrequestresponse等对象本来就可以通过直接调用方法使用,所以pageContext对象在实际JSP开发中很少使用到。
pageContext
对象常用方法

         getRequest():返回当前页面中的request对象。
         getResponse()
:返回当前页面中的response对象。
         getSession()
:返回当前页面中的session对象。
         getServletContext()
:返回当前页面中的application对象。
         getPage()
:返回当前页面中的page对象。
         getOut()
:返回当前页面中的out对象。
         getException()
:返回当前页面中的exception对象。
         getServletConfig()
:返回当前页面中的config对象。
        www.2cto.com
         setAttribute(String name)
:给指定的属性名设置属性值。
         getAttribute(String naem)
:根据属性名找到相应的属性值。
         setAttribute(String name,Object obj, int scope)
:在给定的范围内设置相应的属性值。
         getAttribute(String name, intscope)
:在给的范围内获取相应的属性值。
         findAttribute(String name)
:寻找一个属性并返回,如果查找不到则返回null
         removeAttribute(String name)
:通过属性名删除掉某个属性。
         removeAttribute(String name,int scope)
:在指定的某个范围里删除某个属性。
         getAttributeScope(String namescope)
:返回某属性的作用域。
         getAttributeNamesInScope(intscope)
:返回指定范围内的所有属性名的枚举。
        
          release()
:释放pageContext占据的所有资料。
          forward(StringrelativeURLpath)
:使用当前页面重导到另一个页面。
          include(StringrelativeURLpath)
:使用当前位置包含的另一个页面。

==============================   As  e Example =======================================

/*
 * Copyright 1999,2004 The Apache Software Foundation.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *      http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.apache.taglibs.input;


import java.util.Map;


import javax.servlet.http.HttpServletResponse;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspTagException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport;


/**
 * 
 * This class implements the <input:form> tag, which presents an <form
 * ... /> element.
 * 
 * @version 0.90
 * @author Shawn Bayern
 * @author Lance Lavandowska
 * @author Karl von Randow
 */


public class Form extends TagSupport {


    private String name; // name of the form


    private String action; // form action


    private Map attributes; // attributes of the <input> element


    private String attributesText; // attributes of the <input> element as text


    private String beanId; // bean id to get default values from


    private String method; // form method


    private String encType; // form encType


    public void release() {
        super.release();
        name = null;
        action = null;
        attributes = null;
        attributesText = null;
        beanId = null;
        method = null;
        encType = null;
    }


    public int doStartTag() throws JspException {
        try {
            // get what we need from the page
            JspWriter out = pageContext.getOut();


            // start building up the tag
            out.print("<form method=\"");
            out.print(method != null ? method : "get");
            out.print("\" action=\"");
            if (action != null) {
                if (action.length() > 0
                        && pageContext.getResponse() instanceof HttpServletResponse) {
                    out.print(((HttpServletResponse) pageContext.getResponse())
                            .encodeURL(action));
                } else {
                    out.print(action);
                }
            }
            out.print("\" ");
            if (name != null) {
                out.print("name=\"" + Util.quote(name) + "\" ");
            }
            if (encType != null) {
                out.print("enctype=\"" + encType + "\" ");
            }


            // include any attributes we've got here
            Util.printAttributes(out, attributes);
            if (attributesText != null) {
                out.print(attributesText + " ");
            }


            // end the tag
            out.print(">");


        } catch (Exception ex) {
            throw new JspTagException(ex.getMessage());
        }
        return EVAL_BODY_INCLUDE;
    }


    public int doEndTag() throws JspException {
        try {
            JspWriter out = pageContext.getOut();
            out.print("</form>");
        } catch (Exception ex) {
            throw new JspTagException(ex.getMessage());
        }
        return EVAL_PAGE;
    }


    public void setName(String x) {
        name = x;
    }


    public void setAttributes(Map x) {
        attributes = x;
    }


    public void setAttributesText(String x) {
        attributesText = x;
    }


    public void setBean(String x) {
        beanId = x;
    }


    public String getBean() {
        return beanId;
    }


    public void setAction(String x) {
        action = x;
    }


    public void setMethod(String x) {
        method = x;
    }


    public void setEncType(String x) {
        encType = x;
    }


    /**
     * Getter for property name.
     * 
     * @return Value of property name.
     */
    public String getName() {
        return name;
    }


    /**
     * Getter for property method.
     * 
     * @return Value of property method.
     */
    public String getMethod() {
        return method;
    }


    /**
     * Getter for property encType.
     * 
     * @return Value of property encType.
     */
    public String getEncType() {
        return encType;
    }


    /**
     * Getter for property attributesText.
     * 
     * @return Value of property attributesText.
     */
    public String getAttributesText() {
        return attributesText;
    }


    /**
     * Getter for property attributes.
     * 
     * @return Value of property attributes.
     */
    public Map getAttributes() {
        return attributes;
    }


    /**
     * Getter for property action.
     * 
     * @return Value of property action.
     */
    public String getAction() {
        return action;
    }


}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值