您的位置:首页 > 其它

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

2016-01-23 13:39 281 查看

概述:

         之前一直认为浏览器客户端和服务器端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)在客户端和服务器端间传递和匹配验证

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: