# JSP表達式語言
JSP表達式語言(EL)使得訪問存儲在JavaBean中的數據變得非常簡單。JSP EL既可以用來創建算術表達式也可以用來創建邏輯表達式。在JSP EL表達式內可以使用整型數,浮點數,字符串,常量true、false,還有null。
* * *
## 一個簡單的語法
典型的,當您需要在JSP標簽中指定一個屬性值時,只需要簡單地使用字符串即可:
~~~
<jsp:setProperty name="box" property="perimeter" value="100"/>
~~~
JSP EL允許您指定一個表達式來表示屬性值。一個簡單的表達式語法如下:
~~~
${expr}
~~~
其中,expr指的是表達式。在JSP EL中通用的操作符是.和{}。這兩個操作符允許您通過內嵌的JSP對象訪問各種各樣的JavaBean屬性。
舉例來說,上面的標簽可以使用表達式語言改寫成如下形式:
~~~
<jsp:setProperty name="box" property="perimeter"
value="${2*box.width+2*box.height}"/>
~~~
當JSP編譯器在屬性中見到"${}"格式后,它會產生代碼來計算這個表達式,并且產生一個替代品來代替表達式的值。
您也可以在標簽的模板文本中使用表達式語言。比如標簽簡單地將其主體中的文本插入到JSP輸出中:
~~~
<jsp:text>
<h1>Hello JSP!</h1>
</jsp:text>
~~~
現在,在標簽主體中使用表達式,就像這樣:
~~~
<jsp:text>
Box Perimeter is: ${2*box.width + 2*box.height}
</jsp:text>
~~~
在EL表達式中可以使用圓括號來組織子表達式。比如${(1 + 2) \* 3}等于9,但是${1 + (2 \* 3)} 等于7。
想要停用對EL表達式的評估的話,需要使用page指令將isELIgnored屬性值設為true:
~~~
<%@ page isELIgnored ="true|false" %>
~~~
這樣,EL表達式就會被忽略。若設為false,則容器將會計算EL表達式。
* * *
## 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 | 測試是否空值 |
* * *
## JSP EL中的函數
JSP EL允許您在表達式中使用函數。這些函數必須被定義在自定義標簽庫中。函數的使用語法如下:
~~~
${ns:func(param1, param2, ...)}
~~~
ns指的是命名空間(namespace),func指的是函數的名稱,param1指的是第一個參數,param2指的是第二個參數,以此類推。比如,有函數fn:length,在JSTL庫中定義,可以像下面這樣來獲取一個字符串的長度:
~~~
${fn:length("Get my length")}
~~~
要使用任何標簽庫中的函數,您需要將這些庫安裝在服務器中,然后使用標簽在JSP文件中包含這些庫。
* * *
## JSP EL隱含對象
JSP EL支持下表列出的隱含對象:
| **隱含對象** | **描述** |
| --- | --- |
| pageScope | page 作用域 |
| requestScope | request 作用域 |
| sessionScope | session 作用域 |
| applicationScope | application 作用域 |
| param | Request 對象的參數,字符串 |
| paramValues | Request對象的參數,字符串集合 |
| header | HTTP 信息頭,字符串 |
| headerValues | HTTP 信息頭,字符串集合 |
| initParam | 上下文初始化參數 |
| cookie | Cookie值 |
| pageContext | 當前頁面的pageContext |
您可以在表達式中使用這些對象,就像使用變量一樣。接下來會給出幾個例子來更好的理解這個概念。
* * *
## pageContext對象
pageContext對象是JSP中pageContext對象的引用。通過pageContext對象,您可以訪問request對象。比如,訪問request對象傳入的查詢字符串,就像這樣:
~~~
${pageContext.request.queryString}
~~~
* * *
## Scope對象
pageScope,requestScope,sessionScope,applicationScope變量用來訪問存儲在各個作用域層次的變量。
舉例來說,如果您需要顯式訪問在applicationScope層的box變量,可以這樣來訪問:applicationScope.box。
* * *
## param和paramValues對象
param和paramValues對象用來訪問參數值,通過使用request.getParameter方法和request.getParameterValues方法。
舉例來說,訪問一個名為order的參數,可以這樣使用表達式:${param.order},或者${param\["order"\]}。
接下來的例子表明了如何訪問request中的username參數:
~~~
<%@ page import="java.io.*,java.util.*" %>
<%
String title = "Accessing Request Param";
%>
<html>
<head>
<title><% out.print(title); %></title>
</head>
<body>
<center>
<h1><% out.print(title); %></h1>
</center>
<div align="center">
<p>${param["username"]}</p>
</div>
</body>
</html>
~~~
param對象返回單一的字符串,而paramValues對象則返回一個字符串數組。
* * *
## header和headerValues對象
header和headerValues對象用來訪問信息頭,通過使用 request.getHeader方法和request.getHeaders方法。
舉例來說,要訪問一個名為user-agent的信息頭,可以這樣使用表達式:${header.user-agent},或者${header\["user-agent"\]}。
接下來的例子表明了如何訪問user-agent信息頭:
~~~
<%@ page import="java.io.*,java.util.*" %>
<%
String title = "User Agent Example";
%>
<html>
<head>
<title><% out.print(title); %></title>
</head>
<body>
<center>
<h1><% out.print(title); %></h1>
</center>
<div align="center">
<p>${header["user-agent"]}</p>
</div>
</body>
</html>
~~~
運行結果如下:

