${sessionScope.user.sex}
${sessionScope.user["sex"]}
page --> request --> session --> applicaion
page -- pageScope
request -- requestScope
Session -- sessionScope
application -- applicationScope
el表达式与<% %>是不能互用的。
<% int i=123;
pageContext.setAttribute("i", i);
%>
${i} //这样可交互数据了
${user.userName}
${user.address.city}
${user.friends[0]}
EL 访问集合属性
el不能访问set集合,因为它无序也无键。
<%
List list;
lisp.add("aaa");
lisp.add("bbb");
HashMap map;
map.put("1", "aaa");
map.put("2", "bbb");
String[] str = enw String[]{"111", "2222", "333"};
pageContext.setAttribute("list", list);
pageContext.setAttribute("map", map);
pageContext.setAttribute("arr", arr);
%>
${ pageScope.arr[0] }
${ pageScope.list[1] } //与数组一样
${ pageScope.map["key"] }
${ param.count+20 }
// count += 20;
${ param.name }
${ paramValues.name }
${ cookie.userCountry }
${ header["User_Agent"] }
-- initParam
<context-param>
<param-name>webName</param-name>
<param-value>Hi</param-value>
</context-param>
${ initParm.webName }
${ pageContext.request.contextPath }
${ pageContext.request.hostAddr}
${ 17/5 } //3.4
${ 17 div 5 } //3.4
${ 5==5 } //true
${ param.password1 == param.password2 }
Empty 运算符
${ empty param.name }
${ A?B:C }
自定义标签
<%@ taglib uri="" prefix="" %>
-----------------------------------------------------
自定义标签:
tld --> 标签描述文件
1、符合XML规则,要有一个惟一的根
<taglib>
</taglib>
2、<short-name>
3、taglib中定义了一系列的tag
<my: tag>
tagClass 指定了当前标签的处理类,要写带包名的类名
content-type:指定了标签的体是有还是没有
empty表示有,JSP表示有
定义一系列的attribute,其中又包括name,required,是否接收EL表达式
在JSp中引入tld
方式一:<%@ taglib uri="/WEB-INF/xx.tld" prefix="c"%>
处理类:
1.需要继承TagSupport, BodyTagSupport
2.doStartTag(),doEndTag(),doAfterBody()
由容器解析到相应标签位置时会自动调用
返回值:EVAL_BODY_INCLUDE,SKIP_BODY,EVAL_BODY_AGAIN,EVAL_PAGE,SKIP_PAGE
在标签里有属性时,在处理类里也要定义一个同名的属性.
至少要为该属性设置一个set方法.当解析到这里会自动调用set方法.
getParent();//获得父标签的对象.
getPreviousout();//获得上一层的输出流
getBodyContent();//得到的是一个流,可用getString()将其转化成字符串
-----------------------------------------------------------------------
BeanUtils 工具类
BeanUtils.getProperty(obj, property);