博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
EL表达式
阅读量:3943 次
发布时间:2019-05-24

本文共 8610 字,大约阅读时间需要 28 分钟。

文章目录

EL表达式认识

EL表达式主要用于替换JSP页面中的脚本表达式<%= 变量或表达式 %>,以从各种类型的web域 中检索java对象、获取数据。

可以访问某个web域 中的对象,访问javabean的属性、访问list集合、访问map集合、访问数组

语法结构

EL表达式总是用大括号括起,而且前面有一个美元符($)

${
expression}

原理:会调用pageContext.findAttribute方法,用标识符为关键字,分别从page、request、session、application四个域中查找相应的对象,找到则返回相应对象,找不到则返回空字符串。

变量

EL 存取变量数据的方法很简单,例如:${username}。它的意思是取出某一范围中名称为username的变量。

因为我们并没有指定哪一个范围的username,所以它的默认值会先从Page 范围找,假如找不到,再依序到Request、Session、Application范围。假如途中找到username,就直接回传,不再继续找下去,但是假如全部的范围都没有找到时,就回传null,当然EL表达式还会做出优化,页面上显示空白,而不是打印输出NULL。

形式 说明
${pageScope.username} 取出Page范围的username变量
${requestScope.username} 取出Request范围的username变量
${sessionScope.username} 取出Session范围的username变量
${applicationScope.username} 取出Application范围的username变量

其中,pageScope、requestScope、sessionScope和applicationScope都是EL 的隐含对象

之前的写法:

String username =(String) session.getAttribute("username");

EL写法:

${
sessionScope.username} // 取出Session范围的username 变量

EL隐含对象

JSP有9个隐含对象,而EL也有自己的隐含对象。EL隐含对象总共有11 个

在这里插入图片描述

1.与范围有关的隐含对象

与范围有关的EL 隐含对象包含以下四个:
pageScope、requestScope、sessionScope 和applicationScope;
它们基本上就和JSP的pageContext、request、session和application一样;
在EL中,这四个隐含对象只能用来取得范围属性值,即getAttribute(String name),却不能取得其他相关信息。

例如:我们要取得session中储存一个属性username的值,可以利用下列方法:session.getAttribute("username")取得username的值,在EL中则使用下列方法${sessionScope.username}

2.与输入有关的隐含对象

与输入有关的隐含对象有两个:param和paramValues,它们是EL中比较特别的隐含对象。

例如我们要取得用户的请求参数时,可以利用下列方法:

request.getParameter(String name) request.getParameterValues(String name)

在EL中则可以使用param和paramValues两者来取得数据。

${
param.name}${
paramValues.name}

3.其他隐含对象

cookie

JSTL并没有提供设定cookie的动作,要取得cookie中有一个设定名称为userCountry的值,使用${cookie.userCountry}

header和headerValues

header 储存用户浏览器和服务端用来沟通的数据
例:要取得用户浏览器的版本,可以使用${header["User-Agent"]}

initParam

initParam取得设定web站点的环境参数(Context)

String userid = (String)application.getInitParameter("userid");等价于${
initParam.userid}

pageContext

pageContext取得其他有关用户要求或页面的详细信息

${pageContext.request.queryString}         取得请求的参数字符串${pageContext.request.requestURL}          取得请求的URL,但不包括请求之参数字符串${pageContext.request.contextPath}         服务的web application 的名称${pageContext.request.method}              取得HTTP 的方法(GET、POST)${pageContext.request.protocol}            取得使用的协议(HTTP/1.1、HTTP/1.0)${pageContext.request.remoteUser}          取得用户名称${pageContext.request.remoteAddr }         取得用户的IP 地址${pageContext.session.new}                 判断session 是否为新的${pageContext.session.id}                  取得session 的ID${pageContext.servletContext.serverInfo}   取得主机端的服务信息
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>      el隐式对象       
---------------1、pageContext对象:获取JSP页面中的pageContext对象------------------------
${
pageContext}
---------------2、pageScope对象:从page域(pageScope)中查找数据------------------------
<% pageContext.setAttribute("name","孤傲苍狼"); //map %> ${
pageScope.name}
---------------3、requestScope对象:从request域(requestScope)中获取数据------------------------
<% request.setAttribute("name","白虎神皇"); //map %> ${
requestScope.name}
---------------4、sessionScope对象:从session域(sessionScope)中获取数据------------------------
<% session.setAttribute("user","xdp"); //map %> ${
sessionScope.user}
---------------5、applicationScope对象:从application域(applicationScope)中获取数据------------------------
<% application.setAttribute("user","gacl"); //map %> ${
applicationScope.user}
--------------6、param对象:获得用于保存请求参数map,并从map中获取数据------------------------
${
param.name}
--------------7、paramValues对象:paramValues获得请求参数 //map{"",String[]}------------------------
${
paramValues.like[0]} ${
paramValues.like[1]}
--------------8、header对象:header获得请求头------------------------
${
header.Accept}
<%--${
header.Accept-Encoding} 这样写会报错 测试headerValues时,如果头里面有“-” ,例Accept-Encoding,则要headerValues[“Accept-Encoding”] --%> ${
header["Accept-Encoding"]}
--------------9、headerValues对象:headerValues获得请求头的值------------------------
<%--headerValues表示一个保存了所有http请求头字段的Map对象,它对于某个请求参数,返回的是一个string[]数组 例如:headerValues.Accept返回的是一个string[]数组 ,headerValues.Accept[0]取出数组中的第一个值 --%> ${
headerValues.Accept[0]}
<%--${
headerValues.Accept-Encoding} 这样写会报错 测试headerValues时,如果头里面有“-” ,例Accept-Encoding,则要headerValues[“Accept-Encoding”] headerValues["Accept-Encoding"]返回的是一个string[]数组,headerValues["Accept-Encoding"][0]取出数组中的第一个值 --%> ${
headerValues["Accept-Encoding"][0]}
--------------10、cookie对象:cookie对象获取客户机提交的cookie------------------------
${
cookie.JSESSIONID.value} //保存所有cookie的map
--------------11、initParam对象:initParam对象获取在web.xml文件中配置的初始化参数------------------------
<%--
xxx
yyyy
root
/JavaWeb_EL_Study_20140826
--%> <%--获取servletContext中用于保存初始化参数的map --%> ${
initParam.xxx}
${
initParam.root}

