标签:
一.EL概述
EL(Expression Language):目的是使JSP写起来更简单。
1.1、EL的作用
在JSP2.0后要把html和css分离、要把html和js分开、要把Java脚本替换成标签。不包含<%...%>等
而标签的好处:即使不是java人员,也可以轻松的去使用
1.2、EL的格式及使用
使用格式:${}
使用前提:如果不希望使用EL,需要在JSP的page指令需要指定isELIgnore="true",默认是false,即不忽略
1.3、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 |
EL表达式的值如果为null,会显示空串,也就是什么也不显示
操作List和数组:${list[0]}、${arr[0]};
操作bean的属性:${person.name}、${person[‘name’]},对应person.getName()方法
操作Map的值:${map.key}、${map[‘key’]},对应map.get(key)
1.4、EL的内置对象
EL一共11个内置对象,无需创建即可以使用。这11个内置对象中有10个是Map类型的,最后一个是pageContext对象。
Map applicationScope(重点) |
应用程序范围内的scoped变量组成的集合 |
Map cookie |
所有cookie组成的集合 |
Map header |
HTTP请求头部,字符串 |
Map headerValues |
HTTP请求头部,字符串集合 |
Map initParam |
全部应用程序参数名组成的集合 |
pageContext |
当前页面的javax.servlet.jsp.PageContext对象 |
Map pageScope(重点) |
页面范围内所有对象的集合 |
Map param |
所有请求参数字符串组成的集合 |
Map paramValues |
所有作为字符串集合的请求参数 |
Map requestScope(重点) |
所有请求范围的对象的集合 |
Map sessionScope(重点) |
所有会话范围的对象的集合 |
l pageScope:${pageScope.name}等同与pageContext.getAttribute(“name”); l requestScope:${requestScope.name}等同与request.getAttribute(“name”); l sessionScoep: ${sessionScope.name}等同与session.getAttribute(“name”); l applicationScope:${applicationScope.name}等同与application.getAttribute(“name”);使用EL来获取域中保持的javaBean对象,那么javaBean一定要设置get方法
全域查找:${person}表示依次在pageScope、requesScopet、sessionScope、appliationScope四个域中查找名字为person的属性
注意:EL表达式在获取Map或javaBean的值时,有两种方式request.xxx或request[‘xxx‘],作用相同,但是若果Map的键或javaBean的属性名包含‘_‘,EL就必须使用下标的方式request[‘xx_x‘]
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(); |
1.什么是EL函数库
EL函数库是由第三方对EL的扩展,
EL函数库就是定义一些有返回值的静态方法。然后通过EL语言来调用它们!EL函数库中包含了很多对字符串的操作方法,以及对集合对象的操作。例如:${fn:length(“abc”)},但用的不是很多
因为是第三方的东西,所以需要导入。导入需要使用taglib指令!
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
常见方法:l String toUpperCase(String input): l String toLowerCase(String input): l int indexOf(String input, String substring): l boolean contains(String input, String substring): l boolean containsIgnoreCase(String input, String substring): l boolean startsWith(String input, String substring): l boolean endsWith(String input, String substring): l String substring(String input, int beginIndex, int endIndex): l String substringAfter(String input, String substring):hello-world, “-“ l substringBefore(String input, String substring):hello-world, “-“ l String escapeXml(String input):把字符串的“>”、“<”。。。转义了! l String trim(String input): l String replace(String input, String substringBefore, String substringAfter): l String[] split(String input, String delimiters): l int length(Object obj):可以获取字符串、数组、各种集合的长度! l String join(String array[], String separator):
<%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> … 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> -->
1.写一个类,写一个有返回值的静态方法
2.编写tld文件,可以参考jstl给定的fn.tld文件来写,把tld文件放到/WEB-INF目录下
package cn.cil.funcations; public class MyFuncations { public static String get() { return "自定义EL函数库测试"; } }TLD
<?xml version="1.0" encoding="UTF-8" ?> <taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd" version="2.0"> <tlib-version>1.0</tlib-version> <short-name>cc</short-name> <uri>http://www.xixihahaxiaobenzhu.cn/jsp/functions</uri> <function> <name>get</name> <function-class>cn.cil.funcations.MyFunction</function-class> <function-signature>String get()</function-signature> </function> </taglib>
<body> <h1>${cc:get() }</h1> </body>
编写完tld后,需要将它放置到<web应用>\WEB-INF目录中或WEB-INF目录下的除了classes和lib目录之外的任意子目录中。
TLD文件中的<uri> 元素用指定该TLD文件的URI,在JSP文件中需要通过这个URI来引入该标签库描述文件。
<function>元素用于描述一个EL自定义函数,其中:
<name>子元素用于指定EL自定义函数的名称。
<function-class>子元素用于指定完整的Java类名,
<function-signature>子元素用于指定Java类中的静态方法的签名,方法签名必须指明方法的返回值类型及各个参数的类型,各个参数之间用逗号
标签:
原文地址:http://blog.csdn.net/wjw0130/article/details/45720273