JavaWeb学习笔记(10)__JSTL

JSTL

本文章基于B站UP主:楠哥教你学Java 的课程《Java Web从入门到实战【完整版】》进行整理补充,本文章仅用于个人学习交流使用。

在实际开发中,经常使用的到的只要核心标签库的一部分内容,其他内容只需要了解即可。


引入前提:当需要遍历输出时,JSP 脚本穿插,循环结构复杂

<table>
        <tr>
            <th>编号</th>
            <th>姓名</th>
            <th>成绩</th>
        </tr>
        <%
            List<User> list=(List<User>) request.getAttribute("list");
            for (User user:list){
                request.setAttribute("user",user);
        %>
        <tr>
            <td>${user.id}</td>
            <td>${user.name}</td>
            <td>${user.age}</td>
        </tr>
        <%
            }
        %>
    </table>
1.基本概念

JSP Standard Tag Library JSP 标准标签库, JSP 为开发者提供的⼀系列的标签,使⽤这些标签可以完成⼀些逻辑处理,⽐如循环遍历集合,让代码更加简洁,不再出现 JSP 脚本穿插的情况。

实际开发中 EL 和 JSTL 结合起来使⽤, JSTL 侧重于逻辑处理, EL 负责展示数据。

JSTL 的使⽤
1、需要导⼊ jar 包(两个 jstl.jar 和 standard.jar)存放的位置 web/WEB-INF

2、右键项目,Open Mode Settings,Libraries,+,Java,添加jar包

3、在 JSP ⻚⾯开始的地⽅导⼊ JSTL 标签库

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

“http://java.sun.com/jsp/jstl/core” 引入核心标签库

“ prefix=“c” ” 用 “c”表示,后面的方法必须是 <c:

<table>
    <tr>
        <th>编号</th>
        <th>姓名</th>
        <th>成绩</th>
    </tr>
    <%
        List<User> list=(List<User>) request.getAttribute("list");
    %>

    <c:forEach items="${list}" var="user">
        <tr>
            <td>${user.id}</td>
            <td>${user.name}</td>
            <td>${user.score}</td>
        </tr>
    </c:forEach>
</table>
2.BUG调试

记录一下出现的bug,以便后期再度遇见时能快速解决

bug1: org.apache.jasper.JasperException: java.lang.ClassNotFoundExce

解决1:在 .xml 文件里面添加

<jsp-config>
        <taglib>
            <taglib-uri>http://java.sun.com/jsp/jstl/core</taglib-uri>
            <taglib-location>/WEB-INF/c.tld</taglib-location>
        </taglib>
</jsp-config>

bug2:无法在web.xml或使用此应用程序部署的jar文件中解析绝对uri http://java.sun.com/jsp/jstl/core

解决2:参考:https://www.cnblogs.com/116970u/p/10884760.html

3.常用标签

JSTL 优点:

1、提供了统⼀的标签

2、可以⽤于编写各种动态功能

核⼼标签库常⽤标签:

set、 out、 remove、 catch

set:向域对象中添加数据

默认存到 page 里面,更改存放域用 scope="…"

用键值对方法存储,var 就是 key

<!--存到scope="application"里面-->
<c:set var="name" value="tom"  scope="application"></c:set>
    ${applicationScope.name}


<!--set 不能创建属性,存放属性,但能更改某个属性的值-->
    <%
        User user=new User(1,"zhangsan",59.9);
        request.setAttribute("user",user);
    %>
    ${user.name} <!--zhangsan-->
    <!--修改目标是user,当key=name时,将value=lisi-->
    <c:set target="${user}" property="name" value="lisi"></c:set>
    ${user.name} <!--lisi-->

out:输出域对象中的数据

只有 out 里面的 value 需要使用 EL 表达式

 <c:set var="name" value="tom"  scope="application"></c:set>
    <!--当value为空时,输出 default里面的信息-->
    <c:out value="${name}" default="未定义"></c:out>
    <!--几乎等价,为空时没有输出-->
    ${name}

remove:删除域对象中的数据

<!--scope="page" 只删除page里面的-->
    <c:remove var="name" scope="page"></c:remove>
    <c:out value="${name}" default="未定义"></c:out>

