EL与JSTL

打印 上一主题 下一主题

主题 806|帖子 806|积分 2418

一、EL

(一)知识点1: EL表达式的功能

1.什么是EL表达式


  • Expression Language 表达式语言
2.EL使用场合


  • 在JSP使用,服务器会对其进行解析翻译,生成相应的Java代码.
3.EL的作用


  • 在JSP页面输出动态内容,可以替代JSP中的表达式元素
(二)知识点2: EL表达式的一般格式


  • 以${开始,以}结束
  • ${EL表达式}
(三)知识点3: EL表达式的内置对象

  为了能够方便地输出数据,EL提供了11个内置对象

  • 2个内置对象为了方便输出请求参数: param/paramValues;
  • 4个内置对象为了方便输出各个范围的属性: pageScope/ requestScope /sessionScope /applicationScope【使用较多,知识点4单独学习】
  • 2个与请求头有关的内置对象:header/headerValues
  • 2个其他内置对象:cookie/initParam
  • 1个特殊的内置对象pageContext

1.内置对象param

(1)语法


  • 用来输出请求参数的值,格式为${param.请求参数名字}
(2)例子


  • 使用表达式:
  • 使用EL:${param.name}
  • 结论:使用EL简单
(3)课堂练习


  • ①目标:使用param
  • ②步骤

    • 1)创建jsp
    • 2)在jsp使用EL接收请求参数
    • 3)在浏览器地址栏给jsp传递请求参数

  1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  2. <html>
  3.     <head>
  4.         <title>Title</title>
  5.         <base href="<%=request.getContextPath()%>/">
  6.     </head>
  7.     <body>
  8.         输出表达式:<%=request.getParameter("name")%><br>
  9.         el表达式:${param.name}<br>
  10.     </body>
  11. </html>
复制代码

2.内置对象paramValues:用来获取一对多的参数值,返回一个数组

(1)语法


  • ${paramValues.请求参数名称[索引]}
  • 取得同名参数的某一个索引的值
(2)例子:


  • 比如某请求参数是通过checkbox传递的,名字为hobbies,要输出所有hobbies值中的第一个值,可以使用如下两种方式:
  • 使用表达式:
  • 使用EL:${paramValues.hobbies[0]}
(3)课堂练习


  • ①目标:${paramValues.请求参数名称[索引]}取得同名参数的值
  • ②步骤

    • 1)jsp  form  checkbox hobbies
      1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
      2. <html>
      3.     <head>
      4.         <title>Title</title>
      5.         <base href="<%=request.getContextPath()%>/">
      6.     </head>
      7.     <body>
      8.         <form action="el/get_hobby.jsp">
      9.             爱好:
      10.             <input type="checkbox" name="hobbies" value="吃"/>吃
      11.             <input type="checkbox" name="hobbies" value="喝"/>喝
      12.             <input type="checkbox" name="hobbies" value="玩"/>玩
      13.             <input type="checkbox" name="hobbies" value="乐"/>乐<br/>
      14.             <input type="submit" value="提交"/>
      15.         </form>
      16.     </body>
      17. </html>
      复制代码
    • 2)提交到另一个jsp,接收同名的请求参数
      1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
      2. <html>
      3.     <head>
      4.         <title>Title</title>
      5.         <base href="<%=request.getContextPath()%>/">
      6.     </head>
      7.     <body>
      8.         使用java脚本表达式接收:<%=request.getParameterValues("hobbies")[0]%><br/>
      9.         使用EL接收:${paramValues.hobbies[1]}
      10.     </body>
      11. </html>
      复制代码



3.内置对象header:用来输出某一个请求头的值,


  • ${header.请求头名字}
4.内置对象headerValues


  • 如果某个请求头的值有多个,则使用headerValues返回一个数组
  • ${headerValues.请求头名字[index]}
