JSTL表达式的理解和使用

JSP中可以使用EL表达式取出域对象中的数据, 但是仍然避免不了还是要在页面中书写一些java代码(如: 集合的遍历), 处理比较繁琐, 且代码不容易维护

使用需要添加两个jar包
在这里插入图片描述

作用

开发人员可以利用JSTL和EL来开发Web程序,取代传统直接在页面上嵌入Java程序的做法,以提高程序的阅读性、维护性和方便性。在jstl中, 提供了多套标签库, 用于方便在jsp中完成或简化相关操作

使用方式

需要在项目中导入jstl-1.2.jar ,jstl在后台由java代码编写, jsp页面中通过标签进行使用, 使用标签时, 会自动调用后台的java方法(jar包中的方法)

2)标签库的引入语法格式
<%@ taglib uri=“标签库的定位” prefix=“前缀(简称)” %>
一般都是使用语法之后自动引入

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

<%--向四个域中放入数据   setAttribute--%>
  <c:set var="msg" value="pageScopeMsg" scope="page" ></c:set>
  <c:set var="msg" value="requestScopeMsg" scope="request" ></c:set>
  <c:set var="msg" value="sessionScopeMsg" scope="session" ></c:set>
  <c:set var="msg" value="applicationScopeMsg" scope="application" ></c:set>
  <%--从四个域中取出数据  getAttribute--%>
  ${pageScope.msg}
  ${requestScope.msg}
  ${sessionScope.msg}
  ${applicationScope.msg}
  <hr/>
  <%--c remove 移除指定域中的数据的 removeAttribute --%>
  <c:remove var="msg" scope="page"></c:remove>
  <c:remove var="msg" scope="session"></c:remove>
  <c:remove var="msg" scope="request"></c:remove>
  <c:remove var="msg" scope="application"></c:remove>
  <hr/>
  <%--c out 输出标签中取出的域对象中的数据  --%>
  <c:out value="${pageScope.msg}" default="msg信息未找到"></c:out>
  <c:out value="${requestScope.msg}" default="msg信息未找到"></c:out>
  <c:out value="${sessionScope.msg}" default="msg信息未找到"></c:out>
  <c:out value="${applicationScope.msg}" default="msg信息未找到"></c:out>

单条件判断


<%--
test 相当于 if(判断条件)
var  判断条件的结果 保存到域对象中 数据的名称
scope 控制操作的域
--%>
<c:if test =“EL条件表达式”>
满足条件执行
</c:if >

案例

在这里插入图片描述

<%
pageContext.setAttribute("score",99);
%>
分数:${score} 级别:
<c:if test="${score ge 90 and score le 100}" var="f1">A</c:if>
<c:if test="${score ge 80 and score lt 90}"  var="f2">B</c:if>
<c:if test="${score ge 70 and score lt 80}"  var="f3">C</c:if>
<c:if test="${score ge 60 and score lt 70}"  var="f4">D</c:if>
<c:if test="${ score lt 60}" var="f5">E</c:if>

多条件判断

<c:choose >
    <c:when test =“EL表达式”>
       满足条件执行
    </c:when><c:otherwise>
       不满足上述when条件时执行
    </c:otherwise>
</c:choose >

在这里插入图片描述

<c:choose>
    <c:when test="${score ge 90}">A</c:when>
    <c:when test="${score ge 80}">B</c:when>
    <c:when test="${score ge 70}">C</c:when>
    <c:when test="${score ge 60}">D</c:when>
    <c:otherwise>E</c:otherwise>
</c:choose>

循环标签

<%--相当于for循环--%>
var: 迭代变量
begin: 迭代起始值 
end: 迭代结束值 
step: 迭代变量变化的步长
<c:forEach var="i" begin="1" end="9" step="1">
...
</c:forEach>
<%--相当于for each循环--%>
var: 迭代变量
items: 集合
<c:forEach var=“循环变量” items=“集合”>
...
</c:forEach>
<%--特殊字符串, 按照指定的分隔符, 分割遍历--%>
<c:forTokens items="集合" delims="特殊字符" var="循环变量">
...
</c:forEach>

<%--打印99乘法表--%>
<c:forEach begin="1" end="9" step="1" var="i">
    <c:forEach begin="1" end="${i}" step="1" var="j">
        ${j} * ${i} = ${j*i}
    </c:forEach>
    <br>
</c:forEach>

在这里插入图片描述
增强循环
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

