客户端和服务器端交互之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)在客户端和服务器端间传递和匹配验证
相关文章推荐
- Linux命令常用命令
- The Router路由
- 牛顿迭代
- Spark1.0.0 属性配置
- CentOS6.7 下 Mysql5.7主从复制
- Android用户界面基础之LinearLayout、TableLayout、RelativeLayout、FrameLayout、GridLayout学习
- 手机和PC站点击商务通无轨迹解决方法
- Bmob的简单使用
- Combination Sum II
- JAVA NIO 内存映射文件 与DirectMemory
- openLDAP for WINDOWS
- mysql游标使用
- Cannot launch AVD in emulator on Windows: ERROR: x86 emulation currently requires hardware accelerat
- sdk需要获取sdk之外的参数,方法,甚至Class?
- Java学习——何为JNDI
- 3.10 Templates -- Development Helpers
- activiti工程环境搭建和流程图创建
- failed to lazily initialize a collection of role: , could not initialize proxy - no Session
- 【Hibernate】Hibernate 参数设置一览表
- 我们的征途是星辰大海——CCF 2016 NOIP We’re Coming