尚硅谷最新版JavaWeb全套教程,java web零基础入门完整版(三)

EL表达式

什么是EL表达式

在这里插入图片描述

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

    <%
        request.setAttribute("key", "值");
    %>

    表达式脚本输出key的值是:<%=request.getAttribute("key")%> <br>
    EL表达式输出key的值是:${key}
</body>
</html>

  • 这样输出的结果相同
  • EL表达式在输出null值(比如key1)的时候,输出的是空串;jsp表达式脚本输出null值的时候,输出的是null字符串
    在这里插入图片描述

EL表达式搜索四个域的顺序

EL表达式主要是在jsp页面中输出数据
主要是输出域对象中的数据

  • session中的数据浏览器关闭后才会消失,所以哪怕注释session后然后刷新页面,还是会输出session
  • 当四个域中都有相同的key的数据的时候,EL表达式会根据四个域的从小到大的顺序去进行搜索,找到就输出

EL表达式输出复杂的Bean对象

在这里插入图片描述

package com.atguigu.pojo;

import java.util.Arrays;
import java.util.List;
import java.util.Map;

public class Person {
    private String name;
    private String[] phones;
    private List<String> cities;
    private Map<String, Object> map;

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", phones=" + Arrays.toString(phones) +
                ", cities=" + cities +
                ", map=" + map +
                '}';
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String[] getPhones() {
        return phones;
    }

    public void setPhones(String[] phones) {
        this.phones = phones;
    }

    public List<String> getCities() {
        return cities;
    }

    public void setCities(List<String> cities) {
        this.cities = cities;
    }

    public Map<String, Object> getMap() {
        return map;
    }

    public void setMap(Map<String, Object> map) {
        this.map = map;
    }

    public Person(String name, String[] phones, List<String> cities, Map<String, Object> map) {
        this.name = name;
        this.phones = phones;
        this.cities = cities;
        this.map = map;
    }

    public Person() {
    }
}

<%@ page import="com.atguigu.pojo.Person" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.Map" %>
<%@ page import="java.util.HashMap" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <%
        Person person = new Person();
        person.setName("name111");
        person.setPhones(new String[]{"123", "456", "789"});

        List<String> cities = new ArrayList<String>();
        cities.add("beijin");
        cities.add("shanghai");
        cities.add("shenzheng");
        person.setCities(cities);

        Map<String, Object> map = new HashMap<>();
        map.put("key1", "value1");
        map.put("key2", "value2");
        map.put("key3", "value3");
        person.setMap(map);

        pageContext.setAttribute("key_person", person);
    %>

    ${ key_person }
</body>
</html>

<%@ page import="com.atguigu.pojo.Person" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.Map" %>
<%@ page import="java.util.HashMap" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <%
        Person person = new Person();
        person.setName("name111");
        person.setPhones(new String[]{"123", "456", "789"});

        List<String> cities = new ArrayList<String>();
        cities.add("beijin");
        cities.add("shanghai");
        cities.add("shenzheng");
        person.setCities(cities);

        Map<String, Object> map = new HashMap<>();
        map.put("key1", "value1");
        map.put("key2", "value2");
        map.put("key3", "value3");
        person.setMap(map);

        pageContext.setAttribute("key_person", person);
    %>

    ${ key_person } <br>
    ${ key_person.name } <br>
    ${ key_person.phones } <br>
    ${ key_person.phones[1] } <br>
    ${ key_person.cities } <br>
    ${ key_person.cities[1] } <br>
    ${ key_person.map } <br>
    ${key_person.map[key2]} <br>
</body>
</html>

在这里插入图片描述

  • 注意EL表达式是不需要引入jstl.jar的
  • 注意到输出map是输出花括号包裹的键值对;输出List得到的是由[]包裹起来的;输出数组得到的是首地址
  • 通过实验,我们注意到 :EL表达式中,找的不是这个属性,而是找这个属性所对应的get方法

关系运算

在这里插入图片描述

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

在这里插入图片描述

逻辑运算

在这里插入图片描述

算术运算

在这里插入图片描述

empty运算

在这里插入图片描述