5.内置对象cookie:用来获取cookie的值


  • ${cookie.名字.value}  取得是cookie的值
  • ${cookie.名字.name}  取得是cookie的名字
  1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  2. <html>
  3.     <head>
  4.         <title>Title</title>
  5.         <base href="<%=request.getContextPath()%>/">
  6.     </head>
  7.     <body>
  8.         header.accept:${header.accept}<br>
  9.         headerValues.cookie[0]:${headerValues.cookie[0]}<br>
  10.         cookie.JSESSIONID.value:${cookie.JSESSIONID.value}<br>
  11.         cookie.JSESSIONID.name:${cookie.JSESSIONID.name}<br>
  12.     </body>
  13. </html>
复制代码


6.内置对象initParam:用来输出上下文参数


  • ${initParam.上下文参数的名字}
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  3.          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4.          xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
  5.          version="4.0">
  6.     <context-param>
  7.         <param-name>name</param-name>
  8.         <param-value>kelly</param-value>
  9.     </context-param>
  10. </web-app>
复制代码
  1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  2. <html>
  3.     <head>
  4.         <title>Title</title>
  5.         <base href="<%=request.getContextPath()%>/">
  6.     </head>
  7.     <body>
  8.         获取上下文参数(initParam.name):${initParam.name}<br>
  9.     </body>
  10. </html>
复制代码
获取上下文参数(initParam.name):kelly
7.内置对象pageContext

(1)语义


  • EL中的pageContext对象可以调用PageContext类中所有符合规范的getXxx方法
(2)语法


  • ${pageContext.xxx}   xxx代表PageContext类的getXxx()方法将首字母小写的名字
  • 表示调用pageContext对象的getXxx()方法
  • ${pageContext.request.contextPath}取得工程的路径
  • 设置jsp的基准路径
(3)例子


  • 如PageContext类中有如下方法:public abstract ServletRequest getRequest(),   可以通过如下EL调用该方法:
  • ${pageContext.request}
  1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  2. <html>
  3.     <head>
  4.         <title>Title</title>
  5.         <base href="<%=request.getContextPath()%>/">
  6.     </head>
  7.     <body>
  8.         获取上下文路径(输出表达式):<%=request.getContextPath()%><br>
  9.         获取上下文路径(el):${pageContext.request.contextPath}<br>
  10.         获取请求对象:${pageContext.request}<br/>
  11.         获取请求的地址:${pageContext.request.remoteAddr}<br/>
  12.     </body>
  13. </html>
复制代码

(四)知识点4: EL表示式获取数据的作用域检索顺序

1.获取属性有关的内置对象有4个

pageScope:页面范围
requestScope:请求范围
sessionScope:会话范围
applicationScope:上下文范围

2.不写范围

(1)语法


  • ${变量名.属性名}
(2)检索顺序


  • 默认的访问顺序:pageScope→requestScope→sessionScope→applicationScope
  • 当不指定范围时,例如,${user.pwd},将自动从pageScope开始查找,直到applicationScope,
  • 如果在某一范围找到,直接显示,不再找了
  • 如果没查到,则什么也不显示
  1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  2. <html>
  3.     <head>
  4.         <title>Title</title>
  5.         <base href="<%=request.getContextPath()%>/">
  6.     </head>
  7.     <body>
  8.         <%
  9.             pageContext.setAttribute("name", "a");
  10.             request.setAttribute("name", "b");
  11.             session.setAttribute("name", "c");
  12.             application.setAttribute("name", "d");
  13.         %>
  14.         ${name} <br/>
  15.         ${age}
  16.     </body>
  17. </html>
复制代码

(五)知识点5: 强制使用某个作用域的属性

1.写范围

精确定位,使用pageScope/requestScope/sessionScope/applicationScope中的某一个内置对象获取属性时,则是强制使用该作用域的属性
(1)语法

${范围.变量名.属性名}
范围是指下面的其中的一个
pageScope:页面范围
requestScope:请求范围
sessionScope:会话范围
applicationScope:上下文范围
(2)检索顺序