EL运算符

1.算术运算符有五个:+、-、*或$、/或div、%或mod

2.关系运算符有六个:==或eq、!=或ne、<或lt、>或gt、<=或le、>=或ge

3.逻辑运算符有三个:&&或and、||或or、!或not

4.其它运算符有三个:Empty运算符、条件运算符、()运算符

例:${empty param.name}、${A?B:C}、${A*(B+C)}

EL关系运算符:

在这里插入图片描述

EL逻辑运算符:

在这里插入图片描述

1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 2 <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 3 <%@page import="me.gacl.domain.User"%> 4  5  6    7     el表达式运算符 8    9   10   11   

el表达式进行四则运算:

12 加法运算:${
365+24}
13 减法运算:${
365-24}
14 乘法运算:${
365*24}
15 除法运算:${
365/24}
16 17

el表达式进行关系运算:

18 <%--${
user == null}和 ${
user eq null}两种写法等价--%>19 ${
user == null}
20 ${
user eq null}
21 22

el表达式使用empty运算符检查对象是否为null(空)

23 <% 24 25 List
list = new ArrayList
();26 list.add("gacl");27 list.add("xdp");28 request.setAttribute("list",list);29 %>30 <%--使用empty运算符检查对象是否为null(空) --%>31
32
33 ${
str}
34
35
36
37 <%38 List
emptyList = null;39 %>40 <%--使用empty运算符检查对象是否为null(空) --%>41
42 对不起,没有您想看的数据43
44 45
46 47

EL表达式中使用二元表达式

48 <% 49 session.setAttribute("user",new User("孤傲苍狼"));50 %>51 ${
user==null? "对不起,您没有登陆 " : user.username}52 53
54 55

EL表达式数据回显

56 <% 57 User user = new User();58 user.setGender("male");59 //数据回显60 request.setAttribute("user",user);61 %>62
男63
女64
65 66

Empty 运算符

Empty 运算符主要用来判断值是否为空(NULL,空字符串,空集合)。

条件运算符

${ A ? B : C}

案例

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><%@page import="me.gacl.domain.Person"%><%@page import="me.gacl.domain.Address"%>      el表达式获取数据        <%        request.setAttribute("name","孤傲苍狼");    %>        <%--${
name}等同于pageContext.findAttribute("name") --%> 使用EL表达式获取数据:${
name}

<% Person p = new Person(); p.setAge(12); request.setAttribute("person",p); %> 使用el表达式可以获取bean的属性:${
person.age}

<% Person person = new Person(); Address address = new Address(); person.setAddress(address); request.setAttribute("person",person); %> ${
person.address.name}

<% Person p1 = new Person(); p1.setName("孤傲苍狼"); Person p2 = new Person(); p2.setName("白虎神皇"); List
list = new ArrayList
(); list.add(p1); list.add(p2); request.setAttribute("list",list); %>
${
list[1].name}
${
person.name}

<% Map
map = new LinkedHashMap
(); map.put("a","aaaaxxx"); map.put("b","bbbb"); map.put("c","cccc"); map.put("1","aaaa1111"); request.setAttribute("map",map); %>
${
map.c} ${
map["1"]}

${
me.key}=${
me.value}

转载地址:http://zeawi.baihongyu.com/

你可能感兴趣的文章
鼠标悬停显示下划线(带小特效)------Sestid
查看>>
jQuery 实现input搜索框自动匹配------Sestid
查看>>
Js 实现回车键触发登录,并弹出需要输入信息------Sestid
查看>>
Js字符串和数组方法及使用------Sestid
查看>>
JavaScript常用算法(面试)------Sestid
查看>>
Js或者jQuery实现点击图片出现蒙层并将图片放大在蒙层上------Sestid
查看>>
Js,jQuery事件、效果大全------Sestid
查看>>
CSS块元素、内联元素、内联块元素详解------Sestid
查看>>
Js实现跟随鼠标移动的小球------Sestid
查看>>
HTML图像,链接,列表,表格等详细介绍------Sestid
查看>>
Js实现的俄罗斯方块小游戏------Sestid
查看>>
Js实现贪吃蛇小游戏------Sestid
查看>>
jQuery常用方法(持续更新)
查看>>
原生js实现自定义倒计时效果------Sestid
查看>>
原生js实现生成随机验证码=------Sestid
查看>>
js实现购物时选带属性的商品------Sestid
查看>>
点击出现对应界面(第二个界面可以选择显示内容)------Sestid
查看>>
Js实现炫酷仿抖罗盘时钟------Sestid
查看>>
vivo官网鼠标触碰图片拉长------Sestid
查看>>
canvas画布实现的集中效果
查看>>