客户端和服务器端交互之session

概述:

         之前一直认为浏览器客户端和服务器端servlet交互是建立在session(回话)基础上的,实则不然,只有服务器端servlet显示声明session对象才有会话的创建。

客户端在第一次请求服务器端时,servlet被加载到服务器容器,创建出servlet对象。

        在涉及session创建的情况下,客户端第一请求服务器端时在服务器端创建session对象,session对象有一个唯一标识的sessionId,服务器端把这个sessionId放在相应头中的cookie中相应给客户端,同一客户端第二次请求服务器端时把请求地址(ip地址或域名,不包括详细url)对应的cookie放到请求头中向服务器端请求,服务器端检测是否有与客户端传来的cookie对应的sessionId,如果有,则接入对应会话,处理完成后向客户端相应(此次及以后响应头中都没有sessionId),如果没有没有匹配的sessionId则创建session对象,再把sessionId放到响应头中传给客户端。

        在不涉及session创建的情况下,每一个请求在服务器端是没有太大区别的,不同客户端的概念被弱化了,(在不经过特殊处理的情况下)所有请求共享所有数据,服务器端和客户端也不存在sessionId匹配的概念。


实践:

有session创建情况:


服务器端代码:

package com.sunsharing.servlet;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.OutputStream;

/**
 * Created by baich on 2016/1/23.
 */
public class TheadServletTest extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        HttpSession session = request.getSession();
        //ServletContext context = this.getServletContext();
        //context.setAttribute("d", "ddddd");
        OutputStream out = response.getOutputStream();
        
        out.flush();
        out.close();
    }
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request, response);
    }
}

客户端请求结果:


第一次访问响应头中以cookie的形式回传sessionId(JSESSIONID)

无session创建情况:

服务器端代码:

package com.sunsharing.servlet;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.OutputStream;

/**
 * Created by baich on 2016/1/23.
 */
public class TheadServletTest extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //HttpSession session = request.getSession();
        //ServletContext context = this.getServletContext();
        //context.setAttribute("d", "ddddd");
        OutputStream out = response.getOutputStream();

        out.flush();
        out.close();
    }
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request, response);
    }
}

客户端请求结果:

无cookie(sessionId)在客户端和服务器端间传递和匹配验证


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值