文档章节

关于request.getSession(true/false/null)的区别

安小乐
 安小乐
发布于 2017/02/17 15:48
字数 422
阅读 22
收藏 2
点赞 0
评论 2

一、需求原因

现实中我们经常会遇到以下3中用法:

HttpSession session = request.getSession();

HttpSession session = request.getSession(true);

HttpSession session = request.getSession(false);

二、区别

1.      Servlet官方文档说:

public HttpSessiongetSession(boolean create) 
Returns the currentHttpSession associated with this request or, if if there is no current sessionand create is true, returns a new session. 
If create is falseand the request has no valid HttpSession, this method returns null. 
To make sure thesession is properly maintained, you must call this method before the responseis committed. If the Container is using cookies to maintain session integrityand is asked to create a new session when the response is committed, anIllegalStateException is thrown. 
Parameters: true -to create a new session for this request if necessary; false to return null ifthere's no current session 
Returns: theHttpSession associated with this request or null if create is false and therequest has no valid session 

2.      翻译过来的意思是:

getSession(boolean create)意思是返回当前reqeust中的HttpSession ,如果当前reqeust中的HttpSession 为null,当create为true,就创建一个新的Session,否则返回null; 
简而言之: 
HttpServletRequest.getSession(ture)等同于 HttpServletRequest.getSession() 
HttpServletRequest.getSession(false)等同于 如果当前Session没有就为null; 

3.      使用

当向Session中存取登录信息时,一般建议:HttpSession session =request.getSession();

当从Session中获取登录信息时,一般建议:HttpSession session =request.getSession(false);

4.      更简洁的方式

如果你的项目中使用到了Spring,对session的操作就方便多了。如果需要在Session中取值,可以用WebUtils工具(org.springframework.web.util.WebUtils)的WebUtils.getSessionAttribute(HttpServletRequestrequest, String name);方法,看看源码:

public static Object getSessionAttribute(HttpServletRequest request, String name){  

    Assert.notNull(request, "Request must not be null");  

    HttpSession session = request.getSession(false);  

    return (session != null ? session.getAttribute(name) : null);  

}

注:Assert是Spring工具包中的一个工具,用来判断一些验证操作,本例中用来判断reqeust是否为空,若为空就抛异常

你使用时:

WebUtils.setSessionAttribute(request, "user", User);

User user = (User)WebUtils.getSessionAttribute(request, "user");

 

本文转载自:http://blog.csdn.net/gaolinwu/article/details/7285783

安小乐
粉丝 12
博文 100
码字总数 62028
作品 0
朝阳
后端工程师
加载中

评论(2)

安小乐
安小乐

引用来自“lgl48128244”的评论

用spring方式就是脱了裤放屁

@lgl48128244 看了一下WebUtils的源码,其实这个工具类只是封装了一下servlet规范而已。这种写法,只是代码整洁一点而已。
lgl48128244
lgl48128244
用spring方式就是脱了裤放屁
HttpServletRequest.getSession特性和Session周期

request.getSession()和HttpServletRequest.getSession(boolean)的区别Session的生命周期 HttpSession session=request.getSession(); 1查询浏览器中是否有session对象, 2如果没有,就创建一......

day戴 ⋅ 2014/05/30 ⋅ 0

HttpServletRequest.getSession特性和Session周期

request.getSession()和HttpServletRequest.getSession(boolean)的区别Session的生命周期 HttpSession session=request.getSession(); 1查询浏览器中是否有session对象, 2如果没有,就创建一......

城固如春 ⋅ 2016/10/13 ⋅ 0

Spring MVC拦截器+注解方式实现防止表单重复提交多线程问题

最近要把系统重复提交的问题解决: 参考了比较普遍的2种方案: 1、前端通过cookie(变量)状态来控制; 2、通过后台状态控制 现在想用第二种方案来解决问题,但是参照了下面文章来处理;快速...

Doug ⋅ 2016/03/04 ⋅ 0

Spring MVC防止数据重复提交

