开发者社区> 余二五> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

JSP自定义标签快速入门

简介:
+关注继续查看
最近讲课讲到JSP自定义标签,发现书本上的例子很复杂,不适合初级入门的同学学习,于是自己重新整理了一下,简要内容放上来,希望能对同样需求的朋友有用。

做Web开发的人都知道HTML标签,在JSP开发中常用的就是<%脚本%>来处理逻辑,而这种HTML中签入Java程序的方式构成了JSP最初的样子。
后来,为了进一步简化编程,或者说使JSP源代码看上去更清晰一些,标签技术营运而生。最有代表性的当时是JSTL,还有Struts标签等。为了更好的理解这些标签的工作原理,自定义标签课程必不可少。

下面就先通过亲手做一个标签来体会一下。
在JSP2中,可以通过两种方式来创建自己的标签库。一种是标记文件的方式,一种是标签处理程序的方式。其实它们本质上是一样的。
先说标记文件方式,这种方式做起来相对简单。先来做一个简单的显示红色字体“你好”的标签。首先建立一个hello.tag文件
<%@tag description="打印Hello" pageEncoding="UTF-8"%>
<%-- 这是属性: --%>
<%@attribute name="message"%>
<%-- 这是标签内容 --%>
<h2 style="color:red">${message}</h2>
放到WEB-INF/tags/下。
然后开始调用这个标签。创建一个usetagfile.jsp
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@ taglib tagdir="/WEB-INF/tags" prefix="jerry" %>
<!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>使用标记文件</title>
        </head>
        <body>
                <jerry:hello message="你好"></jerry:
hello >
        </body>
</html>

OK,运行测试一下吧。效果很简单。
第二中方式是标签处理程序的方式。我们可以通过实现SimpleTagSupport类来做一个简单标签,通过传入一条select语句,实现一个表格显示。我们首先建立一个标签库描述符,这其实就相当于标签库的注册表。
<?xml version="1.0" encoding="UTF-8"?>
<taglib version="2.0" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-jsptaglibrary_2_0.xsd">
    <tlib-version>1.0</tlib-version>
    <short-name>jerry</short-name>
    <uri>/WEB-INF/tlds/jerry</uri>
    <tag>
        <name>table</name>
        <tag-class>taghandler.TableTagHandler</tag-class>
        <body-content>scriptless</body-content>
        <attribute>
            <name>selectSQL</name>
            <rtexprvalue>true</rtexprvalue>
            <type>java.lang.String</type>
        </attribute>
    </tag>
</taglib>
然后我们来实现标签处理类TableTagHandler
package taghandler;

import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.jsp.tagext.*;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.JspException;

/**
*
* @author Administrator
*/

public class TableTagHandler extends SimpleTagSupport {
        private String selectSQL;

        public void doTag() throws JspException {
                try {
                        JspWriter out = getJspContext().getOut();
                        out.println("<link rel=\"stylesheet\" href=\"css/tablestyle.css\" type=\"text/css\" />");
                        out.println("<table>");
                        out.println("<thead>");
                        out.println("<tr>");
                        out.println("<th>学号</th>");
                        out.println("<th>姓名</th>");
                        out.println("<th>性别</th>");
                        out.println("</tr>");
                        out.println("</thead>");
                        out.println("<tbody>");
//从数据库中取数据,形成ArrayList
                        database.SQLServer db = new database.SQLServer();
                        java.util.ArrayList<String[]> students = db.selectToArrayList(this.selectSQL);
                        for (String[] stu : students) {
                                out.println("<tr>");
                                out.println("<td>" + stu[0] + "</td>");
                                out.println("<td>" + stu[1] + "</td>");
                                out.println("<td>" + stu[2] + "</td>");
                                out.println("</tr>");
                        }
                        out.println("</tbody>");
                        out.println("</table>");
                } catch (IOException ex) {
                        Logger.getLogger(TableTagHandler.class.getName()).log(Level.SEVERE, null, ex);
                }
        }

        public void setSelectSQL(String selectSQL) {
                this.selectSQL = selectSQL;
        }
}
最好,我们需要一个测试页面来看看运行效果。
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@ taglib uri="/WEB-INF/tlds/jerry" prefix="jerry" %>
<!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>JSP Page</title>
        </head>
        <body>
                <jerry:table selectSQL="select xuehao,xingming,xingbie from student"></jerry:table>
        </body>
</html>
注意,这里的taglib指令中使用uri来指定标签位置。和标记文件使用时不同。









本文转自 王杰瑞 51CTO博客,原文链接:http://blog.51cto.com/wangjierui/108791,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
自定义标签入门 | 学习笔记
快速学习自定义标签入门
38 0
JSP自定义标签就是如此简单
tags: JSP 为什么要用到简单标签? 上一篇博客中我已经讲解了传统标签,想要开发自定义标签,大多数情况下都要重写doStartTag(),doAfterBody()和doEndTag()方法,并且还要知道SKIP_BODY,EVAL_BODY等等的变量代表着什么,在什么方法中使用。
1067 0
JSP自定义tag
前端需要调用后端的配置,想起velocity-tools。然而jsp的话,目前只能想到tag和EL表达式了。   Tag相当好写,jsp2.0提供了简化写法: 编写一个java类: public class HelloWorldTag extends SimpleTagSupport {...
681 0
jsp自定义标签和方法
  首先是要有一个标签处理类,标签处理类可以直接实现Tag接口,也可以继承JAVA中已经实现了的TagSupport这个类,TagSupport也是继承自Tag接口的,它内部已经对Tag接口进行了实现,一般是继承TagSupport类,之后是重写父类的doStartTag和doEndT...
734 0
+关注
20377
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载