一、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函數)