Day07JavaWeb【Jsp,el,jstl,综合案例】El表达式 ***
原创
©著作权归作者所有:来自51CTO博客作者翁老师的教学团队的原创作品,请联系作者获取转载授权,否则将追究法律责任
EL表达式概述
- (1)是什么是EL表达式
EL(Express Lanuage)表达式可以嵌入在jsp页面内部 - (2)EL表达式有什么意义?
是要替代jsp页面中输出脚本的编写,减少jsp脚本的编写 - (3)EL表达式怎么写?
- (4)EL表达式的作用:
1.从域对象中查找指定的数据。
2.内置对象使用
3.执行运算符
域对象
HttpServletContext application; 整个项目
HttpSession session; 一次会话
HttpServletRequest requst ; 一次请求
HttpPageContext pageContext;
(2)核心方法
setAttribute(键,值);
getAttribute(键);
removeAttribute(键);
web\demo1_el.jsp
<%--四大域中存数据--%>
<%
application.setAttribute("name1", "baoqiang1");
session.setAttribute("name1", "baoqiang2");
request.setAttribute("name1", "baoqiang3");
pageContext.setAttribute("name1", "baoqiang4");
%>
<%--方式1:从四大域中取数据--%>
<%--这种方式,如果找不到对应的键,返回null--%>
<%=application.getAttribute("name1")%>
<%=session.getAttribute("name2")%>
<%=request.getAttribute("name3")%>
<%=pageContext.getAttribute("name4")%>
<%--方式2:从四大域中取数据(EL表达式)--%>
<hr/>
<%--这种方式,如果找不到对应的键,返回空串--%>
${applicationScope.name1}
${sessionScope.name2}
${requestScope.name3}
${pageScope.name4}
<hr/>
<%--方式3:从四大域中取数据(EL表达式)--%>
<%--这种方式,如果找不到对应的键,返回空串--%>
<%--这种方式,会从作用范围最小的域开始找,所以每个域的键的名字不能重复--%>
${name1}
${name2}
${name3}
${name4}
- 如果el表达式编写正确的话,还没有执行,那么可以打开页面的el表达式功能,因为它默认是关闭的
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
EL表达式-存储对象
- (1)定义User类
- (2)定义Birthday类
- (3)导包
- (4)Java代码创建对象,并将对象存在作用域对象中
- (5)使用el表达式取出对象,并访问成员变量值
src\pack01_java_bean\Birthday.java
项目中经常定义javaBean类,本质是建模
public class Birthday {
private int year;
private int month;
private int day;
}
src\pack01_java_bean\User.java
public class User {
private String name;
private int age;
private String gender;
private Birthday birthday;
}
web\demo2_el_object.jsp
将类导入到当前页面使用page指令
<%@ page import="pack01_java_bean.User" %>
<%@ page import="pack01_java_bean.Birthday" %>
导入之后,页面就可以识别该类,之后才可以使用类创建对象。
<%--向域中存储JavaBean对象--%>
<%
User user = new User("baoqiang",35,"male",new Birthday(1988,12,23));
request.setAttribute("user", user);
%>
<%=((User)request.getAttribute("user")).getName()%>
<%--使用EL表达式来简化--%>
${requestScope.user.name}
${user.name}
${requestScope.user.birthday.year}
${user.birthday.year}
EL表达式-存储集合List与Map**
- (1)List集合里面添加多个User对象
使用索引取出对象 - (2)Map集合里面添加多个User对象
使用key获取对象
使用类之前先导入类
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.HashMap" %>
<%@ page import="java.util.Map" %>
web\demo3_el_list.jsp
<%--向域中存储List集合对象--%>
<%
ArrayList<User> list = new ArrayList<User>();
list.add(new User("baoqiang1",35,"male",new Birthday(1988,12,23)));
list.add(new User("baoqiang2",35,"male",new Birthday(1989,12,23)));
list.add(new User("baoqiang3",35,"male",new Birthday(1990,12,23)));
request.setAttribute("key", list);
%>
<%--使用El来获取域中的数据--%>
${requestScope.key[0].name}
<%=((ArrayList<User>)request.getAttribute("key")).get(0).getName()%>
${key[0].name}
${key[1].birthday.year}
- List有序表,使用索引访问,本质上还是数据,所以使用[index]
web\demo4_el_map.jsp
<%
Map<String, User> map= new HashMap<String, User>();
map.put("u1", new User("baoqiang1",35,"male",new Birthday(1988,12,23)));
map.put("u2", new User("baoqiang2",35,"male",new Birthday(1999,12,23)));
map.put("u3", new User("baoqiang3",35,"male",new Birthday(1900,12,23)));
request.setAttribute("map", map);
%>
<%--使用El来获取域中的数据--%>
<%=(( Map<String, User>)request.getAttribute("map")).get("u1").getName()%>
${requestScope.map.u1.name}
${map.u1.name}
${map.u3.birthday.month}
EL表达式-运算符 **
- (1)Java运算符
在${}
中可以写java运算符,对数据进行计算
必须要求先在作用域中存数据,因为${}
作用就是取数据 - (2)
empty
关键字
不能在empty
的内部写if语句,判断对象或者集合对象是否为空,所以得使用empty
关键字 - empty关键字可以
判断 对象,字符串是否为空
判断集合中元素个数是为0
web\demo5_el_yunsuanfu.jsp
<%--EL表达式的运算符--%>
<%
int num = 0;
request.setAttribute("num", num);
%>
<%=num*10%>
${3+2}
<%--El表达式使用的变量必须放在域中--%>
${num+1}
<hr/>
${3>2}
<hr/>
<%--
empty关键字
String 类型: 空串和null都为空
Java Bean对象: null为空
集合 : 集合中没有数据,则为空
--%>
<%
String str = null;
User user = null;
ArrayList<String> list = new ArrayList<String>();
list.add("hello");
request.setAttribute("list", list);
%>
${empty list}
EL表达式-获取项目访问路径**
- (1)在Servlet中获得web应用的名称:
request.getContextPath();
- (2)在jsp页面上获得web应用的名称:
${pageContext.request.contextPath}
- (3)有什么意义?动态获取项目访问路径,如果项目访问路径修改了,那么不会影响页面或者Servlet内的地址修改
- (4)pageContext - WEB开发中的pageContext
- (5)获取JSP中域中的数据
(pageScope,requestScope,sessionScope,applicationScope)