EL&JSTL学习笔记以及用法详解

一.EL表达式

1.EL表达式概述:

Expression Language

2.作用:

EL(Expression Language) 是为了使JSP写起来更加简单。表达式语言的灵感来自于 ECMAScript 和 XPath 表达式语言,它提供了在 JSP 中简化表达式的方法,让Jsp的代码更加简化。

3.语法:${表达式类型}

例如:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
  ${3>4}
  </body>
</html>

结果
在这里插入图片描述

jsp会自动解析EL表达式,如果想要输出EL表达式句子的话,可以在jsp的page指令中添加参数 isELIgnored = “true”,或者是在EL表达式前面加 \

<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="true" %>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
  ${3>4}
  </body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
  \${3>4}
  </body>
</html>

结果:
在这里插入图片描述

4.EL表达式运算

运算符
在这里插入图片描述

运算代码:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
  <h3>算数运算符</h3>
  ${3+4}<br>
  ${3-4}<br>
  ${3/4}<br>
  ${3 div 4}<br>
  ${3%4}<br>
  ${3 mod 4}<br>
  <h3>比较运算符</h3><br>
  ${3>4}<br>
  ${3>2}<br>
  ${3==3}<br>
  ${3!=3}<br>
  <h3>逻辑运算符</h3><br>
  ${false && true}<br>
  ${false || true}<br>
  </body>
</html>

结果:
在这里插入图片描述

EL获取值

1.EL表达式只能从域对象中获取值
*域对象:Javaweb四大域对象分别是PageContext、request、session、ServletContext.

2.语法:
语法一:
在这里插入图片描述

如果没有找到值,则会输出空字符串,不会输出null

代码展示:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <%
        request.setAttribute("name","zhangsan");
        session.setAttribute("name","lisi");
    %>
    ${requestScope.name}<br>
    ${sessionScope.name}
</body>
</html>

结果展示:
在这里插入图片描述
语法二:不需要加域名,直接用键,例如:${name}
那么按域的大小,从小到大找是否存在键为name的键值对,找到就结束,否则继续往下找,知道找完位置

四大域的大小:
PageContext<request<session<ServletContext

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <%
        request.setAttribute("name","zhangsan");
        session.setAttribute("name","lisi");
    %>
    ${name}
</body>
</html>

因为request<session域,所以先找到request域中存储的name键值对,输出结果为zhangsan

结果展示:
在这里插入图片描述

EL获取对象值

user对象的class

