谈到javaweb首先想到的就是servlet,说道servlet就会想到servlet的生命周期

说道servlet的生命周期 就绕不过servlet的三个方法init service destroy

当我们将web项目部署到服务器,服务器启动的时候,这个时候servlet还没创建,,服务器启动了  开始对外提供服务,客户端可以访问了,

当某一个客户端第一次访问时候此servlet时候------》服务器找不到servlet对象-------》这个时候服务器就会创建servlet对象,并且调用init方法,使servlet初始化,获得他的初始化参数------》init方法调用完成serlvet对象就可以对外提供服务-------》web服务器调用servlet的service方法给客户端提供服务---》service服务完成servlet继续存在-------》第二客户端继续访问此servlet--------》服务器继续寻找servlet对象--------》存在此servlet对象-------》调用此对象的servlet方法提供服务。。。。。。---》不遇到特殊原因知道服务器关闭之前一直存在-------》当web服务器正常关闭的时候,此时调用servlet的destroy方法销毁,,,

当web服务器异常关闭时可能不会调用servlet的destroy方法,,,,

重点:

1.servlet不是一启动web服务器就创建对象,而是要客户端第一次访问,web服务器先查看自己有没有这个对象,没有才会创建,

  但是有些servlet比较特殊,Web服务器创建时候创建,这是特殊的servlet

2.当web服务器创建servlet对象时候  就会调用init方法初始化servlet,获得servlet的初始化参数,

  此init 方法,只会在生成对象的时候调用一次,提供服务的时候不调用

3.servlet对外提供服务是调用的他的service方法,调用完成后servlet未被销毁,还继续存在于web容器中,等待其他的用户访问时候继续调用他的service方法,所有servlet的service方法是可以被多次调用的

4.只有正常关闭服务器才会调用一次servlet的destroy方法

session生命周期,

  session创建:在第一次使用resquest的getSession方法,web服务器会创建一个session

  session使用:session在服务端创建完成后,内存会给session分配一定的空间,并且会生成一个临时cookie返回给用户,当用户第二次访问的时候会带上这个临时cookie,当第二次调用resquest的getSession方法时候,由于有此临时cookie携带的sessionid就可以找到session对应的内存空间,返回此session,此后只要用户访问时带上这个临时cookie就可以获得第一次创建的session,并访问对应的内存空间

  session的销毁:

    1.默认销毁:session是有默认时长的,默认情况下,当用户三十分钟不和服务器交互数据,session就会被自动销毁,

    2.手动销毁:当调用session的invalidate方法时候会销毁此session

    3.关闭服务器:内存空间被回收了,自然就不存在session了

=============================

Session的工作原理

虽然Session保存在服务器,对客户端是透明的,它的正常运行仍然需要客户端浏览器的支持。这是因为Session需要使用Cookie作为识别标志。HTTP协议是无状态的,Session不能依据HTTP连接来判断是否为同一客户,因此服务器向客户端浏览器发送一个名为JSESSIONID的Cookie,它的值为该Session的id(也就是HttpSession.getId()的返回值)。Session依据该Cookie来识别是否为同一用户。

该Cookie为服务器自动生成的,它的maxAge属性一般为-1,表示仅当前浏览器内有效,并且各浏览器窗口间不共享,关闭浏览器就会失效。因此同一机器的两个浏览器窗口访问服务器时,会生成两个不同的Session。但是由浏览器窗口内的链接、脚本等打开的新窗口(也就是说不是双击桌面浏览器图标等打开的窗口)除外。这类子窗口会共享父窗口的Cookie,因此会共享一个Session。

注意:新开的浏览器窗口会生成新的Session,但子窗口除外。子窗口会共用父窗口的Session。例如,在链接上右击,在弹出的快捷菜单中选择”在新窗口中打开”时,子窗口便可以访问父窗口的Session。

如果客户端浏览器将Cookie功能禁用,或者不支持Cookie怎么办?例如,绝大多数的手机浏览器都不支持Cookie。Java Web提供了另一种解决方案:URL地址重写。

URL地址重写是对客户端不支持Cookie的解决方案。URL地址重写的原理是将该用户Session的id信息重写到URL地址中。服务器能够解析重写后的URL获取Session的id。这样即使客户端不支持Cookie,也可以使用Session来记录用户状态。HttpServletResponse类提供了encodeURL(String url)实现URL地址重写,该方法会自动判断客户端是否支持Cookie。如果客户端支持Cookie,会将URL原封不动地输出来。如果客户端不支持Cookie,则会将用户Session的id重写到URL中。

注意:TOMCAT判断客户端浏览器是否支持Cookie的依据是请求中是否含有Cookie。尽管客户端可能会支持Cookie,但是由于第一次请求时不会携带任何Cookie(因为并无任何Cookie可以携带),URL地址重写后的地址中仍然会带有jsessionid。当第二次访问时服务器已经在浏览器中写入Cookie了,因此URL地址重写后的地址中就不会带有jsessionid了。

