eg:上一个页面: <% <--创建一个对象-->Student stu = new Student(); stu.setName("zk");
<--把stu对象放在request对象中--> request.setAttribute("s",stu);
<--请求转发--> request.getRequestDispatcher("/next.jsp").forward(request,response);
%>
下一个页面: <% Student stu = (Student) request.getAttribute("s");
out.print(stu.getName());
%>
如果用EL表达式,则 ${s.name}即可 .name是getName()方法——属性导航(反射)
具体功能:
a. 获取数据 :EL表达式只能获取存在4个作用域中的数据
${u} 原理: pageContext.findAttribute("u");
EL获取对于Null这样的数据,在页面中表现为空字符串
${u.name} =u.getName()方法 .运算符相当于调用了getter方法,后面跟的属性名。
[]运算符:点能做的,它也能做;它能做得,点不一定能做
${u.name}==${u['name']}==${u["name"]}
比如,我们用ArrayList或者HashMap存值 request.setAttribute("list",list); ${list[0]} 只能这样取值
b. 运算
empty判断EL表达式内元素是否为空
String str=""; request.setAttribute("str",str);
${empty str} <br/> ----返回值为true
三目运算符
${ empty 判断句?true为前面表达式:false为后面表达式}
<% pageContext.setAttribute("s",1)%>;
<input type="radio" name="sex" ${s==1?"checked='checked'":""} />男
<input type="radio" name="sex" ${s==0?"checked='checked'":""} />女
<--前面输入类型为单选按钮,若为表达式则选中输出-->
c. 隐式对象
EL隐式对象引用名称 类型 JSP内置对象名称 说明
pageContext java.servlet.jsp.PageContext pageContext 一样的
pageScope java.util.Map<String,Object> 没有对应的 pageContext范围中存放的数据页面范围
requestScope java.util.Map<String,Object> 。。。 请求范围数据
sessionScope java.util.Map<String,Object> 。。。 会话范围数据
applicationScope java.util.Map<String,Object> 。。。 应用范围数据
param java.util.Map<String,String> 。。。 一个请求参数
paramValues java.util.Map<String,String[]> 。。。 重名请求参数
header java.util.Map<String,String> 。。。 一个请求消息头
headerValues java.util.Map<String,String[]> 。。。 重名请求消息头
initparam java.util.Map<String,String> 。。。 web.xml中全局参数
cookie java.util.Map<String,Cookie> 。。。 key.cookie对象的name
eg:
${param.userName}<-- ${param.userName}==request.getParamemter("userName") -->
获取页面路径:<form action ="${pageContext.request.contextPath} / sucess.jsp" method="post">user、pwd</form>