JavaWeb程序设计学习笔记整理(8)-EL表达式

EL表达式

为什么需要EL表达式?

  • 在JSP中嵌套大量的Java代码,增加了页面内容的复杂度,使页面不够简介,不方便代码的维护,为此sun公司制定了JSP标签(类似于html标签) 来代替Java代码。
  • apache组织开发了一套标签库被Sun公司整合后,称为标准标签库(JSTL),jstl标准标签库可以配合EL表达式一起,减轻jsp页面的复杂度,代替java代码,使jsp页面更方便的维护。

什么是EL表达式?

  • EL表达式是一套简单的计算规则,用于给JSP标签(jstl标准标签库)的属性赋值,也可以直接用来输出。
  • EL表达式也可以脱离标签单独使用。
  • EL表达式语法:${…}

EL表达式的作用

访问JavaBean的属性

  • ①jsp页面中的4种作用域–存储数据

–application作用域:有效范围是整个应用,整个应用是指从应用启动到应用结束。
–session作用域:有效范围是当前会话,所谓当前会话,指的是从用户打开浏览器开始,到用户关闭浏览器这个过程。
–request作用域:一次请求跨越的前后两页。
–pageContext作用域:作用范围仅限于用户请求的当前页面。

setAttribute(key,value) key=value
EL表达式${key}的方式从作用域中根据key来获取value的值

  • ②EL获取JavaBean的属性
    什么是JavaBean? 是一个公共的类,含有一些私有属性,以及对这些私有属性的get和set方法。在java中,类表示对象,所以可以使用JavaBean类表示对象。
    对象,”万物皆对象”,任何一个合理的事务都可以理解为一个对象,学生对象,老师对象,书对象…

学生对象 public class Student{ }
书对象 public class Book{ }
员工对象 public class Emp{ }

语法:${对象名.属性名}

输出简单的运算结果

EL表达式可以做一些简单的计算,可将计算的结果直接输出到页面上,也可以给JSP标签的属性赋值。

  • 算术运算 + - * / %
  • 逻辑运算 && || !
  • 关系运算 > >= < <= == !=
  • empty:用来判断一个字符串是否为空或者一个集合是否为空,empty计算结果是true/false。

获取请求参数值

EL表达式如何获取请求参数值
  ${param.key值}等价于request.getParameter(key值)
  ${paramValues.key值}等价于request.getParameterValues(key值)

代码部分:

part1:

<%@page pageEncoding="utf-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>My JSP 'el01.jsp' starting page</title>
  </head>
  <body>
  	<!-- el表达式输出简单的运算结果 -->
  	<!-- 1.算术运算 -->
  	${1+1}
  	${3.14}
  	<hr/>
  	<!-- java代码的写法[1] -->
  	<%=1+1 %>
  	<%=3.14 %>
  	<hr/>
  	<!-- java代码的写法[2] -->
  	<%
  		out.println(1+1);
  		out.println(3.14);
  	%>
  	<hr/>
  	
  	<!-- 2.el表达式的关系运算和逻辑运算 -->
  	${1>2} <!-- false -->
  	<%
  		int a = 10;
  		int b = 20;
  		String str = "abc";
  		String str1 = null;
  		request.setAttribute("a", a); //以key=value的方式将数值存储到request中 a=10
  		request.setAttribute("w", a); //w=a=10的方式存储到request中
  		request.setAttribute("b", b);
  		request.setAttribute("str", str);
  		request.setAttribute("str1", str1);
  	%>
  	<%=a %> <!-- 10 -->
  	<%=b %> <!-- 20 -->
  	<%=str %> <!-- abc -->
  	<br/>
  	<!-- el表达式默认可以从request(也可以从别的作用域对象取)中根据key来取值 -->
  	a的值:${a} ${w} <!-- a的值:10 10 -->
  	b的值:${b} <!-- b的值:20 -->
  	str的值:${str} <!-- str的值:abc -->
  	<br/>
  	${a>b} <!-- false -->
  	${a==10} <!-- true -->
  	${str=="abc"} <!-- true -->
  	${str eq "abc"} <!-- true -->
  	${str!="abc"} <!-- false -->
  	${a==10 && str!="abc"} <!-- false -->
  	<%=a == 10 && str != "abc"  %> <!-- false -->
  	<hr/>
  	
  	<!-- 3.empty的用法 -->
  	str的值为:${str} <!-- str的值为:abc -->
  	str1的值为:${str1} <!-- str1的值为: -->
  	<br/>
  	${empty str} <!-- false -->
  	${empty str1} <!-- true -->
  </body>
</html>

part2:

