Web---JSP-EL表达式

EL表达式简介

EL 全名为Expression Language。

EL主要作用:

获取数据:

EL表达式主要用于替换JSP页面中的脚本表达式,以从各种类型的java对象中获取数据。

执行运算:

利用EL表达式可以在JSP页面中执行一些基本的关系运算、逻辑运算和算术运算,以在JSP页面中完成一些简单的逻辑运算。

获取web开发常用对象

EL 表达式定义了一些隐式对象,利用这些隐式对象,web开发人员可以很轻松获得对web常用对象的引用,从而获得这些对象中的数据。

调用Java方法

EL表达式允许用户开发自定义EL函数,以在JSP页面中通过EL表达式调用Java类的方法。

获取数据

使用EL表达式获取数据语法:“${标识符}”
EL表达式语句在执行时,会调用pageContext.findAttribute方法,用标识符为关键字,分别从page、request、session、application四个域中查找相应的对象,找到则返回相应对象,找不到则返回”” (注意,不是null,而是空字符串)。 

EL表达式也可以很轻松获取JavaBean的属性,或获取数组、Collection、Map类型集合的数据,例如:
${user.address.city}
${user.list[0]}:访问有序集合某个位置的元素
${map.key}  : 获得map集合中指定key的值
结合JSTL的foreach标签,使用EL表达式也可以很轻松迭代各种类型的数组或集合,示例:
迭代数组
迭代collection类型集合
迭代map类型集合

下面就来演示一下:

User.java:

package cn.hncu.elWeb.domain;

public class User {
    private String name;
    private Integer age;

    public User() {
        super();
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "User [name=" + name + ", age=" + age + "]";
    }

}

index.jsp:

<%@page import="cn.hncu.elWeb.domain.User"%>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  </head>

  <body>
    <h2>演示El表达式技术---格式:${表达式}</h2>
    <h2>注意,El表达式的功能:按从小到大的顺序依次从4个容器中读取数据(如果读到则后面的容器跳过)。</h2>
    <h2>***数据必须要放入容器中</h2>
    <%
        pageContext.setAttribute("pageName", "page_Jack");
        request.setAttribute("reqName", "req_Jack");
        session.setAttribute("sessName", "sess_Jack");
        application.setAttribute("appName", "app_Jack");
    %>
    ${pageName}, ${reqName}, ${sessName}, ${appName}

    <hr/><br/>
    <!-- 用EL表达式读取JavaBean中的信息,注意"表达式"是"属性名" -->
    <%
        User user = new User();
        user.setName("张三");
        user.setAge(25);
        //注意!一定要把数据放入容器中
        pageContext.setAttribute("u", user);
        //这里为了区分下面的输出,特意用u来区分user,其实取user也是可以的
    %>
    ${u}<br/>
    ${u.name},${u.age}

    <hr/><br/>

    <!-- 用EL表达式读取Map中的信息 -->
    <%
        Map<String,Object> map = new HashMap<String,Object>();
        map.put("name", "Rose");
        map.put("sex", "Female");
        map.put("age", 25);
        map.put("tel", "13812345678");

        map.put("friend", user);
        //一定要记得把数据放入容器中
        request.setAttribute("m", map);
        //这里为了演示下面的输出,特意用m来区分map,其实取map也是可以的
    %>
    ${m.name},${m.sex},${m.age},${m.tel}<br/>
    朋友的名字:${m.friend.name}<br/>

    <hr/><br/>
    <!-- 用EL表达式读取List中的信息 -->
    <%
        List list = new ArrayList();
        list.add("TOM");
        list.add(user);
        list.add(map);
        session.setAttribute("list", list);
    %>
    ${list[0]},${list[1].name}<br/>
    朋友名字:${list[2].friend.name}<br/>

  </body>
</html>

演示结果:

EL表达式中的运算:

语法:${运算表达式},EL表达式支持如下运算符:

empty运算符:检查变量是否为null或“空”,这个很好用,最好熟记它!

二元表达式:${user!=null?user.name : “”} !

[ ] 和 . 号运算符。

运算示例

<!-- 演示El表达式中的运算 -->
    1、可以使用算术运算符:+  -  *  /  % 等<br/>
    ${u.age+10}

    2、可以使用比较运算符:== != <=  > >= 等<br/>
    ${u.name=="张三"}
    <br/>
    3、逻辑运算符:&&  ||  !(非) 等<br/>
    ${u.name=="张三" && u.age>20 }
    <br/>
    4、条件运算符:即"?"号表达式<br/>
    ${u.name!="张三" ? 100 : 50 }
    <br/>
    5、empty 运算符:如果表达式的值为null 或者 不存在该变量(存在该变量,该变量是一个List或Map,但是其中不包含元素)
    ---这些返回的全部是true<br/>
    ${empty dkkkk}  --- true   不存在这样的变量名<br/>
    <%
        List li = new ArrayList();
        request.setAttribute("li", li);
    %>
    ${empty li}   --- true li中没有元素<br/>
    ${empty map}  --- true  因为那个map取名是m <br/>
    ${empty m}    --- false<br/>
    ${!empty m}   --- true<br/>

