⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 6_jsp学习笔记.txt

📁 偶去年8月份到11月份
💻 TXT
📖 第 1 页 / 共 2 页
字号:
    3) 方法:getMessage()/printStackTrace()/toString()
 
5.  默认对象之session
答:1) HttpSession的一个实例, 用于在一个session中保持状态
    2) 方法:getAttribute()
             setAttribute()
             removeAttribute()
             getAttributeNames()

6.  默认对象之application
答:1) ServletContext一个实例,用于保持application的状态
    2) 方法:getAttribute()
             setAttribute()
             getInitParameter()
             getServletInfo()
    3) application的作用域比session大得多,一个session和一个client联系, 而application保持了用于所有客户端的状态

2004-10-8      星期四      晴                                              

自定义标签库(上)

1.  什么是自定义标签
答:1) 用户自定义的Java语言元素, 实质是运行一个或者两个接口的JavaBean;
    2) 可以非常机密地和JSP的表示逻辑联系在一起,又具有和普通JavaBean相同的业务逻辑处理能力;
    2) 当一个JSP页面转变为servlet时,其间的用户自定义标签转化为操作一个称为标签hander的对象;
    3) 可操作默认对象,处理表单数据,访问数据库以及其它企业服务;                 

2.  自定义标签库的特点
答:1) 通过调用页面传递参数实现定制;
    2) 访问所有对JSP页面可能的对象;
    3) 修改调用页面生成的响应;
    4) 自定义标签间可相互通信;
    5) 在同一个JSP页面中通过标签嵌套,可实现复杂交互。

3.  如何使用自定义标签库
答:1) 声明标签库
    2) 使标签库执行对Web应用程序可用

4.  声明标签库
答:1) 使用taglib指令声明标签库
    2) 语法:<%@taglib uri="URI" prefix="pre" %>
       注意:a. uri属性可以是绝对的,也可以是相对URL,该URL指向标记库描述符(TLD)文件;
             b. uri属性也可以是一个并不存在的URL,该URL为web.xml文件中将标记库描述符(TLD)文件的绝对URL到本地系统的一个映射;
    3) 范例:<%@taglib uri="/WEB-INF/template.tld" prefix="test" %>
             <%@taglib uri="http://java.sun.com/jstl/core" prefix="core" %>       

5.  使标签库执行可用
答:方式一:在WEB-INF/classes目录下部署标记处理程序类;
    方式二:将标记处理程序类打包成jar文件并置于WEB-INF/lib目录。

6.  几种典型的标签(疑问:可以有带主体而没有属性的标签么?)
答:1) 不带属性和主体的简单标签:<mytaglibs:SomeTag/>;
    2) 不带主体但有属性的标签:<mytaglibs:SomeTag user="TonyDeng"/>;
    3) 带有主体和属性的标签:<mytaglibs:SomeTag user="TonyDeng">
                             ...// 标签体
                             </mytaglibs:SomeTag>;
    注意:a. 属性列于start tag中,它是在标记库描述符(TLD)文件中指定,服务于标记库的自定义行为;
          b. 标签体位于start tag和end tag间,可以是任何合法的JSP内容或者标签;

7.  定义标签
答:1) 开发实现tag的类(tag handler);
    2) 编辑标记库描述符(TLD)文件;
    3) 在web.xml中为标记库描述符(TLD)文件的绝对URL建立一个映射(该步骤可选);

8.  标记库描述符(TLD)文件
答:1) 一个描述标记库的XML文件;
    2) 内容开始是整个库的描述,然后是tag的描述;
    3) 标记库描述符(TLD)文件用于Web Container确认tag以及JSP页面发展工具;

9.  实现tag的类(tag handler)
答:1) 是一些在引用了标签的JSP页面执行期间被Web Container调用以求自定义标签值的对象;
    2) 必须实现Tag, SimpleTag和BodyTag之一;
    3) 可以继承TagSupport和BodyTagSupport之一。

10. 标签库的接口和类的继承关系
答:表现形式一:
    a. 接口的继承关系:
       ☉ interface javax.servlet.jsp.tagext.JspTag
          ☉ interface javax.servlet.jsp.tagext.SimpleTag
          ☉ interface javax.servlet.jsp.tagext.Tag
             ☉ interface javax.servlet.jsp.tagext.IterationTag
             ☉ interface javax.servlet.jsp.tagext.BodyTag
    b. 类的继承关系:
       ☉ class javax.servlet.jsp.tagext.TagSupport (implements javax.servlet.jsp.tagext.IterationTag, java.io.Serializable) 
          ☉ class javax.servlet.jsp.tagext.BodyTagSupport (implements javax.servlet.jsp.tagext.BodyTag) 
       ☉ class javax.servlet.jsp.tagext.SimpleTagSupport (implements javax.servlet.jsp.tagext.SimpleTag) 
    表现形式二:
                  (Interface)
                    JspTag
              |ˉˉˉˉˉˉˉˉ|    
         (Interface)      (Interface)
             Tag           SimpleTag ←--SimpleTagSupport
              |                            
         (Interface)  
         IterationTag←--TagSupport
              ↑                ↑
              |                 |
         (Interface)            |
           BodyTag   ←--BodyTagSupport

    标签接口方法一览表

                  (Interface)
                    JspTag(没有方法)
              |ˉˉˉˉˉˉˉˉ|    
         (Interface)      (Interface)
             Tag           SimpleTag
              |         (int doEndTag()、int doStartTag()、Tag getParent()、void release()、void setPageContext(PageContext pc)、void setParent(Tag t))
         (Interface)  
         IterationTag   (int doAfterBody())
 
              |     
         (Interface)
           BodyTag      (void doInitBody()、void setBodyContent(BodyContent b))



