JavaWeb el表达式 & jstl

目录

1. EL 表达式

1.1        什么是 EL 表达式, EL 表达式的作用?

1.2 EL 表达式搜索域数据的顺序

1.3 EL 表达式输出 Bean 的普通属性, 数组属性。List 集合属性, map集合属性

1.4 EL 表达式——运算

1.4.1 关系运算

 1.4.2 逻辑运算

1.4.3 算数运算

 1.5 EL 表达式的11 个隐含对象

1.5.2 pageContext 对象的使用

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

2. JSTL biaoqianku

2.1 JSTL 标签库的使用步骤

2.2 Core 可辛苦使用

2.2.1 

2.2.2 

2.2.3 标签

2.2.4 


 

1. EL 表达式

1.1        什么是 EL 表达式, EL 表达式的作用?

EL 表达式的全称是 : Expression Language 是表达式语言

EL 表达式的什么作用 : EL 表达式主要是代替jsp页面中的表达式脚本在jsp页面中进行数据的输出

因为 EL 表达式在输出数据的时候,要比jsp的表达式脚本要简洁很多

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

EL 表达式的格式是: ${表达式}

EL 表达式在输出null值的时候,输出的空串。jsp表达式脚本输出null值的时候,输出的是null字符串

1.2 EL 表达式搜索域数据的顺序

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

主要是输出域对象中的数据

当四个域中都有相同的key的数据 的时候,EL 表达式会按照四个域从小到大顺序去进行搜索,找到就输出,找不到输出空

<body> 
<% 
//往四个域中都保存了相同的 key 的数据。 
request.setAttribute("key", "request");
session.setAttribute("key", "session"); 
application.setAttribute("key", "application"); 
pageContext.setAttribute("key", "pageContext"); 
%>
${key} 
</body> 

1.3 EL 表达式输出 Bean 的普通属性, 数组属性。List 集合属性, map集合属性

需求----输出: Person 类中普通属性,数组属性.list 集合属性和map集合属性

Person 类

package com.hbkj.javaweb;

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

public class Person {
    // 需求-- 输出Person 类中普通属性, 数组属性。 list 集合属性和 map 集合属性

    // 姓名
    private String name;
    // 手机
    private String[] phones;
    // LIst 集合 存储城市
    private List<String> cities;
    private Map<String, Object> map;

    public int getAge() {
        return 18;
    }

    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;
    }
}

输出的代码 :

<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.Map" %>
<%@ page import="java.util.HashMap" %>
<%@ page import="com.hbkj.javaweb.Person" %><%--
  Created by IntelliJ IDEA.
  User: 人间失格
  Date: 2021/12/1
  Time: 11:46
  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>
<%
    Person person = new Person();
    person.setName("好帅呀!");
    person.setPhones(new String[]{"18610541354", "18688886666", "18699998888"});
    List<String> cites = new ArrayList<String>();
    cites.add("北京");
    cites.add("上海");
    cites.add("西安");
    person.setCities(cites);
    Map<String, Object> map = new HashMap<>();
    map.put("key1", "value1");
    map.put("key2", "value2");
    map.put("key3", "value3");
    person.setMap(map);
    pageContext.setAttribute("p", person);
%>

输出 Person : ${p}<br>
输出 Person 的name 属性: ${p.phones[0]}<br>
输出 Person 的 cities 集合中的元素值:${p.cities} <br>
输出 Person 的 List 集合中个别元素值:${p.cities[2]} <br>
输出 Person 的 Map 集合: ${p.map} <br>
输出 Person 的 Map 集合中某个 key 的值: ${p.map.key3} <br>
输出 Person 的 age 属性:${p.age} <br>
</body>
</html>

1.4 EL 表达式——运算

语法 : ${运算表达式} , EL 表达式支持如下运算符 :

1.4.1 关系运算

关系运算符

说明

范例

结果

== eq

等于

${ 5 == 5 } ${ 5 eq 5 }

true

!= ne

不等于

${ 5 !=5 } ${ 5 ne 5 }

false

< lt

小于

${ 3 < 5 } ${ 3 lt 5 }

true

> gt

大于

${ 2 > 10 } ${ 2 gt 10 }

false

<= le

小于等于

${ 5 <= 12 } ${ 5 le 12 }

true

>= ge

大于等于

${ 3 >= 5 } ${ 3 ge 5 }

false

 1.4.2 逻辑运算

1.4.3 算数运算

 1. empty 运算

empty 运算可以判断一个数据是否为空,如果为空,则输出true,不为空输出false。

以下几种情况为空 : 

        1. 值为null值的时候,为空

        2. 值为空串的时候,为空

        3. 值为Object 类型数组,长度为零的时候

        4. list集合,元素个数为零

        5. map集合,元素个数为零

