(参考http://www.blogjava.net/redcoatjk/archive/2011/08/25/357247.html
http://xgw1008.blog.163.com/blog/static/56757356200921754025374 整理)
一,Jsp执行过程
在一个JSP文件第一次被请求时,JSP引擎把该JSP文件转换成为一个servlet。而这个引擎本身也是一个servlet,JSP引擎先把该JSP文件转换成一个Java源文件,在转换时如果发现jsp文件有任何语法错误,转换过程将中断,并向服务端和客户端输出出错信息;如果转换成功, JSP引擎用javac把该Java源文件编译成相应的class文件。然后创建一个该SERVLET的实例,该SERVLET的jspInit()方法被执行,jspInit()方法在servlet的生命周期中只被执行一次。然后jspService()方法被调用来处理客户端的请求。对每一个请求,JSP引擎创建一个新的线程来处理该请求。
如果有多个客户端同时请求该JSP文件,则JSP引擎会创建多个线程。每个客户端请求对应一个线程。以多线程方式执行可大大降低对系统的资源需求,提高系统的并发量及响应时间.但应该注意多线程的编程限制,由于该servlet始终驻于内存,所以响应是非常快的。如果.jsp文件被修改了,服务器将根据设置决定是否对该文件重新编译,如果需要重新编译,则将编译结果取代内存中的servlet,并继续上述处理过程。
虽然JSP效率很高,但在第一次调用时由于需要转换和编译而有一些轻微的延迟。此外,如果在任何时候如果由于系统资源不足的原因,JSP引擎将以某种不确定的方式将servlet从内存中移去。当这种情况发生时 jspDestroy()方法首先被调用, 然后servlet实例便被标记加入"垃圾收集"处理。 jspInit()及jspDestory()格式如下:可在jspInit()中进行一些初始化工作,如建立与数据库的连接,或建立网络连接,从配置文件中取一些参数等,在jspDestory()中释放相应的资源。
二,Sessin
1.Session的创建和销毁
session是保存在内存中的,所以会有一些性能上的影响。因此本着这个原则,session是只有在使用到的时候才会被创建,如果始终没有用到session,这个session是永远不会被创建的。
比如: 访问servlet ,只要你代码中没有 request.getSession()或request.getSession(true);这两行是等价的,那session是不会创建。又当你访问静态页面时,根本不会生成servlet,所以也不会创建session。
(jsp中有个<%@ page session="true/false"%> 这个开关表示是否创建session,当你不写这行时,它会默认给你加上这句。)
Session只能在服务端销毁,有三种途径:
①到达session的最大请求间隔时间时,
②session.invalidate()
③服务器进程当掉
2.Session的使用
①浏览器禁用cookie
这就没办法保存sessionid了,可以采用url重写,转发,加隐藏字段等方法来将sessionid传给服务器。
例: baidu.com:jsessionid=adfasdfasdfasdfasdfafdadf?asdfasdf
baidu.com?jsessionid=asdfasdfasdfadsfad&&adfdf
②多人共用session的问题
例: a 访问 baidu.com ,但他没有帐号,于是他将连接 baidu.com/login.jsp?jsessionid=adsfasdfad(这个a的sessionid) 发给B, B登录后,a就相当于用b的帐号登录了。
解决方法: 当发现通过sessionid从url指定时, 创建一个新的session,将旧session的信息复制到 新sessoin中,然后将新session注销。就能防止上面那种情况了。
③一个帐号多地方登录
例: 你用abc帐号登录了baidu.com,有打开了一个浏览器,又用abc帐号登录了一次。当不设计敏感操作时,这无所谓,而当你做一些敏感操作时就必须禁止这样情况,防止同时操作,造成重复操作,或者数据损坏。
解决方法: 监听session(HttpSessionListener),将username和sessionid对应起来,当username再次登录时,注销掉以前的session,保存现在的session。
相关推荐
JSP Session 学习笔记
jsp session对详细的介绍,session 的方法,参数,对session 有详细代码分析
JSP Session超时设置的实现方法 在Java Web开发中,Session为我们提供了很多方便,Session是由浏览器和服务器之间维护的。Session超时理解为:浏览器和服务器之间创建了一个Session,由于客户端长时间(休眠时间)...
jsp中session的详解文档资料
Jsp内置对象session总结:详细介绍,Session机制,原理,生命周期h和Session的主要方法等。
Jsp的session编程。使用session存储有关数据。 页面效果显示顺序:login.jsp School.jsp Major.jsp Info.jsp
jsp设计事例jsp usebean session
什么是JSP的内置对象 JSP的内置对象有哪些? request对象 与 response对象 session对象 application对象 out对象
用戶登錄了,現在已經存在不管到任何頁面只要不做操作,到了10分鐘aler(session超時),重新登錄的。
java初学者练习jsp页面session的使用,一个经典小案例 书写环境 jb2006 直接使用
Session详解.cookie与session的关系。session深入了解
JSP Session HTTP是无状态协议,这意味着每次客户端检索网页时,都要单独打开一个服务器连接,因此服务器不会记录下先前客户端请求的任何信息。 有三种方法来维持客户端与服务器的会话: Cookies 网络服务器...
例1:jsp页面间通过request/session传值 session1.jsp(从表单输入usernmae,将该参数传递到session2.jsp)
这个是jsp中session实现购物车的小代码,供初学者参考,加油,程序员们,come on!
用 Jsp 的 Session 机制编写的购物车程序.txt用 Jsp 的 Session 机制编写的购物车程序.txt
基于JSP+JDBC+Session的购物车
本文对servlet和jsp中的session作了详细的介绍,包括cookie对于开发wed服务程序很有帮助,是对http无状态协议的深入理解
http协议本身是一种无状态的协议,也就是客户端连续发送的多...Session对象是一个jsp内置对象,它在第一个jsp页面被装载时自动创建,完成会话期管理。 从一个客户打开浏览器并连接到服务器开始,到客户关闭浏览器离开
jsp课程中内置对象session,jsp教程中的上课源代码
JSP session配置对web应用的影响 以前公司做了一个web项目。发布以后,随着访问量的逐渐增大,发现JVM的内存使用比较多,full gc比较频繁,而且full gc后old区的大小变化不大。刚开始以为是JVM虚拟机的各项参数配置...