专栏首页软件开发-青出于蓝HttpSession之学习笔记 原

HttpSession之学习笔记 原

注:此篇博文是本人看国外官方文档得来的,建议读者阅读原版英文

1.client-server connection

先上一张图,如下

                                     图1

对图1的说明:

  • client与server建立一个连接,这种连接是底层的
  • client发送request到server,等待server的answer
  • server处理request,将处理结果返还给client,这个结果包括status code、其它data

在HTTP/1.1中,在步骤3执行完成后,connection不再被关闭,在connection有效的前提细,后面client不再需要执行步骤1,直接执行步骤2、3就可以。

为了进一步深入,如下图2,图2是我从国外的网上截下来的,建议读者阅读原文

                                                图2 HttpSession生成后会有个sessionID

  • Client第一次发送请求,web container生成唯一的session ID(生成session ID的源码,如有兴趣,可以看下tomcat源码),并将其返回给client(在web container返回给client的response中),web container上的这个HttpSession是临时的。
  • 后面Client在每次发送请求给服务器时,都将session ID发送给web container,这样web container就很容易区分出是哪个client.
  • Web container使用这个session ID,找到对应的HttpSession,并将此次request与这个HttpSession联系起来。  

1.1 web container中如何获得HttpSession

    HttpServletRequest中的方法,如下图3所示:

    /**
     *
     * Returns the current session associated with this request,
     * or if the request does not have a session, creates one.
     * 
     * @return		the <code>HttpSession</code> associated
     *			with this request
     *
     * @see	#getSession(boolean)
     *
     */

    public HttpSession getSession();

    /**
     *
     * Returns the current <code>HttpSession</code>
     * associated with this request or, if there is no
     * current session and <code>create</code> is true, returns 
     * a new session.
     *
     * <p>If <code>create</code> is <code>false</code>
     * and the request has no valid <code>HttpSession</code>,
     * this method returns <code>null</code>.
     *
     * <p>To make sure the session is properly maintained,
     * you must call this method before 
     * the response is committed. If the container is using cookies
     * to maintain session integrity and is asked to create a new session
     * when the response is committed, an IllegalStateException is thrown.
     *
     *
     *
     *
     * @param create	<code>true</code> to create
     *			a new session for this request if necessary; 
     *			<code>false</code> to return <code>null</code>
     *			if there's no current session
     *			
     *
     * @return 		the <code>HttpSession</code> associated 
     *			with this request or <code>null</code> if
     * 			<code>create</code> is <code>false</code>
     *			and the request has no valid session
     *
     * @see	#getSession()
     *
     *
     */

    public HttpSession getSession(boolean create);

                                                              图3 获取HttpSession的方式

    HttpSession中的方法如下图4所示,销毁HttpSession

    /**
     * Invalidates this session then unbinds any objects bound
     * to it. 
     *
     * @exception IllegalStateException	if this method is called on an
     *					already invalidated session
     */
    public void invalidate();

                                                               图4 销毁HttpSession

2.client-server model缺点

    client-server model,如果client不发送请求,server不允许发送送数据给client。为了克服这个困难,开发者可以使用 XMLHTTPRequest请求服务器——即不断轮询服务器,或者WebSocket。

3.Cross-Origin Resource Sharing (CORS)    

    跨域资源共享。英文原版在这里

(adsbygoogle = window.adsbygoogle || []).push({});

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • SpringFramework之javax.servlet.http.HttpSession

                                                                  图1 HttpSession接口

    克虏伯
  • Hive之导出文件按逗号分隔到本地文件

        如下所示,默认导出的是用\t分隔的,需要使用管道符进行转换,经常使用到,记录下.

    克虏伯
  • Springsecurity之SecurityContextHolderStrategy

    注:下面分析的版本是spring-security-4.2.x,源码的github地址是: https://github.com/spring-projects...

    克虏伯
  • TCGA数据库挖掘肿瘤相关基因突变(2)cBioPortal

    TCGA是一个综合性的多组学肿瘤基因组数据库,除包含DNA测序之外,还包含了RNA测序、拷贝数、蛋白谱、甲基化等多个组学的数据,但是在TCGA的官方网站GDC ...

    用户6317549
  • Java基础——类&对象

    定义类的注意: (1)如果类使用了public 修饰符 必须保证当前的文件名和当前类相同 (2) 类名使用名称表示 类表示某一类事物 首字母大写

    羊羽shine
  • Testbench编写指南(3)模块化工程的仿真方法

    文章转自:https://blog.csdn.net/FPGADesigner/article/details/80816066

    碎碎思
  • 面试被问:一个Java对象占多少内存?

    来源:https://my.oschina.net/luozhou/blog/3175463

    用户4143945
  • 你写的Java对象究竟占多少内存?

    Java 作为一个面向对象语言,给我们带来了多态,继承,封装等特性,使得我们可以利用这些特性很轻松的就能构建出易于扩展,易于维护的代码。作为一个Javaer,天...

    会呼吸的Coder
  • 『互联网架构』软件架构-JVM(中)(26)

    会产生内存碎片,如果空间内存碎片太多,当程序产生大对象无法在堆中找到连续空间大小存放的时候,会强制发生GC

    IT故事会
  • java基础_面向对象_内存分析

    Hello小伙伴们~今天兔妞兔君都好忙,所以给大家分享的是同事帅GG的投稿呢~主要讲的就是面向对象的设计思想、Java中类和对象的定义以及类加载的内存分析。

    萌兔IT

扫码关注云+社区

领取腾讯云代金券