演示结果:

获得web开发常用对象

EL表达式语言中定义了11个隐含对象,使用这些隐含对象可以很方便地获取web开发中的一些常见对象,并读取这些对象的数据。

语法:${隐式对象名称} :获得对象的引用

测试各个隐式对象

注意事项

测试headerValues时,如果头里面有“-” ,例Accept-Encoding,则要headerValues[“Accept-Encoding”]
测试cookie时,例${cookie.key}取的是cookie对象,如访问cookie的名称和值,须${cookie.key.name}或${cookie.key.value}

演示实例:

    <!-- 用EL表达式获取El表达式中的隐藏对象--EL表达式语言中定义了11个隐含对象 -->
    <!-- 从指定的容器中读取数据 -->
    ${pageScope.u }----*${requestScope.u}*因为u是在page域中,request没有,所以是空(EL表达式不会输出null(除非值是null))!----${requestScope.m}----${sessionScope.list[0]}
    <br/>
    ${header}<br/>
    ${header.host}---服务器端的IP和端口<br/>
    ${header.cookie}<br/>
    JSESSIONID:${cookie.JSESSIONID}<br/>  //取的是cookie对象--输出的是地址
    name:${cookie.JSESSIONID.name}<br/>
    value:${cookie.JSESSIONID.value}<br/>
    <br/>
    ${param}<br/> //这里需要访问地址:http://localhost:8080/myElWeb/?name=Jack&age=21&age=23<br/>
    ${param.age}<br/>
    ${paramValues}<br/>
    ${paramValues.name[0]}<br/>
    ${paramValues.age[0]}<br/>
    ${paramValues.age[1]}<br/>

输入地址栏:http://localhost:8080/myElWeb/?name=Jack&age=21&age=23

演示结果:

El使用的综合示例

index.jsp:

<a href="${pageContext.request.contextPath}/ShowServlet">El使用的综合示例页面</a>

Car.java:

package cn.hncu.elWeb.domain;

public class Car {
    private String name;
    private String no;
    private String color;
    public Car() {
        super();
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getNo() {
        return no;
    }
    public void setNo(String no) {
        this.no = no;
    }
    public String getColor() {
        return color;
    }
    public void setColor(String color) {
        this.color = color;
    }
    @Override
    public String toString() {
        return "Car [name=" + name + ", no=" + no + ", color=" + color + "]";
    }
}

Person.java:

package cn.hncu.elWeb.domain;

import java.util.Arrays;

public class Person {

    private String id;
    private String name;
    private String pwd;
    private Integer age;

    private Car cars[];

    public Person() {
        super();
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPwd() {
        return pwd;
    }

    public void setPwd(String pwd) {
        this.pwd = pwd;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public Car[] getCars() {
        return cars;
    }

    public void setCars(Car[] cars) {
        this.cars = cars;
    }

    @Override
    public String toString() {
        return "Person [id=" + id + ", name=" + name + ", pwd=" + pwd
                + ", age=" + age + ", cars=" + Arrays.toString(cars) + "]";
    }

}

ShowServlet.java:

package cn.hncu.elWeb.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import cn.hncu.elWeb.domain.Car;
import cn.hncu.elWeb.domain.Person;

public class ShowServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doPost(request, response);
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        Person p = new Person();
        p.setId("P001");
        p.setName("Jack");
        p.setAge(24);
        p.setPwd("123456");

        Car cars[] = new Car[3];
        for(int i=0;i<3;i++){
            Car c = new Car();
            c.setName("Car"+i);
            c.setNo("No."+i);
            c.setColor("RED");
            cars[i]=c;
        }
        p.setCars(cars);

        request.setAttribute("p", p);
        request.getRequestDispatcher("/jsps/show.jsp").forward(request, response);
    }

}

show.jsp:

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

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  </head>

