Servlet三大作用域


一、request

生命周期
创建客户端向服务器发送一次请求,服务器就会创建request对象.
销毁服务器对这次请求作出响应后就会销毁request对象.

有效仅在当前请求中有效。
作用常用于服务器间同一请求不同页面之间的参数传递,常应用于表单的控件值传递。

获取表单提交参数: request.getParameter()

//从login.jsp中获取用户名和密码 
String username = request.getParameter("username"); 
String password = request.getParameter("password"); 
String imageText = request.getParameter("imageText");

传值到表单: request.setAttribute()

if(user == null) {     
//用户名和密码不匹配     
request.setAttribute("msg", "用户名和密码不匹配!");     
return/jsp/login.jsp”;
 }

二、session

适用场景登录时,存取登录的用户信息,达到用户信息跨页面共享的效果。
后端:HttpSession sessionsession.setAttribute("stu", stu)
前端${session['stu'].name}

生命周期:
创建服务器端第一次调用 getSession();(保存在服务器内存中)

解释 session:
当访问服务器某个网页的时候,会在服务器端的内存里开辟一块内存,这块内存就叫做session,而这个内存是跟浏览器关联在一起的。当访问一个页面的时候给浏览器创建一个独一无二的号码,也给同时创建的session赋予同样的号码。这个浏览器指的是浏览器窗口,或者是浏览器的子窗口,意思就是,只允许当前这个session对应的浏览器访问,就算是在同一个机器上新启的浏览器也是无法访问的。而另外一个浏览器也需要记录session的话,就会再启一个属于自己的session

销毁:
1.非正常关闭服务器(正常关闭 session 会序列化,再次启动服务器 session 会被反序列化);

注意服务器正常关闭,再启动,Session 对象会进行钝化和活化操作。同时如果服务器钝化的时间在 session 默认销毁时间之内,则活化后 session 还是存在的。否则 Session 不存在。 如果 JavaBean 数据在 session
钝化时,没有实现 Serializable 则当 Session 活化时,会消失。

2.session 过期了默认30分钟;

3.手动调用 session.invalidate();

4.关闭浏览器。

注意关闭浏览器再次访问会找不到 session 的会话 id 而不是 session 被销毁了。
备注session 是服务器端对象,保存在服务器端。并且服务器可以将创建 session 后产生的 sessionid 通过一个 cookie 返回给客户端,以便下次验证。(session 底层依赖于 cookie)

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

注意只关闭标签页的话,session 状态是还在的。要完全关闭浏览器后,重新打开才会启用新的 session。

session 有自身的生命周期,如一定的时间内不再激活的话就会过期,被服务器注销。

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

读取生成的验证码信息:

//图片的验证码 String imageMsg = (String) 
request.getSession().getAttribute("imageMsg");

用户保持登录状态:

//登录成功 保存用户登录状态 
request.getSession().setAttribute("user", user);

购物车物品保存:

//将cart放入session中 
request.getSession().setAttribute("cart", cart);

三、application

生命周期:

创建服务器启动的时候,服务器为每个WEB应用创建一个属于该 web 项目的对象 ServletContext 类。
销毁服务器关闭或者项目从服务器中移除的时候。

注意:服务器只会创建一个 ServletContext 对象,所以如果在代码中,你创建了两个 application ,其实它们就是同一个,他们的值是互通的。

有效此信息在整个服务器上被保留。


三大作用域的区别

  • request:每一次请求都是一个新的 request 对象,如果在 web 组件之间需要共享同一个请求中的数据,只能使用请求转发。
  • session:每一次会话都是一个新的 session 对象,如果如果需要在一次会话中的多个请求之间需要共享数据,只能使用session。
  • application:应用对象,Tomcat启动到关闭,表示一个应用,在一个应用中有且只有一个 application 对象,作用于整个Web 应用,可以实现多次会话之间的数据共享。

共同点

  1. 设置作用域中的共享数据(保存数据)
作用域对象.setAttribute(String name,Object value);
  1. 获取作用域中的共享数据(获取数据)
Object value=作用域对象.getAttribute(String name);
  1. 删除作用域中的指定的共享数据(删除数据)
作用域对象.removeAttribute(String name);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值