整理下早上学习的一点点东西,一个自定义标签的例子。之所以要坚持做笔记,我想最大的原因就是学完老是忘了,忘了又得重新 看视频、查资料、百度。。。而且自己整理的话,也会让记忆持久一些。
例子:查询所有学生的资料(学号,姓名,性别,出生年月,家庭地址)
新建项目xxx,因为是自定义标签,所以就不用引入Struts的包了。
第一步:在tags包下,新建Java类,需继承javax.servlet.jsp.tagext.TagSupport,并编写代码如下:
- packagetags;
- importjava.io.IOException;
- importjava.util.ArrayList;
- importjavax.servlet.jsp.JspException;
- importjavax.servlet.jsp.JspWriter;
- importjavax.servlet.jsp.tagext.TagSupport;
- importpo.Student;
- importdao.StudentDao;
- //自定义标签的规范该标签的功能:显示所有的学生的详细资料
- //1、继承:javax.servlet.jsp.tagext.TagSupport
- //2、重写方法doEndTag和doStartTag(系统自动调用)
- publicclassDisplayAllTagsextendsTagSupport{
- privatestaticfinallongserialVersionUID=1L;
- publicDisplayAllTags(){
- System.out.println("displayaddtags构造函数");
- }
- publicintdoStartTag()throwsJspException{
- System.out.println("doStartTag函数");
- returnSKIP_BODY;//不实现标签的体,即空体标签。
- }
- publicintdoEndTag()throwsJspException{
- System.out.println("doEndTag函数");
- //查询数据库
- StudentDaostudentDao=newStudentDao();
- ArrayListarrayList=(ArrayList)studentDao.queryStus();
- //通过父类TagSupport的属性值pageContext取得相关的内置对象
- JspWriterout=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(inti=0;i<arrayList.size();i++){
- Studentstudent=(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(IOExceptione){
- e.printStackTrace();
- }
- //=============pageContext还可以get更多的内置对象。
- //pageContext.getRequest();
- //pageContext.getResponse();
- //pageContext.getSession();
- //pageContext.getServletContext();
- returnEVAL_PAGE;//
- }
- }
第二步:在 webroot→web-inf下新建一个.tld文件(右键new file就OK了),并编写代码如下:
- <?xmlversion="1.0"encoding="UTF-8"?>
- <!DOCTYPEtaglibPUBLIC"-//SunMicrosystems,Inc.//DTDJSPTagLibrary1.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页面,代码如下:
- <%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%>
- <%@tagliburi="displaytags"prefix="stu"%>
- <!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">
- <html>
- <head>
- <title>测试自定义标签</title>
- </head>
- <body>
- 打印学生的名单<br>
- <stu:displayAll></stu:displayAll>
- <br>打印学生的名单(一个属性的测试)<br>
- <stu:displayBySexsex="男"></stu:displayBySex>
- <br>打印学生的名单(两个属性的测试)<br>
- <stu:displayBySAadd="上海"></stu:displayBySA>
- </body>
- </html>
大概的流程就这样子。其中还用到的dao.Student类(负责与数据库交互)和po.Student(javabean);还有DisplayBySexTags.java和DispalyBySATags.java与DisplayAllTags.java差不多。
源码:http://u.115.com/file/f26bbf3eea
============================视频学习笔记=========