精确定位指定范围的属性的值
如果查到显示
如果没查到,则什么也不显示
  1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  2. <html>
  3.     <head>
  4.         <title>Title</title>
  5.         <base href="<%=request.getContextPath()%>/"/>
  6.     </head>
  7.     <body>
  8.         <%
  9.             //四个域中同一属性名,四个不同的属性值
  10.             pageContext.setAttribute("name", "zs");
  11.             request.setAttribute("name", "lis");
  12.             session.setAttribute("name", "wangwu");
  13.             //application.setAttribute("name","zhaoliu");
  14.         %>
  15.         <%--没有指定域,查找顺序:pageContext->request->session->application--%>
  16.         ${name}<br/>
  17.         ${age}<br/>
  18.         session域中获取name值:${sessionScope.name}<br/>
  19.         <%--指定域中查找,如果找不到就显示空--%>
  20.         application域中获取name值:${applicationScope.name}<br/>
  21.     </body>
  22. </html>
复制代码

(六)知识点6: EL运算符

1.算术运算符

+,实现加法运算;
- 实现减法运算;
* 实现乘法运算;
/或div实现除法运算;
%或mod实现求模运算
  1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  2. <html>
  3.     <head>
  4.         <title>Title</title>
  5.         <base href="<%=request.getContextPath()%>/">
  6.     </head>
  7.     <body>
  8.         ${10+2} ${10-2}${10*2}${10/2}${10%3}
  9.     </body>
  10. </html>
复制代码
12 8 20 5.0 1
2.比较运算符(6种)

有6种比较运算符,可以对值进行比较,返回值为true或fasle
== 或eq表示等于
!= 或ne表示不等于
< 或lt表示小于
> 或gt表示大于
= 或ge表示大于等于
  1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  2. <html>
  3.     <head>
  4.         <title>Title</title>
  5.         <base href="<%=request.getContextPath()%>/">
  6.     </head>
  7.     <body>
  8.         ${10==2} ${10!=2} ${10>2} ${10<2} ${10>=2} ${10<=2} ${10 eq 2}
  9.     </body>
  10. </html>
复制代码
false false false
4.其他运算符

(七)知识点7: EL表达式的集合运算符等特殊运算符

1.集合运算符

使用[]指定索引的方式可以获取数组或List中的元素
(1)语法

${范围.集合变量[index].属性名}
返回请求范围内商品列表集合的第一个商品的名称:${requestScope.productsList[0].productName}
(2)课堂练习

①目标

使用EL取得集合中的某一元素
②步骤

1)创建一个集合 

2)将集合放到request作用域

3)在页面使用EL取得集合中第2个元素的值
  1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  2. <html>
  3.     <head>
  4.         <title>Title</title>
  5.         <base href="<%=request.getContextPath()%>/">
  6.     </head>
  7.     <body>
  8.         ${1==2 && 2==3} ${1==2 || 2==3} ${!true}
  9.     </body>
  10. </html>
复制代码

2.empty运算符:

(1)${empty 普通变量名}语法

从pageScope->requestScope->sessionScope->applicationScope找,如果找到值!=null说明不空,返回false,值为null或者””,返回true
如果找不到,说明没有该变量,值为null,返回true.
判断值是否为null,如果是null,返回true,否则返回false。
(2)${empty 集合变量名}

从pageScope->requestScope->sessionScope->applicationScope找,如果找到

  • 如果集合.size()==0,集合没有元素,认为是空的,返回true
  • 如果集合.size()>0,集合有元素,认为是非空的,返回false
如果找不到,说明没有该变量,值为null,返回true.
3.关系运算符(三目):

${A?B:C}如果A为true,则执行B,如果A为false,则执行C。
4.()运算符:

通过()可改变优先级
(八)总结

2.什么是EL?
Expression Language 表达式语言
3.EL使用场合
JSP,服务器解析翻译生成java代码
4.EL作用?
在JSP页面输出动态内容,代替java脚本表达式
5.EL语法格式
       ${EL表达式}
