JSP—— JSTL

本文介绍了JSP标准标签库(JSTL),包括core, i18n, fmt, sql等库的使用。讲解了JSTL中的set, out, remove操作以及条件判断、循环遍历。强调了EL表达式的功能,并展示了fmt标签库的格式化数字和日期功能,以及fn标签库提供的字符串操作方法。" 89209502,5606074,Linux运维实战:Docker与监控系统全面解析,"['运维', 'Docker', '监控', 'grafana', 'prometheus', 'ELK', 'SSH', 'CentOS']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JSTL JSP standard Tag Libary(JSP标准标签库)
JSTL允许开发人员可以像使用HTML标签 那样在JSP中开发Java功能。

JSTL库有core, i18n, fmt, sql 等等

注意 uri=“http://java.sun.com/jsp/jstl/…” 省略号可被替代为jstl标签库
每调用一个库 都得写相应的uri 前半部分都是一致的 后缀跟其相应的库名

再接触JSTL之前复习一部分以及解释部分表达式
复习主要是JSP的指令标签 也就是——<%@ %>
JSP中有很多种指令 需要运用这个指令 就得使用这个指令标签
截至今日接触到的指令有page 这个指令是写JSP文件必带的类似于C语言的头文件 在这之后就是include 而这次是有关JSTL的taglib指令。 指令之后一般都会伴随着一些设置语句。
示例:

<%@ page language="java" contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"
import="java.util.*" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

在进入主要内容需要解释一下${}这个的作用 —— 类似于getParameter方法获取它的真值 可以是字符串或者数字,这个是EL表达式,表示你从另外一个页面传过来的参数的值

el表达式,它会从page,request,session,application中取值。比如:在request中setAttribute(“name”,“测试”),那么${name} 就会得到值为测试。

<%=request.getAttribute(“name”) %> 等价于$ {name}
<%=page%>等价于$ {page}

JSTL中对数据的set out remove三种操作:

在页面中使用JSTL需要在jsp中 通过指令进行设置

<%@ taglib uri=“http://java.sun.com/jsp/jstl/core” prefix=“c”%>
其中uri是我由导入的jar包来写的 是固有的。
prefix=“c” 表示后续的标签使用都会以<c: 开头,也是一种替代

<c:set var="name" value="${'gareen'}" scope="request" />
其中这个"${'gareen'}" 解释过来就是自己取自己的真值为字符串green 与name形成键值对 也是一种固有写法 注意打双引号
另一种理解 这个是value设置真值的写法

scope的意思是范围 换一种方式理解就是对那四个作用域进行选择
至于var value 是在设置真值时候的一种格式
这里选的是作用域request中设置name,相当于

<%request.setAttribute("name","gareen")%>
<c:out value="${name}" />//out这里用了out隐式对象
相当于 <%=request.getAttribute("name")%>//getAttribute和getparameter都是取值
<c:remove var="name" scope="request" />

这样的写法很好理解建立在之前的基础
在作用域request中删掉name,相当于
<%request.removeAttribute(“name”)%>

作用域可以是pageContext, request, session, application,这三个操作再JSTL中的写法和动作include有点相像 只不过一个是固有标签并且page=
另一个是自定义标签 value=

以下的JSTL中的if else将会对${}理解更加深刻

示例:

<c:set var="hp" value="${10}" scope="request"/>
<c:if test="${hp<5}">
<p>dying!</p>
</c:if>

<c:if test="${!(hp<5)}">
<p> he need help! </p>
</c:if>

<%  
pageContext.setAttribute("one", null);
pageContext.setAttribute("two","");
pageContext.setAttribute("three",new ArrayList() );
%>

<c:if test="${empty one}">
<p>noting! </p>
</c:if>
<c:if test="${empty two }">
<p>fucking say them</p>
</c:if>
<c:if test="${empty three }">
<p>NO Objects</p>
</c:if>

JSTL通过<c:if test=""> 进行条件判断

但是JSTL没有<c:else,所以常用的办法是在<c:if的条件里取反,注意取反是将整个条件取反因此应打上括号

至于${}

在对属性进行设置真值时 都会使用${} 并打上双引号 在其中再放入判断语句 起作用是返回其判断结果真值给text属性

配合if使用的还有通过empty进行为空判断
empty可以判断对象是否为null,字符串长度是否为0,集合长度是否为0

else的另一种表示方法:

<c:choose>
        <c:when test="${hp<5}">
	</c:when>
	<c:otherwise>
	</c:otherwise>
</c:choose>

比起这种写法 取反要易懂一些,注意JSTL也是一种标签语言 也得加斜杠
</>

JSTL中的for循环遍历:
可以在JSP中使用for循环,但是其可读性很差。 借助JSTL的c:forEach标签,可以改善可读性

