精华内容
下载资源
问答
  • EL表达式详解
    2021-02-21 00:53:39

    一、什么是EL表达式

    • EL表达式的全称是:Expression Language是表达式语言
    • EL表达式主要是代替jsp页面中的表达式脚本在jsp页面中进行数据的输出
    • EL表达式输出数据的时候,要比jsp的表达式脚本要简洁很多
    • EL表达式的格式:${表达式}
    • EL表达式在输出null值的时候,输出的是空串,jsp表达式脚本输出为null值的时候,输出的是null字符串

    二、EL表达式搜索域数据的顺序

    • EL表达式主要是在jsp页面中输出数据

    • 主要是输出域对象中的数据

    • 当四个域都有相同的key的数据的时候,EL表达式会按照四个域的从小到大的顺序去进行搜索,找到就输出

     <% // 往四个域中都分别保存了数据
              pageContext.setAttribute("key", "pageContext");
              request.setAttribute("key", "request");
              session.setAttribute("key", "session");
              application.setAttribute("key", "application");
          %>
          ${key}
    
    • 运行tomcat
      在这里插入图片描述
    • 得到的值是pageContext域中的值

    三、EL表达式输出Bean的普通属性,数组属性,List集合属性,map集合属性

    • 编写一个jsp
    <body>
        <%
            Person person = new Person();
            person.setName("张三");
            person.setPhones(new String[]{"1374231250","14345621520"});
            List<String> list = new ArrayList();
            list.add("西安");
            list.add("南京");
            list.add("北京");
            person.setCities(list);
            Map<String,Object> map = new HashMap<>();
            map.put("key","value");
            map.put("key1","value1");
            person.setMap(map);
            pageContext.setAttribute("p",person);
        %>
        ${pageScope.p}<br>
        ${pageScope.p.name}<br>
        ${pageScope.p.phones[0]}<br>
        ${pageScope.p.phones[1]}<br>
        ${pageScope.p.cities}<br>
        ${pageScope.p.map.key1}<br>
    </body>
    
    • 运行tomcat,输入对应的url
      在这里插入图片描述

    四、EL表达式运算

    1. 关系运算

    关系运算符转义运算符说明范例结果
    ==eq等于${5==5}true
    !=ne不等于${5!=5}false
    >gt大于${2>10}false
    <lt小于${3<5}true
    >=ge大于等于${5>=12}false
    <=le小于等于${5<=12}true

    2. 逻辑运算

    逻辑运算符转义运算符说明范例结果
    &&and与运算${5==5 && 12>15}false
    | |or或运算${5==5 | |12>15}true
    !not取反运算$!true}false

    3.算术运算

    算术运算符说明范例结果
    +加法${5+5}10
    -减法${5-2}3
    *乘法${2*5}10
    /除法${10/5}2
    %取模${111%10}1

    4.empty运算

    • empty运算可以判断一个数据是否为空,如果为空,则输出true,否则输出false

    5. 三元运算

    • 表达式1?表达式2:表达式3
        ${12 !=12 ? value1: value2}
    

    6. "."运算和【】中括号运算

    • .运算,可以输出bean对象中的某个属性
    • []中括号运算,还可以输出map集合中key里含有特殊字符的key的值
    <%
            Map<String,Object> map1 = new HashMap<String, Object>();
            map1.put("a.a.a", "aaaValue");
            map1.put("b+b+b", "bbbValue");
            map1.put("c-c-c", "cccValue");
            request.setAttribute("map", map1);
        %>
        ${ requestScope.map['a.a.a'] } <br>
        ${ requestScope.map["b+b+b"] } <br>
        ${ requestScope.map['c-c-c'] } <br>
    

    五、EL表达式的11个隐含对象

    变量类型作用
    pageContextPageContextImpl获取jsp中的九大内置对象
    pageScopeMap<String,Object>获取pageContext域中的数据
    requestScopeMap<String,Object>获取Request域中的数据
    sessionScopeMap<String,Object>获取Session域中的对象
    applicationScopeMap<String,Object>获取ServletContext域中的数据
    paramMap<String,Object>获取请求参数的值
    paramValuesMap<String,Object[]>它也可以获取请求参数的值,获取多个值的时候使用
    headerMap<String,Object>它可以获取请求头的信息
    headerValuesMap<String,Object[]>它可以获取请求头的信息,它可以获取多个值的情况
    cookieMap<String,Object>获取当前请求的 Cookie 信息
    initParamMap<String,Object>获取当前请求的 Cookie 信息
    • 获取四个域的属性
    <% // 往四个域中都分别保存了数据
              pageContext.setAttribute("key", "pageContext");
              request.setAttribute("key", "request");
              session.setAttribute("key", "session");
              application.setAttribute("key", "application");
          %>
          
          ${pageScope.key}<br>
          ${requestScope.key}<br>
          ${sessionScope.key}<br>
          ${applicationScope.key}
    
    • 运行结果如下图
      在这里插入图片描述
    更多相关内容
  • JSP与EL表达式详解

    2018-09-06 10:45:56
    JSP与EL详解
  • el表达式详解

    2016-10-08 22:23:52
    el表达式描述
  • EL表达式详解教程

    2016-05-13 13:51:01
    EL表达式详解教程
  • EL表达式详解教程.zip

    2021-05-10 10:27:04
    EL 表达式和常用标签
  • 1.EL表达式介绍 Expression Language表达式语言 是一种在JSP页面获取数据的简单方式(只能获取数据,不能设置数据) 在JSP2.0开始引入概念 语法格式 在JSP页面的任何静态部分均可通过:${expression}来获取到指定...

    1.EL表达式介绍

    Expression Language表达式语言
    是一种在JSP页面获取数据的简单方式(只能获取数据,不能设置数据)
    在JSP2.0开始引入概念

    语法格式
    在JSP页面的任何静态部分均可通过:

    ${expression}
    来获取到指定表达式的值

    2.EL获取数据(从四大域中获取属性)

    EL只能从四大域中获取属性

    2.1如果没有使用EL的内置对象,则查找数据顺序是依次按照由小到大范围从四大域中查找指定名称的属性值

    - pageContext<request<session<application
    
            <%@ page language="java" contentType="text/html; charset=UTF-8"
                pageEncoding="UTF-8"%>
            <!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>
                <%
                    pageContext.setAttribute("name", "linjie");
                    request.setAttribute("name", "lucy");
                    session.setAttribute("name", "king");
                    application.setAttribute("name", "bilibili");
                %>
                name=${name }
            </body>
            </html>
    

    在这里插入图片描述

    2.2 使用EL内置对象,从指定域中获取数据,提高了查找效率

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!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>
        <%
            pageContext.setAttribute("name", "linjie");
            request.setAttribute("name", "lucy");
            session.setAttribute("name", "king");
            application.setAttribute("name", "bilibili");
        %>
        name=${applicationScope.name }
    </body>
    </html>
    

    在这里插入图片描述

    2.3 EL中的内置对象

    EL有11个内置对象,这里主要讲域属性相关的4个和其他4个
    EL的11个内置对象,除了pageContext以外,其他10个内置对象的类型都是java.util.Map类型

    pageScope:从page范围域属性空间中查找指定的key
    requestScope:从request范围域属性空间中查找指定的key
    sessionScope:从session范围域属性空间中查找指定的key
    applicationScope:从application范围域属性空间中查找指定的key

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!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>
        <%
            pageContext.setAttribute("name", "linjie");
            request.setAttribute("name", "lucy");
            session.setAttribute("name", "king");
            application.setAttribute("name", "bilibili");
        %>
    
        name=${applicationScope.name }<br>
        name=${pageScope.name }<br>
        name=${sessionScope.name }<br>
        name=${requestScope.name }<br>
    </body>
    </html>
    

    在这里插入图片描述

    3.EL访问Bean的属性

    EL访问Bean属性
    EL可以通过${key.属性}的方式获取到指定值,其底层实际调用的是该对象的相应属性的get方法

    Demo.java

    package linjie.com;
    /*
     *Bean 
     */
    public class Demo {
        private String name;
        private int age;
        public Demo(String name,int age){
            this.name=name;
            this.age=age;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public int getAge() {
            return age;
        }
        public void setAge(int age) {
            this.age = age;
        }
        @Override
        public String toString() {
            return super.toString();
        }
    }
    

    index.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        import="linjie.com.Demo"
        pageEncoding="UTF-8"%>
    <!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>
        <%
            Demo test=new Demo("linjie",12);
            request.setAttribute("ELttt", test);
        %>
        name=${requestScope.ELttt.name }<br>
        age=${requestScope.ELttt.age }<br>
    
        <!-- 若访问为null的对象的属性,EL是不会抛出空指针异常的,只是不显示而已 -->
        names=${requestScope.ELtttxx.name }<br>
    
    </body>
    </html>
    

    在这里插入图片描述

    4.EL访问数组中的数据

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!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>
        <%
            String[] names={"xlj","lucy","king"};
            pageContext.setAttribute("names", names);
        %>
        name[1]=${names[1] }<br>
    
        <!-- 若访问的数组元素下标超出了数组下标上限,EL不会抛出越界异常,只是不显示 -->
        names[5]=${names[5] }<br>
    </body>
    </html>
    

    Stu.java

    package linjie.com;
    /*
     *Bean 
     */
    public class Stu {
        private String sname;
        private String address;
        public Stu() {
            super();
        }
    
        public Stu(String sname, String address) {
            super();
            this.sname = sname;
            this.address = address;
        }
    
        public String getSname() {
            return sname;
        }
    
        public void setSname(String sname) {
            this.sname = sname;
        }
    
        public String getAddress() {
            return address;
        }
    
        public void setAddress(String address) {
            this.address = address;
        }
    
        @Override
        public String toString() {
            return super.toString();
        }
    
    
    }
    

    index.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        import="linjie.com.*"
        pageEncoding="UTF-8"%>
    <!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>
    
        <%
            Stu[] stus=new Stu[3];
            stus[0]=new Stu("xlj","A");
            stus[1]=new Stu("lucy","B");
            stus[2]=new Stu("kingA","C");
            pageContext.setAttribute("stus",stus);
        %>
        stus[1].Sname=${stus[1].sname }
    </body>
    </html>
    

    在这里插入图片描述

    5.EL获取list中数据

    <%@page import="java.util.*"%>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!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>
        <%
            List<String> names=new ArrayList<String>();
            names.add("xlj");
            names.add("lucy");
            pageContext.setAttribute("names", names);
        %>
    
        <!-- 因为List底层是数组,所以可以这样写 -->
        names[1]=${names[1] }<br>
    </body>
    </html>
    

    在这里插入图片描述
    EL可以通过索引访问List,但无法访问Set。因为Set中没有索引概念

    6.EL访问Map

    <%@page import="java.util.*"%>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!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>
        <%
            Map<String,Object> map=new HashMap<String,Object>();
            map.put("age", 20);
            map.put("name", "xlj");
            pageContext.setAttribute("map", map);
        %>
        name=${map.name }<br>
        age=${map.age }<br>
    </body>
    </html>
    

    在这里插入图片描述

    7.EL中的运算符(empty)

    算术运算符:+、-、*、/、%(不支持++、–)
    关系运算符:==、!=、>、>=、<、<=
    逻辑运算符:!、&&、||、not、and、or
    条件运算符:?:
    取值运算符:[]、点号

    <%@page import="java.util.*"%>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!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>
        <%
            String name1=null;
            String name2="";
            List<String> name3=new ArrayList<String>();
    
            pageContext.setAttribute("name1", name1);
            pageContext.setAttribute("name2", name2);
            pageContext.setAttribute("name3", name3);
        %>
        empty对于没有定义的变量,运算结果为true:
        empty namex=${empty namex }<br>
    
        empty对于null的引用,运算结果为true:
        empty name1=${empty name1 }<br>
    
        empty对于为空串的String引用,运算结果为true:
        empty name2=${empty name2 }<br>
    
        empty对于没有元素的数组或集合,运算结果为true:
        empty name3=${empty name3 }<br>
    </body>
    </html>
    

    在这里插入图片描述

    展开全文
  • jsp EL表达式详解

    2021-02-27 19:33:14
    一、EL表达式介绍Expression Language表达式语言是一种在JSP页面获取数据的简单方式(只能获取数据,不能设置数据)在JSP2.0开始引入概念语法格式在JSP页面的任何静态部分均可通过:${expression}来获取到指定表达式的...

    3a2c5c47719654b2eb3ed26ac95e70d8.png

    一、EL表达式介绍

    Expression Language表达式语言

    是一种在JSP页面获取数据的简单方式(只能获取数据,不能设置数据)

    在JSP2.0开始引入概念

    语法格式

    在JSP页面的任何静态部分均可通过:${expression}来获取到指定表达式的值

    二、EL获取数据(从四大域中获取属性)

    EL只能从四大域中获取属性

    1、如果没有使用EL的内置对象,则查找数据顺序是依次按照由小到大范围从四大域中查找指定名称的属性值

    二、EL获取数据(从四大域中获取属性)

    EL只能从四大域中获取属性

    1、如果没有使用EL的内置对象,则查找数据顺序是依次按照由小到大范围从四大域中查找指定名称的属性值

    - pageContext

    pageEncoding="UTF-8"%>

    Insert title here

    pageContext.setAttribute("name", "linjie");

    request.setAttribute("name", "lucy");

    session.setAttribute("name", "king");

    application.setAttribute("name", "bilibili");

    %>

    name=${name }

    8969dbae44c2019d50181b814fea6e23.png

    可以看出没有使用EL内置对象时查找顺序是由小到大,所以最先显示的是pageContext域中的

    2、使用EL内置对象,从指定域中获取数据,提高了查找效率

    pageEncoding="UTF-8"%>

    Insert title here

    pageContext.setAttribute("name", "linjie");

    request.setAttribute("name", "lucy");

    session.setAttribute("name", "king");

    application.setAttribute("name", "bilibili");

    %>

    name=${applicationScope.name }

    64440e164fb6102a516b4372f2287272.png

    可以看出,使用applicationScope即可指定application域中的name输出,当然其他域也是类似,下文会说这四大域属性相关的内置对象

    三、EL中的内置对象

    EL有11个内置对象,这里主要讲域属性相关的4个和其他4个

    EL的11个内置对象,除了pageContext以外,其他10个内置对象的类型都是java.util.Map类型

    1、域属性相关(4个)

    pageScope:从page范围域属性空间中查找指定的key

    requestScope:从request范围域属性空间中查找指定的key

    sessionScope:从session范围域属性空间中查找指定的key

    applicationScope:从application范围域属性空间中查找指定的key

    pageEncoding="UTF-8"%>

    Insert title here

    pageContext.setAttribute("name", "linjie");

    request.setAttribute("name", "lucy");

    session.setAttribute("name", "king");

    application.setAttribute("name", "bilibili");

    %>

    name=${applicationScope.name }

    name=${pageScope.name }

    name=${sessionScope.name }

    name=${requestScope.name }

    f21dd573aba1a15fa05e0db8e0898b84.png

    2、其他重要内置对象(4个)

    1、pageContext

    该pageContext与JSP内置对象pageContext是同一个对象。通过该对象,可以获取到request、response、session、servletContext、servletConfig等对象注意:这些对象在EL里不是内置对象,这些对象只能通过pageContext获取

    在EL中直接${pageContext.request}即可获取request对象,其底层调用的是pageContext.getRequest()方法。同理,也可以通过类似方法获取其他对象

    重点:其中最常用的:${pageContext.request.contextPath },代表web应用下的根,可以看出下面action中的路径可读性更强了

    Regster.java

    package linjie.com;

    import java.io.IOException;

    import javax.servlet.ServletException;

    import javax.servlet.http.HttpServlet;

    import javax.servlet.http.HttpServletRequest;

    import javax.servlet.http.HttpServletResponse;

    public class Regster extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    response.getWriter().append("Served at: ").append(request.getContextPath());

    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    doGet(request, response);

    }

    }

    index.jsp

    pageEncoding="UTF-8"%>

    Insert title here

    xxx

    yyy

    63739aadc925119acf84c44a972a2a6a.png

    2、param(获取请求中的指定参数)

    其底层实际调用request.getParameter()

    index.jsp

    pageEncoding="UTF-8"%>

    Insert title here

    xxx

    yyy

    show.jsp

    pageEncoding="UTF-8"%>

    Insert title here

    name=${param.name }

    age=${param.age }

    客户浏览器访问结果

    381742a7cb310af68f6bb1e46909a7f4.png

    817a5a591b28e08b73e2d9fc5dc6823c.png

    3、paramValues

    获取请求中的指定参数的所以值,其底层实际调用request.getParameterValues()

    index.jsp

    pageEncoding="UTF-8"%>

    Insert title here

    xxx

    yyy

    爱好:

    睡觉

    show.jsp

    pageEncoding="UTF-8"%>

    Insert title here

    name=${param.name }

    age=${param.age }

    hobby[0]=${paramValues.hobby[0] }

    hobby[1]=${paramValues.hobby[1] }

    客户浏览器显示结果

    a1b1dd915ce37266965b0c067e071cf2.png

    e0b503a8594272223276967afc1595fd.png

    4、initParam

    获取初始化参数,其底层调用的是ServletContext.getInitParameter()

    web.xml

    07eltttt

    index.jsp

    name

    林杰

    Regster

    Regster

    linjie.com.Regster

    Regster

    /regster

    index.jsp

    pageEncoding="UTF-8"%>

    Insert title here

    name=${initParam.name }

    客户浏览器显示结果

    45cca97a9c193a438e00a7bc6a4cff9d.png

    四、EL访问Bean的属性

    1、什么是java Bean

    JavaBean是公共Java类,但是为了编辑工具识别

    需要满足至少三个条件

    有一个public默认构造器(例如无参构造器)

    属性使用public 的get,set方法访问,也就是说设置成private同时get,set方法与属性名的大小也需要对应。例如属性name,get方法就要写成,public String getName(){},N大写。

    需要序列化。这个是框架,工具跨平台反映状态必须的

    2、EL访问Bean属性

    EL可以通过${key.属性}的方式获取到指定值,其底层实际调用的是该对象的相应属性的get方法

    Demo.java

    package linjie.com;

    /*

    *Bean

    */

    public class Demo {

    private String name;

    private int age;

    public Demo(String name,int age){

    this.name=name;

    this.age=age;

    }

    public String getName() {

    return name;

    }

    public void setName(String name) {

    this.name = name;

    }

    public int getAge() {

    return age;

    }

    public void setAge(int age) {

    this.age = age;

    }

    @Override

    public String toString() {

    return super.toString();

    }

    }

    index.jsp

    import="linjie.com.Demo"

    pageEncoding="UTF-8"%>

    Insert title here

    Demo test=new Demo("linjie",12);

    request.setAttribute("ELttt", test);

    %>

    name=${requestScope.ELttt.name }

    age=${requestScope.ELttt.age }

    names=${requestScope.ELtttxx.name }

    客户浏览器显示结果

    9219d4e07a0826d14ed3f5107c365d03.png

    五、EL访问数组中的数据

    pageEncoding="UTF-8"%>

    Insert title here

    String[] names={"xlj","lucy","king"};

    pageContext.setAttribute("names", names);

    %>

    name[1]=${names[1] }

    names[5]=${names[5] }

    下面是访问类的数组

    Stu.java

    package linjie.com;

    /*

    *Bean

    */

    public class Stu {

    private String sname;

    private String address;

    public Stu() {

    super();

    }

    public Stu(String sname, String address) {

    super();

    this.sname = sname;

    this.address = address;

    }

    public String getSname() {

    return sname;

    }

    public void setSname(String sname) {

    this.sname = sname;

    }

    public String getAddress() {

    return address;

    }

    public void setAddress(String address) {

    this.address = address;

    }

    @Override

    public String toString() {

    return super.toString();

    }

    }

    index.jsp

    import="linjie.com.*"

    pageEncoding="UTF-8"%>

    Insert title here

    Stu[] stus=new Stu[3];

    stus[0]=new Stu("xlj","A");

    stus[1]=new Stu("lucy","B");

    stus[2]=new Stu("kingA","C");

    pageContext.setAttribute("stus",stus);

    %>

    stus[1].Sname=${stus[1].sname }

    客户浏览器显示结果

    524a711e3c7d7c5c4241f0c796ac4885.png

    六、EL获取list中数据

    pageEncoding="UTF-8"%>

    Insert title here

    List names=new ArrayList();

    names.add("xlj");

    names.add("lucy");

    pageContext.setAttribute("names", names);

    %>

    names[1]=${names[1] }

    客户浏览器显示结果

    eba8988d3b8b90f81fa0fdd3f260ce72.png

    注意:

    EL可以通过索引访问List,但无法访问Set。因为Set中没有索引概念

    七、EL访问Map

    pageEncoding="UTF-8"%>

    Insert title here

    Map map=new HashMap();

    map.put("age", 20);

    map.put("name", "xlj");

    pageContext.setAttribute("map", map);

    %>

    name=${map.name }

    age=${map.age }

    客户浏览器显示结果

    41fa85de494dfb445b36229e6c5ec70d.png

    八、EL中的运算符(empty)

    1、先说说几个常用运算符

    算术运算符:+、-、*、/、%(不支持++、–)

    关系运算符:==、!=、>、>=、

    逻辑运算符:!、&&、||、not、and、or

    条件运算符:?:

    取值运算符:[]、点号

    2、empty运算符

    用法为${empty 变量},结果为布尔值

    pageEncoding="UTF-8"%>

    Insert title here

    String name1=null;

    String name2="";

    List name3=new ArrayList();

    pageContext.setAttribute("name1", name1);

    pageContext.setAttribute("name2", name2);

    pageContext.setAttribute("name3", name3);

    %>

    empty对于没有定义的变量,运算结果为true:

    empty namex=${empty namex }

    empty对于null的引用,运算结果为true:

    empty name1=${empty name1 }

    empty对于为空串的String引用,运算结果为true:

    empty name2=${empty name2 }

    empty对于没有元素的数组或集合,运算结果为true:

    empty name3=${empty name3 }

    客户浏览器显示结果

    02bfe23b9f0eab67920aa7bab54b0ce3.png

    九、自定义EL函数

    因为EL本身不具有处理字符串能力,所以可以自定义EL函数

    - 定义函数(新建MyEL.java类)

    - 注册:先找到jsp2-example-taglib.tld,将头部以及注册函数复制到自己创建的.tld文件中(.tld放在WEB-INF下)

    - 在index.jsp中使用,使用时需要

    1、定义函数MyEL.java

    package linjie.com;

    //自定义函数

    //该类及其函数,需要在扩展名为.tld的xml文件中注册

    //tld:tag library definition(标签库定义)

    //xml文件是需要约束的,即需要配置文件头部。这个头部约束可以从一下文件中进行复制

    //在Tomcat安装目录下:webapps\examples\WEB-INF\jsp2

    //文件为:jsp2-example-taglib.tld

    //这个.tld的xml文件,需要定义在当前web项目的WEB-INF目录下,在此目录下创建以.tld结尾的xml文件

    //将jsp2-example-taglib.tld中头部复制到创建的xml文件中

    //再将函数注册,还是在jsp2-example-taglib.tld底部中复制

    public class MyEL {

    private static MyEL instance;

    public static MyEL getInstance() {

    if(instance==null)

    {

    instance=new MyEL();

    }

    return instance;

    }

    //字符串小写变大写

    public static String LowerToUpper(String str) {

    return str.toUpperCase();

    }

    }

    2、将jsp2-example-taglib.tld中头部部分以及底部的注册函数部分复制到自己创建的tld(在WEB-INF下)文件中

    8701aed90deb8030340ea4e7bd9f8678.png

    849f9e198f273d43b5e072e53c7d149d.png

    a98b3e5de626cfdde593bf883c8b7ea7.png

    49b301918f4f10d002eb12de53a76b2d.png

    MyEL.tld

    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">

    A tag library exercising SimpleTag handlers.

    1.0

    MyEL

    http://tomcat.apache.org/jsp2-example-taglib

    MyLowerToUpper

    linjie.com.MyEL

    java.lang.String LowerToUpper( java.lang.String )

    3、在index.jsp中使用,使用时需要

    pageEncoding="UTF-8"%>

    Insert title here

    ${MyEL:MyLowerToUpper("sasas") }

    String name="xlj";

    pageContext.setAttribute("name", name);

    %>

    ${MyEL:MyLowerToUpper(name) }

    客户浏览器显示结果

    2dfe622f20e52691ac440e7706e0abf4.png

    十、EL总结

    EL表达式不能出现在Java代码块、表达式块等JSP动态代码部分

    EL只能从四大域属性空间中获取数据(pageContext、request、session、application)

    EL不会抛出空指针异常,只会不显示

    EL不会抛出数组越界异常,只会不显示

    EL不具有对字符串进行处理的能力(可以使用JSTL的EL或者自定义EL函数)

    到此这篇关于jsp EL表达式详解的文章就介绍到这了,更多相关jsp EL表达式内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

    展开全文
  • 通过此文档,你可以熟练掌握EL表达式规范,到达熟练使用的目的。
  • EL表达式详解+实例教程[汇编].pdf
  • EL表达式详解教程.

    2016-05-13 10:44:53
  • el表达式该篇博客主要关于EL表达式,废话不多说=-=进入正题博客目录1、EL表达式介绍2、EL获取数据3、EL中的内置对象4、EL访问Bean的属性5、EL访问数组中的数据6、EL获取list中数据7、EL访问Map8、EL中的运算符(empty...

    el表达式

    该篇博客主要关于EL表达式,废话不多说=-=进入正题

    博客目录

    1、EL表达式介绍

    2、EL获取数据

    3、EL中的内置对象

    4、EL访问Bean的属性

    5、EL访问数组中的数据

    6、EL获取list中数据

    7、EL访问Map

    8、EL中的运算符(empty)

    9、自定义EL函数

    10、总结

    一、EL表达式介绍

    Expression Language表达式语言

    是一种在JSP页面获取数据的简单方式(只能获取数据,不能设置数据)

    在JSP2.0开始引入概念

    语法格式

    在JSP页面的任何静态部分均可通过:${expression}来获取到指定表达式的值

    二、EL获取数据(从四大域中获取属性)

    EL只能从四大域中获取属性

    1、如果没有使用EL的内置对象,则查找数据顺序是依次按照由小到大范围从四大域中查找指定名称的属性值

    - pagecontext

    pageEncoding="UTF-8"%>

    Insert title here

    pageContext.setAttribute("name", "linjie");

    request.setattribute("name", "lucy");

    session.setattribute("name", "king");

    application.setAttribute("name", "bilibili");

    %>

    name=${name }

    85b1aedb94b5beb3369c095a9426743f.png

    可以看出没有使用EL内置对象时查找顺序是由小到大,所以最先显示的是pageContext域中的

    2、使用EL内置对象,从指定域中获取数据,提高了查找效率

    pageEncoding="UTF-8"%>

    Insert title here

    pageContext.setAttribute("name", "linjie");

    request.setAttribute("name", "lucy");

    session.setAttribute("name", "king");

    application.setAttribute("name", "bilibili");

    %>

    name=${applicationScope.name }

    d286f7cd79420205abeecd2e89baa1dc.png

    可以看出,使用applicationScope即可指定application域中的name输出,当然其他域也是类似,下文会说这四大域属性相关的内置对象

    三、EL中的内置对象

    EL有11个内置对象,这里主要讲域属性相关的4个和其他4个

    EL的11个内置对象,除了pageContext以外,其他10个内置对象的类型都是java.util.Map类型

    1、域属性相关(4个)

    pageScope:从page范围域属性空间中查找指定的key

    requestScope:从request范围域属性空间中查找指定的key

    sessionScope:从session范围域属性空间中查找指定的key

    applicationScope:从application范围域属性空间中查找指定的key

    pageEncoding="UTF-8"%>

    Insert title here

    pageContext.setAttribute("name", "linjie");

    request.setAttribute("name", "lucy");

    session.setAttribute("name", "king");

    application.setAttribute("name", "bilibili");

    %>

    name=${applicationScope.name }

    name=${pageScope.name }

    name=${sessionScope.name }

    name=${requestScope.name }

    69468c4e5ab95e0d90337977c9831c01.png

    2、其他重要内置对象(4个)

    1、pageContext

    该pageContext与JSP内置对象pageContext是同一个对象。通过该对象,可以获取到request、response、session、servletContext、servletConfig等对象注意:这些对象在EL里不是内置对象,这些对象只能通过pageContext获取

    在EL中直接${pageContext.request}即可获取request对象,其底层调用的是pageContext.getRequest()方法。同理,也可以通过类似方法获取其他对象

    重点:其中最常用的:${pageContext.request.contextpath },代表web应用下的根,可以看出下面action中的路径可读性更强了

    Regster.java

    package linjie.com;

    import java.io.IOException;

    import javax.servlet.ServletException;

    import javax.servlet.http.HttpServlet;

    import javax.servlet.http.HttpServletRequest;

    import javax.servlet.http.HttpServletResponse;

    public class Regster extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    response.getWriter().append("Served at: ").append(request.getContextPath());

    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    doGet(request, response);

    }

    }

    index.jsp

    pageEncoding="UTF-8"%>

    Insert title here

    xxx

    yyy

    6097219ab0de295630ff4f38fce91cbd.png

    2、param(获取请求中的指定参数)

    index.jsp

    pageEncoding="UTF-8"%>

    Insert title here

    xxx

    yyy

    show.jsp

    pageEncoding="UTF-8"%>

    Insert title here

    name=${param.name }

    age=${param.age }

    客户浏览器访问结果

    0298c606d776782487789675f6d83b46.png

    8d2c794d0dea9c23bff6b7f317ee1798.png

    3、paramValues

    获取请求中的指定参数的所以值,其底层实际调用request.getParameterValues()

    index.jsp

    pageEncoding="UTF-8"%>

    Insert title here

    xxx

    yyy

    爱好:

    睡觉

    show.jsp

    pageEncoding="UTF-8"%>

    Insert title here

    name=${param.name }

    age=${param.age }

    hobby[0]=${paramValues.hobby[0] }

    hobby[1]=${paramValues.hobby[1] }

    客户浏览器显示结果

    7e46362c105b1da800b9c1ba8853828b.png

    6c5e389c1148fe74a446648a8e2eac76.png

    4、initParam

    获取初始化参数,其底层调用的是ServletContext.getInitParameter()

    web.xml

    07eltttt

    index.jsp

    name

    林杰

    Regster

    Regster

    linjie.com.Regster

    Regster

    /regster

    index.jsp

    pageEncoding="UTF-8"%>

    Insert title here

    name=${initParam.name }

    客户浏览器显示结果

    e5c11f367e7aa0852c90b310a5c51937.png

    四、EL访问Bean的属性

    1、什么是java Bean

    JavaBean是公共Java类,但是为了编辑工具识别

    需要满足至少三个条件

    有一个public默认构造器(例如无参构造器)

    属性使用public 的get,set方法访问,也就是说设置成private同时get,set方法与属性名的大小也需要对应。例如属性name,get方法就要写成,public String getName(){},N大写。

    需要序列化。这个是框架,工具跨平台反映状态必须的

    2、EL访问Bean属性

    EL可以通过${key.属性}的方式获取到指定值,其底层实际调用的是该对象的相应属性的get方法

    Demo.java

    package linjie.com;

    /*

    *Bean

    */

    public class Demo {

    private String name;

    private int age;

    public Demo(String name,int age){

    this.name=name;

    this.age=age;

    }

    public String getName() {

    return name;

    }

    public void setName(String name) {

    this.name = name;

    }

    public int getAge() {

    return age;

    }

    public void setAge(int age) {

    this.age = age;

    }

    @Override

    public String toString() {

    return super.toString();

    }

    }

    index.jsp

    import="linjie.com.Demo"

    pageEncoding="UTF-8"%>

    Insert title here

    Demo test=new Demo("linjie",12);

    request.setAttribute("ELttt", test);

    %>

    name=${requestScope.ELttt.name }

    age=${requestScope.ELttt.age }

    names=${requestScope.ELtttxx.name }

    客户浏览器显示结果

    cb0d115c2fdf2b8655a69f18daf1cfcf.png

    五、EL访问数组中的数据

    pageEncoding="UTF-8"%>

    Insert title here

    String[] names={"xlj","lucy","king"};

    pageContext.setAttribute("names", names);

    %>

    name[1]=${names[1] }

    names[5]=${names[5] }

    下面是访问类的数组

    Stu.java

    package linjie.com;

    /*

    *Bean

    */

    public class Stu {

    private String sname;

    private String address;

    public Stu() {

    super();

    }

    public Stu(String sname, String address) {

    super();

    this.sname = sname;

    this.address = address;

    }

    public String getSname() {

    return sname;

    }

    public void setSname(String sname) {

    this.sname = sname;

    }

    public String getAddress() {

    return address;

    }

    public void setAddress(String address) {

    this.address = address;

    }

    @Override

    public String toString() {

    return super.toString();

    }

    }

    index.jsp

    import="linjie.com.*"

    pageEncoding="UTF-8"%>

    Insert title here

    Stu[] stus=new Stu[3];

    stus[0]=new Stu("xlj","A");

    stus[1]=new Stu("lucy","B");

    stus[2]=new Stu("kingA","C");

    pageContext.setAttribute("stus",stus);

    %>

    stus[1].Sname=${stus[1].sname }

    客户浏览器显示结果

    b0068065cc38134da86ad68aaf786f5c.png

    六、EL获取list中数据

    pageEncoding="UTF-8"%>

    Insert title here

    List names=new ArrayList();

    names.add("xlj");

    names.add("lucy");

    pageContext.setAttribute("names", names);

    %>

    names[1]=${names[1] }

    客户浏览器显示结果

    12ed1f7bbed298157410145606edc27e.png

    注意:

    EL可以通过索引访问List,但无法访问Set。因为Set中没有索引概念

    七、EL访问Map

    pageEncoding="UTF-8"%>

    Insert title here

    Map map=new HashMap();

    map.put("age", 20);

    map.put("name", "xlj");

    pageContext.setAttribute("map", map);

    %>

    name=${map.name }

    age=${map.age }

    客户浏览器显示结果

    b6a4a200670aec1b737325c247a3919d.png

    八、EL中的运算符(empty)

    1、先说说几个常用运算符

    算术运算符:+、-、*、/、%(不支持++、–)

    关系运算符:==、!=、>、>=、

    逻辑运算符:!、&&、||、not、and、or

    条件运算符:?:

    取值运算符:[]、点号

    2、empty运算符

    用法为${empty 变量},结果为布尔值

    pageEncoding="UTF-8"%>

    Insert title here

    String name1=null;

    String name2="";

    List name3=new ArrayList();

    pageContext.setAttribute("name1", name1);

    pageContext.setAttribute("name2", name2);

    pageContext.setAttribute("name3", name3);

    %>

    empty对于没有定义的变量,运算结果为true:

    empty namex=${empty namex }

    empty对于null的引用,运算结果为true:

    empty name1=${empty name1 }

    empty对于为空串的String引用,运算结果为true:

    empty name2=${empty name2 }

    empty对于没有元素的数组或集合,运算结果为true:

    empty name3=${empty name3 }

    客户浏览器显示结果

    0c67a3c02c89b16ac5f937fc427ac21c.png

    九、自定义EL函数

    因为EL本身不具有处理字符串能力,所以可以自定义EL函数

    - 定义函数(新建MyEL.java类)

    - 注册:先找到jsp2-example-taglib.tld,将头部以及注册函数复制到自己创建的.tld文件中(.tld放在WEB-INF下)

    - 在index.jsp中使用,使用时需要

    1、定义函数MyEL.java

    package linjie.com;

    //自定义函数

    //该类及其函数,需要在扩展名为.tld的xml文件中注册

    //tld:tag library definition(标签库定义)

    //xml文件是需要约束的,即需要配置文件头部。这个头部约束可以从一下文件中进行复制

    //在Tomcat安装目录下:webapps\examples\WEB-INF\jsp2

    //文件为:jsp2-example-taglib.tld

    //这个.tld的xml文件,需要定义在当前web项目的WEB-INF目录下,在此目录下创建以.tld结尾的xml文件

    //将jsp2-example-taglib.tld中头部复制到创建的xml文件中

    //再将函数注册,还是在jsp2-example-taglib.tld底部中复制

    public class MyEL {

    private static MyEL instance;

    public static MyEL getInstance() {

    if(instance==null)

    {

    instance=new MyEL();

    }

    return instance;

    }

    //字符串小写变大写

    public static String LowerToUpper(String str) {

    return str.toUpperCase();

    }

    }

    2、将jsp2-example-taglib.tld中头部部分以及底部的注册函数部分复制到自己创建的tld(在WEB-INF下)文件中

    ae1174760fc2e1731df913ac6e7e4cec.png

    783d11dde4271def63e134bfa9205679.png

    a889ba36bfac395aa0b960fe7475159c.png

    251c4bc262c8dc42a696f300891e3e89.png

    MyEL.tld

    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">

    A tag library exercising SimpleTag handlers.

    1.0

    MyEL

    http://tomcat.apache.org/jsp2-example-taglib

    MyLowerToUpper

    linjie.com.MyEL

    java.lang.String LowerToUpper( java.lang.String )

    3、在index.jsp中使用,使用时需要

    pageEncoding="UTF-8"%>

    Insert title here

    ${MyEL:MyLowerToUpper("sasas") }

    String name="xlj";

    pageContext.setAttribute("name", name);

    %>

    ${MyEL:MyLowerToUpper(name) }

    客户浏览器显示结果

    ba12624abc295c99488c24be28c95d43.png

    十、EL总结

    EL表达式不能出现在Java代码块、表达式块等JSP动态代码部分

    EL只能从四大域属性空间中获取数据(pageContext、request、session、application)

    EL不会抛出空指针异常,只会不显示

    EL不会抛出数组越界异常,只会不显示

    EL不具有对字符串进行处理的能力(可以使用JSTL的EL或者自定义EL函数)

    相关阅读

    继续“我的6个网站推广的方法和手段”的第3、4个推广方法的详细讲解:软文推广和提交网址。为什么把第三条和第四条结合

    最近在找viewpager开源框架的时候,发现了一款十分炫酷的框架——MaterialViewPager

    少说废话,先贴实际效果图:

    Syn_Flood概述

    Syn-Flood攻击是当前网络上最为常见的DDoS攻击,也是最为经典的拒绝服务攻击,它利用了TCP协议实现上的一个缺陷,通过

    简介栅栏类似于闭锁,它能阻塞一组线程直到某个事件的发生。栅栏与闭锁的关键区别在于,所有的线程必须同时到达栅栏位置,才能继续执行

    我们在excel制作表格时候常常需要换行,有网友就问到有没有什么快速换行方法呢?有没有快捷键,其实是有的,那Excel表格换行快捷键是什

    展开全文
  • 包含使用jstl两个核心包:jstl-1.2.jar和standard-1.1.2.jar 和两个讲解文档:EL表达式详解 和JSTL标签库讲解
  • El表达式详解

    2018-02-05 22:07:16
    EL表达式 一、EL表达式简介  EL 全名为Expression Language。EL主要作用:  1、获取数据  EL表达式主要用于替换JSP页面中的脚本表达式,以从各种类型的web域 中检索java对象、获取数据。(某个web域 中的...
  • jsp和el表达式详解

    2022-02-22 15:49:30
    el JSP(JavaServer Pages)是由Sun Microsystems公司主导创建的一种动态网页技术标准。JSP部署于网络服务器上,可以响应客户端发送的请求,并根据请求内容动态地生成HTML、XML或其他格式文档的Web网页,然后返回给...
  • jsp的EL表达式详解

    2021-07-17 22:46:24
    文章目录一、什么是EL表达式,有什么用二、用法2.1 最简单的使用2.2. EL表达式搜索域数据的顺序2.3. EL表达式输出复杂的Bean对象2.4. EL表达式的关系运算2.5. EL表达式的逻辑运算2.6. EL表达式的算术运算2.7. empty...
  • EL表达式学习总结1. El表达式概念1. El中的表达式算术表达式比较表达式逻辑表达式三元表达式判空表达式EL 从四个作用域中取值作用域类型作用域方法如何选择作用域总结 学习总结 1. El表达式概念 EL表达式简介 1)...
  • EL函数库(由JSTL提供的)* 导入标签库:String toUpperCase(String input):把参数转换成大写String toLowerCase(String input):把参数转换成小写int indexOf(String input, String substring):从大串,输出小串的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,498
精华内容 3,399
关键字:

el表达式详解

友情链接: PBwebserver.rar