【Javaweb】比较PageContext、request、session、application区别

比较PageContext、request、session、application区别

先给出结论(取自狂神的javaweb)

pageContext.setAttribute("name1","秦疆1号"); //保存的数据只在一个页面中有效
request.setAttribute("name2","秦疆2号"); //保存的数据只在一次请求中有效,请求转发会携带这个数据
session.setAttribute("name3","秦疆3号"); //保存的数据只在一次会话中有效,从打开浏览器到关闭浏览器
application.setAttribute("name4","秦疆4号");  //保存的数据只在服务器中有效,从打开服务器到关闭服务器

request:客户端向服务器发送请求,产生的数据,用户看完就没用了,比如:新闻,用户看完没用的!

session:客户端向服务器发送请求,产生的数据,用户用完一会还有用,比如:购物车;

application:客户端向服务器发送请求,产生的数据,一个用户用完了,其他用户还可能使用,比如:聊天数据;

1、在当前页面进行存值和取值

编写一个PageContextDemo01.jsp


<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Title



<%--内置对象--%>
<%  pageContext.setAttribute("name1","donric1");
    request.setAttribute("name2","donric2");
    session.setAttribute("name3","donric3");
    application.setAttribute("name4","donric4");
%>

<%  String name1 = (String) pageContext.findAttribute("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表达式输出--%>

${name1}

${name2}

${name3}

${name4}

${name5}

<%=name5%>

启动tomact,在地址栏输入完整文件地址

结果:

【Javaweb】比较PageContext、request、session、application区别_第1张图片

原因:name5是不存在的,所以内有取出来,但是其他几个都顺利取出,那就是在当前页面对这几个容器进行存数据操作之后,都可以在当前页面进行取数据操作。

补充:这里的EL表达式也可以换成<%=name5%>这个样子来输出数据,但是有一个区别,就是使用EL表达式的话,那么如果没找到数据就什么都不输出,而<%=name5%>没找到数据的话就会输出一个null。

2、在不同页面进行存值和取值

再编写一个PageDemo02.jsp


<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Title



<%  String name1 = (String) pageContext.findAttribute("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表达式输出--%>

${name1}

${name2}

${name3}

${name4}

${name5}

然后我们再启动tomcat,然后先访问一下之前那个PageContextDemo01.jsp,之后再访问一下,PageDemo02.jsp

结果:

【Javaweb】比较PageContext、request、session、application区别_第2张图片

只出现了两个,让我们看一下是对应的哪两个。是 session和application,也就是说明这两个时可以跨页面存储数据的

3、进行页面转发

这个想法就是直接在PageContextDemo01.jsp上请求转发到PageDemo02.jsp

做法就是在PageContextDemo01.jsp加上一行代码

<%pageContext.forward("/PageDemo02.jsp");%>

,然后启动tomcat,然后访问PageContextDemo01.jsp,然后请求就会转发到PageDemo02.jsp

结果:

【Javaweb】比较PageContext、request、session、application区别_第3张图片

这些是request、session、application容器所存入的值。

总结

通过上面的实例也可以看出

PageContext在当前页面存值,那么也就只能在当前页面取值,转到别的页面就会被清除数据,就不可以取出值。

request可以通过请求转发到其他页面,那么也就是可以在当前页面存值,请求转发到的页面也就保存了request存的这些数据,没有被请求转发的页面就会被清除数据。

text在当前页面存值,那么也就只能在当前页面取值,转到别的页面就会被清除数据,就不可以取出值。

request可以通过请求转发到其他页面,那么也就是可以在当前页面存值,请求转发到的页面也就保存了request存的这些数据,没有被请求转发的页面就会被清除数据。

session和application都可以在当前页面存值,然后再其他页面进行取值,而session会随着浏览器关闭而被清除数据,而application会随着服务器的关闭而被清除数据。

你可能感兴趣的:(JAVAWEB)