Day7-EL表达式

我的学习路线

——本次学习的简单说明

本次的学习分为九节
注:点击题目会跳转到其他博客链接

Day1:JSP的入门&环境的配置&Tomcat的注意点
Day2:简单项目的创建和基本的功能的实现(打war包,共享项目)
Day3:JSP基础语法
Day4:JSP 九大内置对象及四个作用域
Day5:JavaBean 组件
Day6:Servlet 开发
Day7:EL 表达式
Day8:Jsp 自定义标签
Day9:Jsp 标准标签库

持续更新中:新的博客写完会加链接

下面是Day7的学习

EL 表达式简介

  1. 表达式语言(Expression Language,EL)
  2. 百度百科:el 表达式
    百科的链接:https://baike.baidu.com/item/EL%E8%A1%A8%E8%BE%BE%E5%BC%8F/1190845?fr=aladdin
  3. 重点

在这里插入图片描述

  1. 例子

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

EL 表达式内置对象

编号表达式内置对象说明
1pageContext表示 javax.servlet.jsp.PageContext 对象
2pageScope表示从 page 属性范围查找输出属性
3requestScope表示从 request 属性范围查找输出属性
4sessionScope表示从 session 属性范围查找输出属性
5applicationScope表示从application属性范围查找输出属性
6param接收传递到本页面的参数
7paramValues接收传递到本页面的一组参数
8header取得一个头信息数据
9headerValues取出一组头信息数据
10cookie取出 cookie 中的数据
11initParam取得配置的初始化参数

EL 表达式访问 4 种范围属性

寻找值的顺序:page->request->session->application

先来简单的实现一个
代码如下

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
	pageContext.setAttribute("info1", "page范围的值");
	request.setAttribute("info2", "request范围的值");
	session.setAttribute("info3", "session范围的值");
	application.setAttribute("info4", "application范围的值");
%>
</body>
<h1>${info1 }</h1>
<h1>${info2 }</h1>
<h1>${info3 }</h1>
<h1>${info4 }</h1>
<%=pageContext.getAttribute("info1") %><br/>
<%=request.getAttribute("info2") %><br/>
<%=session.getAttribute("info3") %><br/>
<%=application.getAttribute("info4") %><br/>
</html>

效果
在这里插入图片描述
这个就是上面的第一个例子的实现
下面看一下寻找值的
简单的改一下代码

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
	pageContext.setAttribute("info1", "page范围的值");
	request.setAttribute("info1", "request范围的值");
	session.setAttribute("info1", "session范围的值");
	application.setAttribute("info1", "application范围的值");
%>
</body>
<h1>${info1 }</h1>
<%-- <h1>${info2 }</h1>
<h1>${info3 }</h1>
<h1>${info4 }</h1>
<%=pageContext.getAttribute("info1") %><br/>
<%=request.getAttribute("info2") %><br/>
<%=session.getAttribute("info3") %><br/>
<%=application.getAttribute("info4") %><br/> --%>
</html>

效果
在这里插入图片描述
因此可以看到,在寻找值的时候,是从page范围开始找的,如果没找到才开始往后面的找

EL 表达式接收请求参数

  1. Param:单个参数
  2. paramValues:一组参数
param对象的实现

Info.jsp的代码如下

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="EL02.jsp" method="post">
<input type="text" name="name">
<input type="submit" value="提交EL02.jsp">
</form>
</body>
</html>

EL02.jsp的代码如下

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>姓名:${param.name }</h1>
</body>
</html>

访问Info.jsp
在这里插入图片描述
提交的效果如下
在这里插入图片描述
解决乱码
在这里插入图片描述
效果
在这里插入图片描述

特别注意的是EL02.jsp中的param对象的使用,了解这个对象是干嘛的,这个对象怎么用,因为我们在用EI表
达式的时候,这个对象用到的非常多。

paramValues对象的实现

