與bean相關的標准動作:
<jsp:useBean id="person" class="foo.Person" scope="request" />
<jsp:getProperty name="person" property="name" />
<jsp:setProperty name="person" property="name" value="Fred" />
jsp:useBean動作在沒有person屬性時會自動創建一個person屬性,並賦為null
jsp:useBean體:www.2cto.com
<jsp:useBean id="person" class="foo.Person" scope="request">
<jsp:setProperty name="person" property="name" value="Fred" />
</jsp:useBean>
jsp:setProperty在jsp:useBean體中時,只有person屬性不存在時才為新創建的屬性設置屬性,並不改變現存的屬性值
建立多態的bean引用:
<jsp:useBean id="person" type="foo.Person" class="foo.Empolyee" scope="request" />
如果使用了type,但沒有class,bean必須已經存在
如果使用了class(有或沒有type),class不能使抽象類,而且必須有一個無參數的公共構造函數
利用param屬性,可以將屬性的性質設置為一個請求參數的值,例如:
<jsp:useBean id="person" class="foo.Person" scope="request">
<jsp:setProperty name="person" property="name" param="userName" />
</jsp:useBean>
如果請求參數名與bean中的性質名相同,可以不用指出param屬性,例如:
<jsp:useBean id="person" class="foo.Person" scope="request">
<jsp:setProperty name="person" property="name" />
</jsp:useBean>
如果所有請求參數名都與bean性質匹配,還可以如下這麼干:
<jsp:useBean id="person" class="foo.Person" scope="request">
<jsp:setProperty name="person" property="*" />
</jsp:useBean>
bean標記會自動轉換基本類型和String類型的性質
如果使用腳本,就不會完成自動轉換,即是表達式在<jsp:setProperty>標記中也會失敗
利用<jsp:getProperty>只能訪問bean的性質,不能訪問嵌套性質
--------------------------------------------------------------------
EL表達式:形如 ${person.name}
表達式中第一個變量名可以使一個隱式對象或屬性
EL隱式對象包括:pageScope,requestScope,sessionScope,applicationScope,param,paramValues,header,headerValues,cookie,initParam,pageContext
屬性包括:任意作用域中的屬性,包括page,request,session,application
EL隱式對象除了pageContext都是映射對象,pageContext是對pageContext對象的實際引用
用點號"."訪問性質和映射值,如${person.name},點號右邊變量必須符合java變量名命名規范,該變量是一個映射鍵或者性質
用[]號訪問性質或映射鍵,除了點號能訪問的之外,[]還能訪問數組和List中的內容,並且數組和List中的String索引會強制轉換為int,例如:
${favoriteFood[0]}和${favoriteFood["0"]都可訪問
使用[]時,如果[]裡沒有引號,容器會計算括號中的內容,搜說與該名字綁定的屬性,並替換為這個屬性的值
中括號中可以使用嵌套表達式,例如:${musicMap[MusicType[0]]}
param隱式對象:得到對應參數名的參數,例如${param.food}
paramValues隱式對象:得到對應參數名的多個參數,例如${paramValues.food[0]},${paramValues.food[1]}
得到host首部:${header["host"]}或者${header.host}
得到http請求方法:不是${requestScope.method}而是${pageContext.request.method}
requestScope只是請求作用域屬性的一個Map,而不是請求對象本身
作用域隱式對象可以解決命名沖突的問題,還可以解決屬性名中有點號的問題,例如:一個屬性叫做foo.person,${foo.person.name}就找不到你想找的性質,因為容器吧foo當做屬性名,用隱式對象解決,${requestScope["foo.person"].name},ok。
得到cookie值,例如:${cookie.userName.value}
得到上下文初始化參數,例如:${initParam.mainEmail},注意,initParam表示上下文初始化參數,不是servlet初始化參數