【JSP】EL表达式
创始人
2024-03-04 12:57:51
0

EL表达式

  • EL表达式干什么用的?
  • EL表达式的使用
    • 面试题
    • 如何输出对象属性值?
    • 域中取数据注意事项
    • EL表达式的空处理
    • 如何从Map集合中取数据
    • 如何从数组或者List集合中获取数据
    • 局部忽略EL表达式
    • EL表达式的内置对象
    • EL表达式的运算符

EL表达式干什么用的?

  • Expression Language(表达式语言缩写)
  • EL表达式可以代替JSP中的Java代码,让JSP文件中的程序看起来更加的整洁,美观。
  • JSP中夹杂着各种Java代码,例如<%
    java代码%>、<%=%>等,导致JSP文件混乱,不好维护,不美观。所以才有了后期的EL表达式。
  • EL表达式可以算是JSP语法中的一部分,EL表达式属于JSP
  • EL表达式出现在JSP中主要是:
  • 从某个作用域中取数据,然后将其转换成字符串,然后将其输出到浏览器,这就是EL表达式的功效,三大功效:
  • 第一功效:从某个域中取数据
    四个域:pageContext,request,session,application
  • 第二功效:将取出的数据转换成字符串
    如果是Java对象,也会自动调用toString方法自动转换成字符串
  • 将字符串输出到浏览器
    <%=%>一样,将其输出到浏览器

EL表达式的基本语法格式:

${表达式}

EL表达式的使用

<%//创建User对象User user = new User();user.setUsername("jack");user.setPassword("123");user.setAge(19);// 将user对象存储在请求域中// 数据必须存储到某四大范围之一的。request.setAttribute("user",user);
%>
// ${这里写的是存储到域对象当中的name,而且没有引号,如果有引号就是个普通字符串}
${user}等同于<%=request.getAttribute("user")%>

面试题

