servlet的session的生命周期

谈到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了。

原文地址:https://www.cnblogs.com/YuyuanNo1/p/11384557.html

时间: 2024-10-12 17:12:29

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

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

这些都是基础知识,不过有必要做深入了解.先简单介绍一下. 二者的定义: 当你在浏览网站的时候,WEB 服务器会先送一小小资料放在你的计算机上,Cookie 会帮你在网站上所打的文字或是一些选择, 都纪录下来.当下次你再光临同一个网站,WEB 服务器会先看看有没有它上次留下的 Cookie 资料,有的话,就会依据 Cookie 里的内容来判断使用者,送出特定的网页内容给你. Cookie 的使用很普遍,许多有提供个人化服务的网站,都是利用 Cookie 来辨认使用者,以方便送出使用者量身定做的内容

Servlet的API和生命周期

一.Servlet的API(生命周期) (1)Servlet接口中的方法 1)init(ServletConfig config) 何时执行:servlet对象创建的时候执行(以上图为例:在浏览器中按地址第一次访问服务器时,Tomcat服务器会new 一个QuickstartServlet对象,并通过生成的对象调用init方法,init方法仅仅执行一次.) ServletConfig : 代表的是该servlet对象的配置信息. 参数作用: 1. 可以通过参数config获得该servlet的n

深刻理解Servlet运行机制和生命周期

servlet 运行在servlet 容器中,其生命周期由容器来管理.servlet 的生命周期通过 javax.servlet.Servlet接口中的init(),servce(),和destory();方法表示.1,加载和实例化servlet 容器负责加载和实例化servlet 当容器启动或在容器中检测到需要这个servlet来响应一个请求 时.创建servlet实例.容器通过java 的反射API来创建servlet实例.所以servlet中不应该提供带参数的构造函数.2,初始化在serv

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

Servlet的概念 什么是Servlet呢? Java中有一个叫Servlet的接口,如果一个普通的类实现了这个接口,这个类就是一个Servlet.Servlet下有一个实现类叫HttpServlet,一个普通的java如果继承了HttpServlet类,覆盖了它的doGet和doPost方法,那么这个普通类也可以叫做Servlet.最后,servlet程序交给服务器运行! 那么,当我们写好了一个Servlet,交给了服务器,它是如何执行的呢!? Servlet的执行过程 我们写了一个Serv

Servlet的配置和生命周期

1 Servlet容器:运行Servlet.JSP.Filter等的软件环境    1)可以创建Servlet,并调用生命周期的方法 2 Servlet生命周期的方法: 1)构造器:只被调用一次,只有第一次请求Servlet时,创建Servlet实例,说明Servlet是单实例的. 2)init方法:只被调用一次,在创建好实例后立即被调用,用来初始化Servlet. 3)service:被多次调用,每次请求都调用service方法,实际用于响应请求 4)destroy:只被调用一次,在当前Ser

iOS Life Cycle of a URL Session URLSession生命周期 开发者文档翻译(一)

最近想把iOS网络这一块搞通.貌似国内中文资料太少了,无奈只能自己动手翻译开发者文档.决定抽时间把网络部分的全部翻译出来,工程浩大啊.有人想参与的话欢迎留言. 英文原文:developer URL Session的生命周期 你可以使用NSURLSession在两个方面:系统提供的代理和你自己的代理.一般来说,如果有下面的情况你必须使用自己的代理: 1.使用后台下载或者上传内容,同时你的app没有运行. 2.执行自定义的身份验证. 3.执行自定义的SSL证书验证. 4.决定是否应该下载到磁盘或者显

Servlet(二)生命周期

Servlet的生命周期可以定义为从其被创建到其被销毁的整个流程,下面是Servlet生命的常规线路: 容器调用init()方法进行Servlet的初始化 Servlet调用service()方法去处理客户端的请求 容器调用destroy()方法将Servlet销毁 最后,Servlet被JVM的GC线程当作垃圾处理掉 init()方法: init()方法只会在创建Servlet时被调用一次,不管有多少用户请求.通常情况下,Servlet在容器第一次接收到用户请求时被创建,但也可以通过load-

servlet生命周期已经session的生命周期

简单记笔记 1,创建Servlet对象,通过服务器反射机制创建Servlet对象,第一次请求时才会创建.(默认) 2,调用Servlet对象的init()方法,初始化Servlet的信息,init()方法只会在创建后被调用一次: 3,响应请求,调用service()或者是doGet(),doPost()方法来处理请求,这些方法是运行的在多线程状态下的. 4,  在长时间没有被调用或者是服务器关闭时,会调用destroy()方法来销毁Servlet对象. session生命周期 session是服

Servlet执行流程和生命周期【慕课网搬】

Servlet执行流程(GET方式为例) 首先用户客户端浏览器发出Get方式(点击超链接方式)向浏览器发出请求. 服务器接收到客户端点击超链接,接收到GET请求之后,服务器到WEB.xml中<servlet-mapping>标签中来寻找与之对应的URl地址,从而找到相对应的servlet名字,再根据该名字到标签中找与之相对应的处理类(继承至HttpServlet类),执行该类中的doget()[超链接方式,服务器可以自行分析]方法. Servlet的生命周期 调用构造方法创造servlet实例