6.EL内置对象?
       EL有11个内置对象
       param paramValues
       pageScope requestScope sessionScope applicationScope
       header headerValues
       cookie initParam
       pageContext
       1.param
              1.语法:${param.请求参数名}
              2.例子:${param.name}
       2.paramValues
              1.语法:${paramValues.请求参数名[index]}
              2例子:${paramValues.hobbies[0]}
       3.header 输出某一个请求头的值
              1.语法:${header.请求头名字}
              2.例子:${header.accept}
       4.headerValues
              1.语法:${headerValues.请求头名字[index]}
              2.例子:${headerValues.cookie[0]}
       5.cookie
              1.语法:${cookie.名字.value}
              2.例子:${cookie.JSESSIONID.value}
       6.initParam
              1.语法:${initParam.上下文参数的名字}
              2.例子:${initParam.name}
                    
                            name
                            wangwu
                    
       7.pageContext
              1.${pageContext.request.contextPath}得到工程路径
       8~11 4大作用域
              pageScope
              requestScope
              sessionScope
              applicationScope
              1.不写作用域
                     语法:${变量名.属性名}
                     从pageScope->requestScope->sessionScope->applicationScope找
                            1.在某一范围找到,就直接显示,不再找了
                            2.如果没找到,就什么都不显示
              2.强制使用某一范围
                     语法:${范围.变量名.属性名}
                     1.精确使用某一范围找
                            1.在某一范围找到,就直接显示
                            2.如果没找到,就什么都不显示