<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.Map" %>
<%@ page import="java.util.HashMap" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <%
//        1、值为null值的时候,为空
        request.setAttribute("key1", null); // true
        request.setAttribute("key2", new Object()); // false ,非空!

//        2、值为空串的时候,为空
        request.setAttribute("key3", ""); // true
        request.setAttribute("key4", " "); // false

//        3、值是Object类型数组,长度为零时为空
        request.setAttribute("key5", new Object[]{}); // true
        request.setAttribute("key6", new Object[]{"12"}); // false

//        4、list集合,元素个数为零
        List<String> list = new ArrayList<>();
        request.setAttribute("key7", list); // true

//        5、map集合,元素个数为零
        Map<String, Object> map = new HashMap<String, Object>();
        request.setAttribute("key8", , map); // true
    %>

    ${ empty key1 }
</body>
</html>

三元运算

在这里插入图片描述
${ 12 == 12 ? "123" : "456" }

点运算和中括号运算

.点运算,可以输出bean对象中某个属性的值
[]中括号运算,可以输出有序集合中某个元素的值
并且中括号运算还可以输出map集合中 key 里含有特殊字符的key的值(比如. 和 逻辑运算符)
在这里插入图片描述

  • 不要忘了引号,单引号或者双引号都可以

11个EL隐含对象

在这里插入图片描述

pageScope、requestScope、sessionScope、applicationScope演示

在这里插入图片描述

  • 要先在某个域中setAttribute
  • 之前直接 ${ key1 } 是按四个域从小到大的顺序去搜索的
  • 如果使用比如 ${ applicationScope.key1 } 我们就可以选择性地去搜索了

pageContext演示

在这里插入图片描述

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

    1、协议

    <%--
      request.getScheme() 可以获取请求的协议
    --%>
    <%=request.getScheme()%> <br>   <%-- http --%>
    ${ pageContext.request.scheme } <br> <%-- 因为在el表达式中默认会找点后面内容所对应的"get"方法 --%> <%-- http --%>

    2、请求的服务器ip或域名

    <%=request.getServerName()%> <br>   <%-- localhost --%>
    ${ pageContext.request.serverName } <br>

    3、服务器端口

    <%=request.getServerPort()%> <br>
    ${ pageContext.request.serverPort } <br>

    4、获取当前的工程路径

    <%=request.getContextPath()%> <br>
    ${ pageContext.request.contextPath } <br>

    5、获取请求方法

    <%=request.getMethod()%> <br>
    ${ pageContext.request.method } <br>

    6、获取客户端ip地址

    <%=request.getRemoteHost()%> <br>
    ${ pageContext.request.remoteHost } <br>

    7、获取会话的id编号

    <%=session.getId()%> <br>
    ${ pageContext.session.id } <br>
</body>
</html>

在这里插入图片描述

  • 有同学就要问啦,不是说好的el表达式比表达式脚本简介嘛?有一个小技巧 :
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>

    <%
        pageContext.setAttribute("req", request);
    %>

    ${ req.scheme }
</body>
</html>

其他EL隐含对象的示例

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

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

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    输出请求参数username的值 :${ param.username }
</body>
</html>

在这里插入图片描述

  • 当一个参数有多个值时,用param只能得到其中一个,要得到全部的,应该用paramValues
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    ${ paramValues } <br>
    ${ paramValues.username[0] } <br>
    ${ paramValues.hobby[0] } <br>
    ${ paramValues.hobby[1] } <br>
</body>
</html>

在这里插入图片描述

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    ${ header } <br>
    ${ header['User-Agent'] } <br> <%-- 注意不能用header.User-Agent --%>
</body>
</html>

在这里插入图片描述

  • 如果有多个值的时候用headerValues,但是直接得到的是数组,还要配合下标使用
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    ${ headerValues['User-Agent'] } <br> <%-- 这样直接得到的是个数组,而不是具体内容 --%>
    ${ headerValues['User-Agent'][0] } <br>
</body>
</html>

在这里插入图片描述

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    ${ cookie } <br>
    获取cookie的名称 :${ cookie.JSESSIONID.name } <br>   <%-- 调用getName()方法 --%>
    
