【JSP】EL表达式

JSP技术的重要功能是用于在浏览器的页面显示数据,那么从某地取出数据就变得十分重要了,于是就诞生了EL表达式。EL表达式的目的就是:取得数据,将其显示在浏览器的页面上!


Table of Contents

什么是EL表达式

第一个EL表达式程序

取值操作

取出4个域对象中存放的值

取出域中所存的数组

取出域中所存的集合

取出域中Map集合的值

输出对象的值

表达式的计算


什么是EL表达式

什么是EL表达式:

  1. Express Lanuage
  2. 是为了简化咱们的JSP代码,具体一点就是为了简化在JSP里面写的那些Java代码。
  3. 使开发者尽可能少的在JSP里编写Java代码

EL表达式的核心功能:

  1. 从四个对象中取出数据
  2. 计算输出表达式的值

写法格式:${表达式 }

  1. 如果从作用域中取值,会先从小的作用域开始取,如果没有,就往下一个作用域取。
  2. 一直把四个作用域取完都没有,就没有显示。

尽管在JSP中,也有相应的写法可以取得并输出域对象中的数据,但是其过于冗余和复杂,所以使用EL表达式来使得这种对数据的取得和输出变得容易!

从域中取出数据:
	Servlet代码:request.getAttribute(“name”);
	JSP脚本:<%=request.getAttribute(“name”)%>
	EL表达式替代上面的脚本:${requestScope.name};

第一个EL表达式程序

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>




第一个EL表达式程序


	<% //在JSP中写Java代码(在实际开发中要尽量避免)
		pageContext.setAttribute("name","kyle"); //向域对象"page"中放一个键值对:key=name, value=kyle
		pageContext.setAttribute("age", 23); //向域对象"page"中放一个键值对:key=age,value=23
	%>
	
	

使用EL表达式从page域对象中取出值:


name: ${pageScope.name }
age: ${pageScope.age }

执行结果:

【JSP】EL表达式_第1张图片


取值操作

EL表达式的主要目的就是获得数据并输出,而在Web的回话中,存放数据有四个地方(即四个域对象):page、request、session、application。

EL最主要的作用是获得四大域中的数据,格式${EL表达式}

  1. EL获得pageContext域中的值:${ pageScope.name } 获取该域中键为“name”的值
  2. EL获得request域中的值:${requestScope.name }
  3. EL获得session域中的值:${sessionScope.name }
  4. EL获得application域中的值:${ applicationScope.name }
  5. EL从四个域中获得某个值${name}

取出4个域对象中存放的值

特性:

  1. 从域中取值,得先存值。
  2. 如果没有指定内置对象,先从page里面找,没有去request找,去session,去application。
取出4个作用域中存放的值
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>





Insert title here


	<%
		pageContext.setAttribute("name", "page");
		request.setAttribute("name", "request");
		session.setAttribute("name", "session");
		application.setAttribute("name", "application");
	%>

	按普通手段取值
<%= pageContext.getAttribute("name")%> <%= request.getAttribute("name")%> <%= session.getAttribute("name")%> <%= application.getAttribute("name")%>
使用EL表达式取出作用域中的值
${ pageScope.name } ${ requestScope.name } ${ sessionScope.name } ${ applicationScope.name }
  1. 获取请求中的某个参数:param;使用示例:“${param.请求名}”
  2. 获取请求中的某个参数名的参数值:paramValues;使用示例:“${paramValues.请求名}”
  3. 获取请求中的请求头:header;使用示例:“${header.请求头名}”
  4. 获取请求中的请求头中的值:headerValues
  5. 获取Cookie:${cookie.Cookie的名字}
  6. 获取initParams变量:${initParams.名}
  7. 获取pageContext变量:${pageContext.名}

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




	
	EL表达式


	获取某个参数的请求名:${param.请求名 }	
	获取该个请求名对应的值:${paramValue.请求名 }
	
	


取出域中所存的数组

取出域中所存的数组
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>





Insert title here


	<%
		String[] a = { "aa", "bb", "cc", "dd" };
		pageContext.setAttribute("array", a);
	%>

	使用EL表达式取出作用域中数组的值
${array[0] }, ${array[1] }, ${array[2] }, ${array[3] }

取出域中所存的集合

取出域中所存的集合

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.List"%>





Insert title here


	<%
		List list = new ArrayList();
		list.add("11");
		list.add("22");
		list.add("33");
		list.add("44");
		//pageContext.setAttribute("li", list);
		session.setAttribute("li", list);
	%>
	
	使用EL表达式取出作用域中集合的值
${li[0] } , ${li[1] },${li[2] },${li[7] }

取出域中Map集合的值

取出域中Map集合的值
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@page import="java.util.Map"%>
<%@page import="java.util.HashMap"%>





Insert title here


	<%
		Map map = new HashMap();
		map.put("name", "zhangsna");
		map.put("age",18);
		map.put("address","北京..");
		map.put("address.aa","深圳..");
		
		//pageContext.setAttribute("map", map);
		application.setAttribute("m", map);
	%>
	使用EL表达式取出作用域中Map的值
	
${applicationScope.m.name }, ${m.age }, ${m.address }, ${m["address.aa"] }

输出对象的值

EL实现输出对象的值
Student类文件:
package kyle;

public class Student {
	private String name1;
	private int age;
	public String getName() {
		return name1;
	}
	public void setName(String name) {
		this.name1 = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public Student(String name, int age) {
		super();
		this.name1 = name;
		this.age = age;
	}
	public Student() {
		super();
	}
}

JSP文件:
<%@ page language="java" import="java.util.*,kyle.*"
	pageEncoding="utf-8"%>



从四个域中获取数据


	<%
     	//准备对象
     	Student student = new Student("eric",20);
     	//放入域中
     	pageContext.setAttribute("student1",student); //保持参数的两个名字一致;
    %>

	<%--使用EL获取对象 --%>
	${student1.name} - ${student1.age }
	${student1 } //输出的是该类的toString()方法;
	<%--
       ${student1.name} 等价于(点意味着调用getXX()方法,而不是调用该类的属性;故要在Student类里面要对name实现getXx方法)
       <%=((Student)pageContext.findAttribute("student1")).getName()%>
    --%>



表达式的计算

EL表达式计算
<%@ page language="java" import="java.util.*,kyle.*"
	pageEncoding="utf-8"%>



EL表达式获取List的值


	<%--1)算术表达式 +  -  *  / --%>
     ${10+5 }
${10*5 }
<%-- 2)比较运算 > < >= <= == != --%> ${10>5 }
${10<5 }
${10!=10 }
<%-- 3)逻辑运算 && || ! --%> ${true && false }
${true || false }
${!false }
<%--4)判空 null 或 空字符串: empty --%> <% //String name = "eric"; //String name = null; String name = ""; //空字符串 pageContext.setAttribute("name",name); %> 判断null: ${name==null }
判断空字符: ${name=="" }
判空:${name==null || name=="" } //判断是否为空 或者 是否为null; 另一种判空写法: ${empty name } //等价于上一种写法

 

你可能感兴趣的:(JavaEE)