标签 EL和JSTL和自定义标签 (三)

一个标签的引用:
前缀:标签名称 属性名称="属性值"



标签种类:空标签、空体标签(有属性没有体)、有体标签


自定义标签的要素
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("");
out.println("");
out.println("");
for(int i=0;i Student stu = (Student)stus.get(i);
out.println("
");
out.println("");
out.println("");
out.println("");
}
out.println("
xuehao xingming
"+stu.getStuId()+" "+stu.getStuName()+"
");
}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("");
out.println("");
out.println("");
for(int i=0;i Student stu = (Student)stus.get(i);
out.println("
");
out.println("");
out.println("");
out.println("");
}
out.println("
xuehao xingming
"+stu.getStuId()+" "+stu.getStuName()+"
");
}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="女"; %>

你可能感兴趣的:(EL和JSTL和自定义标签)