Day07 动态页面技术(EL表达式)

EL表达式概述

  • (1)什么是EL表达式
    EL(Express Lanuage)表达式可以嵌入在jsp页面内部。
  • (2)EL表达式有什么意义?
    是要替代jsp页面中输出脚本的编写,减少jsp脚本的编写。
  • (3)EL表达式怎么写?

${EL表达式内容}

  • (4)EL表达式的作用:
    1.从域对象中查找指定的数据。
    2.内置对象使用
    3.执行运算符

从域对象中查找指定的数据

(1)jsp默认支持四个域对象:

HttpServletContext  application;   整个项目
HttpSession         session;       一次会话
HttpServletRequest  requst ;        一次请求
HttpPageContext     pageContext;     当前页面

(2)核心方法

setAttribute(键,值);
getAttribute();
removeAttribute();

web\demo1_el.jsp

<%--四大域中存数据--%>
    <%
        application.setAttribute("name1", "baoqiang1");
        session.setAttribute("name2", "baoqiang2");
        request.setAttribute("name3", "baoqiang3");
        pageContext.setAttribute("name4", "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)定义实体类
    项目中经常定义javaBean类,本质是建模

src\pack01_java_bean\Birthday.java

public class Birthday {
    private int year;
    private int month;
    private int day;
    //省略getset和构造
}

src\pack01_java_bean\User.java

public class User {
    private String name;
    private int age;
    private String gender;
    private Birthday birthday;
    //省略getset和构造
}
  • (2)导包
    将类导入到当前页面使用page指令
<%@ page import="pack01_java_bean.User" %>
<%@ page import="pack01_java_bean.Birthday" %>
  • (3)Java代码创建对象,并将对象存在作用域对象中

web\demo2_el_object.jsp

    <%--向域中存储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}
    ${requestScope.user.birthday.year}
    <%-- 再次简化 --%>
    ${user.name}
    ${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);
    %>

	<%=((ArrayList<User>)request.getAttribute("key")).get(0).getName()%>
	
    <%--使用El来获取域中的数据--%>
    ${requestScope.key[0].name}
    ${key[0].name}
    
    ${key[1].birthday.year}

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

	<%=(( Map<String, User>)request.getAttribute("map")).get("u1").getName()%>
	
    <%--使用El来获取域中的数据--%>
    ${requestScope.map.u1.name}
    ${map.u1.name}
    
    ${map.u3.birthday.month}

EL表达式-运算符 **

  • (1)Java运算符
    ${}中可以写java运算符,对数据进行计算
    必须要求先在作用域中存数据,因为${}作用就是取数据
  • (2)empty关键字
    不能在empty的内部写if语句,判断对象或者集合对象是否为空,所以得使用empty关键字。El表达式使用的变量必须放在域中
    empty关键字可以
    判断对象,字符串是否为空
    判断集合中元素个数是为0

web\demo5_el_yunsuanfu.jsp

	<%--EL表达式的运算符--%>
	<%
	    int num = 1;
	    request.setAttribute("num", num);
	%>
	<%=num*10%>
	
	<%--El表达式使用的变量必须放在域中--%>
	${num+1}
	<hr/>
	${3>2}
	${3+2}
	<hr/>
	
	<%
	    String str1 = null;
	    request.setAttribute("str1",str1);
	    String str2 = "";
	    request.setAttribute("str2",str2);
	
	    User user = new User();
	    request.setAttribute("user",user);
	
	    ArrayList<String> list = new ArrayList<String>();
	    list.add("hello");
	    request.setAttribute("list", list);
	%>
	
	${empty str1}<%-- true --%>
	${empty str2}<%-- true --%>
	${empty user}<%-- false --%>
	${empty list}<%-- false --%>
	${!empty list}<%-- true --%>

EL表达式-获取项目访问路径**

  • (1)在Servlet中获得web应用的名称:request.getContextPath();
  • (2)在jsp页面上获得web应用的名称:${pageContext.request.contextPath}
  • (3)有什么意义?动态获取项目访问路径,如果项目访问路径修改了,那么不会影响页面或者Servlet内的地址修改。

一般在项目中:<% pageContext.setAttribute("path",request.getContextPath()); %>
然后直接用${path}表示项目名称

EL的内置对象(了解)

  • 作用域,获取JSP中域中的数据
    pageScope,requestScope,sessionScope,applicationScope
  • 请求参数
    param,paramValues
    相当于request.getParameter() rrquest.getParameterValues()
  • 获取请求头信息
    header,headerValues
    相当于request.getHeader(name)
  • 获取全局初始化参数
    initParam
    相当于this.getServletContext().getInitParameter(name)
  • WEB开发中cookie
    cookie
    相当于request.getCookies()—cookie.getName()—cookie.getValue()
  • WEB开发中的pageContext,JSP上下文对象
    pageContext
    pageContext可以获得其他八大对象
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值