jsp EL表达式详解

    一、el表达式介绍

    • expression language表达式语言
    • 是一种在jsp页面获取数据的简单方式(只能获取数据,不能设置数据)
    • 在jsp2.0开始引入概念

    语法格式

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

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

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

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

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

    - pagecontext
       name  林杰      regster  regster  linjie.com.regster      regster  /regster    

    index.jsp

    <%@ page language="java" contenttype="text/html; charset=utf-8"
     pageencoding="utf-8"%> insert title here  name=${initparam.name }

    客户浏览器显示结果

    这里写图片描述

    四、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

    <%@ page language="java" contenttype="text/html; charset=utf-8"
     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 }

    客户浏览器显示结果

    这里写图片描述

    五、el访问数组中的数据

    <%@ page language="java" contenttype="text/html; charset=utf-8"
     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

    <%@ page language="java" contenttype="text/html; charset=utf-8"
     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 }

    客户浏览器显示结果

    这里写图片描述

    六、el获取list中数据

    <%@page import="java.util.*"%>
    <%@ page language="java" contenttype="text/html; charset=utf-8"
     pageencoding="utf-8"%> insert title here  <%
      list names=new arraylist();
      names.add("xlj");
      names.add("lucy");
      pagecontext.setattribute("names", names);
     %>
    
     
     names[1]=${names[1] }

    客户浏览器显示结果

    这里写图片描述

    注意:

    el可以通过索引访问list,但无法访问set。因为set中没有索引概念

    七、el访问map

    <%@page import="java.util.*"%>
    <%@ page language="java" contenttype="text/html; charset=utf-8"
     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 }
    
    
    
    

    客户浏览器显示结果

    这里写图片描述

    八、el中的运算符(empty)

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

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

    2、empty运算符

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

    <%@page import="java.util.*"%>
    <%@ page language="java" contenttype="text/html; charset=utf-8"
     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 }

    客户浏览器显示结果

    这里写图片描述

    九、自定义el函数

    因为el本身不具有处理字符串能力,所以可以自定义el函数
    - 定义函数(新建myel.java类)
    - 注册:先找到jsp2-example-taglib.tld,将头部以及注册函数复制到自己创建的.tld文件中(.tld放在web-inf下)
    - 在index.jsp中使用,使用时需要<%@ taglib uri=”http://tomcat.apache.org/jsp2-example-taglib” prefix=”myel” %>

    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下)文件中

    这里写图片描述

    这里写图片描述

    这里写图片描述

    这里写图片描述

    myel.tld

      
     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中使用,使用时需要<%@ taglib uri=”http://tomcat.apache.org/jsp2-example-taglib” prefix=”myel” %>

    <%@ page language="java" contenttype="text/html; charset=utf-8"
     pageencoding="utf-8"%>
    <%@ taglib uri="http://tomcat.apache.org/jsp2-example-taglib" prefix="myel" %> insert title here  
     ${myel:mylowertoupper("sasas") }
    
    
    
     
     <%
      string name="xlj";
      pagecontext.setattribute("name", name);
     %>
     ${myel:mylowertoupper(name) }

    客户浏览器显示结果

    这里写图片描述

    十、el总结

    • el表达式不能出现在java代码块、表达式块等jsp动态代码部分
    • el只能从四大域属性空间中获取数据(pagecontext、request、session、application)
    • el不会抛出空指针异常,只会不显示
    • el不会抛出数组越界异常,只会不显示
    • el不具有对字符串进行处理的能力(可以使用jstl的el或者自定义el函数)
    相关文章