`
alchimie
  • 浏览: 19872 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

Jsp、Session

 
阅读更多

(参考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。

 

  • 大小: 31.5 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics