微前端架构如何改变企业的开发模式与效率提升
850
2022-10-21
EL表达式
/**作者:呆萌老师*☑csdn认证讲师*☑高级讲师*☑腾讯课堂认证讲师*☑网易云课堂认证讲师*☑华为开发者学堂认证讲师*☑爱奇艺千人名师计划成员*在这里给大家分享技术、知识和生活*各种干货,记得关注哦!*/
EL(表达式语言)
1 EL概述
1.1 EL的作用
EL: (Expression Language) 表达式语言:用于计算和输出存储在标志位置(page,request,session,application)的java对象的值。
jsP2.0要把html和css分离、要把html和javascript分离、要把Java脚本替换成标签。标签的好处是非Java人员都可以使用。
JSP2.0 – 纯标签页面,即:不包含<% … %>、<%! … %>,以及<%= … %>
EL(Expression Language)是一门表达式语言,它对应<%=…%>。我们知道在JSP中,表达式会被输出,所以EL表达式也会被输出。
基本格式:${}
访问JavaBean:
第一种 点号记法:${Product.pid}; //常用
第二种 数组记法:${Product[“pid”]}
EL表达式先从request对象中取值 如果没有 就从session中取值,如果都取不到 就不显示,不会报空指针异常(即使调用不存在的对象的属性)。
EL表达式可以直接取对象中的私有属性,也不需要强转对象类型
1.2 EL的格式
格式:${…}
例如:${1 + 2}
1.3 关闭EL
如果希望整个JSP忽略EL表达式,需要在page指令中指定isELIgnored=”true”。
如果希望忽略某个EL表达式,可以在EL表达式之前添加“\”,例如:\${1 + 2}。
1.4 EL运算符
运算符 | 说明 | 范例 | 结果 |
+ | 加 | ${17+5} | 22 |
- | 减 | ${17-5} | 12 |
* | 乘 | ${17*5} | 85 |
/或div | 除 | ${17/5}或${17 div 5} | 3 |
%或mod | 取余 | ${17%5}或${17 mod 5} | 2 |
==或eq | 等于 | ${5==5}或${5 eq 5} | true |
!=或ne | 不等于 | ${5!=5}或${5 ne 5} | false |
<或lt | 小于 | ${3<5}或${3 lt 5} | true |
>或gt | 大于 | ${3>5}或${3 gt 5} | false |
<=或le | 小于等于 | ${3<=5}或${3 le 5} | true |
>=或ge | 大于等于 | ${3>=5}或${3 ge 5} | false |
&&或and | 并且 | ${true&&false}或${true and false} | false |
!或not | 非 | ${!true}或${not true} | false |
||或or | 或者 | ${true||false}或${true or false} | true |
empty | 是否为空 | ${empty “”},可以判断字符串、数据、集合的长度是否为0,为0返回true。empty还可以与not或!一起使用。${not empty “”} | true |
1.5 EL不显示null
当EL表达式的值为null时,会在页面上显示空白,即什么都不显示。
2 EL表达式格式
先来了解一下EL表达式的格式!现在还不能演示它,因为需要学习了EL11个内置对象后才方便显示它。
操作List和数组:${list[0]}、${arr[0]};操作bean的属性:${person.name}、${person[‘name’]},对应person.getName()方法;操作Map的值:${map.key}、${map[‘key’]},对应map.get(key)。
3 EL内置对象
EL一共11个内置对象,无需创建即可以使用。这11个内置对象中有10个是Map类型的,最后一个是pageContext对象。
pageScoperequestScopesessionScopeapplicationScopeparam;paramValues;header;headerValues;initParam;cookie;pageContext;
3.1 域相关内置对象(重点)
域内置对象一共有四个:
pageScope:${pageScope.name}等同与pageContext.getAttribute(“name”);requestScope:${requestScope.name}等同与request.getAttribute(“name”);sessionScoep: ${sessionScope.name}等同与session.getAttribute(“name”);applicationScope:${applicationScope.name}等同与application.getAttribute(“name”);
如果在域中保存的是JavaBean对象,那么可以使用EL来访问JavaBean属性。因为EL只做读取操作,所以JavaBean一定要提供get方法,而set方法没有要求。
Person.java
publicclass Person { private String name; privateintage; private String sex; public String getName() { returnname; } publicvoid setName(String name) { this.name = name; } publicint getAge() { returnage; } publicvoid setAge(int age) { this.age = age; } public String getSex() { returnsex; } publicvoid setSex(String sex) { this.sex = sex; } } |
编辑
全域查找:${person}表示依次在pageScope、requesScopet、sessionScope、appliationScope四个域中查找名字为person的属性。
3.2 请求参数相关内置对象
param和paramValues这两个内置对象是用来获取请求参数的。
param:Map
编辑
注意,在使用EL获取参数时,如果参数不存在,返回的是空字符串,而不是null。这一点与使用request.getParameter()方法是不同的。
编辑
paramValues:paramValues是Map
编辑
3.3 请求头相关内置对象
header和headerValues是与请求头相关的内置对象:
header: Map
编辑
headerValues:headerValues是Map
3.4 应用初始化参数相关内置对象
initParam:initParam是Map
3.5 Cookie相关内置对象
cookie:cookie是Map
编辑
3.6 pageContext对象
pageContext:pageContext是PageContext类型!可以使用pageContext对象调用getXXX()方法,例如pageContext.getRequest(),可以${pageContext.request}。也就是读取JavaBean属性!!!
EL表达式 | 说明 |
${pageContext.request.queryString} | pageContext.getRequest().getQueryString(); |
${pageContext.request.requestURL} | pageContext.getRequest().getRequestURL(); |
${pageContext.request.contextPath} | pageContext.getRequest().getContextPath(); |
${pageContext.request.method} | pageContext.getRequest().getMethod(); |
${pageContext.request.protocol} | pageContext.getRequest().getProtocol(); |
${pageContext.request.remoteUser} | pageContext.getRequest().getRemoteUser(); |
${pageContext.request.remoteAddr} | pageContext.getRequest().getRemoteAddr(); |
${pageContext.session.new} | pageContext.getSession().isNew(); |
${pageContext.session.id} | pageContext.getSession().getId(); |
${pageContext.servletContext.serverInfo} | pageContext.getServletContext().getServerInfo(); |
EL函数库
1 什么EL函数库
EL函数库是由第三方对EL的扩展,我们现在学习的EL函数库是由JSTL添加的。
EL函数库就是定义一些有返回值的静态方法。然后通过EL语言来调用它们!当然,不只是JSTL可以定义EL函数库,我们也可以自定义EL函数库。
EL函数库中包含了很多对字符串的操作方法,以及对集合对象的操作。例如:${fn:length(“abc”)}会输出3,即字符串的长度。
2 导入函数库
因为是第三方的东西,所以需要导入。导入需要使用taglib指令!
<%@ taglib prefix="fn" uri="%>
3 EL函数库介绍
String toUpperCase(String input):String toLowerCase(String input):int indexOf(String input, String substring):boolean contains(String input, String substring):boolean containsIgnoreCase(String input, String substring):boolean startsWith(String input, String substring):boolean endsWith(String input, String substring):String substring(String input, int beginIndex, int endIndex):String substringAfter(String input, String substring):hello-world, “-“substringBefore(String input, String substring):hello-world, “-“String escapeXml(String input):把字符串的“>”、“<”。。。转义了!String trim(String input):String replace(String input, String substringBefore, String substringAfter):String[] split(String input, String delimiters):int length(Object obj):可以获取字符串、数组、各种集合的长度!String join(String array[], String separator):
<%@taglibprefix="fn"uri="style="color: #bf5f3f;">%> … String[] strs = {"a", "b","c"}; List list = new ArrayList(); list.add("a"); pageContext.setAttribute("arr", strs); pageContext.setAttribute("list", list); %> ${fn:length(arr) }<br/><!--3--> ${fn:length(list) }<br/><!--1--> ${fn:toLowerCase("Hello") }<br/><!-- hello --> ${fn:toUpperCase("Hello") }<br/><!-- HELLO --> ${fn:contains("abc", "a")}<br/><!-- true --> ${fn:containsIgnoreCase("abc", "Ab")}<br/><!-- true --> ${fn:contains(arr, "a")}<br/><!-- true --> ${fn:containsIgnoreCase(list, "A")}<br/><!-- true --> ${fn:endsWith("Hello.java", ".java")}<br/><!-- true --> ${fn:startsWith("Hello.java", "Hell")}<br/><!-- true --> ${fn:indexOf("Hello-World", "-")}<br/><!-- 5 --> ${fn:join(arr, ";")}<br/><!-- a;b;c --> ${fn:replace("Hello-World", "-", "+")}<br/><!-- Hello+World --> ${fn:join(fn:split("a;b;c;", ";"), "-")}<br/><!-- a-b-c --> ${fn:substring("0123456789", 6, 9)}<br/><!-- 678 --> ${fn:substring("0123456789", 5, -1)}<br/><!-- 56789 --> ${fn:substringAfter("Hello-World", "-")}<br/><!-- World --> ${fn:substringBefore("Hello-World", "-")}<br/><!-- Hello --> ${fn:trim(" a b c ")}<br/><!-- a b c --> ${fn:escapeXml("<html></html>")}<br/><!-- <html></html> --> |
4 自定义EL函数库
写一个类,写一个有返回值的静态方法;编写eduask.tld文件,可以参数fn.tld文件来写,把eduask.tld文件放到/WEB-INF目录下;在页面中添加taglib指令,导入自定义标签库。
EduaskFuncations.java
package cn.eduask.el.funcations; publicclass EduaskFuncations { publicstatic String test() { return"上海软件自定义EL函数库测试"; } } |
eduask.tld(放到classes下)
<?xmlversion="1.0"encoding="UTF-8"?> <taglibxmlns="data-id="p838747a-stAPPorX"> xmlns:xsi="data-id="p838747a-cr7DgL4Y"> xsi:schemaLocation="data-id="p838747a-NezJ4XRC"> version="2.0">
<tlib-version>1.0</tlib-version> <short-name>eduask</short-name> <uri>style="color: #008080;"></uri> <function> <name>test</name> <function-class>cn.eduask.el.funcations.EduaskFuncations</function-class> <function-signature>String test()</function-signature> </function> </taglib> |
index.jsp
<%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%> <%@taglibprefix="edu"uri="/WEB-INF/eduask.tld" %> <!DOCTYPEHTMLPUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <body> <h1>${edu:test() }</h1> </body> </html> |
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~