jsp中所有的标签都实现了javax.servlet.jsp.JspTag接口,标签在jsp页面中被调用,标签对应一个java处理类,来处理逻辑,好处是可以让jsp页面尽量少写代码
建立自定义标签需要java处理类,tld文件(创建时选择xml把后缀改为tld),小例子结构如图
package com.customtage;
import java.io.IOException;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;
//属性
public class AttriTag extends TagSupport{
private int count;
public void setCount(int count) {
this.count = count;
}
@Override
public int doEndTag() throws JspException {
// TODO Auto-generated method stub
String str = "........眼睛花..........";
for (int i = 0; i < count; i++) {
try {
pageContext.getOut().print(str+"<br>");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return super.doEndTag();
}
}
package com.customtage;
import java.io.IOException;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.tagext.Tag;
public class HelloTag implements Tag{
private PageContext pc;
private Tag tg;
//标签结束
@Override
public int doEndTag() throws JspException {
// TODO Auto-generated method stub
String str = "标签标大哥....";
//标签写到页面
JspWriter out = pc.getOut();
try {
out.print(str);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//eval_page标签用完下面内容还要被继续执行
return this.EVAL_PAGE;
}
@Override
public int doStartTag() throws JspException {
// TODO Auto-generated method stub
return SKIP_BODY;
}
@Override
public Tag getParent() {
// TODO Auto-generated method stub
return tg;
}
@Override
public void release() {
// TODO Auto-generated method stub
}
@Override
public void setPageContext(PageContext pc) {
// TODO Auto-generated method stub
this.pc = pc;
}
@Override
public void setParent(Tag tg) {
// TODO Auto-generated method stub
this.tg = tg;
}
}
package com.customtage;
import java.io.IOException;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;
public class HelloTag2 extends TagSupport{
@Override
public int doEndTag() throws JspException {
// TODO Auto-generated method stub
String str = "殴打标签标大哥.....";
try {
pageContext.getOut().print(str);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return super.doEndTag();
}
}
package com.customtage;
public class Room {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
package com.customtage;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;
//动态添加到数据库
public class RoomTag extends TagSupport{
@Override
public int doEndTag() throws JspException {
// TODO Auto-generated method stub
List list = list();
String str ="<select>";
for (int i = 0; i < list.size(); i++) {
Room r = (Room) list.get(i);
int id = r.getId();
String name = r.getName();
str+="<option value="+id+">"+name+"</option>";
}
str+="<select>";
try {
pageContext.getOut().print(str);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return super.doEndTag();
}
public static List list() {
Room r1 = new Room();
r1.setId(1);
r1.setName("光光头狮子");
Room r2 = new Room();
r2.setId(2);
r2.setName("超短耳朵兔子");
Room r3 = new Room();
r3.setId(3);
r3.setName("超短脖子长颈鹿");
Room r4 = new Room();
r4.setId(4);
r4.setName("超胖子眼镜蛇");
List list = new ArrayList();
list.add(r1);
list.add(r2);
list.add(r3);
list.add(r4);
return list;
}
}
package com.customtage;
import java.io.IOException;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;
public class SelectTag extends TagSupport{
@Override
public int doEndTag() throws JspException {
// TODO Auto-generated method stub
String str ="<select>";
str+="<option value=1>光头狮子</option>";
str+="<option value=2>短耳朵兔子</option>";
str+="<option value=3>短脖子长颈鹿</option>";
str+="<option value=4>胖子眼镜蛇</option>";
str+="<select>";
try {
pageContext.getOut().print(str);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return super.doEndTag();
}
}
jsp页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="HelloKit" prefix="h" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Hello尼玛的kitty</title>
</head>
<body>
<h:Hello/><br>
<h:Hello2/><br>
<h:select/><br>
<h:room/><br>
<h:attr count="10" />
</body>
</html>
效果图