catch:捕获异常

<!--当出现异常时,将异常信息存到定义的变量 error 里面,并输出-->
    <c:catch var="error">
        <%
            int a=10/0;
        %>
    </c:catch>
    ${error}

完整演示:

<body>
    <c:set var="name" value="tom"  scope="page"></c:set>
    <!--当value为空时,输出 default里面的信息-->
    <c:out value="${name}" default="未定义"></c:out>
    <!--几乎等价-->
    ${name}
    <!--scope="page" 只删除page里面的-->
    <c:remove var="name" scope="page"></c:remove>
    <c:out value="${name}" default="未定义"></c:out>

    <!--当出现异常时,将异常信息存到定义的变量 error 里面,并输出-->
    <c:catch var="error">
        <%
            int a=10/0;
        %>
    </c:catch>
    ${error}
</body>

4.其他标签
条件标签

if 和 choose

<body>
    <c:set var="num1" value="1"></c:set>
    <c:set var="num2" value="2"></c:set>
    
    <!--只判断if时,使用这个-->
    <!--判断语句写在test里面,用 EL表达式-->
    <!--没有 eles ,写一个完全相反的条件判断自己实现else-->
    <c:if test="${num1>num2}">yes</c:if>
    <c:if test="${num1<num2}">no</c:if>

    <hr>
    <!--类似if-else时,用这个-->
   	<!--choose when otherwise 搭配使用-->
    <c:choose>
        <c:when test="${num1>num2}">yes</c:when>
        <c:otherwise>no</c:otherwise>
    </c:choose>
    
</body>
迭代标签

【最经常使用的一个】

forEach

begin/end:开始/结束的位置/下标,从0计数

strp:每次间隔 n 个输出

varStatus:记录用户的状态,有 sta.index (下标) 等方法

<body>
   <%
       List<String> list=new ArrayList<>();
       list.add("a");
       list.add("b");
       list.add("c");
       list.add("d");
       list.add("e");
       request.setAttribute("list",list);
   %>


    <c:forEach items="${list}" var="str" begin="0" end="4" step="2" varStatus="sta">
        ${sta.index}
        ${str}<br/>
    </c:forEach>
</body>

输出结果:

0 a
2 c
4 e

5.格式化标签库

引入:<%@ taglib prefix=“fmt” uri=“http://java.sun.com/jsp/jstl/fmt” %>

对日期和数字进行格式化

<body>
    <%
        request.setAttribute("date",new Date());
    %>
    ${date} <!--Sat Mar 28 19:10:51 CST 2020-->
    <fmt:formatDate value="${date}" pattern="yyyy-MM-dd HH:mm:ss"></fmt:formatDate>
    ${date} <!--2020-3-28  19:10:51-->
    <!--以小数点为中心,maxIntegerDigits向左取整数位,maxFractionDigits向右取小数位-->
    <fmt:formatNumber var="32145.23434" maxIntegerDigits="2" maxFractionDigits="3"></fmt:formatNumber>
    <!--45.234-->
</body>
6.函数标签库

引入:<%@ taglib prefix=“fn” uri=“http://java.sun.com/jsp/jstl/functions” %>

底层就是Java里面的 函数,方法与String里面的方法类似

<body>
   <%
       request.setAttribute("info","JavaWeb");
   %>
   <!--判断字符串info 里面有没有 字符串We-->
    ${fn:contains(info,"We" )} <br>
    <!--判断字符串info 是不是以 Ja 开头-->
    ${fn:startsWith(info,"Ja" )} <br>
    <!--判断字符串info 是不是以 ab 结尾-->
    ${fn:endsWith(info, "eb")} <br>
    <!--查找下标-->
    ${fn:indexOf(info, "va")} <br>
    <!--截取-->
    ${fn:substring(info,2 ,3 )} <br>
    <!--替换-->
    ${fn:replace(info,"W" ,"Haa" )} <br>
    <!--分割,取第一/第二块-->
    ${fn:split(info, "H")[0]}-- ${fn:split(info, "H")[1]}

</body>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值