当前位置: 首页 > article >正文

【 <一> 炼丹初探:JavaWeb 的起源与基础】之 JSP 标签库:自定义标签的开发与应用

 <前文回顾>

点击此处查看 合集 https://blog.csdn.net/foyodesigner/category_12907601.html?fromshare=blogcolumn&sharetype=blogcolumn&sharerId=12907601&sharerefer=PC&sharesource=FoyoDesigner&sharefrom=from_link

<今日更新>

一、JSP 标签库:开发者的“瑞士军刀”

JSP 标签库[1],说白了就是一套“瑞士军刀”,里头装着各种实用的工具,比如 JSTL自定义标签 这些。JSP 标签库能让开发者在 JSP 页面里用标签代替 Java 代码,写起来“顺手”,看起来“清爽”。

1. JSTL:标准标签库

JSTL[2] 是 JSP 的标准标签库,里头装着各种常用的标签,比如循环、条件判断、格式化啥的。JSTL 虽然好用,但有时候“不够用”,这时候就得用自定义标签了。

Jsp Code

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<c:forEach var="item" items="${list}">

    <p>${item}</p>

</c:forEach>

2. 自定义标签:开发者的“独门武器”

自定义标签是开发者自己写的标签,能“量身定制”功能,比如分页、权限验证啥的。自定义标签虽然“复杂”,但用起来“顺手”,写起来“清爽”。

Jsp Code

<%@ taglib prefix="my" uri="/WEB-INF/tags/mytags.tld" %>

<my:pagination page="${page}" />

二、自定义标签的“开发流程”

自定义标签的开发流程,说白了就是“三步走”:写标签类写标签描述文件在 JSP 里用标签

1. 写标签类

标签类是自定义标签的“核心”,里头写着标签的逻辑。标签类得继承 TagSupport 或者 SimpleTagSupport,重写 doStartTag 或者 doTag 方法。

Jsp Code

public class PaginationTag extends TagSupport {

    private int page;

    

    public void setPage(int page) {

        this.page = page;

    }

    

    public int doStartTag() throws JspException {

        try {

            JspWriter out = pageContext.getOut();

            out.print("<div class='pagination'>");

            out.print("<a href='?page=" + (page - 1) + "'>上一页</a>");

            out.print("<a href='?page=" + (page + 1) + "'>下一页</a>");

            out.print("</div>");

        } catch (IOException e) {

            throw new JspException(e);

        }

        return SKIP_BODY;

    }

}

2. 写标签描述文件

标签描述文件是自定义标签的“说明书”,里头写着标签的名字、类名、属性啥的。标签描述文件得放在 WEB-INF/tags 目录下,后缀是 .tld

XML Code

<taglib>

    <tlib-version>1.0</tlib-version>

    <short-name>my</short-name>

    <uri>/WEB-INF/tags/mytags.tld</uri>

    <tag>

        <name>pagination</name>

        <tag-class>com.example.PaginationTag</tag-class>

        <body-content>empty</body-content>

        <attribute>

            <name>page</name>

            <required>true</required>

            <rtexprvalue>true</rtexprvalue>

        </attribute>

    </tag>

</taglib>

3. 在 JSP 里用标签

在 JSP 里用自定义标签,得先引入标签库,再用标签。引入标签库用 <%@ taglib %>,用标签就跟用 HTML 标签一样。

Jsp Code

<%@ taglib prefix="my" uri="/WEB-INF/tags/mytags.tld" %>

<my:pagination page="${page}" />

三、自定义标签的“复杂使用示例”

自定义标签虽然“复杂”,但用起来“顺手”,写起来“清爽”。比如,用自定义标签实现分页、权限验证啥的,都能“搞定”。

1. 分页标签

分页标签是自定义标签的“经典应用”。比如,用分页标签显示分页链接,用户点一下就能翻页。

Java Code

public class PaginationTag extends TagSupport {

    private int page;

    private int total;

    

    public void setPage(int page) {

        this.page = page;

    }

    

    public void setTotal(int total) {

        this.total = total;

    }

    

