方立勋_30天掌握JavaWeb_EL表达式功能详解
簡介
EL 全名為Expression Language。EL主要作用:
獲取數據:
EL表達式主要用于替換JSP頁面中的腳本表達式,以從各種類型的web域 中檢索java對象、獲取數據。(某個web域 中的對象,訪問javabean的屬性、訪問list集合、訪問map集合、訪問數組)
執行運算:
利用EL表達式可以在JSP頁面中執行一些基本的關系運算、邏輯運算和算術運算,以在JSP頁面中完成一些簡單的邏輯運算。${user==null}
獲取web開發常用對象:
EL 表達式定義了一些隱式對象,利用這些隱式對象,web開發人員可以很輕松獲得對web常用對象的引用,從而獲得這些對象中的數據。
調用Java方法:
EL表達式允許用戶開發自定義EL函數,以在JSP頁面中通過EL表達式調用Java類的方法。
1. 獲取數據
獲取數據(1)
使用EL表達式獲取數據語法:“${標識符}”
EL表達式語句在執行時,會調用pageContext.findAttribute方法,用標識符為關鍵字,分別從page、request、session、application四個域中查找相應的對象,找到則返回相應對象,找不到則返回”” (注意,不是null,而是空字符串)。
示例:${user}
獲取數據(2)
EL表達式也可以很輕松獲取JavaBean的屬性,或獲取數組、Collection、Map類型集合的數據,例如:
${user.address.city} ${user.list[0]}:訪問有序集合某個位置的元素 ${map.key} : 獲得map集合中指定key的值結合JSTL的foreach標簽,使用EL表達式也可以很輕松迭代各種類型的數組或集合,示例:
迭代數組
迭代collection類型集合
迭代map類型集合
2. 執行運算
語法:${運算表達式},EL表達式支持如下運算符:
empty運算符:檢查對象是否為null或“空”,很好用!!!
二元表達式:${user!=null?user.name : “”} ,很好用!!!
[ ] 和 . 號運算符
3. 獲得web開發常用對象
EL表達式語言中定義了11個隱含對象,使用這些隱含對象可以很方便地獲取web開發中的一些常見對象,并讀取這些對象的數據。
語法:${隱式對象名稱} :獲得對象的引用
注意事項:
測試headerValues時,如果頭里面有“-” ,例Accept-Encoding,則要headerValues[“Accept-Encoding”] 測試cookie時,例${cookie.key}取的是cookie對象,如訪問cookie的名稱和值,須${cookie.key.name}或${cookie.key.value}4. 使用EL調用Java方法
EL表達式語法允許開發人員開發自定義函數,以調用Java類的方法。
示例:${prefix:method(params)}
在EL表達式中調用的只能是Java類的靜態方法。
這個Java類的靜態方法需要在TLD文件中描述,才可以被EL表達式調用。
EL自定義函數用于擴展EL表達式的功能,可以讓EL表達式完成普通Java程序代碼所能完成的功能。
一般來說, EL自定義函數開發與應用包括以下三個步驟:
1. 編寫一個Java類的靜態方法
2. 編寫標簽庫描述符(tld)文件,在tld文件中描述自定義函數。
3. 在JSP頁面中導入和使用自定義函數
1、編寫一個包含靜態方法的類
package cn.itcast;public class HtmlFilter {public static String filter(String message) {if (message == null)return (null);char content[] = new char[message.length()];message.getChars(0, message.length(), content, 0);StringBuffer result = new StringBuffer(content.length + 50);for (int i = 0; i < content.length; i++) {switch (content[i]) {case '<':result.append("<");break;case '>':result.append(">");break;case '&':result.append("&");break;case '"':result.append(""");break;default:result.append(content[i]);}}return (result.toString());} }2、在web-inf\目錄下新建一個tld文件,對想被jsp頁面調用的函數進行描述
<?xml version="1.0" encoding="UTF-8" ?><taglib xmlns="http://java.sun.com/xml/ns/j2ee"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"><description>A tag library exercising SimpleTag handlers.</description><tlib-version>1.0</tlib-version><short-name>SimpleTagLibrary</short-name><uri>/itcast</uri><function><name>filter</name><function-class>cn.itcast.HtmlFilter</function-class><function-signature>java.lang.String filter(java.lang.String)</function-signature></function> </taglib>3、在jsp頁面導入標簽庫,并調用el函數
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@taglib uri="/WEB-INF/itcast.tld" prefix="fn" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html><head><title>My JSP '4.jsp' starting page</title></head><body>${fn:filter("<a href=''>點點</a>") }</body> </html>開發EL Function注意事項:
- 編寫完標簽庫描述文件后,需要將它放置到<web應用>\WEB-INF目錄中或WEB-INF目錄下的除了classes和lib目錄之外的任意子目錄中。
- TLD文件中的<uri> 元素用指定該TLD文件的URI,在JSP文件中需要通過這個URI來引入該標簽庫描述文件。
- <function>元素用于描述一個EL自定義函數,其中:
<name>子元素用于指定EL自定義函數的名稱。
<function-class>子元素用于指定完整的Java類名,
<function-signature>子元素用于指定Java類中的靜態方法的簽名,方法簽名必須指明方法的返回值類型及各個參數的類型,各個參數之間用逗號分隔。 - EL表達式是JSP 2.0規范中的一門技術 。因此,若想正確解析EL表達式,需使用支持Servlet2.4/JSP2.0技術的WEB服務器。
- 注意:有些Tomcat服務器如不能使用EL表達式
(1)升級成tomcat6
(2)在JSP中加入<%@ page isELIgnored=”false” %>
EL表達式保留關鍵字:
所謂保留字的意思是指變量在命名時,應該避開上述的名字,以免程序編譯時發生錯誤。
SUN公司:EL函數庫
- 由于在JSP頁面中顯示數據時,經常需要對顯示的字符串進行處理,SUN公司針對于一些常見處理定義了一套EL函數庫供開發者使用。
這些EL函數在JSTL開發包中進行描述,因此在JSP頁面中使用SUN公司的EL函數庫,需要導入JSTL開發包,并在頁面中導入EL函數庫,如下所示:
在頁面中使用JSTL定義的EL函數:
<%@taglib uri=”http://java.sun.com/jsp/jstl/functions” prefix=”fn”%>- fn:toLowerCase
- fn:toUpperCase
- fn:trim
- fn:length
- fn:split
- fn:join
- fn:indexOf
- fn:contains
- fn:startsWith
- fn:replace
- fn:substring
- fn:substringAfter
總結
以上是生活随笔為你收集整理的方立勋_30天掌握JavaWeb_EL表达式功能详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MyEclipse导入新项目后,不能发布
- 下一篇: 方立勋_30天掌握JavaWeb_国际化