JAVA应用总是搞出来这么多名堂
EL——ExpressionLanguage,它是用于替换JSP页面中的脚本表达式。之前也有提到过,在JSP页面中使用脚本表达式进行数据显示是一件痛苦的事。若想使用EL表达式,WEB服务器必须支持Servlet2.4/JSP2.0技术。
EL都有哪些功能呢?比如${标识符},EL拿到标识符后会到自己的隐式对象中去查找,如果隐式对象中不存在,则到page域、request域、session域、application域中去查找。
举例:${abcd},abcd不是EL的隐式对象。但它在request域中(request.setAttribute (“abcd”,”hi”);),所以会调用pageContext.findAttribute方法进行查找,${abcd}代表的就是request.getAttribute(“abcd”);,EL都具有哪些隐式对象呢?
pageContext、pageScope、requestScope、sessionScope、applicationScope,param、paramValues、header、headerValues、cookie、initParam。这些都是Servlet中相关的作用域对象,比如${requestScope.abcd}就是获取request中的abcd属性。既然${abcd}与${requestScope.abcd}有什么区别,使用${abcd}不是更简单吗?咱们来看一下这种情况:request.setAttribute(“abcd”,”hiRequest”); session.setAttribute(“abcd”,”hiSession”);,${abcd},获取的是request中的abcd,如果request中没有abcd它获取的就是session的abcd。这下明白了吧!如果两个域中具有相同的属性,那么些时EL的隐式对象就发挥了作用。EL中的隐式对象完全可以操作相应域的数据。
EL也具有基本的运算处理能力:算术运算、逻辑运算和关系运算。在此就不一一列举了!
在EL中也可以编写自己的函数:
1. 编写一个类,定义静态方法:
public class MyEl { public static String getMessage(){ return "HI,我是EL自定义函数!!!"; } } |
2. 在WEB-INF目录中添加一个*.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"> <description>A tag library exercising SimpleTag handlers.</description> <tlib-version>1.0</tlib-version> <short-name>SimpleTagLibrary</short-name> <uri>/SimpleTagLibrary</uri> <function> <name>print</name> <function-class>cn.itcast.cc.el.MyEl</function-class> <function-signature>java.lang.String getMessage()</function-signature> </function> </taglib> |
3. 在要调用本函数的JSP页面中添加引用:
4.调用方法:${cc:print()}
上面就是编写自定义EL函数的过程,Apache组织为EL提供了一些比较常用的函数。
比如文件处理函数,方老师说这一点要注意,以后不需要在Servlet中把处理好的文本传递给页面,可以在页面中直接使用Apache提供的函数来方便快捷的处理文本。
Apache提供的EL常用函数在Standard.jar包中的“org.apache.taglibs.standard.functions.Functions”包中。URI是http://localhost:8080/jsp/jstl/functions。