(七)JSP之EL表達式

1、簡介html

最初定義在JSTL1.0規範中,直到JSP2.0以後,EL表達式才正式成爲JSP規範中的一部分。java

EL表達式定義了一系列的隱式對象和操做符,使得開發人員可以更方便地訪問頁面上下文,以及不一樣做用域內的對象。web

EL語法以下:數組

${El表達式}

在JSP頁面中咱們能夠禁用EL表達式,須要配置page指令的isELIgnored屬性,屬性值若爲true則支持EL表達式,若爲false則禁用表達式,默認狀況下是支持EL表達式的。

2、EL表達式-隱式對象

隱式對象 說明
pageContext 當前頁面的pageContext對象
pageScope 表示page 做用域
requestScope 表示request 做用域
sessionScope 表示session 做用域
applicationScope 表示application 做用域
param 接收Request 對象的參數(只有一個值)
paramValues 接收Request對象的參數(擁有多個值)
header HTTP 信息頭
headerValues HTTP 信息頭值
cookie Cookie值
initParam 取得配置的初始化參數

1 . 做用域訪問對象瀏覽器

pageScope,requestScope,sessionScope,applicationScope變量用來訪問存儲在各個做用域層次的變量。cookie

實例1session

${pageScope.name}

若是EL表達式中不指定查找範圍,例如:app

${name}

Web容器將會自動按照page >> request >> session >> application的順序查找jsp

2 . 參數訪問對象函數

param和paramValues對象用來訪問頁面輸入參數,經過調用request.getParameter方法和request.getParameterValues方法,能夠獲得用戶的請求參數。

param對象用於獲得請求中單一名稱的參數;paramValue對象用於獲得請求中的多個值

實例1 ELSubmitParam.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<title>Insert title here</title>
	</head>
		<body>	
		<form action='ELParam.jsp' method='post'>
			姓名:<input type='text' name='user' /><br />
			年齡:<input type='text' name='ages' /><br />
			<label for='football'>足球</label><input type='checkbox' name='sport' id='football' value="football"/>
			<label for='swimming'>游泳</label><input type='checkbox' name='sport' id='swimming' value="swimming"/>
			<label for='run'>步行</label><input type='checkbox' name='sport' id='run' value="run"/><br />
			<input type='submit' value='提交' />
		</form>
	</body>
</html>

實例2 ELParam.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" %>
<%@ page isELIgnored="false"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<title>Insert title here</title>
	</head>
	<body>
		<%
			request.setCharacterEncoding("UTF-8");
		%>
		<h2>用戶提交的參數</h2>
		<p>姓名 : ${param.user }</p>
		<p>年齡 : ${param.ages }</p>
		<p>運動 : ${paramValues.sport[0] } ${paramValues.sport[1] } ${paramValues.sport[2] }</p>
	</body>
</html>

3 . 其餘隱式對象

(1)pageContext對象

pageContext對象是JSP中pageContext對象的引用。

實例1

${pageContext.request.property}取得請求的參數字符串
${pageContext.request.requestURL} 取得請求的URL,不包括參數字符串
${pageContext.request.contextPath} 服務的web application 的名稱
${pageContext.request.method} 取得HTTP 的方法(GET、POST)
${pageContext.request.protocol} 取得使用的協議(HTTP/1.一、HTTP/1.0)
${pageContext.request.remoteUser} 取得用戶名稱
${pageContext.request.remoteAddr} 取得用戶的IP 地址
${pageContext.session.new} 判斷session 是否爲新的
${pageContext.session.id} 取得session 的ID
${pageContext.servletContext.serverInfo} 取得主機端的服務信息

(2)header和headerValues對象

用來讀取請求的信息頭 。

實例1

${header["UserAgent"]} 獲取瀏覽器的版本信息

(3)cookie對象

讀取用戶請求中的cookie參數

實例1

${cookie.JSESSIONID.value }

(4)initParam對象

讀取設置在web.xml中配置的相關參數。等價於調用application.getInitParameter()或 servletContext.getInitParameter()方法。

3、EL表達式-基本操做符

EL表達式支持大部分Java所提供的算術和邏輯操做符:

. 訪問一個Bean屬性或者一個映射條目
[] 訪問一個數組或者鏈表的元素
( ) 組織一個子表達式以改變優先級
+
- 減或負
*
/ or div
% or mod 取模
== or eq 測試是否相等
!= or ne 測試是否不等
< or lt 測試是否小於
> or gt 測試是否大於
<= or le 測試是否小於等於
>= or ge 測試是否大於等於
&& or and 測試邏輯與
|| or or 測試邏輯或
! or not 測試取反
empty 測試是否空值

注意:

1 . EL表達式中的‘+’只有數學運算的功能,沒有鏈接符的功能,它會試着把運算符兩邊的操做數轉換爲數值類型,進而進行數學加法運算,最後把結果輸出。

2.   empty 判斷EL表達式中的表達式是否爲空.

實例1

${empty sessionScope.user}

4、EL表達式-函數

EL表達式語法容許開發人員開發並調用自定義函數,也能夠調用 JSTL函數(本篇筆記中不做詳細介紹)。

EL函數必須是一個public修飾的類,且EL表達式調用的方法必須是public修飾的且爲靜態方法。

EL自定義hsh開發步驟以下:

1 .  編寫調用自定義函數的類,編寫類中具體實現的靜態方法

實例1

package cn.iborder.elfn;
public class ELfn {
	
	public static String elfn1(String name){
        return "EL自定義函數";
    }
}

2 .  創建TLD文件,定義表達式函數

實例1

<?xml version="1.0" encoding="GBK"?>
<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">   
    <!-- 定義函數版本 -->
	<tlib-version>1.0</tlib-version>
	<!-- 定義函數名稱 -->
	<short-name>el</short-name>
	<!-- 定義第一個函數 -->
	<function>
		<name>elfn</name>
		<function-class>cn.iborder.elfn.ELfn</function-class>
		<!-- 定義函數的對應方法 -->
		<function-signature>
			java.lang.String elfn()
		</function-signature>
	</function>
	
</taglib>

3 .  在JSP頁面內導入而且使用

實例1

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page isELIgnored="false" %>
<%@ taglib prefix="el" uri="/WEB-INF/elfn.tld" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<title>自定義EL函數</title>
	</head>
	<body>
		<h1>${el:elfn() }</h1>
	</body>
</html>
相關文章
相關標籤/搜索