美文网首页
JavaWeb之 EL表达式

JavaWeb之 EL表达式

作者: 测试员 | 来源:发表于2019-09-27 21:53 被阅读0次

    EL表达式

    EL是JSP内置的表达式语言!

    ​ jsp2.0开始,不让再使用java脚本,而是使用el表达式和动态标签来替代java脚本!

    ​ EL替代的是<%= ... %>,也就是说,EL只能做输出!

    EL表达式来读取四大域

    ​ ${xxx},全域查找名为xxx的属性,如果不存在,输出空字符串,而不是null。

    ${pageScope.xxx}、${requestScope.xxx}、${sessionScope.xxx}、${applicationScope.xxx},指定域获取属性!

    javaBean导航

    <%
        Address address = new Address();
        address.setCity("北京");
        address.setStreet("西三旗");
        Employee emp = new Employee();
        emp.setName("李四");
        emp.setSalary(999999);
        emp.setAddress(address);    
        request.setAttribute("emp", emp);
    %>
        <h3>使用el获取request域的emp</h3>
    ${requestScope.emp.address.street }<br/>
    

    11个内置对象

    EL可以输出的东西都在11个内置对象中!11个内置对象,其中10个是Map!pageContext不是map,它就是PageContext类型,1个项9个。
    我们已经学习了四个【pageScope、requestScope、sessionScope、applicationScope

    param:对应参数,它是一个Map,其中key参数名,value是参数值,适用于单值的参数。

    paramValues:对应参数,它是一个Map,其中key参数名,value是多个参数值,适用于多值的参数。

    header:对应请求头,它是一个Map,其中key表示头名称,value是单个头值,适用于单值请求头

    headerValues:对应请求头,它是一个Map,其中key表示头名称,value是多个头值,适用于多值请求头

    initParam:获取<context-param>内的参数!

        <context-param>
        <param-name>xxx</param-name>
        <param-value>XXX</param-value>
      </context-param>
      <context-param>
        <param-name>yyy</param-name>
        <param-value>YYY</param-value>
      </context-param>
    ===================================
    ${initParam.xxx}
    

    cookie:Map<String,Cookie>类型,其中key是cookie的name,value是cookie对象。 ${cookie.username.value}

    pageContext:它是PageContext类型!项目名 = ${pageContext.request.contextPath}【重要】

    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();

    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函数库(fn)

    导入标签库:<%@ tablib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>

    功能 代码
    把参数转换成大写 String toUpperCase(String input)
    把参数转换成小写 String toLowerCase(String input)
    从大串,输出小串的位置 int indexOf(String input, String substring)
    查看大串中是否包含小串 boolean contains(String input, String substring)
    忽略大小写的,是否包含 boolean containsIgnoreCase(String input, String substring)
    是否以小串为前缀 boolean startsWith(String input, String substring)
    是否以小串为后缀 boolean endsWith(String input, String substring)
    截取子串 String substring(String input, int beginIndex, int endIndex)
    获取大串中,小串所在位置后面的字符串 String substringAfter(String input, String substring)
    功能
    获取大串中,小串所在位置前面的字符串 substringBefore(String input, String substring)
    把input中“<”、">"、"&"、"'"、""",进行转义 String escapeXml(String input)
    去除前后空格 String trim(String input)
    替换 String replace(String input, String substringBefore, String substringAfter)
    分割字符串,得到字符串数组 String[] split(String input, String delimiters)
    可以获取字符串、数组、各种集合的长度! int length(Object obj)
    联合字符串数组! String join(String array[], String separator)

    fn函数库使用案例

    <%@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> -->
    
    

    自定义EL

    1.写一个java类,类中可以定义0~N个方法,但必须是static,而且有返回值的!

    package com.yuan.function;
    
    /**
     * @author Yuan-9826
     */
    public class MyFunction {
        public static String fun(){
            return "第一个自定义函数";
        }
    }
    

    2.WEB-INF目录下创建一个tld文件 /WEB-INF/tlds/mtfunction.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>yuan</description>
        <display-name>yuan-function</display-name>
        <!--版本-->
        <tlib-version>1.0</tlib-version>
        <!--建议的标签名-->
        <short-name>y</short-name>
        <!--地址 随便写 因为没联网-->
        <uri>http://www.yuan.com/jsp/functions</uri>
        <function>
            <!--标签名-->
            <name>fun</name>
            <function-class>com.yuan.function.MyFunction</function-class>
            <function-signature>java.lang.String fun()</function-signature>
        </function>
    </taglib>
    

    3.在jsp页面中导入标签库 <%@ taglib prefix="it" uri="/WEB-INF/tlds/mtfunction.tld" %> isELIgnored="false"!!!

    <%@ page language="java" contentType="text/html; charset=UTF-8" isELIgnored="false" pageEncoding="UTF-8" %>
    
    <%@ taglib prefix="y" uri="/WEB-INF/tlds/myfunction.tld" %>
    <!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>Insert title here</title>
    </head>
    <body>
    
    <h1>${y:fun() }</h1>
    
    </body>
    </html>
    

    4.在jsp页面中使用自定义的函数:${y:fun() }

    相关文章

      网友评论

          本文标题:JavaWeb之 EL表达式

          本文链接:https://www.haomeiwen.com/subject/uanpuctx.html