${abc} 和 ${"abc"}的区别是什么?
${abc}表示从某个域中取出数据,并且被取出的这个数据的name是"abc",之前有一定有这样的代码:域.setAttribute("abc",对象);
${“abc"}表示直接将”abc“当作普通字符串输出到浏览器,不会从某个域中去取出数据了。

${user} 底层是怎么做的呢?

从域中取出对象,然后调用user对象的toString方法,
转换成字符串,输出到浏览器。

如何输出对象属性值?

	使用下面语法前提是,User对象中有getUsername()方法${user.username}EL表达式中的这个语法,实际上调用了底层的getXXX()方法注意:如果没有对应的get方法,则出现异常,报500错误。

域中取数据注意事项

在没有指定范围的情况下,EL表达式优先从小范围中读取数据:
pageContext<request<session<application

在EL表达式中可以指定范围来读取数据,EL表达式有四个隐式的范围对象:
pageScoperequestScopesessionScopeapplicationScope

<%@page contentType="text/html;charset=UTF-8"%>
<%@page import="javawen.jsp.bean.User"%><%// 四个域都存储了数据,并且name相同pageContext.setAttribute("data","pageContext");request.setAttribute("data","request");session.setAttribute("data","session");application.setAttribute("data","application");
%>${data}
${sessionScope.data}
${pageScope.data}
${requestScope.data}
${applicationScope.data}

浏览器输出效果:
在这里插入图片描述

EL表达式的空处理

EL表达式对null进行了预处理,如果是null则对浏览器输出一个空字符串。

<%@page contentType="text/html;charset=UTF-8" %><%request.setAttribute("username","xmq");
%><%--取出数据输出到浏览器上--%>
<%=request.getAttribute("username")%>采用EL表达式:${username}
<%=request.getAttribute("u")%>
<%--EL表达式主要任务是页面展示,从这方面是友好的--%> <%--EL表达式对null进行了处理,如果是null则在浏览器上显示空白--%> 采用EL表达式:${u}
<%--EL表达式表面是这种写法,实际上还是翻译成Java代码执行--%> ${username} 这个EL表达式等同于这行代码; <%=request.getAttribute("username")==null?"":request.getAttribute("username")%>

输出结果:
在这里插入图片描述

如何从Map集合中取数据

${Map_name.key}

例子:

<%@ page import="java.util.Map" %>
<%@ page import="java.util.HashMap" %>
<%@ page import="javawen.jsp.bean.User" %>
<%@page contentType="text/html;charset=UTF-8" %><%Map map = new HashMap<>();map.put("username","zhangsan");map.put("password","123");//将map集合存到请求域中request.setAttribute("usermap",map);Map userMap2 = new HashMap<>();User user = new User();user.setUsername("zhangsan");userMap2.put("user",user);request.setAttribute("user",userMap2);
%>${usermap.username}

${usermap.password}
${user.user.username}

展示效果:
在这里插入图片描述

如何从数组或者List集合中获取数据

${数组名[0]}
${list[0]}
<%@ page import="javawen.jsp.bean.User" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.Set" %>
<%@ page import="java.util.HashSet" %>
<%@page contentType="text/html;charset=UTF-8" %><%String[] userNames = {"zhangsan","xmq","shabi"};request.setAttribute("usernames",userNames);User user1 = new User();user1.setUsername("xzd");User user2 = new User();user2.setUsername("agewdgtaew");User[] users = {user1,user2};request.setAttribute("users",users);List list = new ArrayList<>();list.add("dasg");list.add("ghfda");request.setAttribute("list",list);Set set = new HashSet<>();set.add("gad");set.add("qwerhyg");request.setAttribute("set",set);
%>${usernames}

${usernames[0]}
${users[1].username}
${list[1]}
${set}

效果:
在这里插入图片描述

局部忽略EL表达式

可以在$前面加一个\

<%@page contentType="text/html;charset=UTF-8"%>
<%--这是忽略本页面的所有EL表达式,不常用--%>
<%--<%@page contentType="text/html;charset=UTF-8" isElIgnored="true" %>--%><%request.setAttribute("fasdf","ggaegaweg");
%>${fasdf}

<%--这是局部忽略EL表达式--%> \${fasdf}

效果:
在这里插入图片描述

EL表达式的内置对象

EL表达式内置对象有十一个(注意是EL表达式的内置对象,别和JSP九大内置对象混在一起),下面列举几个常用的:

pageContext //对应JSP中的pageContext对象
pageScope  // 代表page域中用于保存属性的Map对象
requestScope //  代表request域中用于保存属性的Map对象
sessionScope //  代表session域中用于保存属性的Map对象
applicationScope  //  代表application域中用于保存属性的Map对象
param // 表示保存了所有请求参数的Map对象
paramValues //表示一个保存了所有请求参数的Map对象,它对于某个请求参数,返回的是一个string[]
initParam // 表示一个保存了所有web应用初始化参数的map对象

其他的内置对象:

header
headerValues
cookie

pageContext的一些方法:

在这里插入图片描述
EL表达式通过pageContext内置对象可以获取到jsp中的内置对象,除了out外,其他七大内置对象都可以获取到(因为EL表达式本身就会浮现在浏览器上,所以就没必要获取out内置对象了)

  1. 通过EL表达式获取应用的根:
  • ${pageContext.request.contextPath}等同于<%=pageContext.getRequest().getContextPath()%>
  1. param保存的是Map对象,所以我们提取就可以${param.key)就可以了
  • ${param.key}相当于<%=request.getParameter("key")%>

这获取的是请求参数key对应values的第一个。

  1. paramValues保存的也是Map对象,对应的value类型是String[]数组
  • ${paramValues.habbits[0]}就相当于<%=request.getParameterValuses("habbits")[0]%>
  1. initParam 也是一个Map,保存了webapp的配置信息;
  • <%=application.getInitParameter("key")%>等同于${initParam.key}

EL表达式的运算符

EL表达式支持简单的运算符:加减乘除取模(+ - * / %),逻辑运算符(! && || not and or),关系运算符(== != < > <= >=),三目运算符(? :),empty运算符

在这里插入图片描述

  • 其中 ==!= 都是调用 equals 方法
  • 其中 + 会将字符串转换后再进行 + 运算==》${10 + "20"}结果是30

相关内容

热门资讯

政策通 活字典 多面手 □马成 以“政策通”明方向,确保惠民政策不跑偏;以“活字典”知民情,感知群众需求不脱节;以“多面手”...
先行调解化纠纷 两面锦旗赞公信 大象新闻记者 魏广宝 通讯员 李亚瑾/文图 近日,一起中介合同纠纷案件的原、被告当事人分别来到南阳市...
李家超:河套深港科技创新合作区... 观点网讯:12月23日,香港特别行政区行政长官李家超表示,河套深港科技创新合作区的发展定位是打造世界...
灵宝市司法局部署法律服务机构规... 大象新闻记者 许继彬 通讯员 袁林波 李婕霄/文图 为进一步规范法律服务机构执业行为,提升法律服务质...
司法部、教育部、共青团中央在全... 在第40个国际志愿者日之际,司法部、教育部、共青团中央印发通知,在全国组织开展并持续推进“法援志愿行...
Coupang母公司遭股东集体... 【12月23日消息,韩国最大电商平台Coupang母公司遭美国股东集体诉讼】因被指未及时妥善披露大规...
讲法说理,为乡亲们化解纠纷 贵州日报天眼新闻记者 杨净媛 “大家别急,先推代表说问题,施工方也派人回应!”面对围在天然气管道施工...
快手称遭黑灰产攻击,律师:攻击... 12月22日晚,不少网友反映快手直播间出现大量色情内容,包括播放淫秽影片、主播擦边低俗表演等。快手工...
三部门在全国组织开展“法援志愿... 中新网12月23日电 据司法部微信公众号消息,为广泛动员法律工作者、高校师生和个人积极投身法律援助志...