JSP内置对象
1、PageContext
2、Request
3、Response
4、Session
5、Application(ServletContext)
6、out
7、config
8、exception
9、page
但常用的只包括1、2、4、5
<%
application.setAttribute("name1","11");
pageContext.setAttribute("name2","22");
request.setAttribute("name3","33");
session.setAttribute("name4","44");
%>
<%
String name1 = (String) pageContext.findAttribute("name1");
String name2 = (String) pageContext.findAttribute("name2"); //在IDEA中显示灰色不代表未使用
String name3 = (String) pageContext.findAttribute("name3");
String name4 = (String) pageContext.findAttribute("name4");
String name5 = (String) pageContext.findAttribute("name5"); //不存在
%>
<h1><%= name5 %></h1>
<h2>${name1}</h2>
<h3>${name2}</h3>
<h4>${name3}</h4>
<h5>${name4}</h5>
在页面中的结果为:
需要注意的是,由于我这边的Servlet版本为4.0.0,所有一开始未能识别EL表达式,解决办法只需要在jsp中添加一行语句,就能识别EL表达式了。
<%@ page isELIgnored="false" %>
JSP中数据的作用域
pageContext.setAttribute(); // 保存的数据只在一个页面中有效
request.setAttribute(); // 保存的数据在一次请求中有效,请求转发会携带这个信息
session.setAttribute(); // 保存的数据在一次会话中有效,从打开浏览器到关闭浏览器
application.setAttribute(); //保存的数据只在服务器中有效,从打开浏览器到关闭浏览器
request:客户端给服务器发送请求时产生的数据,用户使用完后就没用了,但可以通过pageContext.forward()对页面进行转发,此时request中保存的数据仍能在新页面中获取。
session:客户端给服务器发送请求时产生的数据,用户使用完了还可能有用,在另一个页面中仍能获取到它的值,注意是同一用户,如果你使用两个浏览器进行访问就获取不到该值了。
application:客户端给服务器发送请求时产生的数据,一个用户使用完毕了,另一个用户还可能使用,同样能在另一个页面获取到它的值。使用多个浏览器仍能获取到该值。
pageContext:客户端给服务器发送请求时产生的数据,该数据默认只在当前页面有效,但可以通过其重载方法来设置其作用域,例如pageContext.setAttribute(“name2”,“22”, …),在省略号的位置可以输入1~4,分别对应:
APPLICATION_SCOPE application对象
PAGE_SCOPE page对象
REQUEST_SCOPE request对象
SESSION_SCOPE session对象
从而实现到其他常用内置对象的作用域。