新建pageContextDemo1.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <%--内置对象--%> <% pageContext.setAttribute("name1","falltime01");//保存的数据只在一个页面中有效 request.setAttribute("name2","falltime02");//保存的数据只在依次请求中有效,请求转发后会携带这个数据 session.setAttribute("name3","falltime03");//保存的数据只在一次会话中有效,从打开浏览器到关闭浏览器 application.setAttribute("name4","falltime04");//保存的数据只在服务器中有效,从打开浏览器到关闭浏览器,从打开服务器到关闭服务器(ServletContext) %> <%--脚本片段中的代码会被原封不动的生成到.jsp.Java文件中,这里必须保证Java语法的正确性--%> <% // String name1 = (String)pageContext.getAttribute("name1"); String name2 = (String)pageContext.findAttribute("name2"); String name3 = (String)pageContext.findAttribute("name3"); String name4 = (String)pageContext.findAttribute("name4"); String name5 = (String)pageContext.findAttribute("name5"); %> <%--使用EL表达式输出--%> <h1>取出的值为:</h1> <h3>${name1}</h3> <h3>${name2}</h3> <h3>${name3}</h3> <h3>${name4}</h3> <h3><%=name5%></h3> </body> </html>
新建pageContextDemo2.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <%--脚本片段中的代码会被原封不动的生成到.jsp.Java文件中,这里必须保证Java语法的正确性--%> <% // String name1 = (String)pageContext.getAttribute("name1"); String name2 = (String)pageContext.findAttribute("name2"); String name3 = (String)pageContext.findAttribute("name3"); String name4 = (String)pageContext.findAttribute("name4"); String name5 = (String)pageContext.findAttribute("name5"); %> <%--使用EL表达式输出--%> <h1>取出的值为:</h1> <h3>${name1}</h3> <h3>${name2}</h3> <h3>${name3}</h3> <h3>${name4}</h3> <h3><%=name5%></h3> </body> </html>
结果(需要先请求一下pageContextDemo1.jsp然后再请求pageContextDemo2.jsp,不然都取不到值)
新建pageContextDemo3.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <%-- public void setAttribute (String name, Object attribute, int scope) { switch (scope) { case PAGE_SCOPE: mPage.put (name, attribute); break; case REQUEST_SCOPE: mRequest.put (name, attribute); break; case SESSION_SCOPE: mSession.put (name, attribute); break; case APPLICATION_SCOPE: mApp.put (name, attribute); break; default: throw new IllegalArgumentException ("Bad scope " + scope); } } --%> <%--内置对象--%> <% pageContext.setAttribute("name1","falltime01", PageContext.REQUEST_SCOPE); //等价于 request.setAttribute("name1","falltime01"); %> </body> </html>
新建pageContextDemo4.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <% pageContext.forward("/index.jsp"); // pageContext封装了此方法等价于request.getRequestDispatcher("/index.jsp").forward(request, response); %> </body> </html>
request:客户端向服务器发送请求,产生的数据,用户看完就没用了,比如:新闻
session:客户端向服务器发送请求,产生的数据,用户用完一会还有用,比如:购物车
application:客户端向服务器发送请求,产生的数据,一个用户用完了,其他用户还可能使用,比如:聊天数据