<body> 
<% 
// 1、值为 null 值的时候,为空 
request.setAttribute("emptyNull", null); 
// 2、值为空串的时候,为空 
request.setAttribute("emptyStr", ""); 
// 3、值是 Object 类型数组,长度为零的时候 
request.setAttribute("emptyArr", new Object[]{}); 
// 4、list 集合,元素个数为零 
List<String> list = new ArrayList<>(); 
// list.add("abc"); 
request.setAttribute("emptyList", list); 
// 5、map 集合,元素个数为零 
Map<String,Object> map = new HashMap<String, Object>(); 
// map.put("key1", "value1"); 
request.setAttribute("emptyMap", map); 
%>
${ empty emptyNull } <br/>
${ empty emptyStr } <br/>
${ empty emptyArr } <br/>
${ empty emptyList } <br/>
${ empty emptyMap } <br/>
</body> 

2. 三元运算

表达式 1?表达式 2:表达式 3

如果表达式 1 的值为真,返回表达式 2 的值,如果表达式 1 的值为假,返回表达式 3 的值。

示例:

${12!=12 ? "我很帅!":"我没有骗你。"}

3.  " . "点运算 和[] 中括号运算符

点运算,可以输出Bean 对象中某个属性的值

[] 中括号运算,可以输出有序集合中某个元素的值.

并且[]中括号运算,还可以输出 map 集合中 key 里含有特殊字符的 key 的值。

<body> 
<% 
Map<String,Object> map = new HashMap<String, Object>(); 
map.put("a.a.a", "aaaValue"); 
map.put("b+b+b", "bbbValue"); 
map.put("c-c-c", "cccValue"); 
request.setAttribute("map", map); 
%> 
${ map['a.a.a'] } <br> 
${ map["b+b+b"] } <br> 
${ map['c-c-c'] } <br> 
</body>

 1.5 EL 表达式的11 个隐含对象

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

变量                                        类型                                                        作用

pageContext                         PageContextImpl                     它可以获取jsp中的九大内置对象

pageScope                           Map<String , Object>              它可以获取pageContext 域中的数据

requestScope                       Map<String , Object>              它可以获取Request域中的数据

sessionScope                       Map<String,Object>                 它可以获取 Session域中的数据

applicationScope                  Map<String,Object>               它可以获取 ServletContext 域中的数据

parame                                Map<String,String>                  它可以获取请求参数的值

paramValues                       Map<String,String[]> 它可以获取请求参数的值,获取多个值的时候使用

header                                 Map<String,String>                它可以获取请求头的信息

headerValues                   Map<String,String[]> 它可以获取请求头的信息,它可以获取多个值的情况

cookie                               Map<String,Cookie>  它可以获取当前请求的Cookie 信息

initParam         ​​​​​​​Map<String,String>  它可以获取在 web.xml 中配置的<context-param>上下文参数

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

pageScope         ==========>>>>> pageContext 域

requestScope     ==========>>>>> Request 域

sessionScope     ===========>>>>> Session 域

applicationScope ===========>>>>> servletContext 域

<body> 
<% 
pageContext.setAttribute("key1", "pageContext1"); 
pageContext.setAttribute("key2", "pageContext2"); 
request.setAttribute("key2", "request"); 
session.setAttribute("key2", "session"); 
application.setAttribute("key2", "application"); 
%>
${ applicationScope.key2 } 
</body> 

1.5.2 pageContext 对象的使用

1. 协议:request.getScheme()

2. 服务器 ip:request.getServerName()

3. 服务器端口: request.getServerPort()

4. 获取工程路径: getContextPath()

5. 获取请求方法:request.getMethod()

6. 获取客户端 ip 地址:request.getRemoteHost()

7. 获取会话的 id 编号:session.getId()

<body> 
<%-- 
request.getScheme() 它可以获取请求的协议 
request.getServerName() 获取请求的服务器 ip 或域名 
request.getServerPort() 获取请求的服务器端口号 
getContextPath() 获取当前工程路径 
request.getMethod() 获取请求的方式(
GET 或 POST) 
request.getRemoteHost() 获取客户端的 ip 地址 
session.getId() 获取会话的唯一标识 
--%> 
<% 
pageContext.setAttribute("req", request); 
%>
<%=request.getScheme() %> <br>1.协议: ${ req.scheme }<br> 
2.服务器 ip:${ pageContext.request.serverName }<br> 
3.服务器端口:${ pageContext.request.serverPort }<br> 
4.获取工程路径:${ pageContext.request.contextPath }<br> 
5.获取请求方法:${ pageContext.request.method }<br> 
6.获取客户端 ip 地址:${ pageContext.request.remoteHost }<br> 
7.获取会话的 id 编号:${ pageContext.session.id }<br> 
</body> 

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

param        Map<String,String>    它可以获取请求参数的值

paramValues   Map<String,String[]>   它也可以获取请求参数的值,获取多个值的时候使用。

示例代码:

输出请求参数 username 的值:${ param.username } <br> 
输出请求参数 password 的值:${ param.password } <br> 
输出请求参数 username 的值:${ paramValues.username[0] } <br> 
输出请求参数 hobby 的值:${ paramValues.hobby[0] } <br> 
输出请求参数 hobby 的值:${ paramValues.hobby[1] } <br> 

请求地址:

http://localhost:8080/demo03/a.jsp?username=mark&password=666666&hobby=java&hobby=php

header        Map<String,String>     它可以获取请求头的信息