</body>
</html>

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

  • 要先在web.xml中配置参数,用initParam才有值
    在这里插入图片描述
    在这里插入图片描述

JSTL标签库

JSTL标签库的介绍

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

标签库的使用步骤

在这里插入图片描述

在这里插入图片描述

  • 在web-inf目录下创建一个lib目录用来放jar包
    在这里插入图片描述
    在这里插入图片描述
  • 还要 Add as Library,记得选 模块库,不是项目库

set标签

在这里插入图片描述

  • 其中,page是默认值
    在这里插入图片描述
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    保存之前:${ requestScope.abc } <br>

    <c:set scope="request" var="abc" value="abcValue" />

    保存之后:${ requestScope.abc } <br>

</body>
</html>

在这里插入图片描述

if标签

在这里插入图片描述

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <c:if test="${ 12 == 12 }">
        <h1>12 == 12</h1>
    </c:if>
</body>
</html>

在这里插入图片描述

choose,when,otherwise标签

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

在这里插入图片描述

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <%
        request.setAttribute("height", 180);
    %>

    <c:choose>
        <c:when test="${ requestScope.height > 190 }">
            <h2>小巨人</h2>
        </c:when>
        <c:when test="${ requestScope.height > 180 }">
            <h2>很高</h2>
        </c:when>
        <c:when test="${ requestScope.height > 170 }">
            <h2>还可以</h2>
        </c:when>
        <c:otherwise>
            <h2>剩下小于170的情况</h2>
        </c:otherwise>
    </c:choose>
</body>
</html>

使用foreach遍历1-10输出

在这里插入图片描述

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <c:forEach begin="1" end="10" var="i">
        <h1> ${ i } </h1>
    </c:forEach>
</body>
</html>

在这里插入图片描述

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <table>
        <c:forEach begin="1" end="10" var="i">
            <tr>
                <td>第${ i }</td>
            </tr>
        </c:forEach>
    </table>
</body>
</html>

在这里插入图片描述

使用foreach遍历Object数组

在这里插入图片描述

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <%
        request.setAttribute("arr", new String[]{"123", "456", "789"});
    %>

    <c:forEach items="${ requestScope.arr }" var="item">
        ${ item } <br>
    </c:forEach>
</body>
</html>

在这里插入图片描述

使用foreach遍历map集合

<%@ page import="java.util.Map" %>
<%@ page import="java.util.HashMap" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
   <%
       Map<String, Object> map = new HashMap<String, Object>();
       map.put("key1", "value1");
       map.put("key2", "value2");
       map.put("key3", "value3");

       request.setAttribute("map", map);
   %>
   
    <%-- for ( Map.Entry<String, Object> entry : map.entrySet())  --%>

    <c:forEach items="${ requestScope.map }" var="entry">
        <h1>${ entry } : ${ entry.key } = ${ entry.value }</h1>
    </c:forEach>
</body>
</html>

在这里插入图片描述

使用foreach遍历list集合

<%@ page import="java.util.Map" %>
<%@ page import="java.util.HashMap" %>
<%@ page import="java.util.List" %>
<%@ page import="com.atguigu.pojo.Student" %>
<%@ page import="java.util.ArrayList" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <%
        List<Student> studentList = new ArrayList<Student>();

        for (int i = 1; i <= 10; i ++ )
            studentList.add(new Student(i, "username" + i, "pass" + i, 18 + i, "phone" + i));

        request.setAttribute("stus", studentList);
    %>
   <table>
       <tr>
           <th>编号</th>
           <th>用户名</th>
           <th>密码</th>
           <th>年龄</th>
           <th>电话</th>
           <th>操作</th>
       </tr>
       <c:forEach items="${ requestScope.stus }" var="stu">
           <tr>
               <td>${ stu.id }</td>
               <td>${ stu.username }</td>
               <td>${ stu.password }</td>
               <td>${ stu.age }</td>
               <td>${ stu.phone }</td>
               <td> 删除、修改 </td>
           </tr>
       </c:forEach>
   </table>
</body>
</html>

在这里插入图片描述

foreach标签所有属性组合使用介绍

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值