EL表达式&JSTL标签库2

简介: EL表达式&JSTL标签库2

e) EL表达式的11个隐含对象

EL表达式中11个隐含对象,是EL表达式中自己定义的,可以直接使用。


i.EL获取四个特定域中的属性


scope.jsp

<%--
  Created by IntelliJ IDEA.
  User: lenovo
  Date: 2021/8/17
  Time: 下午 02:02
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <%
        pageContext.setAttribute("key1","pageContext1");
        pageContext.setAttribute("key2","pageContext2");
        request.setAttribute("key2","request");
        session.setAttribute("key2","session");
        session.setAttribute("key2","session");
        application.setAttribute("key2","application");
    %>
    ${ applicationScope.key2 }
</body>
</html>

ii. pageContext对象的使用

  1. 协议:
  2. 服务器ip:
  3. 服务器端口:
  4. 获取工程路径:
  5. 获取请求方法:
  6. 获取客户端ip地址:
  7. 获取会话的id编号:

pageContext.jsp

<%--
  Created by IntelliJ IDEA.
  User: lenovo
  Date: 2021/8/17
  Time: 下午 02:09
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%--    ${ pageContext } //org.apache.jasper.runtime.PageContextImpl@6a8c1e75--%>
    <%--
    request.getScheme() 它可以获取请求的协议
    request.getServerName() 它可以获取请求的服务器ip或域名
    request.getServerPort() 它可以获取请求的服务器端口
    request.getContextPath() 它可以获取工程路径
    request.getMethod() 它可以获取请求方法
    request.getRemoteHost() 它可以获取客户端ip地址
    session.getId() 它可以获取会话的id编号(唯一标识)
    --%>
    <%
        //使用技巧
        pageContext.setAttribute("req",request);
    %>
    <%=request.getScheme()%><br/>
    1.协议:${req.scheme}<br/>
    <%=request.getServerName()%><br/>
    2.服务器ip:${pageContext.request.serverName}<br/>
    <%=request.getServerPort()%><br/>
    3. 服务器端口:${pageContext.request.serverPort} <br/>
    <%=request.getContextPath()%><br/>
    4. 获取工程路径: ${pageContext.request.contextPath}<br/>
    <%=request.getMethod()%><br/>
    5. 获取请求方法:${pageContext.request.method}<br/>
    <%=request.getRemoteHost()%><br/>
    6.  获取客户端ip地址:${pageContext.request.remoteHost}<br/>
    <%=session.getId()%><br/>
    7.获取会话的id编号:${pageContext.session.id}<br/>
</body>
</html>

iii. EL表达式其他隐含对象的使用

param     Map<String,String>    它可以获取请求参数的值
paramValues   Map<String,Stringll>  它也可以获取请求参数的值,获取多个值的时候使用。
header      Map<String, String>   它可以获取请求头的信息
headerValues  Map<String,String[]>  它可以获取请求头的信息,它可以获取多个值的情况
cookie      Map<String, Cookie>   它可以获取当前请求的Cookie信息
initParam   Map<String,String>    它可以获取在web.xm/中配置的context-param>上下文参数


other_el_obj.jsp

<%--
  Created by IntelliJ IDEA.
  User: lenovo
  Date: 2021/8/17
  Time: 下午 02:27
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%-- http://localhost:8080/09_EL_JSTL/other_el_obj.jsp?username=wzg168&password=666666&hobby=java&hobby=cpp --%><%--打开Tomact,Ctrl+鼠标左键--%>
    输出请求参数username的值:${ param.username }<br/>
    输出请求参数password的值:${ param.password }<br/>
    ${ param.hobby }<br/>
    输出请求参数username的值:${ paramValues.username[0]}<br/>
    输出请求参数hobby的值:${ paramValues.hobby[0]}<br/>
    输出请求参数hobby的值:${ paramValues.hobby[1]}<br/>
    <hr/>
    输出请求头【User-Agent】的值:${ header['User-Agent'] }<br/>
    输出请求头【Connection】的值:${ header['Connection'] }<br/>
    输出请求头【User-Agent】的值:${ headerValues['User-Agent'][0] }<br/>
    <hr/>
    获取Cookie的名称:${ cookie.JSESSIONID.name }<br/>
    获取Cookie的值:${ cookie.JSESSIONID.value }<br/>
    <hr/>
    输出&lt;Context-param&gt;username的值:${ initParam.username }<br/><%--配置web.xml要重新部署才能生效--%>
    输出&lt;Context-param&gt;url的值:${ initParam.url }<br/>
</body>
</html>

2、JSTL标签库(次重点)

【尚硅谷最新版JavaWeb全套教程,java web零基础入门完整版-哔哩哔哩】https://b23.tv/Zcydn7
JSTL标签库全称是指JSP Standard Tag LibranyISP标准标签库。是一个不断完善的开放源代码的JSP标签库。


EL表达式主要是为了替换jsp中的表达式脚本,而标签库则是为了替换代码脚本。这样使得整个jsp页面变得更佳简洁。


JSTL由五个不同功能的标签库组成。