headerValues   Map<String,String[]>    它可以获取请求头的信息,它可以获取多个值的情况

示例代码:

输出请求头【User-Agent】的值:${ header['User-Agent'] } <br> 
输出请求头【Connection】的值:${ header.Connection } <br> 
输出请求头【User-Agent】的值:${ headerValues['User-Agent'][0] } <br> 

cookie    Map<String,Cookie>    它可以获取当前请求的 Cookie 信息

示例代码:

获取 Cookie 的名称:${ cookie.JSESSIONID.name } <br> 
获取 Cookie 的值:${ cookie.JSESSIONID.value } <br>

initParam   Map<String,String>   它可以获取在 web.xml 中配置的<context-param>上下文参数

web.xml 中的配置:

<context-param> 
<param-name>username</param-name> 
<param-value>root</param-value> 
</context-param> 
<context-param> 
<param-name>url</param-name> 
<param-value>jdbc:mysql:///test</param-value> 
</context-param> 

示例代码:

输出<Context-param>username 的值:${ initParam.username } <br> 
输出<Context-param>url 的值:${ initParam.url } <br> 

2. JSTL biaoqianku

JSTL 标签库 全称是指 JSP Standard Tag Library JSP 标准标签库。是一个不断完善的开放源代码的 JSP 标签库。

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

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

 jsp 标签库中使用 taglib 指令引入标签库

CORE 标签库

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

XML 标签库<%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %>

FMT 标签库

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

SQL 标签库

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

FUNCTIONS 标签库

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

2.1 JSTL 标签库的使用步骤

1. 先导入 jstl 标签库的 jar 包

jstl-1.2.jar

2. 第二步, 受用taglib 指令引入标签库

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

2.2 Core 可辛苦使用

2.2.1 <c:set/>

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

<%-- 
i.<c:set /> 
作用:set 标签可以往域中保存数据 
域对象.setAttribute(key,value); 
scope 属性设置保存到哪个域 
page 表示 PageContext 域(默认值) 
request 表示 Request 域 
session 表示 Session 域 
application 表示 ServletContext 域 
var 属性设置 key 是多少 
value 属性设置值 
--%> 
保存之前:${ sessionScope.abc } <br> 
<c:set scope="session" var="abc" value="abcValue"/> 
保存之后:${ sessionScope.abc } <br>

2.2.2 <c: if/>

if 标签用来做 if 判断。

<%--
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> 

2.2.3 <c:choose> <c:when> <c:otherwise> 标签

作用:多路判断。跟 switch ... case .... default 非常接近

<%-- 
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", 180); 
%>
<c:choose> 
<%-- 这是 html 注释 --%> 
<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> 
<c:choose> 
<c:when test="${requestScope.height > 160}"> 
<h3>大于 160</h3> 
</c:when> 
<c:when test="${requestScope.height > 150}"> 
<h3>大于 150</h3> 
</c:when> 
<c:when test="${requestScope.height > 140}"> 
<h3>大于 140</h3> 
</c:when> 
<c:otherwise> 
其他小于 140 
</c:otherwise> 
</c:choose> 
</c:otherwise> 
</c:choose> 

2.2.4 <c:forEach/>

作用 : 遍历输出使用

1. 遍历1-10,输出

示例代码 ; 

<%--1.遍历 1 到 10,输出 
begin 属性设置开始的索引 
end 属性设置结束的索引 
var 属性表示循环的变量(也是当前正在遍历到的数据) 
for (int i = 1; i < 10; i++) 
--%> 
<table border="1"> 
<c:forEach begin="1" end="10" var="i"> 
<tr>
<td>第${i}行</td> 
</tr> 
</c:forEach> 
</table> 

2. 遍历Object 数组

示例代码 :

<%-- 2.遍历 Object 数组 
for (Object item: arr) 
items 表示遍历的数据源(遍历的集合) 
var 表示当前遍历到的数据 
--%> 
<% 
request.setAttribute("arr", new String[]{"18610541354","18688886666","18699998888"}); 
%>
<c:forEach items="${ requestScope.arr }" var="item"> 
${ item } <br> 
</c:forEach>

3. 遍历Map 集合

示例代码 : 

<% 
Map<String,Object> map = new HashMap<String, Object>(); 
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> 

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

Student 类:

public class Student { 
//4.编号,用户名,密码,年龄,电话信息 
private Integer id; 
private String username; 
private String password; 
private Integer age; 
private String phone; 
示例代码:<%--4.遍历 List 集合---list 中存放 Student 类,有属性:编号,用户名,密码,年龄,电话信息--%> 
<% 
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> 
<%--
items 表示遍历的集合 
var 表示遍历到的数据 
begin 表示遍历的开始索引值 
end 表示结束的索引值 
step 属性表示遍历的步长值 
varStatus 属性表示当前遍历到的数据的状态  
        Index  下标索引
        Count   第几个元素
        First   是否是第一个
        Last   是否是最后一个
        
for(int i = 1; i < 10; i+=2) 
--%> 
<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>${status.step}</td> 
</tr> 
</c:forEach> 
</table>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Iiversse

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值