JSP内置对象作用域
-
page、request、session、application
-
都具有
setAttribute、getAttribute
方法来存取数据 -
page
作⽤域:对应的内置对象是pageContext
。 -
request
作⽤域:对应的内置对象是request
。 利用转发跳转是同一个请求,重定向是不同的请求。 -
session
作⽤域:对应的内置对象是session
。 -
application
作⽤域:对应的内置对象是application
。 -
page < request < session < application
-
page
只在当前⻚⾯有效。 -
request
在⼀次请求内有效。 转发可以,重定向不可以。 -
session
在⼀次会话内有效。 转发和重定向都可以。 -
application
对应整个 WEB 应⽤的。Tomcat
不关闭,都可以进行存取数据。 -
网站访问量统计
<%
Integer count = (Integer) application.getAttribute("count");
if (count == null){
count = 1;
application.setAttribute("count",count);
}else{
count++;
application.setAttribute("count",count);
}
%>
您是当前的第<%=count%>位访客
EL表达式
-
Expression Language
表达式语⾔,替代JSP
⻚⾯中数据访问时的复杂编码,可以⾮常便捷地取出域对象(pageContext、request、session、application)
中保存的数据,前提是⼀定要先setAttribute,
EL
就相当于在简化getAttribute
-
语法:
${变量名}
变量名就是setAttribute
对应的key
值。
<%
String name = (String) request.getAttribute("name");
%>
<%=name%>
<hr/>
${name}
//二者功能相同
-
1、EL 对于 4 种域对象的默认查找顺序:
-
pageContext -》request-〉session-》application
-
按照上述的顺序进⾏查找,找到⽴即返回,在
application
中也⽆法找到,则返回null
-
2、指定作⽤域进⾏查找
pageContext
:${pageScope.name}
request
:${requestScope.name}
session
:${sessionScope.name}
application
:${applicationScope.name}
数据级联:
<%
// pageContext.setAttribute("name","page");
// request.setAttribute("name","request");
// session.setAttribute("name","session");
// application.setAttribute("name","application");
User user = new User(1,"张三",86.5,new Address(1,"⼩寨"));
System.out.println(user.toString());
pageContext.setAttribute("user",user);
%>
<table>
<tr>
<th>编号</th>
<th>姓名</th>
<th>成绩</th>
<th>地址</th>
</tr>
<tr>
<td>${user.id}</td>
<td>${user.name}</td>
<td>${user.score}</td>
<td>${user.address}</td>
</tr>
</table>
${user["id"]}
:也可以取出,不如第一种常用
EL执行表达式
- 写到一个花括号里面
${num1&&num2}
&& || ! < > <= <= ==
&& and
|| or
! not
== eq
!= ne
< lt
> gt
<= le
>= ge
empty 变量为 null,⻓度为0的String,size为0的集合
${empty num3}