`

自定义标签问答

阅读更多
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

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
   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
分享到:
评论

相关推荐

    jsp自定义标签库问答集锦.

    ### jsp自定义标签库知识点详解 #### 一、什么是jsp自定义标签? 1. **概念**:JSP 自定义标签是一种将复杂的功能封装成一个简单的标签的方式,它允许开发者创建可重用的代码组件,这些组件可以在 JSP 页面中像...

    自定义的标签(自己备份)

    4. **知识库**:在知识库或问答社区,如Stack Overflow,自定义标签帮助用户提问和回答问题。 四、自定义标签的实现 实现自定义标签通常涉及以下几个步骤: 1. **设计标签系统**:考虑标签的结构,如是否允许多级...

    仿百度知道(问答系统).rar

    【标签】"问答" 指出这个系统的主打功能是问答互动,这包括了用户提问、其他用户回答、问题分类、搜索功能等。一个完整的问答系统通常会包含用户积分、等级体系、举报机制等,以促进社区的健康发展。 【文件名解析...

    可自定义词库和单词朗读的背单词的小工具

    复习机制则是巩固记忆的关键,该工具很可能会通过问答、填空等形式进行复习,帮助用户检查学习进度并加强记忆。 结合标签“MBA 背单词 语音”,我们可以推断这个小工具特别适合正在准备MBA课程或者商业英语学习者。...

    毕设&课程作业_基于langchain和chatglm6b构建的智能问答系统,支持自定义语料.zip

    【标签】中的“系统”表明这是一个完整的软件系统,而非单一的算法或组件。“智能”强调了系统具备某种程度的人工智能特性,能够理解、处理和生成人类语言。“毕设”则提醒我们这是一项学术性质的工作,可能是为了...

    问答系统php开源

    3. **分类与标签**:问题和答案可以被归类到不同的主题或标签下,便于用户按需查找。 4. **投票与评分**:用户可以对问题和答案进行投票,表示赞同或反对,以显示其质量。 5. **评论与讨论**:除了答案外,用户还...

    2024悬赏问答PHP网站源码

    8. **SEO优化**:为了提高搜索引擎可见性,问答系统需要进行SEO(搜索引擎优化)处理,如设置元标签、URL结构优化、生成Sitemap等,以帮助搜索引擎更好地理解和索引网站内容。 9. **安全防护**:考虑到网站可能面临...

    whatsnsphp开源问答系统v3.8

    whatsns问答系统是一款可以根据自身业务需求快速搭建垂直化领域的php开源问答系统,内置强大的采集功能,支持云存储,图片水印设置,全文检索,站内行为监控,短信注册和通知,伪静态URL自定义,熊掌号功能,百度...

    MF00253-ASP.NET医生健康问答咨询平台源码.zip

    (2)自定义静态标签。(3)静态页面生成。 4、系统管理:(1)网站参数管理。 (2)模型管理。(可以生成板块,对应字段后台展示不同控件,并有相应维护功能,可以根据模型  及模型下栏目创建标签,将标签放入...

    OASK问答系统 问答平台 仿百度知道 天涯问答源码下载

    对搜索引擎的优化:支持Keywords和Description页面头部标签的自定义 支持 JS 代码的问题调用 提供与动网、oblog、动易实现用户整合的标准接口 支持好友管理和站内短信 支持无限级问题分类 完善的用户中心 部分...

    380问答模板php源码

    模板的设计理念在于简洁易用,使用户能快速上手并进行自定义开发。其主要包含以下几个核心组件: 1. **用户系统**:登录、注册、个人中心等功能,实现用户身份验证和管理。 2. **问题模块**:用户可以提出问题,...

    faq.rar_FAQ_jsp faq_jsp 问答_jsp代码_问答

    - 虽然没有具体提及,但JSP中可以使用自定义标签库(Tag Library)来提高代码的可读性和复用性。例如,可以创建一个标签用于显示问答条目,另一个标签用于处理用户提交的问题。 7. **安全性**: - 为了确保数据...

    仿百度asp问答系统源码

    【标签】"仿百度"提示我们这个问答系统的界面设计和用户体验可能会参照百度知道,包括但不限于页面布局、功能模块、交互方式等方面。用户可以期待一个熟悉的使用环境,同时也能体验到与百度知道类似的问答流程。 在...

    C#医生健康科普问答咨询平台(前端+后台)源码带手机端数据库 SQL2008源码类型 WebForm

    (2)自定义静态标签。(3)静态页面生成。 4、系统管理:(1)网站参数管理。 (2)模型管理。(可以生成板块,对应字段后台展示不同控件,并有相应维护功能,可以根据模型 及模型下栏目创建标签,将标签放入html...

    高仿百度知乎问答系统 ASP ACCESS 问题生成静态.rar

    支持问题的附件上传 对搜索引擎的优化:支持Keywords和Description页面头部标签的自定义 支持 JS 代码的问题调用 支持好友管理和站内短信 支持无限级问题分类 完善的用户中心 部分页面采用ajax技术,减少页面刷新...

    PHP框架CI开发的内容付费问答解惑系统+seo优化

    PHP框架CI开发的内容付费问答解惑系统+seo优化,内置强大的采集功能,支持云存储,图片水印设置,全文检索,站内行为监控,短信注册和通知,伪静态URL自定义,熊掌号功能,百度结构化地图(标签,问题,文章,分类,...

    问答系统v3.7非常不错的一款ask2在线问答解惑系统网站源码更新日志详细,可以自己搭建起来看看.txt

    - **用户自定义标签**:用户可以根据问题的特性添加自定义标签,方便其他用户通过标签快速查找相关问题。 - **消息推送机制**:新增消息推送功能,包括问题被回答、评论、点赞等多种场景下的实时通知。 - **优化搜索...

    高仿百度知乎问答系统

    支持问题的附件上传 对搜索引擎的优化:支持Keywords和Description页面头部标签的自定义 支持 JS 代码的问题调用 支持好友管理和站内短信 支持无限级问题分类 完善的用户中心 部分页面采用ajax技术,减少页面刷新...

Global site tag (gtag.js) - Google Analytics