打印99乘法表

<%--打印99乘法表--%>
<c:forEach begin="1" end="9" step="1" var="i">
    <c:forEach begin="1" end="${i}" step="1" var="j">
        ${j} * ${i} = ${j*i}
    </c:forEach>
    <br>
</c:forEach>

案例

<%@page import="java.sql.Date"%>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page import="com.bjsxt.pojo.Employee" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<html>
<head>
    <title>My JSP 'jstlel.jsp' starting page</title>
</head>

<body>
<%
    /*1.准备数据*/
    int n=70;//基本类型
    double avgScore = 99.45678;//基本类型
    Employee emp=new Employee();//引用类型
    emp.setEid(1);
    emp.setEname("张晓红");
    emp.setBirth(Date.valueOf("1999-12-12"));
    String [] strs = {"Java","Oracle","JSP","HTML"};//数组
    String courses="Java,Oracle,JSP,HTML,Servlet";//特殊的字符串
    String courses2="Java#Oracle#JSP#HTML#Servlet";//特殊的字符串
    String str = null;
    String str3 = "";
    List list = new ArrayList();//分配空间,没有元素
    list.add(90);
    list.add(80);
    List list2 =null;//没有分配空间
    List list3 =new ArrayList();//分配空间,没有元素  size()==0
    Map<String,String> map = new HashMap<String,String>();//Map
    map.put("cn", "China");
    map.put("fr", "France");
    //setAttribute
    request.setAttribute("n",n);
    request.setAttribute("avgScore",avgScore);
    request.setAttribute("emp",emp);
    request.setAttribute("strs",strs);
    request.setAttribute("courses",courses);
    request.setAttribute("courses2",courses2);
    request.setAttribute("now",new java.util.Date());
    request.setAttribute("list", list);
    request.setAttribute("list2", list2);
    request.setAttribute("list3", list3);
    request.setAttribute("map", map);
    request.setAttribute("str", str);
    request.setAttribute("str3", str3);
%>

//2.使用JSTL和EL输出
<h3>JSTL和EL标签的使用</h3>
n:${requestScope.n}
<hr/>
avgScore:${requestScope.avgScore} <br/>

<%--如果分数 90-100  A   80-90  B  80--C --%>
<c:if test="${requestScope.avgScore>=90 && requestScope.avgScore<=100}">A</c:if>
<c:if test="${requestScope.avgScore>=80 && requestScope.avgScore<90}">B</c:if>
<c:if test="${requestScope.avgScore<80}">C</c:if>
<br/>

<%--if()..else if()...else{}--%>
<c:choose>
    <c:when test="${requestScope.avgScore>=90}">A</c:when>
    <c:when test="${requestScope.avgScore>=80}">B</c:when>
    <c:when test="${requestScope.avgScore>=70}">C</c:when>
    <c:otherwise>D</c:otherwise>
</c:choose>
<br/>
分数:<fmt:formatNumber maxFractionDigits="2"  value="${requestScope.avgScore}"> </fmt:formatNumber>
<hr/>
姓名:${requestScope.emp.ename}<br/>
日期:${requestScope.emp.birth}<br/>
日期:<fmt:formatDate value="${requestScope.emp.birth}" pattern="yyyy年MM月dd日"></fmt:formatDate>
<hr/>

<c:forEach items="${requestScope.strs}" var="s" varStatus="vs">
    ${s}-->${vs.index}--->${vs.count}  <br/>
</c:forEach>
<hr/>

<%--如果字符串是按照逗号进行分割时候,就这种情况是可以直接进行遍历的--%>
<c:forEach items="${requestScope.courses}" var="s">
    ${s}--->
</c:forEach>
<hr/>
<c:forEach items="${requestScope.courses2}" var="s">
    ${s}--->
</c:forEach>
<hr/>

<%--进行特殊字符串的分割--%>
<c:forTokens items="${requestScope.courses2}" delims="#" var="s">
    ${s}--->
</c:forTokens>
<hr/>
<c:forEach items="${requestScope.map}" var="m">
    ${m.key}--->${m.value}
</c:forEach>
<hr/>
请选择每页显示的条数:
<select>
    <c:forEach begin="10"  step="10"   end="100" var="size">
        <option>${size}</option>
    </c:forEach>
</select>
</body>
</html>

编码不易 如有帮助到您 请支持一下 多谢

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DNCS高级工程师

你的创作是我打赏的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值