    public int doStartTag() throws JspException {

        try {

            JspWriter out = pageContext.getOut();

            out.print("<div class='pagination'>");

            if (page > 1) {

                out.print("<a href='?page=" + (page - 1) + "'>上一页</a>");

            }

            for (int i = 1; i <= total; i++) {

                if (i == page) {

                    out.print("<span>" + i + "</span>");

                } else {

                    out.print("<a href='?page=" + i + "'>" + i + "</a>");

                }

            }

            if (page < total) {

                out.print("<a href='?page=" + (page + 1) + "'>下一页</a>");

            }

            out.print("</div>");

        } catch (IOException e) {

            throw new JspException(e);

        }

        return SKIP_BODY;

    }

}

Jsp Code

<%@ taglib prefix="my" uri="/WEB-INF/tags/mytags.tld" %>

<my:pagination page="${page}" total="${total}" />

2. 权限验证标签

权限验证标签是自定义标签的“高级应用”。比如,用权限验证标签控制页面元素的显示,用户没权限就“看不见”。

Java Code

public class AuthTag extends TagSupport {

    private String role;

    

    public void setRole(String role) {

        this.role = role;

    }

    

    public int doStartTag() throws JspException {

        HttpServletRequest req = (HttpServletRequest) pageContext.getRequest();

        HttpSession session = req.getSession();

        String userRole = (String) session.getAttribute("role");

        if (role.equals(userRole)) {

            return EVAL_BODY_INCLUDE;

        } else {

            return SKIP_BODY;

        }

    }

}

Jsp Code

<%@ taglib prefix="my" uri="/WEB-INF/tags/mytags.tld" %>

<my:auth role="admin">

    <p>只有管理员能看到这段话,嗝~</p>

</my:auth>

四、自定义标签的“历史”:从 JSP 1.1 到 JSP 2.3

自定义标签从 JSP 1.1 开始就有了,虽然现在 JSP 2.3 已经“普及”了,但自定义标签的“核心功能”依然没变。

1. JSP 1.1:初代“瑞士军刀”

JSP 1.1 在 1999 年发布,自定义标签是它的“初代瑞士军刀”。虽然功能简单,但已经能满足大部分开发需求了。

2. JSP 2.0:引入 SimpleTag

JSP 2.0 在 2003 年发布,引入了 SimpleTag,让自定义标签的开发更加“简单”。SimpleTag 的引入,让自定义标签的“玩法”更加丰富。

Java Code

public class MySimpleTag extends SimpleTagSupport {

    public void doTag() throws JspException, IOException {

        getJspContext().getOut().print("Hello, World!");

    }

}

3. JSP 2.3:最后的“辉煌”

JSP 2.3 在 2013 年发布,是 JSP 的“最后版本”。虽然自定义标签的功能已经很强大了,但 JSP 的“辉煌”已经过去了,因为大家都开始用 Spring Boot、Vue.js 这些新技术了。


专有名词解释

  1. JSP 标签库:一套用于在 JSP 页面中代替 Java 代码的标签集合。
  2. JSTL:JavaServer Pages Standard Tag Library,JSP 的标准标签库,提供常用的标签功能。

http://www.kler.cn/a/578697.html

相关文章:

  • 2025开源SCA工具推荐 | 组件依赖包安全风险检测利器
  • 探索在直播中的面部吸引力预测新的基准和多模态方法
  • 服务远程调用(RPC)架构及原理
  • 欢乐力扣:汇总区间
  • QwQ-32B 开源!本地部署+微调教程来了
  • 文心一言:中国大模型时代的破局者与探路者
  • STM32中输入/输出有无默认电平
  • Vue3中computed计算属性的高级玩法
  • Vue3基础之响应式原理
  • 【java】StringJoiner
  • MyBatis-Plus分页控件使用及使用过程发现的一个坑
  • 【形态学操作中的开运算和闭运算详细讲解】
  • 系统架构设计师—系统架构设计篇—特定领域软件体系结构
  • 为AI聊天工具添加一个知识系统 之141 设计重审 之6 文章学 之 引言 之0 总括生命的形式:意识形态 诗和逻辑
  • WPF基础知识1-20
  • LeetCode 每日一题 1328. 破坏回文串
  • 机器学习数学基础:42.AMOS 结构方程模型(SEM)分析的系统流程
  • Primer - 自适应学习,AI学习工具
  • 从案例分析看微型工业计算机在智能社区中的卓越表现
  • JavaScript网页设计案例:打造交互式用户体验