servlet的session的生命周期的更多相关文章

  1. 【转载】Session的生命周期

    http://www.cnblogs.com/binger/archive/2013/03/19/2970171.html 以前在学习的时候没怎么注意,今天又回过头来仔细研究研究了一下Session的 ...

  2. Session的生命周期之关于浏览器关闭后的Session

    Session是JSP的九大内置对象中的一个,它可以保存当前用户的各种的状态信息. 初次接触Session时认为Session的生命周期是从浏览器打开一个窗口发送请求开始,到浏览器窗口关闭结束.其实这 ...

  3. Cookie 和 Session 的区别和联系?session的生命周期?多个服务器部署session的管理?

    一.session 和 cookie 1.cookie Cookie会根据响应报文里的一个叫做Set-Cookie的首部字段信息,通知客户端保存Cookie.当下次客户端再向服务端发起请求时,客户端会 ...

  4. cookie和session的区别,session的生命周期,

    这些都是基础知识,不过有必要做深入了解.先简单介绍一下. 二者的定义: 当你在浏览网站的时候,WEB 服务器会先送一小小资料放在你的计算机上,Cookie 会帮你在网站上所打的文字或是一些选择, 都纪 ...

  5. node中session存储与销毁,及session的生命周期

    1.首先在使用session之前需要先配置session的过期时间等,在入口文件app.js中 app.use(express.session({ cookie: { maxAge: config.g ...

  6. cookie和session的区别及session的生命周期

    这些都是基础知识,不过有必要做深入了解.先简单介绍一下. 二者的定义: 当你在浏览网站的时候,WEB 服务器会先送一小小资料放在你的计算机上,Cookie 会帮你在网站上所打的文字或是一些选择,都纪录 ...

  7. session的生命周期是怎样的

    session的生命周期是怎样的 一.总结 一句话总结:Tomcat中Session的默认失效时间为20分钟.如果我们敲代码的时候把它设置成1个月,那么这一个月的数据会代替默认20分钟的数据,使ses ...

  8. Session的生命周期和工作原理

    一.什么是Session,如何使用?Session是用于存放用户与web服务器之间的会话,即服务器为客户端开辟的存储空间. 由于客户端与服务器之间的会话是无状态的机制,Session则可用于关联访问, ...

  9. JavaWeb之 Servlet执行过程 与 生命周期

    Servlet的概念 什么是Servlet呢? Java中有一个叫Servlet的接口,如果一个普通的类实现了这个接口,这个类就是一个Servlet.Servlet下有一个实现类叫HttpServle ...

随机推荐

  1. Linux指令(文件目录类)

    pwd 显示当前工作目录的绝对路径 ls [选项] [目录或是文件] 常用选项 -a 显示当前目录所有的文件和目录,包括隐藏的 -l 以列表的方式显示信息 cd [参数] (功能描述:切换到指定目录) ...

  2. Gradle 使用教程之 Task 详解

    最近打算学习下 gradle 在 Android 中的使用,结果百度出来的文章都是介绍性文章,没啥干货.后来找到 gradle 官网教程,自己对着撸. Gradle 概述: Gradle 是一个基于 ...

  3. vue父组件触发子组件方法

    比如应用场景是弹窗中的组件,想要点弹窗时更新该组件展示对应记录的的值 methods: { edit (record) { this.mdl = Object.assign({}, record) t ...

  4. pdsh工具的使用

    pdsh的全称是parallel distributed shell,与pssh类似,pdsh可并行执行对远程目标主机的操作,在有批量执行命令或分发任务的运维需求时,使用这个命令可达到事半功倍的效果. ...

  5. 微信小程序中,如果没有参数,如何设置默认参数?

    现在学会小程序,这方面的知识,需要积累. 现在的情况是这样: 如果想从后端获取产品列表,而这些列表是可以根据分类来获取的,也是可以获取所有产品的. 那么,为了不使小程序报错,那么,我们就可以将不传的参 ...

  6. 《exception》第九次团队作业:Beta冲刺与验收准备(第一天)

    一.项目基本介绍 项目 内容 这个作业属于哪个课程 任课教师博客主页链接 这个作业的要求在哪里 作业链接地址 团队名称 Exception 作业学习目标 1.掌握软件黑盒测试技术:2.学会编制软件项目 ...

  7. python练习题(四)

    题目: 根据一个字符串返回一个ip数组,按照ip最后一位排序, 字符串: str = 'ss192.0.0.12?!289.0.0.1!0.0.0.0!192.163.10.28?192.0.0.5' ...

  8. vue之组件通信

    vue组件通信一般分为以下几种情况: 1.父子组件通信: 2.兄弟组件通信: 3.跨多层级组件通信: 一.父子通信        父组件通过props传递数据给子组件,子组件通过emit发送事件传递数 ...

  9. 题目一:编写一个类Computer,类中含有一个求n的阶乘的方法

    作业:编写一个类Computer,类中含有一个求n的阶乘的方法.将该类打包,并在另一包中的Java文件App.java中引入包,在主类中定义Computer类的对象,调用求n的阶乘的方法(n值由参数决 ...

  10. TimescaleDB1.3 的新特性——Continuous aggregates: faster queries with automatically maintained materialized views

    One characteristic of time-series data workloads is that the dataset will grow very quickly. Without ...