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

【 <一> 炼丹初探: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 的标准标签库,提供常用的标签功能。

相关文章:

  • 4个 Vue 路由实现的过程
  • Unity大型游戏开发全流程指南
  • 3.9[A]csd
  • Gazebo 启动时候配置物体
  • llama.cpp编译
  • 任务11:路由器配置与静态路由配置
  • Web网页制作(静态网页):千年之恋
  • INFINI Labs 产品更新 | Easysearch 增加异步搜索等新特性
  • nlp培训重点-5
  • 【Python】Hydra 用法详解
  • web—HTML
  • 【Java篇】数据类型与变量:窥见程序的天地万象
  • wireshark点击快捷无法打开
  • 基于python大数据的招聘数据可视化与推荐系统
  • stackqueue
  • Python 实现图片提取文字
  • 基于yolov11的西红柿番茄叶子病害检测系统python源码+onnx模型+评估指标曲线+精美GUI界面
  • WinForm模态与非模态窗体
  • 低空经济快速发展,无人机人才培养及校企实验室共建技术详解
  • Eclipse 查看 JAVA SE 23 官方API 源代码
  • 特朗普与普京通话前夕,英美法德意领导人通话讨论俄乌问题
  • 瑞幸首度牵手成都国际非遗节,用一杯饮品将非遗之美推向全国
  • 三人在共享单车上印小广告被拘,北京警方专项打击非法小广告
  • 俄乌刚谈完美国便筹划与两国领导人通话,目的几何?
  • 光速晋级!2025年多哈世乒赛孙颖莎4比0战胜对手
  • 全国游泳冠军赛:孙杨、潘展乐同进400自决赛,今晚将正面对决