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" %>
<%@ page isELIgnored="false"%>

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!

 

posted on 2016-10-11 17:33  长江同学  阅读(525)  评论(0编辑  收藏  举报