注意這里詳細(xì)講解如何在jsp中使用el表達(dá)式。 如果你不滿足以下任一條件,請(qǐng)繼續(xù)閱讀,否則請(qǐng)?zhí)^此后的部分,進(jìn)入下一章:第 14 章 生命周期。
我們已經(jīng)知道el是jsp-2.0規(guī)范的一部分,tomcat-5.x版本以上都已經(jīng)能夠支持jsp-2.0規(guī)范,但在更低版本的tomcat和webphere,weblogic中還是無法使用這一便捷方式。 其實(shí)我們也可以選擇在jsp中禁止使用el表達(dá)式,使用jsp指令(directive)可以對(duì)禁用某一個(gè)jsp中的el表達(dá)式。 禁用之后的el表達(dá)式會(huì)以原樣顯示出來,如下圖所示。 ![]() 為了對(duì)照,我們還在13-01下放了一個(gè)可以正常使用el表達(dá)式的例子,運(yùn)行效果如下圖顯示。 ![]() 在13-01/index.jsp中禁用el表達(dá)式,是使用了isELIgnore="true"這樣一條jsp指令(directive),請(qǐng)注意大小寫。 <%@ page isELIgnored="true" %> <% pageContext.setAttribute("hello", "Hello World"); %> ${hello} 還有一種批量禁用el的方法,我們可以在WEB-INF/web.xml中使用jsp-property-group標(biāo)簽批量禁用el,我們?cè)?3-02/WEB-INF/web.xml中進(jìn)行如下配置。 <xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java./xml/ns/j2ee" xmlns:xsi="http://www./2001/XMLSchema-instance" xsi:schemaLocation="http://java./xml/ns/j2ee http://java./xml/ns/j2ee/web-app_2_4.xsd" version="2.4"> <jsp-config> <jsp-property-group> <url-pattern>*.jsp</url-pattern> <el-ignored>true</el-ignored> </jsp-property-group> </jsp-config> </web-app> 這樣就會(huì)禁用所有以.jsp后綴的請(qǐng)求中的el表達(dá)式,使用這種方式需要注意兩點(diǎn)。
實(shí)際上還有第三種方法可以禁用掉所有jsp中的el表達(dá)式,那就是把web.xml定義為2.3版。 <xml version="1.0" encoding="UTF-8"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java./dtd/web-app_2_3.dtd"> <web-app> </web-app> 這個(gè)就是13-03/WEB-INF/web.xml的定義,定義了web-app的版本號(hào)是2.3,這樣一來所有的jsp都無法使用el表達(dá)式了,因?yàn)閑l表達(dá)式是2.4版才開始支持的功能。 注意說了以上三種禁用el表達(dá)式的方法,不是希望大家拋棄el表達(dá)式,相反是希望大家在自己編寫el時(shí)出現(xiàn)問題時(shí),先去考慮是否有人在這三個(gè)地方做了設(shè)置造成el表達(dá)式的失效。建議大家多多使用el表達(dá)式,少用一些jsp中的scriptlet代碼。 使用el的時(shí)候,默認(rèn)會(huì)以一定順序搜索四個(gè)作用域,將最先找到的變量值顯示出來。 ![]() 如果我們有${username}這樣一個(gè)正則表達(dá)式,它回去依次調(diào)用pageContext.getAttribute("username") -> request.getAttribute("username") -> session.getAttribute("username") -> application.getAttribute("username"),只要找到某一個(gè)不為空的值就立刻返回。 這樣的確方便我們的操作,但是隨之也出現(xiàn)了另外一個(gè)問題,如果pageContext和request中有同名變量,但是我想取得request中的變量該如何是好呢?這就需要為el表達(dá)式引入作用域的概念了。 ${pageScope.username}
${requestScope.username}
我們可以直接訪問13-04這個(gè)應(yīng)用,看看el表達(dá)式支持的所有對(duì)象。 ![]() 下面我們分別對(duì)每個(gè)作用域?qū)ο筮M(jìn)行講解。 表 13.1. el中的作用域
以上都是死記硬背的東西,建議實(shí)際用到的時(shí)候翻看一下就好了,演示代碼都放在13-04下,為了獲得param和cookie還要點(diǎn)擊一下最下邊的連接才可以。 el表達(dá)式中支持java中所有的操作符,并且還有一些擴(kuò)展,下面我們簡(jiǎn)要做一下對(duì)照。 表 13.3. 比較運(yùn)算
下面上所有運(yùn)算符的顯示結(jié)果,順便說一下如果想在jsp中顯示${name}而不讓jsp把它當(dāng)作el計(jì)算出來,可以寫成\${name},這樣最后顯示的結(jié)果就是${name}了。 ![]() |
|
|