JSP页面中很多时候,脚本都可以用el表达式来代替。在各种引用地址中,由于简便灵活,所以el被广泛应用。el使用时一般需要配合标签jstl,标签的版本各容器不同也有差异,使用时需要考虑到。
... <link rel="stylesheet" href="${pageContext.request.contextPath}/static/bower/bootstrap/css/bootstrap.min.css"> <link rel="stylesheet" href="${pageContext.request.contextPath}/static/bower/bootstrap-datepicker/css/bootstrap-datepicker.min.css"> <link rel="stylesheet" href="${pageContext.request.contextPath}/static/css/content.css" /> ...
基本的格式就是${表达式},要注意的是,如果想用表达式表达自定义的数据,那么该数据必须存放于域中,el表达式规定了4个作用域,pageScope, requestScope, sessionScope以及applicationScope,另外el规定了pageContext,相当于jsp中的PageContext对象。
还有几个el的内置对象为:
param 一个请求参数 ${param.username} request.getParameter("username");
paramValues 一组 ${paramValues.loves} request.getParameterValues("loves");
header 一个头 ${header.referer} request.getHeader("referer");
headerValues 一组头 ${header.cookie} request.getHeaders("cookie");
cookie 获得cookie对象
initParam WEB项目初始化参数, servletContext.getInitParameter("xxx");
共11个el的内置对象,所以页面取值也比较灵活,常用取值表达式如下:
${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是否为新的。所谓新的session,表示刚由server产生而client 尚未使用 ${pageContext.session.id} 取得session的ID ${pageContext.servletContext.serverInfo} 取得主机端的服务信息
需要注意的是,如果请求头中有"-",那么需要用headerValues["Accept-Encoding"],另外测试cookie时,${cookie.key}指代的是cookie对象,如果要里面的名字与内容就直接表示为:${cookie.key.name}与${cookie.key.value}.
[‘‘]与.都是el中的运算符,大多时候二者可以等价使用,也可以混合使用,
例如:${sessionScope.book.title} 获得book对象的title值
等价 ${sessionScope.book["title"]}
又如:${sessionScope.bookList[0]["title"]},
如果属性值中包含了一些特殊字符,则我们也需要用[‘‘]运算符来对它进行取值。注意[]里要加引号,单双无所谓,但必须加。
=========================================================>
算术运算符:+ - * /(或div) %(或mod)
关系运算符:== != >= <= > < (或:eq ne ge le gt lt) && || !(或and or not) 结果为true或者false
empty运算符在判断是否为null "" 以及集合数组没有内容是很好用,返回true/false
二元表达式
=========================================================>
引用el函数
首先就是引用规范中提供用于处理输出内容的函数,需要在页面中加上:
<%@taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
el输出显示到页面的内容都是字符串,fn就是对字符串进行操作的函数库。
... <body> <hr> ${fn:contains("abc","a") } <br> ${empty str } <br> ${fn:escapeXml("<br/>") }<%--转义 --%> <br> ${fn:indexOf("changjiang.chen","i") } ...
=========================================================>
建立自己的el函数库:
1 确定实现类(自定义,方法必须是static)
2 编写配置文件(描述文件),通知tomcat实现类位置,tld文件标签描述文件
3 jsp 使用自己函数库
首先是定义一个static方法,
public class MyElFunction { public static String myFunc(String str) { if (!str.equals("")) { return str + " success!"; } else { return "kong"; } } }
在WEB-INF下任意位置建立一个tld文件,
<?xml version="1.0" encoding="UTF-8" ?> <taglib xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd" version="2.1"> <tlib-version>1.1</tlib-version> <short-name>myfn</short-name> <uri>http://www.changhong.com</uri> <function> <name>myFunc</name> <function-class>com.test.el4t.MyElFunction</function-class> <function-signature>java.lang.String myFunc(java.lang.String)</function-signature> </function> </taglib>
最后是在自己的jsp页面中进行引用:
<%@taglib uri="http://www.changhong.com" prefix="myfn"%> <%@ page isELIgnored="false"%> ... <br> ${myfn:myFunc("This is a test my el function!") } </body> ...
即可在页面中显示
This is a test my el function! success!