一、el表達(dá)式介紹
- expression language表達(dá)式語言
- 是一種在jsp頁面獲取數(shù)據(jù)的簡單方式(只能獲取數(shù)據(jù),不能設(shè)置數(shù)據(jù))
- 在jsp2.0開始引入概念
語法格式
在jsp頁面的任何靜態(tài)部分均可通過:${expression}來獲取到指定表達(dá)式的值
二、el獲取數(shù)據(jù)(從四大域中獲取屬性)
el只能從四大域中獲取屬性
1、如果沒有使用el的內(nèi)置對(duì)象,則查找數(shù)據(jù)順序是依次按照由小到大范圍從四大域中查找指定名稱的屬性值
二、el獲取數(shù)據(jù)(從四大域中獲取屬性)
el只能從四大域中獲取屬性
1、如果沒有使用el的內(nèi)置對(duì)象,則查找數(shù)據(jù)順序是依次按照由小到大范圍從四大域中查找指定名稱的屬性值
- 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 }
客戶瀏覽器顯示結(jié)果
四、el訪問bean的屬性
1、什么是java bean
javabean是公共java類,但是為了編輯工具識(shí)別
需要滿足至少三個(gè)條件
- 有一個(gè)public默認(rèn)構(gòu)造器(例如無參構(gòu)造器)
- 屬性使用public 的get,set方法訪問,也就是說設(shè)置成private同時(shí)get,set方法與屬性名的大小也需要對(duì)應(yīng)。例如屬性name,get方法就要寫成,public string getname(){},n大寫。
- 需要序列化。這個(gè)是框架,工具跨平臺(tái)反映狀態(tài)必須的
2、el訪問bean屬性
el可以通過${key.屬性}的方式獲取到指定值,其底層實(shí)際調(diào)用的是該對(duì)象的相應(yīng)屬性的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 }
客戶瀏覽器顯示結(jié)果
五、el訪問數(shù)組中的數(shù)據(jù)
<%@ 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] }
下面是訪問類的數(shù)組
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 }
客戶瀏覽器顯示結(jié)果
六、el獲取list中數(shù)據(jù)
<%@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] }
客戶瀏覽器顯示結(jié)果
注意:
el可以通過索引訪問list,但無法訪問set。因?yàn)閟et中沒有索引概念
七、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 }
客戶瀏覽器顯示結(jié)果
八、el中的運(yùn)算符(empty)
1、先說說幾個(gè)常用運(yùn)算符
- 算術(shù)運(yùn)算符:+、-、*、/、%(不支持++、–)
- 關(guān)系運(yùn)算符:==、!=、>、>=、<、<=
- 邏輯運(yùn)算符:!、&&、||、not、and、or
- 條件運(yùn)算符:?:
- 取值運(yùn)算符:[]、點(diǎn)號(hào)
2、empty運(yùn)算符
用法為${empty 變量},結(jié)果為布爾值
<%@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對(duì)于沒有定義的變量,運(yùn)算結(jié)果為true: empty namex=${empty namex } empty對(duì)于null的引用,運(yùn)算結(jié)果為true: empty name1=${empty name1 } empty對(duì)于為空串的string引用,運(yùn)算結(jié)果為true: empty name2=${empty name2 } empty對(duì)于沒有元素的數(shù)組或集合,運(yùn)算結(jié)果為true: empty name3=${empty name3 }
客戶瀏覽器顯示結(jié)果
九、自定義el函數(shù)
因?yàn)閑l本身不具有處理字符串能力,所以可以自定義el函數(shù)
- 定義函數(shù)(新建myel.java類)
- 注冊(cè):先找到j(luò)sp2-example-taglib.tld,將頭部以及注冊(cè)函數(shù)復(fù)制到自己創(chuàng)建的.tld文件中(.tld放在web-inf下)
- 在index.jsp中使用,使用時(shí)需要<%@ taglib uri=”http://tomcat.apache.org/jsp2-example-taglib” prefix=”myel” %>
1、定義函數(shù)myel.java
package linjie.com; //自定義函數(shù) //該類及其函數(shù),需要在擴(kuò)展名為.tld的xml文件中注冊(cè) //tld:tag library definition(標(biāo)簽庫定義) //xml文件是需要約束的,即需要配置文件頭部。這個(gè)頭部約束可以從一下文件中進(jìn)行復(fù)制 //在tomcat安裝目錄下:webapps\examples\web-inf\jsp2 //文件為:jsp2-example-taglib.tld //這個(gè).tld的xml文件,需要定義在當(dāng)前web項(xiàng)目的web-inf目錄下,在此目錄下創(chuàng)建以.tld結(jié)尾的xml文件 //將jsp2-example-taglib.tld中頭部復(fù)制到創(chuàng)建的xml文件中 //再將函數(shù)注冊(cè),還是在jsp2-example-taglib.tld底部中復(fù)制 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中頭部部分以及底部的注冊(cè)函數(shù)部分復(fù)制到自己創(chuàng)建的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中使用,使用時(shí)需要<%@ 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) }
客戶瀏覽器顯示結(jié)果
十、el總結(jié)
- el表達(dá)式不能出現(xiàn)在java代碼塊、表達(dá)式塊等jsp動(dòng)態(tài)代碼部分
- el只能從四大域?qū)傩钥臻g中獲取數(shù)據(jù)(pagecontext、request、session、application)
- el不會(huì)拋出空指針異常,只會(huì)不顯示
- el不會(huì)拋出數(shù)組越界異常,只會(huì)不顯示
- el不具有對(duì)字符串進(jìn)行處理的能力(可以使用jstl的el或者自定義el函數(shù))