要解决重复提交,有很多办法,比如说在提交完成后redirect一下,也可以用本文提到的使用token的方法(我不使用redirect是因为那样解决不了ajax提交数据或者移动应用提交数据,另一个原因是现...

Leons ⋅ 2015/07/08 ⋅ 0

java getSession

本文属于本人原创,转载请注明出处:http://blog.csdn.net/xxd851116/archive/2009/06/25/4296866.aspx 【前面的话】 在网上经常看到有人对request.getSession(false)提出疑问,我第一次也很...

Oscarfff ⋅ 2016/02/16 ⋅ 0

对request.getSession(false)的理解(附程序员常疏忽的一个漏洞)

转自:http://blog.csdn.net/xxd851116/article/details/4296866 【前面的话】 在网上经常看到有人对request.getSession(false)提出疑问,我第一次也很迷惑,看了一下J2EE1.3 API,看一下官网...

挨踢人生 ⋅ 2014/05/26 ⋅ 0

[转]应用struts1.x框架的session管理

如果应用了Struts 1.x框架,那么在任何一个Action被访问之前,都会经过ActionServlet来控制转向,ActionServlet类中在接收到我们客户端的请求(*.do)后(之前会做一系列初始化工作),并不是直接...

于子洋 ⋅ 2010/03/08 ⋅ 0

spring自定义拦截器实现用户登入权限检查

1.自定义拦截器 import org.springframework.web.servlet.HandlerInterceptor; public class LoginInterceptor implements HandlerInterceptor { public void afterCompletion(HttpServletRe......

海军战士 ⋅ 2016/11/26 ⋅ 0

多个tomcat利用memcached共享"session"

这两天研究了下服务器端共享session问题,老大推荐用memcached来实现,网上关于这方面的资料确实不少,但不是很全,今天终于搞定,写下来一是为了做个笔记,二来推荐给有需要的同志。 一切都...

hebeijpp ⋅ 2012/06/11 ⋅ 7

action不能往jsp中传递数据的问题

struct z中一个action的配置如下: path="/library" parameter="method" name="libraryForm" scope="request" validate="true" type="org.springframework.web.struts.DelegatingActionProxy"......

wuwulh ⋅ 2010/08/23 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

看东方明珠新媒体如何基于阿里视频云,构建完整的视频OTT平台SaaS服务

摘要: 东方明珠新媒体如何基于阿里云,搭建了面向第三方的视频SaaS服务?6月8日,上海云栖大会视频专场中,东方明珠新媒体股份有限公司云计算中心的副总周少毅带来了《东方明珠视频云》为题...

阿里云云栖社区 ⋅ 21分钟前 ⋅ 0

C#调用WebService实例和开发 VS2013

简单的理解就是:webservice就是放在服务器上的函数,所有人都可以调用,然后返回信息。 Web Service的主要目标是跨平台的可互操作性。为了实现这一目标,Web Service 完全基于XML(可扩展标...

布衣大侠 ⋅ 25分钟前 ⋅ 0

基于FlumeNG+Kafka+ElasticSearch+Kibana的日志系统

环境准备 1.服务器概览 hostname ip 操作系统 说明 安装内容 node1.fek 192.168.2.161 centos 7 node1节点 nginx,jdk1.8, flumeNG, elasticsearch slave1 node2.fek 192.168.2.162 centos ......

张shieppp ⋅ 25分钟前 ⋅ 0

问答网站已成过去,深度问答社区才是当下

曾几何时,各类问答网站数不胜数,从百度知道这类综合型问答网站到各种垂直细分的问答网站,都有不少,但到了移动互联网时代,很明显的一大趋势是,网站整体的流量都在下滑,随着移动智能设备...

ThinkSNS账号 ⋅ 27分钟前 ⋅ 0

Android平台架构(ART)

Android平台架构(ART) 本文目的:准确表述Android平台架构 本文转载自[Android官网] 本文定位:学习笔记 学习过程记录,加深理解。也希望能给学习的同学一些灵感 本文更新时间:2018.06.22(...

lichuangnk ⋅ 29分钟前 ⋅ 0

看东方明珠新媒体如何基于阿里视频云,构建完整的视频OTT平台SaaS服务

摘要: 东方明珠新媒体如何基于阿里云,搭建了面向第三方的视频SaaS服务?6月8日,上海云栖大会视频专场中,东方明珠新媒体股份有限公司云计算中心的副总周少毅带来了《东方明珠视频云》为题...

猫耳m ⋅ 31分钟前 ⋅ 0

Java 动态代理 原理解析

概要 AOP的拦截功能是由java中的动态代理来实现的。说白了,就是在目标类的基础上增加切面逻辑,生成增强的目标类(该切面逻辑或者在目标类函数执行之前,或者目标类函数执行之后,或者在目标...

轨迹_ ⋅ 33分钟前 ⋅ 0

js 获取当前时间

var myDate = new Date();myDate.getYear(); //获取当前年份(2位)myDate.getFullYear(); //获取完整的年份(4位,1970-????)myDate.getMonth(); //获取当前月份(0-11,0代表1月)myDate...

夜醒者 ⋅ 39分钟前 ⋅ 0

windows删除或修改本地Git保存的账号密码

在win10或者win7都是一样的步骤: (一)进入控制面板(二)选择用户账户(三)选择管理你的凭据(四)选择Windows凭据(五)选择git保存的用户信息(六)选择编辑或者进...

果树啊 ⋅ 39分钟前 ⋅ 0

8个基本的Docker容器管理命令

前言: 在这篇文章中,我们将带你学习 8 个基本的 Docker 容器命令,它们操控着 Docker 容器的基本活动,例如 运行run、 列举list、 停止stop、 查看历史纪录logs、 删除delete 等等。文末福...

java高级架构牛人 ⋅ 41分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部