在jsp标签库中使用laglib指令引入标签库




f)JSTL标签库的使用步骤

1、先导入jst标签库的jar包。

下载地址:https://download.csdn.net/download/qq_51625007/21117479
taglibs-standard-impl-1.2.5.jar

taglibs-standard-spec-1.2.5.jar

2、第二步,使用tagib指令引入标签库。

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

3、配置

JSTL标签库配置

g)core核心库使用

i. <c:set/>

作用:set标签可以往域中保存数据

ii. <c:if/>

作用:if 标签用来做if判断

iii. <c:choose><c:when><c:otherwise>标签

作用:多路判断,跟switch…case…default 非常接近

core.jsp

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%--
  Created by IntelliJ IDEA.
  User: lenovo
  Date: 2021/8/17
  Time: 下午 03:09
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%--
    i.<c:set/>
    作用:set标签可以往域中保存数据
    域对象.setAttribute(key,value);
    保存在哪个域
    scope 属性设置保存在哪个域
        page 表示 PageContext 域(默认)
        request 表示 Request 域
        session 表示 Session 域
        application 表示 ServletContext 域
    var属性设置key是多少
    value属性设置值
--%>
    保存之前:${ requestScope.abc }<br/>
    <c:set scope="request" var="abc" value="abcValue"/>
    保存之后:${ requestScope.abc }<br/>
    <hr>
<%--
    ii.<c:if/>
    if 标签用来做if判断
    test属性表示判断的条件(使用EL表达式输出)
--%>
    <c:if test="${ 12 == 12 }">
        <h1>12等于12</h1>
    </c:if>
    <c:if test="${ 12 != 12 }">
    <h1>12等于12</h1>
    </c:if>
    <hr/>
<%--
    iii. <c:choose><c:when><c:otherwise>标签
    作用:多路判断,跟switch...case...default 非常接近
    choose标签开始选择判断
    when标签表示每一种判断情况
        test表示当前判断情况的值
    otherwise标签表示剩下的情况
    <c:choose><c:when><c:otherwise>标签使用时需要注意的点:
        1、标签里不能使用HTML注释,要使用jsp注释
        2、when标签的父标签一定要是choose标签
---%>
    <%
        request.setAttribute("height",178);
    %>
    <c:choose>
        <c:when test="${ requestScope.height > 196 }">
            <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:choose>
                <c:when test="${ requestScope.height > 160 }">
                    <h2>大于160</h2>
                </c:when>
                <c:when test="${ requestScope.height > 150 }">
                    <h2>大于150</h2>
                </c:when>
                <c:when test="${ requestScope.height > 140 }">
                    <h2>大于140</h2>
                </c:when>
                <c:otherwise>
                    <h2>其他小于140的情况</h2>
                </c:otherwise>
            </c:choose>
        </c:otherwise>
    </c:choose>
</body>
</html>

iv.<c:forEach/>

作用:遍历输出使用。

1.遍历1到10,输出

2.遍历object数组

3. 遍历Map集合

4.遍历List集合–list中存放Student类,有属性:编号,用户名,密码,年龄,电话信息

在pojo包下

Student

package com.pojo;
public class Student {
//  有属性:编号,用户名,密码,年龄,电话信息
    private Integer id;
    private String username;
    private String password;
    private int age;
    private String phone;
    public Student() {
    }
    public Student(Integer id, String username, String password, int age, String phone) {
        this.id = id;
        this.username = username;
        this.password = password;
        this.age = age;
        this.phone = phone;
    }
    public Integer getId() {
        return id;
    }
    public void setId(Integer 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;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getPhone() {
        return phone;
    }
    public void setPhone(String phone) {
        this.phone = phone;
    }
    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", age='" + age + '\'' +
                ", phone='" + phone + '\'' +
                '}';
    }
}

forEach.jsp

<%@ page import="java.util.HashMap" %>
<%@ page import="java.util.Map" %>
<%@ page import="java.util.List" %>
<%@ page import="com.pojo.Student" %>
<%@ page import="java.util.ArrayList" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%--
  Created by IntelliJ IDEA.
  User: lenovo
  Date: 2021/8/17
  Time: 下午 05:35
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
    <style>
        table{
            border: 1px black solid;
            width: 600px;
            border-collapse: collapse;
        }
        td,th{
            border: 1px black solid;
        }
    </style>
</head>
<body>
    <%--1.遍历1到10,输出
        begin 属性设置开始的索引
        end 属性设置结束的索引
        var 属性表示循环的变量(也是当前正在遍历的数据)
        for(int i=0;i<10;i++)
    --%>
    <table border="1">
        <c:forEach  begin="1" end="10" var="i">
        <tr>
            <td>第${ i }行</td>
        </tr>
        </c:forEach>
    </table>
    <hr/>
    <%--2.遍历object数组
        for(Object : arr)
        items 表示遍历的数据源(遍历的集合)
        var 表示遍历到的数据
    --%>
    <%
        request.setAttribute("arr",new String[]{"18610541354","18688886666","18699998888"});
    %>
    <c:forEach items="${requestScope.arr}" var="item">
        ${ item } <br/>
    </c:forEach>
    <hr/>
    <%--    --%>
    <%
        Map<String,Object> map=new HashMap<>();
        map.put("key1","value1");
        map.put("key2","value2");
        map.put("key3","value3");
