带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;
定义脚本变量的标签(迭代标签)
1,定义脚本标签的二个步骤:
. 在标记库描述符(TLD)文件中列明脚本变量;
. 定义标签扩展信息类(TEI)并且在TLD文件中包括这个类元素(tei-class);
2,变量必须在标签处理程序类中使用pageContext.setAttribute()方法设置;
3,标签扩展信息类(TEI)必须继承TagExtraInfo以及覆盖getVariableInfo()方法;
4,变量的范围可以是AT_BEGIN, NESTED, AT_END(标签扩展信息类(TEI)的VariableInfo中定义)之一;
脚本变量的有效性
变量 | 有效性
---------------------------------------
NESTED | 标签中的参数在starttag到endtag之间是有效的
AT_BEGIN | 标签中的参数在标签的开始到JSP页面结束是有效的
AT_END | 标签中的参数在标签的结束到JSP页面结束是有效的
Tag接口的方法
interface javax.servlet.jsp.tagext.Tag
------------------------------------------------------
+EVAL_BODY_INCLUDE:int
+EVAL_PAGE:int//继续执行页面
+SKIP_BODY:int//跳出标签体
+SKIP_PAGE:int//跳出页面,也就是整个JSP不会再运行
------------------------------------------------------
+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
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
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
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
/* 这个方法会被不断的调用直到不再满足条件,通过这个方法来控制返回,从而控制循环是否中断
SKIP_BODY是跳出标签体的,EVAL_BODY_INCLUDE是继续执行标签体,通过返回这两个值来控制循环是否*/
8,doEndTag():int
9,release():void
SimpleTag接口的方法
javax.servlet.jsp.tagext.SimpleTag
------------------------------------------
+doTag():void
+getParent():JspTag
+setJspBody(JspFragment jspBody):void
+setJspContext(JspContext pc):void
+setParent(JspTag parent):void
SimpleTage接口的生命周期(JSP2.0的自定义标签接口)
1,new:
每次遇到标签,容器构造一个SimpleTag的实例,这个构造方法没有参数。和红典的标签一样, SimpleTag不能缓冲,故不能重用,每次都需要构造新的实例。
2,setJspContext()、setParent(): 只有这个标签在另一个标签之,才调用setParent()方法;
3,设置属性:调用每个属性的setter方法;
4,setJspBody();
5,doTag(): 所有标签的逻辑、迭代和Body计算,都在这个方法中;
6,return
例:
package com.tag;
public class HelloTag implements Tag
{
private PageContext pageContext;
private Tag parent;
public HelloTag(){
super();
}
/**
*设置标签的页面的上下文
*/
public void setPageContext(final PageContext pageContext) {
this.pageContext=pageContext;
}
/**
*设置上一级标签
*/
public void setParent(final Tag parent) {
this.parent=parent;
}
/**
*开始标签时的操作
*/
public int doStartTag() throws JspTagException{
return SKIP_BODY; //返回SKIP_BODY,表示不计算标签体
}
/**
*结束标签时的操作
*/
public int doEndTag() throws JspTagException{
try{
pageContext.getOut().write("Hello World!你好,世界!");
}
catch(java.io.IOException e){
throw new JspTagException("IO Error: " + e.getMessage());
}
return EVAL_PAGE;
}
/**
*release用于释放标签程序占用的资源,比如使用了数据库,那么应该关闭这个连接。
*/
public void release() {}
public Tag getParent(){
return parent;
}
}
xxx.tld
<?xml version="1.0" encoding="ISO-8859-1" ?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-jsptaglibrary_2_0.xsd"
version="2.0">
<tag>
<description>Extends TagSupport</description>
<name>hello</name>
<tag-class>com.tag.HelloWorldTag</tag-class>
<body-content>jsp</body-content>
</tag>
</taglib>
web.xml
<web-app>
<taglib-uri>/xxx</taglib-uri>
<taglib-location>/WEB-INF/tlds/xxx.tld</taglib-location>
</web-app>
xxx.jsp
<%@ taglib uri="/xxx" prefix="mytag" %>
<%@ page contentType="text/html; charset=gb2312" %>
<html><head><title>first cumstomed tag</title></head><body>
<p>以下的内容从Taglib中显示: </p>
<p><i><mytag:hello_int/></i>
<br>
<p><mytag:hello_int></mytag:hello_int>
</body></html>
分享到:
相关推荐
JSP+SSM项目-辅导员考评管理系统的Java毕业设计(源码+说明+演示视频+数据库).zip 【项目技术】 开发语言:Java 框架:ssm 架构:B/S 数据库:mysql 【实现功能】 包括两类用户使用,系统管理员、学生。系统管理员对...
2、通知(可以看到辅导员发来的通知) 3、活动记录(此记录专为个人提供类似记事薄一样的功能。最好有一个记事档窗口,记录活动名称、时间、地点等信息,以便以后德育分统计) 4、收件箱(收到别人提出的请求等信息...
毕业设计javajsp小学生英语学习辅导软件springmvc-qkrp源码含文档工具包 后台是springmvc,页面是jsp,数据库mysql,jdk1.8,开发工具用ecplise、myecplise、sts、idea都可以 小学生英语学习辅导软件 个人中心 用户...
基于JSP+SSM的-新生报到系统毕业设计(源码+演示视频+说明+数据库).rar 【项目技术】 开发语言:Java 框架:ssm 架构:B/S 数据库:mysql 【实现功能】 学院管理员管理所有内容,涵盖了班级,专业,学院,学生,缴费...
(2)会员:会员可以通过系统浏览、下载学习资料,在线自测,留言互动。 (3)管理员:管理员主要是负责根据教学安排进行网上辅导。 包含:源码、数据库脚本、论文、环境工具包、相同框架项目的安装教程(在说明文档中)
JSP+SSM项目-新生报到系统的Java毕业设计(源码+说明+演示视频+数据库).rar 【项目技术】 开发语言:Java 框架:ssm 架构:B/S 数据库:mysql 【实现功能】 学院管理员管理所有内容,涵盖了班级,专业,学院,学生,...
SSM+JSP项目-课程辅导网站的Java毕业设计(源码+演示视频+说明).rar 【项目技术】 开发语言:Java 框架:ssm+jsp 架构:B/S 数据库:mysql 【演示视频-编号:421】 https://pan.quark.cn/s/b3a97032fae7 【实现功能...
1.2 辅导员对后台网站进行管理,可以发布新闻、公告通知、就业信息、人文素质教育类的相关电子资料。 3、表模块: 系统后台用“表”来统一管理。 4、导师模块: 有导师所带学生的信息,数据库链接,学生与课程,学生...
2. **JSP技术**:Java Server Pages(JSP)是Java技术的一部分,主要用于创建动态网页。JSP页面结合了HTML代码和Java代码,使得开发者能够更方便地处理视图层的展示。在电子政务系统中,JSP常用于生成动态内容,如...
- **网络工程师教程(第2版)2007版**:网络工程师考试的重要参考资料,全面介绍了网络技术、网络规划与设计等知识。 - **软件设计师教程(第2版)2007版**:为软件设计师考试提供全面指导,涉及软件工程基础、软件设计...
本辅导员工作管理系统就是一款基于信息化技术的人员管理的平台,可以让辅导员在线的了解到自己的工作任务、在线的进行考勤和查询自己的奖罚信息等操作,管理员也可以在线的进行对每一位辅导员进行在线的管理操作,...
系统涉及到高校四大类用户:学生、任课老师、辅导员、系统管理员。 本高校考勤系统用JSP+SQLSERVER开发,开发过程中运用了页面模块化、信息发布的动态生成、静态页面显示等技术开发。本论文重点介绍本系统的用户管理...
标题"JSP 全国计算机等考二级Office辅导答疑系统软件源代码.zip"揭示了这是一个基于JSP技术开发的软件系统,主要用于全国计算机等级考试二级Office科目的辅导和答疑。该系统可能包含了处理考生问题、提供练习题库、...
SSM 毕业设计,SSM 课程设计,含有代码注释,新手也可看懂。...前端:HTML/JSP 后台框架:SSM 开发环境:idea 数据库:MySql(建议用 5.7,8.0 有时候会有坑) 部署环境:Tomcat(建议用 7.x 或者 8.x b版本),maven
**JSP校园宿舍管理系统**是基于Java Server Pages(JSP)技术开发的一种高效、便捷的管理工具,主要用于高校内对学生宿舍的全方位管理。系统通常包括宿舍分配、信息查询、资源调度、异常处理等多个功能模块,旨在...
2.前端技术:jsp 3.前端ui:经典蓝色ui 4.功能点描述: (1)学生 查看个人信息、查看个人的晚归记录、填写请假单、查看请假的审核情况 (2)宿管员(有待完善) 基础信息管理、查看个人信息 (3)辅导员 审核请假单、...
计算机毕业设计jsp考研互助辅导平台vue论文
基于SSM+JSP的课程辅导网站毕业设计(源码+录像+说明).rar 【项目技术】 开发语言:Java 框架:ssm+jsp 架构:B/S 数据库:mysql 【演示视频-编号:421】 https://pan.quark.cn/s/b3a97032fae7 【实现功能】 这次...
考评管理系统包括基本信息管理、用户管理、班级管理、活动管理、报名管理和成绩管理。 项目关键技术 开发工具:IDEA 、Eclipse ...关键技术:jsp、spring、ssm、MYSQL、MAVEN 数据库工具:Navicat、SQLyog