public class User {
    private String username;
    private String password;
    private int id;
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

创建一个user对象,存储到request域中

<%@ page import="cn.itcast.domain.User" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <%
        User user = new User();
        user.setId(1);
        user.setUsername("zhangsan");
        user.setPassword("123456");
        request.setAttribute("user",user);
    %>
    ${requestScope.user}
</body>
</html>

通过${requestScope.user}只能获取到对象的地址值,如果要获取对象的成员变量的值,需要通过属性来完成,而并非成员变量

属性是什么?
setter或getter方法去掉set或get然后首字母变小写就得到了属性,如果没有setter方法就没有属性
例如 setName->Name>name,那么此时name就是属性

例如:我们这里获取username的值,通过属性来完成

${requestScope.user.username}

为什么说是通过属性获取的值而不是成员变量呢,如果没有getter方法是获取不到值的,因为成员变量的私有的无法直接获取,而是间接调用getter,只不过简写了,大家可以尝试一下.

EL获取list集合的值

语法:${域名.键名[索引]}

<body>
    <%
        List list  = new ArrayList<>();
        list.add("张三");
        list.add("李四");
        list.add("王五");
        request.setAttribute("list",list);
    %>
    ${requestScope.list}<br><!--获取整个list集合的值-->
    ${requestScope.list[0]}<!--张三-->
</body>

在这里插入图片描述

EL获取map集合的值

语法:
语法1:${域名.键名.key名}
语法2:${域名.键名[key名]}

<body>
    <%
        Map map = new HashMap();
        map.put("zhangsan","张三");
        map.put("lisi","李四");
        map.put("wangwu","王五");
        request.setAttribute("map",map);
    %>
    ${requestScope.map."list"}<br><!--李四-->
    ${requestScope.map["zhangsan"]}<!--张三-->
</body>

在这里插入图片描述

EL_empty运算符

常用于判断对象是否为空,或者字符串长度是否为0
在这里插入图片描述

<body>
    <%
        Map map = new HashMap();
        String str="";
    %>
    ${empty map}<br><!--为null,返回true-->
    ${empty str}<!--字符串长度为0,返回true-->
</body>

在这里插入图片描述

EL隐式对象PageContext对象

通过PageContext对象可以获取其他隐式对象,调用方法即可
在这里插入图片描述
这里主要学习PageContext对象,用的很多
1.用于获取动态虚拟路径

${pageContext.request.contextPath}

JSTL

概述和作用:

1.概述:JSTL(Java server pages standarded tag library,即JSP标准标签库)是由JCP(Java community Proces)所制定的标准规范,它主要提供给Java Web开发人员一个标准通用的标签库,并由Apache的Jakarta小组来维护。

2.作用:开发人员可以利用这些标签取代JSP页面上的Java代码,从而提高程序的可读性,降低程序的维护难度。

使用步骤

step1.导入JSTL相关的jar包到项目中
step2.引入标签库:taglib指令:

<%@ taglib %>

step3.使用标签

JSTL常用标签

1.下载JSTL的jar包
2.导入jar包到WEB-INF/lib目录下
3.jsp中引入标签库就可以使用了

<%--导入core和fmt标签--%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="f" uri="http://java.sun.com/jsp/jstl/fmt"%>

核心标签库core

核心标签库中,一般用途标签分别有<c:out>,<c:set>,<c:remove>,<c:catch>

1. < c : o u t > <c:out> <c:out>

<c:out>标签和<%=jsp脚本%>或${EL表达式}作用是一样的,都是在页面输出静态或动态信息.

语法:<c:out value=“value”[default = “defaultvalue”][escapXml]="{true|false}">

示例:输出"你好啊",和一个对象的属性值

<body>
    <%
        User user = new User();
        user.setUsername("lisi");
        user.setPassword("123");
        user.setId(15);
        request.setAttribute("user",user);
    %>
    <%--输出"你好啊",输出request域user对象中的username属性--%>
    <c:out value="你好啊"/>
    <c:out value="${requestScope.user.username}"/>
</body>

2. < c : s e t > <c:set> <c:set>

语法:<c:set value = “value” var = “varName” [scope="{page|request|session|application}"]/>,value是值,var是存值的变量名,scope是选择存值的域对象

示例:使用java脚本生成一个随机数,然后用<c:set> 标签把随机数存到request域对象中,然后<c:out>输出

<body>
    <%
        int rand = (int)(Math.random()*100);
    %>
    <c:set value="<%=rand%>" var="r" scope="request"></c:set>
    <c:out value="${r}"></c:out>
</body>

3. < c : r e m o v e > <c:remove> <c:remove>

语法<c:remove var=“varName” scope=“四大域对象之一”/>

示例,把随机数存储到request域中,再用<c:remove>删除

<body>
    <%
    int rand = (int)(Math.random()*100);
    request.setAttribute("rand",rand);
    %>
    <%--获取随机数--%>
    <c:out value="${rand}"></c:out>
    <c:remove var="rand" scope="request"></c:remove>
    <%--移除后获取随机数--%>
    <c:out value="${rand}"></c:out>
</body>

4. < c : i f > <c:if> <c:if>

语法:<c:if test=“判断条件”>输出信息</c:if>,当test里面条件成立,返回true时,才会输出输出信息,一般和EL表达式配套使用
注意:JSTL中是没有if…else语法结构的,如果需要使用if…else,可以使用两个if来代替

示例:判断随机数是否大于50

<body>
    <%
        int rand = (int)(Math.random()*100);
        request.setAttribute("rand",rand);
    %>
    <c:if test="${rand>50}">随机数大于50</c:if>
</body>

5. < c : c h o o s e > < c : w h e n t e s t = " " > < c : o t h e r w i s e > <c:choose><c:when test=""><c:otherwise> <c:choose><c:whentest=""><c:otherwise>

这个语法想当于java中的switch语句
语法:
<c:choose>
<c:when test=""></c:when>
<c:when test=""></c:when>
<c:when test=""></c:when>

<c:otherwise></c:otherwise>
</c:choose>

示例判断随机数实在50~80,80~100,还是小于50

<body>
    <%
        int rand = (int)(Math.random()*100);
        request.setAttribute("rand",rand);
    %>
     <c:choose>
         <c:when test="${rand>=80}">rand在80~100</c:when>
         <c:when test="${rand>=50}">rand在50~80</c:when>
         <c:otherwise>rand小于50</c:otherwise>
     </c:choose>
</body>

6.迭代输出 < c : f o r E a c h > <c:forEach> <c:forEach>

参数<c:forEach var=“varName” items="${集合对象}"/>

示例输出list集合的所有值

<body>
    <%
        List list = new ArrayList<>();
        list.add("zhangsan");
        list.add("list");
        list.add("wangwu");
        request.setAttribute("list",list);
    %>
    <table>
        <c:forEach var="listvalue" items="${list}">
                    ${listvalue}<br>
        </c:forEach>
    </table>
</body>

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值