2004-10-9      星期四      晴                                              

自定义标签库(中)

11. 一个Tag处理程序类必须实现的方法
答:标签处理程序类型            方法
    Simple                      doStartTag, doEndTag, release
    Attributes                  doStartTag, doEndTag, set/getAttribute...release
    Body,No Itrative and        doStartTag, doEndTag, release
    Evaluation  
    Body, Itrative Evaluation   doStartTag, doAterTag, doEndTag, release
    Body, Interaction           doStartTag, doEndTag, release, doInitbody, doAfterBody

12. 简单的标签处理程序类
答:1) 必须实现Tag接口的doStartTag()和doEndTag()方法;
    2) 因为不存在Body,doStartTag()方法必须返回SKIP_BODY;
    3) 如其余页面要执行,doEndTag()方法返回EVAL_PAGE, 否则返回SKIP_PAGE;
    4) 对于每一个标签属性,你必须在标签处理程序类里定义一个特性以及get和set方法以一致于JavaBeans体系惯例

13. 带Body的自定义标签
答:1) 必须实现Tag接口的doStartTag()和doEndTag()方法;
    2) 可以实现IterationTag接口的doAfterBody()方法;
    3) 可以实现BodyTag接口的doInitBody和setBodyContent方法;
    4) doStartTag方法可以返回SKIP_BODY、EVAL_BODY_INCLUDE、或者EVAL_BODY_BUFFERED(当你想使用BodyContent);
    5) doEndTag方法可以返回SKIP_PAGE或EVAL_PAGE;
    6) doAfterBody方法可以返回EVAL_BODY_AGAIN, SKIP_BODY;

14. 定义脚本变量的标签(迭代的标签库)
答:1) 定义脚本标签的二个步骤:
       a. 在标记库描述符(TLD)文件中列明脚本变量;
       b. 定义标签扩展信息类(TEI)并且在TLD文件中包括这个类元素(tei-class);
    2) 变量必须在标签处理程序类中使用pageContext.setAttribute()方法设置;
    3) 标签扩展信息类(TEI)必须继承TagExtraInfo以及覆盖getVariableInfo()方法;
    4) 变量的范围可以是AT_BEGIN, NESTED, AT_END(标签扩展信息类(TEI)的VariableInfo中定义)之一;

15. 脚本变量的有效性
答:变量     |   有效性                    
    ---------------------------------------
    NESTED   | 标签中的参数在starttag到endtag之间是有效的
    AT_BEGIN | 标签中的参数在标签的开始到JSP页面结束是有效的
    AT_END   | 标签中的参数在标签的结束到JSP页面结束是有效的

2004-10-10     星期四      晴 

16.  Tag接口的方法
答:interface javax.servlet.jsp.tagext.Tag
    ------------------------------------------------------
    +EVAL_BODY_INCLUDE:int
    +EVAL_PAGE:int
    +SKIP_BODY:int
    +SKIP_PAGE:int
    ------------------------------------------------------
    +release():void
    +getParent():javax.servlet.jsp.tagext.Tag
    +setParent(javax.servlet.jsp.tagext.Tag):void
    +doEndTag():int
    +doStartTag():int
    +setPageContext(javax.servlet.jsp.PageContext):void

17.  Tag的生命周期
答:1) setPageContext(javax.servlet.jsp.PageContext):void
    2) setParent(javax.servlet.jsp.tagext.Tag):void
    3) //setAttribute:void
    4) doStartTag():int
    5) doEndTag():int
    6) release():void

18.  BodyTag和Tag接口的关系
答:interface javax.servlet.jsp.tagext.BodyTag      -->     interface javax.servlet.jsp.tagext.Tag
    ------------------------------------------
    +EVAL_BODY_AGAIN:int
    ------------------------------------------
    +doInitBody():void
    +setBodyContent(javax.servlet.jsp.tagext.BodyContext):void
    +doAfterBody():int

19.  BodyTag的处理过程
答:1) setPageContext(javax.servlet.jsp.PageContext):void
    2) setParent(javax.servlet.jsp.tagext.Tag):void
    3) //setParent()
    4) doStartTag():int
    5) setBodyContent(javax.servlet.jsp.tagext.BodyContent):void
    6) doInitBody():void
    7) doAfterBody():int
    8) doEndTag():int
    9) release():void

20.  SimpleTag接口的方法
答:javax.servlet.jsp.tagext.SimpleTag
    ------------------------------------------
    +doTag():void
    +getParent():JspTag
    +setJspBody(JspFragment jspBody):void 
    +setJspContext(JspContext pc):void
    +setParent(JspTag parent):void

21.  SimpleTage接口的生命周期
答:1) new:
       每次遇到标签,容器构造一个SimpleTag的实例,这个构造方法没有参数。和红典的标签一样,SimpleTag不能缓冲,故不能重用,每次都需要构造新的实例。
    2) setJspContext()、setParent(): 只有这个标签在另一个标签之内时,才调用setParent()方法;
    3) 设置属性:调用每个属性的setter方法;
    4) setJspBody();
    5) doTag(): 所有标签的逻辑、迭代和Body计算,都在这个方法中;
    6) return

2004-10-11     星期五      晴 



  



  
       
         
       

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -