文章目录
我的学习路线
——本次学习的简单说明
本次的学习分为九节
注:点击题目会跳转到其他博客链接
Day1:JSP的入门&环境的配置&Tomcat的注意点
Day2:简单项目的创建和基本的功能的实现(打war包,共享项目)
Day3:JSP基础语法
Day4:JSP 九大内置对象及四个作用域
Day5:JavaBean 组件
Day6:Servlet 开发
Day7:EL 表达式
Day8:Jsp 自定义标签
Day9:Jsp 标准标签库持续更新中:新的博客写完会加链接
下面是Day7的学习
EL 表达式简介
- 表达式语言(Expression Language,EL)
- 百度百科:el 表达式
百科的链接:https://baike.baidu.com/item/EL%E8%A1%A8%E8%BE%BE%E5%BC%8F/1190845?fr=aladdin- 重点
- 例子
EL 表达式内置对象
编号 | 表达式内置对象 | 说明 |
---|---|---|
1 | pageContext | 表示 javax.servlet.jsp.PageContext 对象 |
2 | pageScope | 表示从 page 属性范围查找输出属性 |
3 | requestScope | 表示从 request 属性范围查找输出属性 |
4 | sessionScope | 表示从 session 属性范围查找输出属性 |
5 | applicationScope | 表示从application属性范围查找输出属性 |
6 | param | 接收传递到本页面的参数 |
7 | paramValues | 接收传递到本页面的一组参数 |
8 | header | 取得一个头信息数据 |
9 | headerValues | 取出一组头信息数据 |
10 | cookie | 取出 cookie 中的数据 |
11 | initParam | 取得配置的初始化参数 |
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 表达式接收请求参数
- Param:单个参数
- 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>
效果