• 技术文章 >Java >java教程

    分享一个JSP页面技术之EL表达式整理归纳总结

    Y2JY2J2017-04-28 10:04:03原创757
    这篇文章主要介绍了java中JSP页面技术之EL表达式概念作用以及语法等的使用,需要的朋友可以参考

    一、概念

    表达式语言(Expression Language),或称EL表达式,简称EL,是Java中的一种特殊的通用编程语言,借鉴于JavaScript和XPath。主要作用是在Java Web应用程序嵌入到网页(如JSP)中,用以访问页面的上下文以及不同作用域中的对象 ,取得对象属性的值,或执行简单的运算或判断操作。EL在得到某个数据时,会自动进行数据类型的转换。

    主要作用:

    1) 获取数据

    EL表达式主要用于替换JSP页面中的脚本表达式<%= %>,以从各种类型的web域 中检索java对象、获取数据。(某个web域 中的对象,访问javabean的属性、访问list集合、访问map集合、访问数组)

    2) 执行运算

    利用EL表达式可以在JSP页面中执行一些基本的关系运算、逻辑运算和算术运算,以在JSP页面中完成一些简单的逻辑运算。${user==null}

    3) 获取web开发常用对象 EL

    表达式定义了一些隐式对象,利用这些隐式对象,web开发人员可以很轻松获得对web常用对象的引用,从而获得这些对象中的数据。

    4) 调用Java方法

    EL表达式允许用户开发自定义EL函数,以在JSP页面中通过EL表达式调用Java类的方法。

    注意<%@ pageisELIgnored=”true” %> 表示是否禁用EL语言,TRUE表示禁止.FALSE表示不禁止.JSP2.0中默认的启用EL语言

    二、语法

    以“${”开始,以“}”作为结束:

    ${EL表达式}

    实例:

    ${ str } //输出字符串变量str的值
    ${ 1 + 2 } //输出1+2的结果
    ${ user.name} //输出user对象的name属性 访问对象user的getName()方法以得到name成员的值。
    ${user[“name”] } //同上
    ${ sessionScope[“user”].name } //同上
    ${list[0]} //访问list对象的第一项。
    ${map[“key”]} //访问map指定键的值。

    三、取操作符

    EL提供 . 和 [ ] 两种运算符来存取数据:

    . 访问一个Bean属性或者一个映射条目 如:${ user.name}

    [ ] 可以访问集合或者是数组的元素、也可以访问Bean的属性。 如:${ arr[0].name}

    异同:

    相同:可以用来访问对象的属性

    差异:当要存取的属性名称中包含一些特殊字符,如 . 或 ? 或 - 等非字母或数字的符号,就一定要使用 [],如user.my-name应{user[“my-name”]}

    四、运算符:

    ● 算术运算符有五个:+、-、*、/或p、%或mod

    ● 关系运算符有六个:==或eq、!=或ne、<或lt、>或gt、<=或le、>=或ge

    ● 逻辑运算符有三个:&&或and、||或or、!或not

    ● 其它运算符有三个:Empty运算符、条件运算符、()运算符

    五、隐含对象

    JSP EL支持下表列出的隐含对象:

    可以在表达式中使用像变量一样使用这些对象。

    按功能分组如下:

    1) 访问参数值:

    param : 可取得对应单个请求参数名的值。如:$(param.name) 相当于 request.getParameter (name)。

    paramValues: 可根据参数名取得对于的字符串数组。如:${paramvalues.name) 相当于 request.getParamterValues(name)。

    注:param对象返回单一的字符串,而paramValues对象则返回一个字符串数组。

    2) 访问头信息

    header:可以取得请求头信息中,对应的单个字符串头值。表达式 header.name相当于request.getHeader(name)。如{header[“user-agent”]}。可打印出 user-agent 信息头。

    headerValues:可将请求头名称映射到一个数值数组。如 ${headerValues.name} 相当于 request.getHeaderValues(name)。

    :header对象返回单一值,而headerValues则返回一个字符串数组。

    3) 访问其他有关用户要求或页面的详细信息

    pageContext:

    pageContext.request|取得请求对象{pageContext.session} |取得session对象

    pageContext.request.queryString|取得请求的参数字符串{pageContext.request.requestURL} |取得请求的URL,但不包括请求之参数字符串

    pageContext.request.contextPath|服务的webapplication的名称{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}|取得主机端的服务信息

    4)访问不同作用域的变量,如 Web 上下文、会话、请求、页面:

    pageScope :取得页面范围的值

    如用 pageScope.objectName访问一个JSP中页面范围的对象,还可以使用{pageScope.objectName.attributeName} 访问对象的属性。

    requestScope:取得请求范围的变量值

    该对象允许访问请求对象的属性。如用 requestScope.objectName访问一个JSP请求范围的对象,还可以使用{requestScope.objectName.attributeName} 访问对象的属性。

    sessionScope:取得会话范围的变量值

    该对象允许访问会话对象的属性。如:$sessionScope.name}

    applicationScope:取得应用程序范围的变量值

    该隐式对象允许访问应用程序范围的对象

    5) 访问Cookie中的值

    如要取得cookie中有一个设定名称为username的值,可以使用${cookie.username} 来取得它。

    六、使用sun提供的标准 EL函数库

    由于在JSP页面中显示数据时,经常需要对显示的字符串进行处理,SUN公司针对于一些常见处理定义了一套EL函数库供开发者使用。

    这些EL函数在JSTL开发包中进行描述,因此在JSP页面中使用SUN公司的EL函数库,需要导入JSTL开发包,并在页面中导入EL函数库。

    使用EL函数库

    1) 导入 jstl jar包

    2) 在相应的jsp页面添加引用

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" import="java.util.*" %>
    <!--导入需要使用taglib指令 --> 
     
    <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>el function demo</title>
    </head>
    <body>
     
       <%
           String[] strs = {"a","b","c"};//定义一个字符数组
           List list = new ArrayList();//定义一个list集合
           list.add("a");//向集合中添加一个字符
           pageContext.setAttribute("arr", strs);//将字符数据以arr的名字保存在page域中
           pageContext.setAttribute("list", list);//将list集合以list的名字保存在page域中
        %>
     
    ${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> --> 
    </body>
    </html>

    函数库详细介绍

    String toUpperCase(String input):把字符串参数转换成大写,并返回

    String toLowerCase(String input):把字符串参数转换成小写,并返回

    int indexOf(String input, String substring):返回input中substring出现的索引位置

    boolean contains(String input, String substring):查看input中是否包含substring,包含返回true,否则返回false;

    boolean containsIgnoreCase(String input, String substring):在忽略大小写的情况下,查看input中是否包含substring,包含返回true,否则返回false

    boolean startsWith(String input, String substring):判断input是否是以substring为前缀,如果是就返回true,否则就返回false

    boolean endsWith(String input, String substring):判断input是否是以substring为后缀,如果是就返回true,否则就返回false

    String substring(String input, int beginIndex, int endIndex):以beginIndex为开始值,endIndex为结束值,在input上截取子串

    String substringAfter(String input, String substring):获取input中,substring所在位置后面的字符串

    substringBefore(String input, String substring):获取input中,substring所在位置前面的字符串 String escapeXml(String input):把input中“<”、“>“、”&“、”'“、“””进行转义;

    String trim(String input):去除input中的前后空格;

    String replace(String input, String substringBefore, String substringAfter):将input中的substringBefore替换成substringAfter;

    String[] split(String input, String delimiters):以delimiters为标识分割input,返回一个字符串数组;

    int length(Object obj):可以获取字符串、数组、各种集合的长度;

    String join(String array[], String separator):将array数组中的元素以separator连接起来,返回一个字符串

    七、EL调用自定义函数 (调用普通类的静态方法)

    EL很强大,除了使用SUN提供的标准EL函数库外,还可以调用自定义函数:

    ● EL表达式语法允许开发人员开发自定义函数,以调用Java类的方法。语法:${prefix:method(params)}

    ● 在EL表达式中调用的只能是Java类的静态方法,这个Java类的静态方法需要在TLD文件中描述,才可以被EL表达式调用。

    ● EL自定义函数用于扩展EL表达式的功能,可以让EL表达式完成普通Java程序代码所能完成的功能。

    EL Function开发步骤

    只要实现以下三个步骤就可以在静态页面中用${prefix:method(params)} 调用自定义function了

    编写一个Java类的静态方法

    编写标签库描述符(tld)文件,在tld文件中描述自定义函数。

    在JSP页面中导入和使用自定义函数

    下面来个案例:

    1)编写一个Java类的静态方法

    public class GetMax {
      public static int togetMax(int a, int b){
        return a>b?a:b;
      }
    }

    2)编写标签库描述符(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>mytaglib</short-name><!--这个名字可以随便取,尽量与文件名相同,这样我们知道文件在哪儿 并与prefix对应--> 
      <uri>http://localhost:8080/springmvc-1</uri><!-- 这个地址是随便取得。到时候jsp页面引入这个地址 -->          
      <function><!-- 定义函数 --> 
        <name>toGetMax</name>
        <function-class>elfunction.GetMax</function-class><!-- 定义函数的类全名称 --> 
        <function-signature>int toGetMax(int,int)</function-signature> 
        <!--说明 返回值类型 函数名 以及 参数类型 --> 
      </function> 
    </taglib>

    3)在web.xml中指定tld文件的位置(这步可以省略,因为应用会自动找到 /WEB-INF/下的tld文件)

    <jsp-config> 
        <taglib> 
          <!-- 此处uri可以自己随便定义,但后面用时一定与这里一样 --> 
          <taglib-uri> 
            http://localhost:8080/springmvc-1
          </taglib-uri> 
          <!-- tld文件的路径 --> 
          <taglib-location> 
            /WEB-INF/tags/mytaglib.tld
          </taglib-location> 
        </taglib> 
      </jsp-config>

    4)在JSP页面中导入和使用自定义函数

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
     
    <%@ taglib uri="http://localhost:8080/springmvc-1" prefix="mytaglib"%> 
    <!-- prefix 是前缀的意思,应与mytaglib.tld中的<short-name>对应 -->
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>custom EL function test</title>
    </head>
    <body>
      1和2求最大值 = ${mytaglib:toGetMax(1,2)}
    </body>
    </html>

    运行截图

    以上就是分享一个JSP页面技术之EL表达式整理归纳总结的详细内容,更多请关注php中文网其它相关文章!

    声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理
    专题推荐:java JSP,EL表达式
    上一篇:详解springboot集成mybatis的代码实例 下一篇:spring整合redis缓存并以注解形式使用的实例详解
    大前端线上培训班

    相关文章推荐

    • 理解java8中java.util.function.*pojo反射新方法(附代码)• 浅析安卓app和微信授权登录及分享完整对接(代码分享)• 教你一招搞定时序数据库在Spring Boot中的使用• 一招教你使用java快速创建Map(代码分享)• PlayFramework 完整实现一个APP(十一)

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网