一个标签的引用:
前缀:标签名称 属性名称="属性值"
标签种类:空标签、空体标签(有属性没有体)、有体标签
自定义标签的要素
1.标签处理程序(java文件,已经编译)
2.标签库描述符(TLD)文件(XML文件)
3.JSP文件(嵌入自定义标签)
对于空体标签,需要继承:javax.servlet.jsp.tagext.TagSupport
对于有体标签,需要继承:javax.servlet.jsp.tagext.BodyTagSupport
Tag接口中的方法:
doStartTag():初始化标签的一些内容,如连数据库,空体标签。
doEndTag():做一些善后工作,如关数据库,空体标签。
release():释放这个标签对象
doAfterBody():对体求值,完成标签体求值之后调用,有体标签。
doBeforeBody():对体求值,完成标签体求值之前调用,有体标签。
一般无体标签doStartTag()返回SKIP_BODY,让标签不要对体求值,doEndTag()返回EVAL_PAGE,让标签后面的
JSP继续执行:有体标签doStartTag()返回EVAL_BODY_TAG,让标签对体求值,doEndTag()返回EVAL_PAGE,让
标签后面的JSP继续执行
对于标签里面的属性,类似JavaBean中给他们编写get和set方法
一般情况下的标签处理程序包含以下函数
构造函数:用于进行这个标签解释时的初始化,如联结数据库
doStartTag():返回对这个标签的处理方法
doEndTag():做一些善后工作,如关闭数据库
最重要的角色:pageContext保护成员,可以显示
1.对于空标签,需要继承:javax.servlet.jsp.tagext.TagSupport
2.重写doEndTag()、doStartTag()
3.定义好return的返回值
4.在方法内调用,用pageContext来打印出标签
5.TLD文件
public class DisplayAllTag extends TagSupport{
public DisplayAllTag(){
}
public int doStartTag() throws JspException{
//系统开始运行这个标签自动调用
return this.SKIP_BODY;
}
public int doEndTag() throws JspException{
//系统结束运行这个标签自动调用
StudentDao studentDao = new StudentDao();
ArrayList stus = studentDao.queryStu();
//显示成为表格
JspWriter out = pageContext.getOut();
//pageContext.getRequest();
//pageContext.getResponse();
//pageContext.getSession();
//pageContext.getServletContext();
try{
out.println("
");
out.println("");
out.println("xuehao | ");
out.println("xingming | ");
out.println("
");
for(int i=0;i
Student stu = (Student)stus.get(i);
out.println("");
out.println(""+stu.getStuId()+" | ");
out.println(""+stu.getStuName()+" | ");
out.println("
");
}
out.println("
");
}catch(Exception ex){ex.printStuckTrace();}
return this.EVAL_PAGE;
}
}
TLD可以任意放置一个地方,然后再web.xml内注册,或者放入WEB-INF下面
新建stu.tld文件
拷贝struts或者其他的文件头拷贝到stu.tld内享受帮助
1.2
1.1
stu
stuuri 、
displayAll
tags.DisplayAllTag
JSP页面内使用
<%@ taglib uri="stuuri" prefix="abc" %>
===========================================================================
空体标签
//通过性别属性选择学生,建立一个JavaBean风格的属性,也就是要给sex有set和get方法,
public class DisplayBySexTag extends TagSupport{
private String sex;
public DisplayBySexTag(){
}
public int doStartTag() throws JspException{
//系统开始运行这个标签自动调用
return this.SKIP_BODY;
}
public int doEndTag() throws JspException{
//系统结束运行这个标签自动调用
StudentDao studentDao = new StudentDao();
ArrayList stus = studentDao.queryStuBySex(sex);
//显示成为表格
JspWriter out = pageContext.getOut();
//pageContext.getRequest();
//pageContext.getResponse();
//pageContext.getSession();
//pageContext.getServletContext();
try{
out.println("
");
out.println("");
out.println("xuehao | ");
out.println("xingming | ");
out.println("
");
for(int i=0;i
Student stu = (Student)stus.get(i);
out.println("");
out.println(""+stu.getStuId()+" | ");
out.println(""+stu.getStuName()+" | ");
out.println("
");
}
out.println("
");
}catch(Exception ex){ex.printStuckTrace();}
return this.EVAL_PAGE;
}
}
TLD可以任意放置一个地方,然后再web.xml内注册,或者放入WEB-INF下面
新建stu.tld文件
拷贝struts或者其他的文件头拷贝到stu.tld内享受帮助
1.2
1.1
stu
stuuri 、
displayAll
tags.DisplayAllTag
displayBySex
tags.DisplayBySexTag
sex
true
true
JSP页面内使用
<%@ taglib uri="stuuri" prefix="abc" %>
<%String str="女"; %>