继续用Info.jsp的代码,简单的对这个代码做一些修改

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="EL02.jsp" method="post">
<input type="text" name="name">
<input type="submit" value="提交EL02.jsp">
</form>
<!-- 再写一个表单,看一下一组参数的效果 -->
<form action="EL02.jsp" method="post">
<input type="checkbox" name="hobby" value="java语言">java语言
<input type="checkbox" name="hobby" value="C语言">C语言
<input type="checkbox" name="hobby" value="python语言">python语言
<input type="submit" value="提交EL02中的爱好表单">
</form>
</body>
</html>

同样的,对EL02.jsp的代码做修改

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
request.setCharacterEncoding("UTF-8");
%>
<h1>姓名:${param.name }</h1>
<h1>爱好一:${paramValues.hobby[0] }</h1>
<h1>爱好二:${paramValues.hobby[1] }</h1>
<h1>爱好三:${paramValues.hobby[2] }</h1>
</body>
</html>

运行测试效果如下
效果1
在这里插入图片描述
提交后得到

在这里插入图片描述
效果2
在这里插入图片描述
提交后得到
在这里插入图片描述
我们在面对一组参数的时候,这时就不能用EL表达式中的内置param对象了,应该用paramValues对象,paramValues对象是可以取一组参数的。

EL 表达式对象操作

这里的对象是后台的类创建的对象,在jsp文件中是没有对象这一说法的,java文件中才有对象。

先创建一个People.java对象,用于测试,再创建一个EL03.jsp,用户显示
People的代码如下

package model;

public class People {
	private int id;
	private String name;
	private int age;
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	
}

EL03.jsp的代码如下

<%@page import="model.People"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
//引入java语句,创建一个迈克对象,然后给这个对象赋予是三个属性
	People Mike=new People();
	Mike.setId(1);
	Mike.setName("迈克");
	Mike.setAge(12);
	request.setAttribute("Mike", Mike);
%>
<h1>编号:${Mike.id }</h1>
<h1>姓名:${Mike.name }</h1>
<h1>年龄:${Mike.age }</h1>
</body>
</html>

执行的效果如下
在这里插入图片描述
很显然,EL表达式对对象的操作,主要依据对象名,如果要取对象中的某个属性,直接在对象名后面加属性就可以了

EL 表达式集合操作

创建一个EL04.jsp
代码如下

<%@page import="java.util.*"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
	List all=new LinkedList();
	all.add(0, "元素一");
	all.add(1, "元素二");
	all.add(2, "元素三");
	request.setAttribute("all", all);
%>
<h1>${all[0] }</h1>
<h1>${all[1] }</h1>
<h1>${all[2] }</h1>
</body>
</html>

效果
在这里插入图片描述
集合的效果,可以成数组的取法,我们在后台取集合中的一个元素的时候,是用get方法的,在这里,直接用的和数组的取值方法一样。

EL 表达式运算符操作

算数运算符
关系运算符
逻辑运算符
三目运算符
Empty 关键字
实现

创建一个EL05.jsp,其中的代码如下

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
	request.setAttribute("num1",10);
	request.setAttribute("num2",3);
	request.setAttribute("flag1",true);
	request.setAttribute("flag2",false);
%>
<h1>算数运算符</h1>
<h2>num1=${num1 },num2=${num2 }</h2>
<h2>num1+num2=${num1+num2 }</h2>
<h2>num1-num2=${num1-num2 }</h2>
<h2>num1*num2=${num1*num2 }</h2>
<h2>num1/num2=${num1/num2 }</h2>
<h2>num1%num2=${num1%num2 }</h2>
<h2>num1*(num1-num2)=${num1*(num1-num2) }</h2>
<h1>关系运算符</h1>
<h2>flag1=${flag1 },flag2=${flag2 }</h2>
<h2>与操作flag1 && flage2:${flag1 && flage2 }</h2>
<h2>或操作flag1 || flage2:${flag1 || flage2 }</h2>
<h2>非操作!flag1:${!flag1}</h2>
<h1>三目运算符</h1>
<h2>三目操作:num1>num2:${num1>num2?"yes":"no" }</h2>
<h1>empty关键字</h1>
<h2>判断空操作:${empty num1 }</h2>
</body>
</html>

效果
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值