例子:查询所有学生的资料(学号,姓名,性别,出生年月,家庭地址)
第一步:在tags包下,新建Java类,需继承javax.servlet.jsp.tagext.TagSupport,并编写代码如下:
-
package tags;
-
import java.io.IOException;
-
import java.util.ArrayList;
-
import javax.servlet.jsp.JspException;
-
import javax.servlet.jsp.JspWriter;
-
import javax.servlet.jsp.tagext.TagSupport;
-
import po.Student;
-
import dao.StudentDao;
- //自定义标签的规范 该标签的功能:显示所有的学生的详细资料
- //1、继承:javax.servlet.jsp.tagext.TagSupport
- //2、重写方法doEndTag和doStartTag(系统自动调用)
-
public class DisplayAllTags extends TagSupport {
-
private static final long serialVersionUID = 1L;
-
public DisplayAllTags() {
-
System.out.println("displayaddtags 构造函数");
- }
-
public int doStartTag() throws JspException {
-
System.out.println("doStartTag函数");
- return SKIP_BODY; //不实现标签的体,即空体标签。
- }
-
public int doEndTag() throws JspException {
-
System.out.println("doEndTag函数");
- //查询数据库
-
StudentDao studentDao=new StudentDao();
- ArrayList arrayList=(ArrayList)studentDao.queryStus();
- //通过父类TagSupport的属性值pageContext 取得相关的内置对象
- JspWriter out=pageContext.getOut();
- //遍历循环打印。
-
try {
-
out.println("<table>");
-
out.println("<tr>");
-
out.println("<td>学号</td>");
-
out.println("<td>姓名</td>");
-
out.println("<td>性别</td>");
-
out.println("<td>出生年月</td>");
-
out.println("<td>家庭住址</td>");
-
out.println("</tr>");
-
for(int i=0;i<arrayList.size();i++){
- Student student=(Student)arrayList.get(i);
-
out.println("<tr>");
-
out.println("<td>"+student.getStuId()+"</td>");
-
out.println("<td>"+student.getStuName()+"</td>");
-
out.println("<td>"+student.getStuSex()+"</td>");
-
out.println("<td>"+student.getStuBir()+"</td>");
-
out.println("<td>"+student.getStuAdd()+"</td>");
-
out.println("</tr>");
- }
-
out.println("<table>");
-
} catch (IOException e) {
- e.printStackTrace();
- }
- //=============pageContext还可以get更多的内置对象。
- // pageContext.getRequest();
- // pageContext.getResponse();
- // pageContext.getSession();
- // pageContext.getServletContext();
- return EVAL_PAGE; //
- }
- }
第二步:在 webroot→web-inf下新建一个.tld文件(右键new file就OK了),并编写代码如下:
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
- <taglib> <!-- 自定义库标签的根 -->
- <tlibversion>1.2</tlibversion> <!-- 版本号 -->
- <jspversion>1.1</jspversion> <!-- JSP版本号 -->
- <shortname>displaytags</shortname> <!-- 标签名称-->
- <uri>displaytags</uri> <!-- 外界导入标签时,认识的名字,很重要。-->
- <tag>
- <name>displayAll</name> <!-- 标签名称 -->
- <tagclass>tags.DisplayAllTags</tagclass> <!-- 对应的类 -->
- </tag>
- <!-- 有属性的标签 -->
- <tag>
- <name>displayBySex</name>
- <tagclass>tags.DisplayBySexTags</tagclass>
- <attribute> <!-- 对应标签的属性。 -->
- <name>sex</name>
- <required>true</required> <!-- 是必需写的属性,即没有写属性标签不能被正常使用 -->
-
</attribute>
- </tag>
- <!-- 1.两个属性 2.属性不是必需 3.属性可以用变量来赋值 -->
- <tag>
- <name>displayBySA</name>
- <tagclass>tags.DisplayBySAtags</tagclass>
- <attribute>
- <name>sex</name>
- <required>false</required>
- </attribute>
- <attribute>
- <name>add</name>
- <required>true</required>
- <rtexprvalue>true</rtexprvalue> <!-- true:可以用表达式来表示 -->
- </attribute>
- </tag>
- </taglib>
第三步:编写jsp页面,代码如下:
-
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
-
<%@ taglib uri="displaytags" prefix="stu"%>
-
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html>
- <head>
- <title>测试自定义标签</title>
- </head>
- <body>
- 打印学生的名单<br>
- <stu:displayAll></stu:displayAll>
- <br>打印学生的名单(一个属性的测试)<br>
-
<stu:displayBySex sex="男"></stu:displayBySex>
- <br>打印学生的名单(两个属性的测试)<br>
-
<stu:displayBySA add="上海"></stu:displayBySA>
- </body>
- </html>
大概的流程就这样子。其中还用到的dao.Student类(负责与数据库交互)和po.Student(javabean);还有DisplayBySexTags.java和DispalyBySATags.java 与DisplayAllTags.java差不多。