• JavaWeb JSTL标签库


    1. JSTL 标签库介绍

            JSTL 标签库 全称是指 JSP Standard Tag Library JSP 标准标签库。是一个不断完善的开放源代码的 JSP 标签库。
            EL 表达式主要是为了替换 jsp 中的表达式脚本,而标签库则是为了替换代码脚本。这样使得整个 jsp 页面变得更佳简洁。
    JSTL 由五个不同功能的标签库组成:

     

    在 jsp 标签库中使用 taglib 指令引入标签库:
    CORE 标签库
            <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    XML 标签库
            <%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %>
    FMT 标签库
            <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
    SQL 标签库
            <%@ taglib prefix = "sql" uri = "http://java.sun.com/jsp/jstl/sql" %>
    FUNCTIONS 标签库
            <%@ taglib prefix = "fn" uri = "http://java.sun.com/jsp/jstl/functions" %>

    2. JSTL 标签库的使用步骤

            1、先导入 jstl 标签库的 jar 包。
                    taglibs-standard-impl-1.2.1.jar
                    taglibs-standard-spec-1.2.1.jar
            2、第二步,使用 taglib 指令引入标签库。

    3. core 核心库使用

    3.1 (使用很少)

            作用:set 标签可以往域中保存数据
    域对象.setAttribute(key,value);
    格式:
            scope 属性设置保存到哪个域
                    page 表示 PageContext 域(默认值)
                    request 表示 Request 域
                    session 表示 Session 域
                    application 表示 ServletContext 域
            var 属性设置 key 是多少
            value 属性设置值
    代码示例:
    1. <body>
    2. 保存之前:${ requestScope.key }
    3. <c:set scope="request" var="key" value="value"/><br/>
    4. 保存之后:${ requestScope.key }
    5. body>

    结果:

     

    3.2 标签

            if 标签用来做 if 判断
    格式: 执行判断正确的语句
             test 属性表示判断的条件(使用 EL 表达式输出)
            开始标签与结束标签之间执行 判断正确的语句
            注: 只会执行 执行判断正确的语句,不会执行判断错误的语句
    代码示例:
    1. <c:if test="${12 == 12}">
    2. <h1>12等于12h1>
    3. c:if>
    4. <c:if test="${12 != 12}">
    5. <h1>12不等于12h1>
    6. c:if>

    结果:

     

    3.3 标签

            作用:多路判断。跟 switch ... case .... default 非常接近
    格式:
    < c :choose >
            < c :when test ="EL表达式1 " >
                    EL表达式1正确时 执行的语句
             c :when >
            < c :when test =" ${ EL表达式2 } " >
                     EL表达式2正确时 执行的语句
             c :when >
            ...
            < c :otherwise >
                    以上 EL表达式都不正确时 执行的语句
             c :otherwise >
    c :choose >
            choose 标签开始选择判断
            when 标签表示每一种判断情况
            test 属性表示当前这种判断情况的值
            otherwise 标签表示剩下的情况
    标签使用时需要注意的点:
            1、标签里不能使用 html 注释,要使用 jsp 注释
            2、when 标签的父标签一定要是 choose 标签
    代码示例:
    1. <%
    2. request.setAttribute("height", 178);
    3. %>
    4. <c:choose>
    5. <c:when test="${height > 190}">
    6. 身高大于190
    7. c:when>
    8. <c:when test="${height > 180}">
    9. 身高大于190
    10. c:when>
    11. <c:when test="${height > 170}">
    12. 身高大于170
    13. c:when>
    14. <c:otherwise>
    15. <c:choose>
    16. <c:when test="${height > 160}">
    17. 身高大于160
    18. c:when>
    19. <c:when test="${height > 150}">
    20. 身高大于150
    21. c:when>
    22. <c:when test="${height > 140}">
    23. 身高大于140
    24. c:when>
    25. <c:otherwise>
    26. 身高小于或等于140
    27. c:otherwise>
    28. c:choose>
    29. c:otherwise>
    30. c:choose>

    结果:

     

    3.4 标签

    作用:遍历输出使用。
    属性介绍:
    begin         属性设置开始的索引
    end            属性设置结束的索引
    var             属性表示循环的变量(也是当前正在遍历到的数据)
    items         表示遍历的集合 (相当于用于for增强)
    begin         表示遍历的开始索引值
    end            表示结束的索引值
    step          属性表示遍历的步长值

     

    varStatus 属性表示当前遍历到的数据的状态
            而Status类实现了LoopTagStatus接口,并实现了如下方法:

    3.4.1 遍历 1 到 10,输出

    代码:
    1. <body>
    2. <%--
    3. begin 属性设置开始的索引
    4. end 属性设置结束的索引
    5. var 属性表示循环的变量(也是当前正在遍历到的数据)
    6. for (int i = 1; i < 10; i++)
    7. --%>
    8. <c:forEach begin="1" end="10" var="i">
    9. <table border="1">
    10. <tr>
    11. <td>${i}td>
    12. tr>
    13. table>
    14. c:forEach>
    15. body>

    结果:

    3.4.2  遍历数组

    代码:

    1. <body>
    2. <%--
    3. 2.遍历 Object 数组
    4. for (Object item: arr)
    5. items 表示遍历的数据源(遍历的集合)
    6. var 表示当前遍历到的数据
    7. --%>
    8. <%
    9. String[] arr = {"aaa", "bbb", "ccc", "ddd"};
    10. request.setAttribute("arrString",arr);
    11. %>
    12. <c:forEach items="${requestScope.arrString}" var="arr">
    13. ${arr}<br/>
    14. c:forEach>
    15. body>

    结果:

    3.4.3  遍历 Map 集合 

    代码:
    1. <body>
    2. <%
    3. Map map = new HashMap<>();
    4. map.put("key1", "value1");
    5. map.put("key2", "value2");
    6. map.put("key3", "value3");
    7. request.setAttribute("map",map);
    8. %>
    9. <c:forEach items="${requestScope.map}" var="map">
    10. ${map.key}:${map.value} <br/>
    11. c:forEach>
    12. body>

    结果:

    3.4.4 遍历 List 集合

    需求:list 中存放 Student 类,有属性:编号,用户名,密码,年龄, 电话信息

     Student类(构造器,set,get,tostirng略):

    1. public class Student {
    2. private Integer id;
    3. private String username;
    4. private String password;
    5. private Integer age;
    6. private String phone;
    7. }
    jsp:
    1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    2. <html>
    3. <head>
    4. <title>Titletitle>
    5. head>
    6. <style type="text/css">
    7. table{
    8. border:1px black solid;
    9. border-collapse: collapse;
    10. width: 60%;
    11. margin-left:20%;
    12. }
    13. tr,th,td{
    14. border:1px black solid;
    15. border-collapse: collapse;
    16. text-align: center;
    17. }
    18. style>
    19. <body>
    20. <%--
    21. items 表示遍历的集合
    22. var 表示遍历到的数据
    23. --%>
    24. <%
    25. List<Student> studentList = new ArrayList<>();
    26. for (int i = 1; i <= 10; i++) {
    27. studentList.add(new Student(i,"username"+i,"password"+i,15+i,"phone"+i));
    28. }
    29. request.setAttribute("studentList",studentList);
    30. %>
    31. <table>
    32. <tr>
    33. <th>编号th>
    34. <th>用户名th>
    35. <th>密码th>
    36. <th>年龄th>
    37. <th>手机号th>
    38. <th>操作th>
    39. tr>
    40. <c:forEach items="${requestScope.studentList}" var="list">
    41. <tr>
    42. <td>${list.id}td>
    43. <td>${list.username}td>
    44. <td>${list.password}td>
    45. <td>${list.age}td>
    46. <td>${list.phone}td>
    47. <td>update/deletetd>
    48. tr>
    49. c:forEach>
    50. table>
    51. body>
    52. html>

    结果:

    3.4.5 通过遍历 List 集合了解属性

     属性介绍:
    begin         属性设置开始的索引
    end            属性设置结束的索引
    var             属性表示循环的变量(也是当前正在遍历到的数据)
    items         表示遍历的集合 (相当于用于for增强)
    begin         表示遍历的开始索引值
    end            表示结束的索引值
    step          属性表示遍历的步长值

    varStatus 属性表示当前遍历到的数据的状态
            而Status类实现了LoopTagStatus接口,并实现了如下方法:

    代码示例:

    1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    2. <html>
    3. <head>
    4. <title>Titletitle>
    5. head>
    6. <style type="text/css">
    7. table{
    8. border:1px black solid;
    9. border-collapse: collapse;
    10. width: 60%;
    11. margin-left:20%;
    12. }
    13. tr,th,td{
    14. border:1px black solid;
    15. border-collapse: collapse;
    16. text-align: center;
    17. }
    18. style>
    19. <body>
    20. <%--
    21. items 表示遍历的集合
    22. var 表示遍历到的数据
    23. --%>
    24. <%
    25. List<Student> studentList = new ArrayList<>();
    26. for (int i = 1; i <= 10; i++) {
    27. studentList.add(new Student(i,"username"+i,"password"+i,15+i,"phone"+i));
    28. }
    29. request.setAttribute("studentList",studentList);
    30. %>
    31. <table>
    32. <tr>
    33. <th>编号th>
    34. <th>用户名th>
    35. <th>密码th>
    36. <th>年龄th>
    37. <th>手机号th>
    38. <th>当前遍历数据th>
    39. <th>当前索引th>
    40. <th>遍历次数th>
    41. <th>当前数据是否为第一条th>
    42. <th>当前数据是否为最后一条th>
    43. <th>begin属性值th>
    44. <th>end属性值th>
    45. <th>step属性值th>
    46. tr>
    47. <c:forEach items="${requestScope.studentList}" var="list" begin="1" end="9" step="2" varStatus="status">
    48. <tr>
    49. <td>${list.id}td>
    50. <td>${list.username}td>
    51. <td>${list.password}td>
    52. <td>${list.age}td>
    53. <td>${list.phone}td>
    54. <td>${status.current}td>
    55. <td>${status.index}td>
    56. <td>${status.count}td>
    57. <td>${status.first}td>
    58. <td>${status.last}td>
    59. <td>${status.begin}td>
    60. <td>${status.end}td>
    61. <td>${status.step}td>
    62. tr>
    63. c:forEach>
    64. table>
    65. body>
    66. html>
    结果:

     

  • 相关阅读:
    C# 生成指定图片的缩略图
    brew 下载 nvm 之后,nvm command not found
    Mybatis 设计
    Content-Security-Policy(CSP)的内容构成。
    判断链表是否是环形链表
    计算机网络——物理层(数字传输系统)
    Fiddler Orchestra用户指南:打造高效协同调试利器
    进程控制3——进程程序替换
    Java 线程池JDK自带拒绝策略与自定义拒绝策略
    在其他进程中访问NLOG创建的日志
  • 原文地址:https://blog.csdn.net/weixin_65637841/article/details/126001654