page,request,session和application有啥区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了page,request,session和application有啥区别相关的知识,希望对你有一定的参考价值。

application:全局作用范围,整个应用程序共享,就是在部署文件中的同一个webApp共享,生命周期为:应用程序启动到停止。

session:会话作用域,当用户首次访问时,产生一个新的会话,以后服务器就可以记住这个会话状态。生命周期:会话超时,或者服务器端强制使会话失效。

request:请求作用域,就是客户端的一次请求。

page:一个JSP页面。

以上作用范围使越来越小, request和page的生命周期都是短暂的,他们之间的区别就是:一个request可以包含多个page页(include,forward以及filter)。举个简单的例子:

jsp1.jsp
<jsp:useBean id="beanID" class="xxx .xxx.BeanClass" scope="request" />
<jsp:include page="jsp2.jsp" />
jsp2.jsp
<jsp:getProperty name="beanID" property="sample" />

运行jsp1.jsp可以正常显示数据,因为作用范围是request,相当于调用了request.setAttribute()方法,jsp2页通过request.getAttribute来获得这个bean.如果把request改为page,就会抛出NullPointerExceptioin.

一个请求可以跨好几个JSP(include和forword)和Servlet(如filter).不过这里有一个需要注意的就是区别<jsp:include> 和<%@ include %>.如果上面的<jsp:include page="jsp2.jsp" />改为<%@ include file="jsp2.jsp" %>,即使scope为page也是正确的,<%@ include %>是编译时包含,<jsp:include>是运行时包含.前者就相当于宏,编译时替代,后者相当于函数,运行时返回.
参考技术A page指当前页面,在一个jsp页面里有效 ;
request 指从http请求到服务器处理结束,返回响应的整个过程,在这个过程中使用forward方式跳转多个jsp,在这些页面里你都可以使用这个变量;
session 有效范围当前会话,从浏览器打开到浏览器关闭这个过程;
application它的有效范围是整个应用;
总体来说,就是作用域不同。

JSP最常用的五种内置对象(out,request,response,session,application)

为了简化开发过程,JSP提供了一些内置对象,它们由容器实现和管理。开发者在JSP页面中无需声明无需实例化就可使用。主要有out,request,response,session,application,pageContext,page,config和exception这九个,其中前五个最常用。

out


out对象为客户打开输出流,向客户端发送输出流。简单来说就是向客户端输出数据。

常用方法:

out.print("hello world");   //输出到浏览器
out.print(23.5f);           //同上,可输出基本类型,字符数组,日期等多种类型
out.println("hello world"); //输出并换行
out.isAutoFlush();          //判断是否自动刷新缓冲区
out.getBufferSize();        //获取缓冲区大小
out.getRemaining();         //获取缓冲区剩余空间大小
out.flush();                //清除缓冲区里的数据,并输出到客户端显示
out.clear();                //清除缓冲区里的数据,不输出到客户端
out.close();                //关闭输出流

 

request


当用户访问一个服务器页面时,就会提交一个HTTP请求。JSP内置的request对象封装了用户提交的信息,开发者可以通过从中获取用户提交表单中的信息。

常用方法示例:

request.getMethod();                    //获取请求方式,通常是get或post
request.setAttribute("age",20);         //设置一个叫age的属性,并赋值为20
request.getAttribute("age");            //获取上面的age属性的值,若属性不存在,返回null
request.removeAttribute("age");         //删除name为age的属性值
request.getAttributeNames(); //返回所有属性的名字集合 request.getCaracterEncoding(); //返回编码格式,通常在解决乱码时候用 request.getParameter("user"); //用户提交的form中有一个name为"user"的input框(结点),可以用这种方式获取input框(结点)的内容 request.getParameterValues("hobbies"); //用户提交的form中有一个name为"hobbies"的复选框,可以获取到其中选中部分的值

 

response


 服务器收到用户发来的请求后,会做出响应。response对象封装了JSP响应信息,被发送到客户端。

因为输出流是缓冲的,所以可以设置HTTP状态码(常见的404,500,504等)和response头。

常用方法:

response.addCookie(Cookie cook);              //添加一个用于保存用户信息的Cookie对象
response.addHeader(String name,String value); //添加信息到头文件中,如果已存在就覆盖
response.containsHeader(String name);         //判断指定名字的HTTP头是否已存在
response.sendError(int);                      //返回错误信息
response.sendRedirect(String location);       //重定向
response.setHeader(String name,String value); //设置指定名字的HTTP文件头的值。

 

session


敲黑板!!咣咣咣!!!这个很重要!

很多朋友对session都有种既熟悉有陌生的感觉,这个词在开发中太常见了!但是很多地方的理解都很模糊。

这里说的session是用来保存每个用户信息的内置对象,以便跟踪每个用户的操作状态

为什么要跟踪用户状态呢?因为HTTP是一种无状态协议,当客户向服务器发送一个请求(request)后,服务器返回一个(response),连接就关闭了(故也称为一次性连接)。当下一次连接时,服务器无法判断当前连接与之前的是否是同一用户。(例如用户在同一个网站中访问不同的页面时,总不能访问一个页面登录一次吧。。。)这时就用到了session来记录有关连接的信息。

session从用户打开浏览器与服务器建立连接开始,到用户关闭浏览器离开服务器结束。服务器将sessionID写入到浏览器的Cookie中,作为这个用户的唯一标识。每个用户都有自己的sessionID,当用户退出系统时,session会自动消失。

session的信息保存在服务端,session的ID保存在客户端Cookie中。如果客户端禁用Cookie,同一用户在不同页面间的session对象有可能是不同的

常用方法,getAttribute(),setAttribute(),removeAttribute()等,均是对对象中的属性进行增删改查,在此就不一一赘述了

举个例子,通过session我们可以构造一个简单的购物车功能模块。

1.用户登录购物商城,JSP引擎自动创建session对象

2.向session中添加两个属性goods(购买的商品),price(价格),方式如下

session.setAttribute("goods"," ");

session.setAttribute("price"," ");

3.在不同的页面(生活用品类,食物类)选择商品添加到购物车,每一次添加商品,就向goods和price中追加内容,例如

session.setAttribute("goods",session.getAttribute("goods")+"鸡蛋");//其中session.getAttribute("goods")可以从session中获取已添加到购物车的商品

session.setAttribute("price",session.getAttribute("price")+15);//其中session.getAttribute("price")可以从session获取当前购物车中所有商品的价格

 

application


application对象为所有的用户保存共享信息。

虽然application和session都可以为用户保存信息,但是这两个是不同的:

1.服务器为每个用户创建一个session对象,每个人的session都是不同的;而application是为多个应用程序保存公用信息,对于一个容器而言,所有用户的application对象是同一个

2.session和application的生命周期不同。session的生命周期是从用户打开浏览器建立与服务器的连接开始,到关闭浏览器离开服务器结束的这段时间;而application的生命周期是从服务器启动服务器关闭的这段时间。

应用场景示例:

例如网站上常见的本站点击量统计,就可以使用application来实现。定义一个字段count用来计数,每次点击就++,然后将count保存在application对象中,application.setAttribute("Counter",count);获取当前点击量时,application.getAttribute("Counter")即可。

 


以上是关于page,request,session和application有啥区别的主要内容,如果未能解决你的问题,请参考以下文章

JSP中page,request,session,application作用范围

JSP属性的四种保存范围(page request session application)

四大作用域:application,session,request,page

java page对象和pageContext对象

Python Day71 django分页及session介绍

python之路_day71_django分页及session介绍