header對象返回單一值,而headerValues則返回一個字符串數組。
- Java Web項目開發學習手冊
- 一、B/S開發環境搭建
- 1.1 tomcat服務器目錄結構及作用
- 1.2 在IDE開發工具上配置tomcat服務器
- 1.3 簡單web項目在tomcat服務器上運行的方法
- 1.4 開發工具設置
- 1.5 總結
- 二、Servlet技術應用
- 2.1 HttpServlet中的主要方法及應用
- 2.1.1 基于Eclipse完成一個JavaWeb項目
- 2.2 HttpRequest,HttpResponse的應用
- 2.2.1客戶端請求
- 2.2.2服務器響應
- 2.2.3Servlet HTTP 狀態碼
- 2.2.4圖片驗證碼類
- 2.2.5注冊模擬實現(帶驗證碼)
- 2.3 ServletConfig對象和ServletContext對象的概念
- 2.4 總結
- 三、JSP技術應用
- 3.1 JSP基本語法
- 3.2 JSP標簽和指令
- 3.3 JSP中的隱式對象
- 3.4 常用應用操作
- 3.4.1 JSP客戶端請求
- 3.4.2 JSP服務器響應
- 3.4.3 HTTP狀態碼
- 3.4.4 表單處理
- 3.4.5 過濾器
- 3.4.6 Cookie處理
- 3.4.7 Session處理
- 3.4.8 文件上傳
- 3.4.9 日期處理
- 3.4.10 頁面重定向
- 3.4.11 點擊量統計
- 3.4.12 自動刷新
- 3.4.13 發送郵件
- 3.5 JSP高級應用
- 3.5.1 JSP標準標簽庫(JSTL)
- 3.5.2 JSP連接數據庫
- 3.5.3 JSP XML數據處理
- 3.5.4 JSP JavaBean
- 3.5.5 自定義標簽
- 3.5.6 表達式語言
- 3.5.7 異常處理
- 3.5.8 調試
- 3.5.9 JSP國際化
- 3.6 實踐代碼
- 3.6.1 實踐代碼
- 3.6.2 項目實戰
- 3.7 總結
- 四、MVC思想的理解和搭建MVC
- 4.1 MVC設計模式的思想
- 4.2 MVC設計模式的實現步驟
- 4.3 項目實踐
- 4.4 總結
- 五、EL表達式和JSTL技術
- 5.1 EL表達式及其應用
- 5.2 常用的JSTL標簽的應用
- 5.3 項目實踐
- 5.4 總結
- 六、Cookie和Session
- 6.1 cookie對象的概念和應用
- 6.2 session對象的概念和應用
- 6.3 項目實踐
- 6.4 總結
- 七、過濾器技術應用
- 7.1 Filter的概念及應用
- 7.2 Filter、FilterChain、FilterConfig 介紹
- 7.3 用戶登錄過濾案例
- 7.4 項目實戰
- 7.5總結
- 八、異步請求技術
- 8.1 JSON數據格式
- 8.2 使用AJAX實現異步請求
- 8.3 用戶名校驗案例
- 8.4小結
- 綜合項目技術實訓
- 1.BS項目開發項目實戰
- 2.項目需求分析和系統設計
- 2.1需求分析
- 2.2類型模型設計
- 2.3原型設計
- 3.項目數據庫分析和系統設計
- 4.BS項目編程實現
- 4.1搭建框架和命名規約
- 4.2實現步驟
- 4.2.1創建實體類
- 4.2.2創建過濾器類
- 4.2.3創建工具類
- 4.2.4創建DAO接口及其實現類
- 4.2.5創建Service接口及其實現類
- 4.2.6創建測試類
- 4.2.7創建控制器類
- 5.企業開發流程規范
- 6.總結
- 九、練習題及答案
- 企業開發常用技術
- 1.Maven技術
- Java命名規范解讀
- 參考資料
- 開發中常用的應用服務器和Web服務器