  <body>
    <h2>用户信息展示</h2>
        工号:${p.id}<br/>
        姓名:${p.name}<br/>
        年龄:${p.age}<br/>
    <hr/>
    <h3>车辆信息</h3>
    <table border="1">
        <tr><th>车牌号</th> <th>车名</th> <th>颜色</th></tr>
        <tr><td>${p.cars[0].no}</td> <td>${p.cars[0].name}</td> <td>${p.cars[0].color}</td></tr>
        <tr><td>${p.cars[1].no}</td> <td>${p.cars[1].name}</td> <td>${p.cars[1].color}</td></tr>
        <tr><td>${p.cars[2].no}</td> <td>${p.cars[2].name}</td> <td>${p.cars[2].color}</td></tr>
        <!-- 其实这里用这种方式很不好的-变量个数全部写死了,我们可以用JSTL把这里写活,不过我们在这里不是演示那个技术的,为了简便突出EL重点,就这样写了 -->
    </table>
  </body>
</html>

演示结果:

时间: 2024-10-14 00:18:49

Web---JSP-EL表达式的相关文章

Java web基础总结十之—— jsp EL表达式

Java web基础总结十之-- jsp EL表达式 一.EL表达式简介 EL 是Expression Language的缩写.在jsp中有很大的作用,EL主要有以下一些作用:获取数据,替换JSP页面中的脚本表达式,以从各种类型的web域中检索java对象.获取数据.还可以执行运算,利用EL表达式可以在JSP页面中执行一些基本的关系运算.逻辑运算和算术运算,以在JSP页面中完成一些简单的逻辑运算,例如 ${user==null}.还可以获取web开发常用的jsp的隐式对象,利用这些隐式对象,we

JavaWeb-11 (JSP&amp;EL表达式)

JavaWeb-11 JSP&EL表达式 JSP 四.JSP语法(学好的关键:对应的Servlet) JavaWeb-10 总结:session技术也是cookie的一种.服务器给浏览器创建一个篮子,并加上编号,这编号会存储到客户端上,当客户端再次访问服务器时,服务器会读取客户端的ID号,如果服务器找得到,就在篮子中拿出该客户端的session,若没有就新建一个 重点:URL重写. 1.JSP模版元素 JSP模板元素:HTML页面 JSP页面中的HTML内容称之为JSP模版元素. JSP模版元素

JSP EL表达式使用

JSP EL表达式使用: Servlet: package com.stono.servlet; import java.io.IOException; import java.util.HashMap; import java.util.Map; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import

Java Web(六) EL表达式

这也是属于JSP范围内的知识,使用EL表达式,能更好的使用JSP中的各种内置对象和作用域,说点闲话,马上要出去实习了,有点恐慌,可能这是马上要出去工作的学生的通病,继续努力把,兵来将挡水来土掩, --WH 一.EL表达式 JSP中可以使用EL表达式,EL表达式是用"${}"括起来的脚本,用来更方便地读取对象,EL表达式写在JSP的HTML代码中,而不能写在"<%%>"引起的JSP脚本中,现在就来了解一下,EL表达式是如何来替代JSP脚本或者JSP行为的.

【黑马程序员】第10课:JSP+EL表达式+JavaBean

<pre> day10 上节内容回顾 1.jsp的入门 *在jsp里面如何嵌入java代码 **有三种 <%!  %>  <%= %> <%  %> *jsp就是servlet,最终也会被编译成servlet,放到tomcat的work目录里面 2.el入门 *获取域对象里面的值 *${域对象的名称} 3.cookie *cookie分类 **有两种:会话级别的cookie和持久性的cookie(使用方法setMaxAge方法) *创建cookie:new

JSP EL表达式(转)

一.EL简介 1.语法结构     ${expression}2.[]与.运算符     EL 提供.和[]两种运算符来存取数据.    当要存取的属性名称中包含一些特殊字符,如.或?等并非字母或数字的符号,就一定要使用 [].例如:        ${user.My-Name}应当改为${user["My-Name"] }    如果要动态取值时,就可以用[]来做,而.无法做到动态取值.例如:        ${sessionScope.user[data]}中data 是一个变量3

jsp EL 表达式

EL表达式 EL 全名为Expression Language EL 语法很简单,它最大的特点就是使用上很方便.接下来介绍EL主要的语法结构: ${sessionScope.user.sex} 所有EL都是以${为起始.以}为结尾的.上述EL范例的意思是:从Session的范围中,取得 用户的性别.假若依照之前JSP Scriptlet的写法如下: User user = (User)session.getAttribute("user"); String sex = user.get

JSP EL表达式详细介绍

一.JSP EL语言定义 E L(Expression Language)  目的:为了使JSP写起来更加简单. 表达式语言的灵感来自于 ECMAScript 和 XPath 表达式语言,它提供了在 JSP 中简化表达式的方法.它是一种简单的语言,基于可用的命名空间(PageContext 属性).嵌套属性和对集合.操作符(算术型.关系型和逻辑型)的访问符.映射到 Java 类中静态方法的可扩展函数以及一组隐式对象. EL 提供了在 JSP 脚本编制元素范围外使用运行时表达式的功能.脚本编制元素

简单谈谈JSP/EL表达式

1.表达式语言(Expression Language 简称EL) EL最初是定义在JSTL1.0规范中,在JSP2.0中,EL从JSTL中剥离出来,放到JSP规范中成为了JSP2.0规范的一部分,并添加了新的特性.在JSP页面中,使用EL可以简化对变量和对象的访问. 语法 :${expr } 1) "[]"和"." 操作符用来操作符访问数据 ${user.name } ${user["name"]} 2) 算数操作符 + ${23+5}28 -

Spring Model存储值在jsp EL表达式中不能正确显示(原样显示)问题

这几天我搭了一个SpringMvc环境,写了一个Controller,并且Controller里面有一个很简单的映射到jsp页面的方法,如下: 这里的Map<String,String>其实就是Model对象的一个替代品,Spring会把它当成Model的.从代码里看到我存了两个值,然后跳转到dashboard.jsp页面.如下: 当我启动项目,并访问时发现EL表达式原样输出,如下: 我查看了我所有配置,发现没有什么问题.百思不得其解,后来经过google一番,发现原来是web.xml版本不对