//        for(Map.Entry<String,Object> entry: map.entrySet()){
//
//        }
        request.setAttribute("map",map);
    %>
    <c:forEach items="${ requestScope.map }" var="entry">
        <h1>${ entry.key } = ${ entry.value }<h1/>
    </c:forEach>
    <hr/>
    <%--4.遍历List集合--list中存放Person类,有属性:编号,用户名,密码,年龄,电话信息
    --%>
     <%
          List<Student> studentList=new ArrayList<>();
          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>
    <%--
        items 表示遍历的集合
        var 表示遍历到的数据
        begin 表示遍历开始的索引值
        end 表示遍历结束的索引值
        step 表示遍历的步长值 类似i++,i+=2
        for(int i=1;i<10;i+=2)
        varStatus 属性表示当前遍历到的数据的状态
    --%>
    <c:forEach begin="2" end="7" step="2" varStatus="status" 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>
<%--             <td>${status.index}</td>--%>
         </tr>
    </c:forEach>
    </table>
</body>
</html>

varStatus属性所实现的接口






相关文章
|
Web App开发 数据可视化 JavaScript
【数学建模竞赛】超赞作图网站分享Apache ECharts
【数学建模竞赛】超赞作图网站分享Apache ECharts
461 2
|
算法 调度
操作系统中几种最常见的调度算法(适用于软件设计师考试与期末考试复习)
先进先出置换算法我们可以理解为排队准则(谁先来,谁就先运行)先来先到原则。该算法总是淘汰最先进入主页的页面,即选择在主存中驻留时间最久的页面淘汰。该算法简单,只要把一个进程调入主存的页面,然后按照先后链接一个队列,并设置一个指针即可。它是一个最直观、性能最差的算法,会有 Belady 现象(是指一个进程未分配它所要求的全部页面,有时就.....
1898 1
操作系统中几种最常见的调度算法(适用于软件设计师考试与期末考试复习)
|
Java Maven Spring
maven项目,动态读取外部配置文件
maven项目,动态读取外部配置文件
|
编解码 算法 数据处理
基于八叉树的空间划分及搜索操作
基于八叉树的空间划分及搜索操作
基于八叉树的空间划分及搜索操作
|
网络协议 开发工具 C语言
Jetson错误(二):wget命令提示无法解析主机地址的问题解决
对于解决在NVIDIA Jetson平台上使用wget命令时出现的无法解析主机地址的问题,提供了两种解决方法:一种是临时修改DNS服务器为Google的公共DNS,另一种是永久修改DNS设置。
606 5
|
前端开发 JavaScript API
解锁高效应用构建:Vuex与后端交互的前端状态同步策略,让数据流动如行云流水,紧跟前端开发的热点趋势
【8月更文挑战第27天】本文深入探讨了Vue框架下的前端状态管理库Vuex与后端服务交互时的状态同步策略。通过剖析Vuex的核心机制——状态(State)、变异(Mutation)、动作(Action)及模块(Module),文章展示了如何优雅地将后端数据加载并更新至前端状态中。特别地,借助示例代码解释了Action处理API调用、Mutation更新状态的过程,并介绍了如何通过模块化和命名空间提高状态管理的准确性和时效性。此外,还讨论了组件如何利用`mapState`和`mapActions`简化状态访问与操作的方法。遵循这些策略,开发者可以在构建复杂应用时显著提升性能与用户体验。
388 0
|
机器学习/深度学习 算法 数据安全/隐私保护
基于yolov4深度学习网络的公共场所人流密度检测系统matlab仿真,带GUI界面
本项目使用 MATLAB 2022a 进行 YOLOv4 算法仿真,实现公共场所人流密度检测。通过卷积神经网络提取图像特征,将图像划分为多个网格进行目标检测和识别,最终计算人流密度。核心程序包括图像和视频读取、处理和显示功能。仿真结果展示了算法的有效性和准确性。
349 31
|
11月前
|
Apache
Qwen2.5-Coder: 码无止境,学无止境!
Qwen2.5-Coder: 码无止境,学无止境!
|
安全 NoSQL 前端开发
weblogic中间件漏洞总结(三)
weblogic中间件漏洞总结
896 84
weblogic中间件漏洞总结(三)
|
存储 缓存 算法
作者推荐 | 【深入浅出MySQL】「底层原理」探秘缓冲池的核心奥秘,揭示终极洞察
MySQL作为一个存储系统,有着一个关键的优化机制——缓冲池(buffer pool),它极大地提高了数据的访问效率,避免了频繁的磁盘IO操作。通过将常用的数据存储在内存中,MySQL可以快速响应查询请求,减少耗时的磁盘访问。这一优化机制在提升数据库性能方面起到了重要的作用。
714 7
作者推荐 | 【深入浅出MySQL】「底层原理」探秘缓冲池的核心奥秘,揭示终极洞察