示例:分别使用for循环和<c:forEach标签来演示遍历一个List的区别

<%
List<String> hers=new ArrayList<>();
hers.add("dw");
hers.add("2ds");
hers.add("3");
hers.add("4");
hers.add("5");
request.setAttribute("trueStory", hers);
%>

<!-- 设置for循环遍历 -->
<table width="200px" align="center" border="1" cellspacing="0">

<tr>
<td>number:</td>
<td>object:</td>
</tr>

<%
int i=0;
for(String he:hers)
{
	i++;
%>
<tr>
<td><%=i%></td>
<td><%=he%></td>
</tr>
<%}%>
</table>
<br>
<!-- 使用JSTL中的c:forEach 循环来遍历List -->
<table width="200px" align="center" border="1" cellspacing="0">
<tr>
    <td>编号</td>
    <td>英雄</td>
</tr>
   
<c:forEach items="${trueStory}" var="he" varStatus="st"  >
    <tr>
        <td><c:out value="${st.count}" /></td>
        <td><c:out value="${he}" /></td>
    </tr>
</c:forEach>
</table>

注意在List<%%> 这段代码中的
request.setAttribute(“trueStory”, hers);
对于设置参数 <c:forEach 标签里的items="${}" 里放入的参数是request.setAttribute里的属性——trueStory而不是List——hers
这是JSTL循环标签<c:forEach与JSP里的for循环的不同之处

items="${trueStory}" 表示遍历的集合
var="he" 表示把每一个集合中的元素放在hero上
varStatus="st" 表示遍历的状态

value="${st.count}" 也就是集合里的元素脚标 遍历

JSTL中的<c:forTokens 标签 专门用于字符串拆分,并且可以指定多个分隔符

<c:set  var="some" value="yyp:man-19;birthday:2002-..ok!33"/>
<c:forTokens items="${some}" delims=":-;!" var="hh">
<c:out value="${hh}"/><br/>
</c:forTokens>

var=“hh"是一个标记属性和JSTLset操作格式一致
<c:out value=”${hh}"/> 输出标记属性所代表的集合真值
包括在其他的操作里 比如以上的forEach

fmt:formatNumber 格式化数字 fmt标签库
之前谈及的JSTL标签库的其中一个
fmt 标签常用来进行格式化,其中fmt:formatNumber用于格式化数字
使用之前要加上

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

 
<fmt:formatNumber type="number" value="${money}" minFractionDigits="2"/>
 

<fmt:formatNumber 表示格式化数字
minFractionDigits 小数点至少要有的位数
maxFractionDigits 小数点最多能有的位数

主要记忆的就是prefix=‘fmt’ 和<fmt:formatNumber
该方法和Java里—— DecimalFormat df = new DecimalFormat("#.00");
和String.format()
一个作用

<c:set var="money" value="888.8" />
<c:set var="pi" value="3.1415926" />
最少两个小数点:
<fmt:formatNumber type="number" value="${money}" minFractionDigits="2"/>
<br>
最多两个小数点:
<fmt:formatNumber type="number" value="${pi}" maxFractionDigits="2" />

其中还有格式化日期:
和fmt:formatNumber 格式化数字一样,使用之前要加上

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

<fmt:formatDate value="now"pattern="Gyyyy年MM月dd日E"/><fmt:formatDatevalue="{now}" pattern="G yyyy年MM月dd日 E"/> <fmt:formatDate value="now"pattern="GyyyyMMddE"/><fmt:formatDatevalue="{now}" pattern=“a HH:mm:ss.S z”/>
<fmt:formatDate value="${now}" pattern=“yyyy-MM-dd HH:mm:ss”/>

<fmt:formatDate 表示格式化日期
yyyy 表示年份
MM 表示月份
dd 表示日期
E 表示星期几

a 表示是上午还是下午
HH 表示小时
mm 表示分钟
ss 表示秒
S 表示毫秒
z 表示时区

<%
    Date now = new Date();
    pageContext.setAttribute("now",now);
%>
 
完整日期: <fmt:formatDate value="${now}" pattern="G yyyy年MM月dd日 E"/><br>
完整时间: <fmt:formatDate value="${now}" pattern="a HH:mm:ss.S z"/><br>
常见格式: <fmt:formatDate value="${now}" pattern="yyyy-MM-dd HH:mm:ss"/>

除了fmt标签库 第二个也就是fn
fn标签提供各种实用功能,首先使用之前使用加入如下指令

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

用法举例:

${fn:substring(name, 0, 5)}

获取name的前5位

这里的调用fn函数 格式就直接是${}取值 放入fn函数
如fn:substring(name, 0, 5)

fn函数概览:
图片来源于 how2j
仔细看fn标签库里的函数
大部分和Java里的操纵字符串和比较字符串的方法作用是一致 只是表示格式不一样

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值