• Jsp学习(三)


    EL表达式

    1、定义

    • 表达式语言
    • 原本是JSTL 1.0 为方便存取数据所自定义的,当时的EL 只能在JSTL 标签中使用(一般在属性中使用)
    • 从JSP 2.0 开始,EL 被正式称为标准规范之一,只要是支持Servlet 2.4 / JSP 2.0 的容器,都可以在JSP 上直接使用
    • 除了JSP 2.0 建议使用EL 外,JSF 也考虑将EL 纳入规范,JSF : Java Server Faces。
    • EL表达式是一种JSP技术,能够代替JSP中原本要用Java语言进行显示的语句,使得代码更容易编写与维护。最基本的语法是${express}。
    • 格式:    ${表达式}
    • 忽视EL表达式
      <%@ page isELIgnored = "false" %>

    2、. 运算符

    • EL提供.  运算符来存取数据
    • 使用时直接在某个变量之后跟 . 来访问该变量内部的属性或方法
    • 规律:如果A 类中有getXyz() 方法,设getXyz() 方法有返回值
      若存在对象a 是A 类型,则可以使用${ a.xyz } 获取getXyz() 方法的返回值
    • 例如:User 类内部有getName() 方法,其中返回name 属性的值
      则可以使用${ user.name } 可以获取user 的name 属性的值
    • 访问自定义的对象:
      先必须将自定义对象加入作用域中
        pageContext.setAttribute("name", object);
      object的getAbc()方法可以通过EL表达式直接获取:
        ${ name.abc }

    测试案例:

    <%@ page language = "java" pageEncoding = "UTF-8" %>
    <%@ page contentType = "text/html; charset= UTF-8"%>
    <%@ page import= "java.util.*" %>
    <%@ page import= "ecut.entity.*"%>

    <%@ page import= "org.malajava.util.*" %>
    <%-- Jsp注释通过 page指令的isELIgnored 可以告知容器是否忽悠页面上的 EL表达式--%> <%@ page isELIgnored = "false" %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Expression Language , EL</title> <style type="text/css"> h4 { font-weight : normal ; font-size: 20px ; height: 50px ; line-height: 50px ; margin: 0px 0px ;} </style> </head> <body> <h2>Expression Language , EL</h2> <h3> ${ 1 + 1 } </h3> <h4> pageContext : ${ pageContext } </h4> <%--但凡是 某个对象中有 getAbc() 形式的方法,那么都可以将 getAbc() 写作abc 直接访问--%> <%--比如 pageContext.getRequest() --- pageContext.request --%> <h4> request : ${ pageContext.request } </h4> <%--比如 pageContext.getResponse() --- pageContext.response --%> <h4> response : ${ pageContext.response } </h4> <%-- pageContext.getSession() --- pageContext.session --%> <h4> session : ${ pageContext.session } </h4> <%--pageContext.getServletContext() --- pageContext.servletContext--%> <h4> application : ${ pageContext.servletContext } </h4> <%--pageContext.getServletConfig() --- pageContext.servletConfig--%> <h4> config : ${ pageContext.servletConfig } </h4> <%--pageContext.getOut() --- pageContext.out --%> <h4> out : ${ pageContext.out } </h4> <%--pageContext.getPage() --- pageContext.page--%> <h4> page : ${ pageContext.page } </h4> <%--pageContext.getException() --- pageContext.exception --%> <h4> exception : ${ pageContext.exception } </h4> <hr> <% Student s = new Student(); s.setId(1001); s.setName("华安" ); s.setGender( '男'); Date birthdate = DateHelper.getDate( 1996 , 10 , 11 ); s.setBirthdate( birthdate ); pageContext.setAttribute( "student" ,s); //==> Expression Language Context : pageScope //request.setAttribute( "student",s );==> Expression Language Context : requestScope //session.setAttribute( "student",s );==> Expression Language Context : sessionScope //application.setAttribute( "student",s );==> Expression Language Context : applicationScope %> <h4> name : <%= s.getName()%> </h4> <h4> name : ${ student.name } </h4> <hr> <a href="<%= request.getContextPath()%>/builtin.jsp?username=zhangsanfeng"> Expression Language 内置对象</a> <a href="${ pageContext.request.contextPath }/builtin.jsp?username=zhangsanfeng"> Expression Language 内置对象</a> </body> </html>
    package ecut.entity;
    
    import java.io.Serializable;
    import java.util.Date;
    
    public class Student implements Serializable {
    
        private static final long serialVersionUID = 3097161330831346815L;
    
        private Integer id;
        private String studentName;
        private char gender;
        private Date birthdate;
    
        public Integer getId() {
            return id;
        }
    
        public void setId(Integer id) {
            this.id = id;
        }
    
        public String getName() {
            return studentName;
        }
    
        public void setName(String name) {
            this.studentName = name;
        }
    
        public char getGender() {
            return gender;
        }
    
        public void setGender(char gender) {
            this.gender = gender;
        }
    
        public Date getBirthdate() {
            return birthdate;
        }
    
        public void setBirthdate(Date birthdate) {
            this.birthdate = birthdate;
        }
    
    }

    规律一:但凡时某个对象中有getAbc()形式的方法,那么都可以写作:对象.abc直接访问

    原理:EL表达式在获取某个对象的属性值时,先将某个属性值首字母变成大写,然后加上get前缀,拼接成getter方法,通过反射将该对象构建出来,然后再对该对象执行getter方法,这与私有属性并没有关系,所以要注意,JavaBean的属性名要小写,且要有getter方法,不然会报错。

    3、[] 运算符

    • 可以使用类似于. 运算符的作用,形式为${ user[ "name" ] }
    • 也类似于访问数组元素的风格使用,形式为${ list[ 1 ] }

    4、保留字

    • 类似于Java 中的保留字,程序员不能够在EL 中再度单独使用这些保留字
    • 保留字有:and, eq, gt, true ,or, ne ,le ,false,no ,lt ,ge, null,instanceof ,empty, div, mod

    5、四大域对象

    • applicationScope 、sessionScope 、requestScope 、pageScope
    • 变量的查找顺序为p --> r --> s --> a
    • 作用范围
    1. page域:    页面范围,只能在当前jsp页面使用,通过pageContext.setAttribute()来设置                        (当前页面)  
    2. request域: 请求范围,只能在同一个请求中使用,通过pageContext.setAttribute()来设置                     (转发)  
    3. session域:会话范围, 只能在同一个会话(session对象)中使用,通过session.setAttribute()来设置       (私有的)  
    4. application域: web应用范围,只能在同一个web应用中使用,通过application.setAttribute()来设置   (全局的) 

    6、EL常用的内置对象

     测试案例:

    <%@ page language = "java" pageEncoding = "UTF-8" %>
    <%@ page contentType = "text/html; charset= UTF-8"%>

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>EL表达式的常用内置对象</title> </head> <body> <h4> JSP内置对象:<%= pageContext%> </h4> <hr> <h4> pageContext : ${ pageContext } </h4> <%     pageContext.setAttribute( "name" ,"韩小昭"); //==> Expression Language Context : pageScope     request.setAttribute( "name" ,"张无忌"); //==> Expression Language Context :requestScope
        session.setAttribute( "name" ,"张翠山"); //==> Expression Language Context :sessionScope
        
    application.setAttribute( "name" ,"张三丰"); //==> Expression Language Context :applicationScope
    %> <h4> JSP表达式: <%=pageContext.getAttribute( "name" ) %> </h4> <h4> EL表达式 ( P - R - S - A ): ${ name }</h4> <h4> EL表达式: ${ pageScope.name } </h4> <h4> EL表达式: ${ requestScope.name } </h4> <h4> EL表达式: ${ sessionScope.name } </h4> <h4> EL表达式: ${ applicationScope.name } </h4> <hr> <h4> param : ${ param } </h4> <h4> username : ${ param.username } </h4> <h4> password : ${ param.password } </h4> <hr> <h2>Scope</h2> <h4> pageScope : ${ pageScope } </h4> <h4> requestScope : ${ requestScope } </h4> <h4> sessionScope : ${ sessionScope } </h4> <h4> applicationScope : ${ applicationScope } </h4> </body> </html>

    规律二:但凡是由对象.setAttribute()用来设置的属性,都可以通过相应作用域.属性名来获取对应的值(默认按照从小到大的范围),如果是直接通过属性名来获取,则获取最小范围内的值。例如

    pageContext.setAttribute( "name" ,"韩小昭");
    EL表达式: ${ pageScope.name }

    转载请于明显处标明出处

    https://www.cnblogs.com/AmyZheng/p/9132696.html

  • 相关阅读:
    剑指offer-面试题59_2-队列的最大值-队列
    剑指offer-面试题59_1-滑动窗口的最大值-数组
    剑指offer-面试题64-求1+2+...+n-发散思维
    客车网上售票系统之前台订票、退票、改签管理和前台留言管理
    客车网上售票系统之票务管理
    客车网上售票系统项目之留言管理和新闻管理
    客车网上售票系统之用户管理
    客车网上销售系统需求分析及项目燃尽图
    MyBatis-plus逻辑删除
    项目启动注释模板
  • 原文地址:https://www.cnblogs.com/AmyZheng/p/9132696.html
Copyright © 2020-2023  润新知