Day07JavaWeb【Jsp,el,jstl,综合案例】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("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)

猜你喜欢

转载自blog.csdn.net/u013621398/article/details/108561016