7.EL运算符
       1.算术运算符 5中
              +-*/%
       2.比较运算符 6种
              1.== eq
              2.!= ne
              3.>   gt
              4.=  ge

              6.2) || (3                        ${a}
            [/code]
1.5.属性相关的标签

1.

  • 作用向指定作用域范围设置属性值
  • 相当于
  • scope属性是可省略的,如果不设置scope属性默认的作用域是page页面作用域


2.
从指定的作用域删除属性
指定scope属性,从指定的作用域删除属性.
scope属性是可省略的,如果不设置scope属性它会从小到大:pageScope->requestScope->sessionScope->applicationScope找属性,找到就删除,直到把找到的全部删除.

案例:
(1)不设置scope属性,把找到的全部删除  


(2)设置scope属性  


1.6.3.if标签

1、语法:

          标签体

2、说明: if标签的test属性里的条件表达式结果是true或者是false的布尔值,根据布尔值确定是否执行标签体


    • 如果条件表达式结果是true,则执行标签体
    • 否则不执行标签体

3、案例:

  1. <%@ page import="java.util.List" %>
  2. <%@ page import="java.util.ArrayList" %>
  3. <%@ page import="com.tjetc.entity.User" %>
  4. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  5. <html>
  6.     <head>
  7.         <title>Title</title>
  8.         <base href="<%=request.getContextPath()%>/">
  9.     </head>
  10.     <body>
  11.         <%
  12.             //创建一个集合
  13.             List<User> users = new ArrayList<>();
  14.             //将数据放入集合
  15.             users.add(new User(1L, "a", "111"));
  16.             users.add(new User(2L, "b", "222"));
  17.             users.add(new User(3L, "c", "333"));
  18.             users.add(new User(4L, "d", "444"));
  19.             //将集合放到request作用域
  20.             request.setAttribute("lists", users);
  21.         %>
  22.         <%--在页面使用EL取得集合中第2个元素的值 --%>
  23.         ${lists[1].username}
  24.         ${empty lists}
  25.         <%--true--%>
  26.         ${empty a}
  27.         <%--三目运算符输出结果--%>
  28.         ${2>1?"大于":"不大于"}
  29.         <%--()改变优先级--%>
  30.         ${(1+2)*(2+3)}
  31.     </body>
  32. </html>
复制代码

1.7.choose when otherwise标签

1、语法:

         
                     标签体
         
       
                     标签体
         

                     标签体
    
...

     标签体

 


  • 说明: 每个when标签的test属性里的条件表达式结果是true或者是false的布尔值,根据布尔值确定是否执行标签体,相当于if/else if/else结构,更像switch case

    • 如果条件表达式结果是true,则执行标签体
    • 否则不执行标签体

  • 课堂练习案例:
  1. <%@ page import="java.util.List" %>
  2. <%@ page import="java.util.ArrayList" %>
  3. <%@ page import="com.tjetc.entity.User" %>
  4. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  5. <html>
  6.     <head>
  7.         <title>Title</title>
  8.         <base href="<%=request.getContextPath()%>/">
  9.     </head>
  10.     <body>
  11.         <%
  12.             //创建一个集合
  13.             List<User> users = new ArrayList<>();
  14.             //将数据放入集合
  15.             users.add(new User(1L, "a", "111"));
  16.             users.add(new User(2L, "b", "222"));
  17.             users.add(new User(3L, "c", "333"));
  18.             users.add(new User(4L, "d", "444"));
  19.             //将集合放到request作用域
  20.             request.setAttribute("lists", users);
  21.         %>
  22.         <%--在页面使用EL取得集合中第2个元素的值 --%>
  23.         ${lists[1].username}
  24.         ${empty lists}
  25.         <%--true--%>
  26.         ${empty a}
  27.         <%--三目运算符输出结果--%>
  28.         ${2>1?"大于":"不大于"}
  29.         <%--()改变优先级--%>
  30.         ${(1+2)*(2+3)}
  31.     </body>
  32. </html>${score}                            分数为空            分数错误            A级            B级            C级            D级            E级            
复制代码
 
1.8.forEach标签


  • 语法: 替代java的循环 如:for(String s:strs){}

          标签体:${ 临时变量名}


  • 说明:

    • items放的是集合,可以从四大作用域之一取得,即可以使用EL表达式,${存储在作用域的集合变量名}
    • var=”临时变量名”, forEach标签处理器会循环遍历集合,对于遍历到的当前项会存储到pageContext作用域的属性名字是var的临时变量名,值是遍历到的当前项
    • 标签体取得就是临时变量名所存储的遍历到的当前项值.
    • begin从哪个索引位置开始循环,索引是从0开始
    • end到哪个索引位置结束循环,索引是从0开始
    • step:步长,代表每次走几个
    • varStatus:状态变量,属性有:

      • index:迭代的索引,是从0开始
      • count:迭代的次数,是从1开始
      • first:当前是否是第一项 true fasle
      • last:当前是否是最后一项 true false
      • current:当前项

    •  

  • 案例1:
    1. <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    复制代码
    1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    2. <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    3. <html>
    4.     <head>
    5.         <title>Title</title>
    6.         <base href="<%=request.getContextPath()%>/">
    7.     </head>
    8.     <body>
    9.         <%
    10.             int a = 10;
    11.             request.setAttribute("a", a);
    12.         %>
    13.         ${a}<br/>
    14.         <c:out value="${a}"></c:out>
    15.     </body>
    16. </html>
    复制代码
    1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    2. <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    3. <html>
    4.     <head>
    5.         <title>Title</title>
    6.         <base href="<%=request.getContextPath()%>/">
    7.     </head>
    8.     <body>
    9.         <c:if test="${not empty a}">
    10.             <c:out value="${a}"></c:out>
    11.         </c:if>
    12.     </body>
    13. </html>
    复制代码
  • 案例2:
    1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    2. <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    3. <html>
    4.     <head>
    5.         <title>Title</title>
    6.         <base href="<%=request.getContextPath()%>/">
    7.     </head>
    8.     <body>
    9.         <%--<c:if test="${not empty a}">
    10.             <c:out value="${a}"></c:out>
    11.         </c:if>--%>
    12.         <%--把请求参数score的值放到pagecontext作用域里 --%>
    13.         <c:set var="score" value="${param.score}"></c:set>
    14.         ${score}
    15.         <%--根据分数显示级别A~E级,如果不在0~100范围,提示分数错误 --%>
    16.         <c:choose>
    17.             <c:when test="${empty score}">分数为空</c:when>
    18.             <c:when test="${score<0 || score>100}">分数错误</c:when>
    19.             <c:when test="${score>=90}">A级</c:when>
    20.             <c:when test="${score>=80}">B级</c:when>
    21.             <c:when test="${score>=70}">C级</c:when>
    22.             <c:when test="${score>=60}">D级</c:when>
    23.             <c:otherwise>E级</c:otherwise>
    24.         </c:choose>
    25.     </body>
    26. </html>
    复制代码
    1. package com.tjetc.entity;
    2. public class User {
    3.     private Long id;private String username;private String password;
    4.     public User(Long id, String username, String password) {
    5.         this.id = id;
    6.         this.username = username;
    7.         this.password = password;
    8.     }
    9.     public Long getId() {return id; }
    10.     public void setId(Long id) {this.id = id;}
    11.     public String getUsername() { return username;}
    12.     public void setUsername(String username) {this.username = username; }
    13.     public String getPassword() {return password; }
    14.     public void setPassword(String password) {this.password = password;}
    15. }
    复制代码

1.8.1课堂案例:forEach
从请求参数设置页码:url?pages=17,用forEach实现分页页码的展示:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
实现效果:
  1. package com.tjetc.controller;
  2. import com.tjetc.entity.User;
  3. import javax.servlet.ServletException;
  4. import javax.servlet.annotation.WebServlet;
  5. import javax.servlet.http.HttpServlet;
  6. import javax.servlet.http.HttpServletRequest;
  7. import javax.servlet.http.HttpServletResponse;
  8. import java.io.IOException;
  9. import java.util.ArrayList;
  10. import java.util.List;
  11. @WebServlet("/user/list")
  12. public class UserListServlet extends HttpServlet {
  13.     @Override
  14.     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  15.         doPost(req, resp);
  16.     }
  17.     @Override
  18.     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  19.         List<User> users = new ArrayList<>();
  20.         users.add(new User(1L, "a", "111"));
  21.         users.add(new User(2L, "b", "222"));
  22.         users.add(new User(3L, "c", "333"));
  23.         users.add(new User(4L, "d", "444"));
  24.         req.setAttribute("users", users);
  25.         req.getRequestDispatcher("/jstl/user_list.jsp").forward(req, resp);
  26.     }
  27. }
