三者概述

requset概述:

request是表示一个请求,只要发出一个请求就会创建一个request

用处:常用于服务器间同一请求不同页面之间的参数传递,常应用于表单的控件值传递。

session概述:

服务器会为每个会话创建一个session对象,所以session中的数据可供当前会话中所有servlet共享。

会话:用户打开浏览器会话开始,直到关闭浏览器会话才会结束。一次会话期间只会创建一个session对象。

用处:常用于web开发中的登陆验证界面(当用户登录成功后浏览器分配其一个session键值对)。

application概述:

Application属性范围值,只要设置一次,则所有的网页窗口都可以取得数据。

ServletContext在服务器启动时创建,在服务器关闭时销毁,一个JavaWeb应用只创建一个ServletContext对象,所有的客户端在访问服务器时都共享同一个ServletContext对象;

用处:ServletContext对象一般用于在多个客户端间共享数据时使用;

具体案例

我写了一个小demo,大家可以看一下,下面这是代码。

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException; @WebServlet("/getCount")
public class CountServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest requset, HttpServletResponse response) throws ServletException, IOException {
// super.service(req, resp); Integer countRequset = (Integer) requset.getAttribute("count");
if (countRequset==null) {
countRequset = 0;
}
countRequset++;
requset.setAttribute("count",countRequset);
System.out.println("ok"); Integer countSession = (Integer) requset.getSession().getAttribute("count");
if (countSession==null) {
countSession = 0;
}
countSession++;
requset.getSession().setAttribute("count",countSession); Integer countContext = (Integer) requset.getSession().getServletContext().getAttribute("count");
if (countContext==null) {
countContext = 0;
}
countContext++;
requset.getSession().getServletContext().setAttribute("count",countContext); requset.getRequestDispatcher("WEB-INF/page/count_page.jsp").forward(requset,response); }
}

我在代码中申明了三个变量,都是count,不同就在于不是同一个空间中的变量,我们来浏览器看看效果:

  • 这是在一个浏览器中,第一次进入之后的效果。

  • 我在这个浏览器中刷新8次:



    可以看到,每次的请求都是1,其他的随着我的刷新次数而增加。

  • 我在其他浏览器输入相同的访问网址:



    可以看到,请求和会话都重置,只有服务器的次数是上一次的再加1。

上面是具体效果,下面我们来详细的看看他们

三者共同作用

三者共同目的:

requset,session,application三者存在的意义就是前后端进行数据传输

三者使用各自的作用域进行传递数据和存储数据

三者共有的常用属性:

getAttribute()与setAttribute()

后端要通过getAttribute()进行数据的获取以及通过setAttribute()进行设置属性,然后数据被前端使用。

所以三者都可以通过 setAttribute() 赋值和 getAttribute() 取值。

同时还有其他类如removesetAttribute()等属性,不做详解。

三者主要区别

三者作用域不同

作用域大小为

requset(请求作用域)< session(会话作用域) < application(全局作用范围)

request:

第一个作用域是request,他仅在当前请求中有效。

作用域:一次HTTP请求到服务器处理结束,返回响应的整个过程。

session:

第二个作用域是session,他在当前会话有效。

作用域:当一台电脑上的同意浏览器对服务器进行多次访问的时候,在这多次访问之间传递信的信息就是session作用域的范围。

application:

第三个作用域是application,它所在的所有应用程序中都有效。

作用域:如果不进行手工删除,它们将一直可以使用,也就是当服务器开始到服务器结束的这段时间,application作用域中存储的数据都是有效的,所有用户均可使用。

request、session以及application这3个对象的作用域范围是逐个增加的:

  • request只在一个请求的范围内;
  • session 是在浏览器窗口的范围内;
  • application则是在整个服务器的运行过程中。

作用域选择不正确会有什么后果:

  • 作用域小了:不能在需要的场景获得数据。
  • 作用域大了:内存浪费。

如何正确的选择作用域

  • request:跟当前操作功能相关
  • session: 跟用户信息相关
  • application:跟项目全局信息相关----->京东配送地址

注意事项(备注&扩展)

request

request对象内数据存活范围是当客户端向服务器发送一个请求,服务器向客户端返回一个响应之后,该请求对象就被销毁了。之后再次发送的请求也无法获取之前request对象存放的任何数据。

session

session是服务器端对象,保存在服务器端。并且服务器可以将创建session后产生的sessionid通过一个cookie返回给客户端,以便下次验证。(session底层依赖于cookie)

它从浏览器发出第一个HTTP请求即可认为是会话的开始,但是会话结束的时间是不确定的,因为在浏览器关闭的时候并不会通知服务器,一般Tomcat设置的默认时间为120分钟,也可以进行设置,或者是强制结束当前会话。

其他

这三者的setAttribute与getAttribute方法都是在服务器端内部执行的,客户端不知道服务器端是否执行过这两个方法。

是学生,正在学习,自己遇到的问题写点博客,如有错误,请谅解,如果发现了错误可以评论一下。