<%@page import="java.util.*" pageEncoding="utf-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>My JSP 'el02.jsp' starting page</title>
  </head>
  <body>
    <!-- 请求:http://localhost:8080/servlettest/el02.jsp?id=1001&a=1&a=2&a=3-->
  	<!-- 使用java代码通过request隐含对象来获取请求参数值 -->
  	<%
  		String strId = request.getParameter("id");
  		out.println(strId); //1001
  		String[] ss = request.getParameterValues("a");
  		out.println(Arrays.toString(ss)); //[1, 2, 3]
  		out.println(ss[0]); //1
  		out.println(ss[1]); //2
  		out.println(ss[2]); //3
  	%>
  	<hr/>
  	
  	<!-- el表达式获得请求参数 -->
  	${param.id} <!-- 1001 -->
  	${paramValues.a} <!-- [Ljava.lang.String;@129dcc0 -->
  	${paramValues.a[0]} ${paramValues.a[1]} ${paramValues.a[2]} <!-- 1 2 3 -->
  </body>
</html>

part3:

el03.jsp
<%@page language="java" import="java.util.*" pageEncoding="utf-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>My JSP 'el03.jsp' starting page</title>
  </head>
  <body>
  	<!--
  		jsp页面中的4种作用域 application session request pageContext
  		这4种作用域也是jsp页面的隐含/内置对象 
  	-->
  	<%
  		application.setAttribute("a", 100);
  		session.setAttribute("b", 200);
  		request.setAttribute("c", 300);
  		pageContext.setAttribute("d", 400);
  		//response.sendRedirect("el04.jsp"); 无法跳转 
  		//转发
  		request.getRequestDispatcher("el04.jsp").forward(request, response);		
  	%> 
  	
  	<!-- 使用EL表达式从4个作用域中取出值 -->
  	a的值为:${a}
  	b的值为:${b}
  	c的值为:${c}
  	d的值为:${d}
  	<!-- a的值为:100 b的值为:200 c的值为:300 d的值为:400 -->
  </body>
</html>

注意:其中含添加代码

el04.jsp
<%@page import="java.util.*" pageEncoding="utf-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>My JSP 'el04.jsp' starting page</title>
  </head>
  <body>
  	<!-- 使用EL表达式从4个作用域中取出值 -->
  	a的值为:${a}
  	b的值为:${b}
  	c的值为:${c}
  	d的值为:${d}
  	<!-- a的值为:100 b的值为:200 c的值为: d的值为: -->
  </body>
</html>

part4:

package com.bzxy.emp;
//表示员工对象
//JavaBean类:规范
//1)有私有属性
//2)对私有属性添加get和set方法
public class Emp {
	
	//1)私有属性
	private int id; //编号
	private String name; //姓名
	private double salary; //工资
	
	//2)添加get和set方法
	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 double getSalary() {
		return salary;
	}
	public void setSalary(double salary) {
		this.salary = salary;
	}
	
}
<%@page language="java" import="com.bzxy.emp.Emp" pageEncoding="utf-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>My JSP 'el05.jsp' starting page</title>
  </head>
  <body>
  	<!-- 使用java代码模拟数据,往Emp中添加数据并存储起来 -->
  	<%
  		Emp e1 = new Emp();
  		e1.setId(1);
  		e1.setName("zs");
  		e1.setSalary(3322);
  		Emp e2 = new Emp();
  		e2.setId(1001);
  		e2.setName("ww");
  		e2.setSalary(12333);
  		//将e1和e2存储到作用域中(application session request pageContext)
  		pageContext.setAttribute("e1", e1); //JavaBean
  		pageContext.setAttribute("e2", e2); //JavaBean
  		pageContext.setAttribute("e3", "helloworld"); //字符串
  	%>
  	
  	<!-- EL表达式获取JavaBean属性 语法:${对象名.属性名} -->
  	员工1的信息为:${e1.id} ${e1.name} ${e2.salary} <!-- 员工1的信息为:1 zs 12333.0 -->
  	<hr/>
  	员工2的信息为:${e2.id} ${e2.name} ${e2.salary} <!-- 员工2的信息为:1001 ww 12333.0 -->
  	<hr/>
  	e3的信息为:${e3} <!-- e3的信息为:helloworld -->
  </body>
</html>
具体实现步骤:
第一步:

Emp.java中代码写好私有属性,右键单击选择Source中的Generate Getters and Setters…
在这里插入图片描述

第二步:

选择右上角Select All
在这里插入图片描述

第三步:

如图显示,说明自动添加添加get和set方法成功
在这里插入图片描述

效果图:
part1:

在这里插入图片描述

part2:

若在浏览器中输入http://localhost:8080/servlettest/el02.jsp?id=1001&a=1&a=2&a=3,则如图下显示:
在这里插入图片描述
在这里插入图片描述

part3:
情况一:若在浏览器中输入http://localhost:8080/servlettest/el03.jsphttp://localhost:8080/servlettest/el04.jsp,则如图下显示:

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

情况二:关闭浏览器后直接输入http://localhost:8080/servlettest/el04.jsp,效果图如下:

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

情况三:tomcat应用程序重启

在这里插入图片描述
若在浏览器中输入http://localhost:8080/servlettest/el04.jsp,则如图下显示:
在这里插入图片描述
在这里插入图片描述

情况四:添加代码

在这里插入图片描述
若在浏览器中输入http://localhost:8080/servlettest/el03.jsp,则如图下显示:
在这里插入图片描述
在这里插入图片描述

part5:

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值