复制代码
  1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  2. <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
  3. <html>
  4.     <head>
  5.         <title>Title</title>
  6.         <base href="<%=request.getContextPath()%>/">
  7.     </head>
  8.     <body>
  9.        <table border="1" cellspacing="0" cellpadding="1">
  10.            <tr>
  11.                <td>编号</td>
  12.                <td>用户名</td>
  13.                <td>密码</td>
  14.            </tr>
  15.            <%--遍历request域中的users 生成表格--%>
  16.            <c:forEach items="${users}" var="user">
  17.                <tr>
  18.                    <td>${user.id}</td>
  19.                    <td>${user.username}</td>
  20.                    <td>${user.password}</td>
  21.                </tr>
  22.            </c:forEach>
  23.        </table>
  24.     </body>
  25. </html>
复制代码

1.9.forTokens标签


  • 语法:

          标签体:${ 临时变量名}


  • 说明:

    • items放的是字符串变量名, 也可以直接写字符串,可以从四大作用域之一取得,即可以使用EL表达式,${存储在作用域的字符串变量名}
    • var=”临时变量名”, forToken标签处理器会循环遍历用分隔符分割出来的数组集合,对于遍历到的当前项会存储到pageContext作用域的属性名字是var的临时变量名,值是遍历到的当前项
    • 标签体取得就是临时变量名所存储的遍历到的当前项值.

  • 案例:
  1. <%@ page import="java.util.List" %>
  2. <%@ page import="java.util.ArrayList" %>
  3. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  4. <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
  5. <html>
  6.     <head>
  7.         <title>Title</title>
  8.         <base href="<%=request.getContextPath()%>/">
  9.     </head>
  10.     <body>
  11.         <%
  12.             List<String> list = new ArrayList<>();
  13.             list.add("a");
  14.             list.add("b");
  15.             list.add("c");
  16.             list.add("d");
  17.             pageContext.setAttribute("list", list);
  18.             pageContext.setAttribute("s", "b");
  19.         %>
  20.         <c:forEach items="${list}" var="s">
  21.             ${s}
  22.         </c:forEach>
  23.     </body>
  24. </html>
复制代码

 

  • 格式化fmt标签
 
 

  • 语法:




  • 说明:

    • 日期变量可以从作用域取得
    • 日期时间模式字符串按照Java的模式字符串标准


  • 案例:
  1. <%@ page import="java.util.List" %>
  2. <%@ page import="java.util.ArrayList" %>
  3. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  4. <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
  5. <html>
  6.     <head>
  7.         <title>Title</title>
  8.         <base href="<%=request.getContextPath()%>/">
  9.     </head>
  10.     <body>
  11.         <%
  12.             List<String> list = new ArrayList<>();
  13.             list.add("a");
  14.             list.add("b");
  15.             list.add("c");
  16.             list.add("d");
  17.             pageContext.setAttribute("list", list);
  18.             pageContext.setAttribute("s", "b");
  19.         %>
  20.         <c:forEach items="${list}" var="s" begin="0" end="3" step="1" varStatus="st">
  21.                 ${st.index}--${st.count}--${st.first}--${st.last}--${st.current}-- ${s}  <br/>
  22.         </c:forEach>
  23.     </body>
  24. </html>