Java Web中requset,session,application 的作用域及区别的更多相关文章

  1. java web 中分布式 session 的实现

    已经有现成的库现实现分布式的 session 管理: 1.memcached-session-manager. 2.tomcat-redis-session-manager. 3.spring-ses ...

  2. java web中的session属性范围和request属性范围

    首先必需要了解client跳转和server端跳转的差别: client跳转: response.sendRedict(String path).地址栏发生改变. 不能传递request属性. ser ...

  3. 解决java web中safari浏览器下载后文件中文乱码问题

    解决java web中safari浏览器下载后文件中文乱码问题 String fileName = "测试文件.doc"; String userAgent = request.g ...

  4. Java Web 中使用ffmpeg实现视频转码、视频截图

    Java Web 中使用ffmpeg实现视频转码.视频截图 转载自:[ http://www.cnblogs.com/dennisit/archive/2013/02/16/2913287.html  ...

  5. Java Web 中 过滤器与拦截器的区别

    过滤器,是在java web中,你传入的request,response提前过滤掉一些信息,或者提前设置一些参数,然后再传入servlet或者struts的 action进行业务逻辑,比如过滤掉非法u ...

  6. JAVA WEB 中的编码分析

    JAVA WEB 中的编码分析 */--> pre.src {background-color: #292b2e; color: #b2b2b2;} pre.src {background-co ...

  7. Java web中常见编码乱码问题(一)

    最近在看Java web中中文编码问题,特此记录下. 本文将会介绍常见编码方式和Java web中遇到中文乱码问题的常见解决方法: 一.常见编码方式: 1.ASCII 码 众所周知,这是最简单的编码. ...

  8. Java web中常见编码乱码问题(二)

    根据上篇记录Java web中常见编码乱码问题(一), 接着记录乱码案例: 案例分析:   2.输出流写入内容或者输入流读取内容时乱码(内容中有中文) 原因分析: a. 如果是按字节写入或读取时乱码, ...

  9. 深入分析Java Web中的编码问题

    编码问题一直困扰着我,每次遇到乱码或者编码问题,网上一查,问题解决了,但是实际的原理并没有搞懂,每次遇到,都是什么头疼. 决定彻彻底底的一次性解决编码问题. 1.为什么要编码 计算机的基本单元是字节, ...

  10. java web中servlet、jsp、html 互相访问的路径问题

    java web中servlet.jsp.html 互相访问的路径问题 在java web种经常出现 404找不到网页的错误,究其原因,一般是访问的路径不对. java web中的路径使用按我的分法可 ...

随机推荐

  1. IP地址最后一位斜杠是什么意思?比如192.168.1.10/27?还有IP地址和子网掩码相加得到的网络地址是什么意思

    IP地址最后一位斜杠是什么意思?比如192.168.1.10/27?还有IP地址和子网掩码相加得到的网络地址是什么意思 IP地址最后一位斜杠是什么意思?比如192.168.1.10/27?还有IP地址 ...

  2. Odoo自建应用初步总结(一)

    学习了<Odoo快速入门与实践 Python开发ERP指南>(刘金亮 2019年5月第1版 机械工业出版社)第6章自建应用入门后进行一下总结. 因为本书作者使用Odoo11,而目前最新版本 ...

  3. 【全网最全】springboot整合JSR303参数校验与全局异常处理

    一.前言 我们在日常开发中,避不开的就是参数校验,有人说前端不是会在表单中进行校验的吗?在后端中,我们可以直接不管前端怎么样判断过滤,我们后端都需要进行再次判断,为了安全.因为前端很容易拜托,当测试使 ...

  4. Django manage.py 命令详解

    manage.py 查看命令的作用的语句 C:\Users\Administrator> python manage.py help Type 'manage.py help <subco ...

  5. Promtail Pipeline 日志处理配置

    转载自:https://mp.weixin.qq.com/s?__biz=MzU4MjQ0MTU4Ng==&mid=2247492144&idx=1&sn=a1cc13a642 ...

  6. 4_Spring

    一. Spring Spring的基本组成: 1.最完善的轻量级核心框架. 2.通用的事务管理抽象层. 3.JDBC抽象层. 4.集成了Toplink, Hibernate, JDO, and iBA ...

  7. Node.js(三)Lodash

    npm init -y(初始化项目) npm i --save lodash(引入lodash) const _=require("lodash"); let stus=[ {id ...

  8. 自学Spring

    Spring官网地址https://spring.io/ springManven官网地址:https://mvnrepository.com------------------------ spri ...

  9. EFCore (三)悲观锁 和 乐观锁

    原理 UPDATE [Person] SET [FirstName] = @p1 WHERE [PersonId] = @p0 AND [LastName] = @p2; 在 SaveChanges ...

  10. 有人相爱,有人夜里开车看海,有人leetcode第一题都做不出来。

    第一题 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标. 你可以假设每种输入只会对应一个答案.但是,数 ...