复制代码

 

  • 总结
1.什么是JSTL
Jsp Standard Tag  Library Jsp标准标签库
2.JSTL的作用
       0.用java类实现动态的功能.
       1.简化jsp文件,不用写大量的java脚本
       2.标签可以重复使用,利于维护
3.JSTL结构
       1.标签库描述文件.tld
       2.标签处理器类
4.tld文件的结构
       1.uri:tld文件的唯一标识
       2.tag 标签元素
              1.name:标签的名称
              2.tag-class:标签处理器类
              3.body-content:标签体内容
              4.attribute标签的属性
                     1.name:属性名称
                     2.required:属性是否省略,true:不能省略 false:可以省略
                     3.rtexprvalue:是否使用动态表达式,true:可以使用 false:不可以使用
5.使用jstl标签的步骤
       1.mavn的pom
       2.
       3.
       4.
6.set标签
       1.语法:
             
       2.作用:
              向作用域添加属性名和值
       3.scope
              1.指定scope,会向指定的作用域添加属性名和值
              2.如果省略scope,默认会向page作用域添加属性和值
7.remove标签
       1.语法:
             
       2.作用:
              从作用域删除属性
       3.scope
              1.指定scope,会从指定的作用域删除属性
              2.如果省略scope,会从4个作用域从小到大依次寻找,找到就删除,直到全部删除为止.
8.if
       1.语法:
             
               if标签体
             
       2.作用:
              1.当条件表达式是true,则执行if标签体
              2.否则,就不执行if标签体
       3.例子:
              1.
                  if标签体
               
              2.
                  if标签体
               
              3.
               
             
                  if标签体
               
9.choose when otherwise
       1.语法:
             
                    
                             标签体
                    
                    
                             标签体
                    
                    
                             标签体
                    
                     ...
                    
                            标签体
                    
             
       2.if else if else switch case
10.forEach
       1.语法
             
                     ${临时变量名}
             
       2.说明:
              1.items:${集合变量名}取得存储在作用域里的集合值,可以对集合进行遍历
              2.对于遍历的每一项放到页面作用域的属性名为临时变量名的属性中
              3.可以通过在标签体使用${临时变量名}从页面作用域里取得当前循环遍历到的值,显示在页面上
              4.begin:循环从哪个索引开始取数据,索引从0开始
              5.end:循环到哪个索引结束,索引从0开始
              6.step:步长,每次走几个,默认是1,可以设置多个
              7.varStatus:状态变量,有5个属性
                     1.index:代表迭代的索引,从0开始
                     2.count:代表迭代的次数,从1开始
                     3.first:当前是否是第一项,是true,否则false
                     4.last:当前是否是最后一项,是true,否则是false
                     5.current:当前项
11.forTokens
       1.语法
             
                     ${临时变量名}
             
       2.说明:
              a)items放的是字符串变量名, 也可以直接写字符串,可以从四大作用域之一取得,即可以使用EL表达式,${存储在作用域的字符串变量名}
              b)var=”临时变量名”, forToken标签处理器会循环遍历用分隔符分割出来的数组集合,对于遍历到的当前项会存储到pageContext作用域的属性名字是var的临时变量名,值是遍历到的当前项
              c)标签体取得就是临时变量名所存储的遍历到的当前项值.
       3.例子
         request.setAttribute("s","a,b,c,d");
        
             ${token}
        
12.fmt:formatDate
       1.语法
             
       2.说明:
              1.
              2.pattern使用java的日期时间模式字符串
    3.例子
              Date d=new Date();
              request.setAttribute("d",d);
                         

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

何小豆儿在此

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表