一.关于 jsp:
先贴上原文链接:
https://blog.csdn.net/jack__frost/article/details/65449643
http://www.cnblogs.com/mlloc-clove/p/3549777.html
JSP全名为Java Server Pages,中文名叫java服务器页面,其根本是一个简化的Servlet设计,它是一种动态网页技术标准。JSP技术有点类似ASP技术,它是在传统的网页HTML文件中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件,后缀名为(*.jsp)。
JSP的工作原理图:
当一个JSP文件第一次被请求的时候,JSP引擎(本身也是一个Servlet)首先会把这个JSP文件转换成一个Java源文件。在转换过程中如果发现JSP文件有语法错误,转换过程将中断,并向服务端和客户端输出出错信息;如果转换成功,JSP引擎用javac把该Java源文件编译成相应的.class文件并将该.class文件加载到内存中。
其次创建一个该Servlet的实例,并执行该实例的jspInit()方法(jspInit()方法在Servlet的生命周期中只被执行一次)。
然后创建并启动一个新的线程,新线程调用实例的jspService()方法。(对于每一个请求,JSP引擎会创建一个新的线程来处理该请求。如果有多个客户端同时请求该JSP文件,则JSP引擎会创建多个线程,每个客户端请求对应一个线程)。
浏览器在调用JSP文件时,Servlet容器会把浏览器的请求和对浏览器的回应封装成HttpServletRequest和HttpServletResponse对象,同时调用对应的Servlet实例中的jspService()方法,把这两个对象作为参数传递到jspService()方法中。
jspService()方法执行后会将HTML内容返回给客户端。
二.session:
①session是什么:中文经常翻译为会话,其本来的含义是指有始有终的一系列动作/消息。当session一词与网络协议相关联时,它又往往隐含了“面向连接”和/或“保持状态”这样两个含义,“面向连接”指的是在通信双方在通信之前要先建立一个通信的渠道,session在web开发语境下的语义又有了新的扩展,它的含义是指一类用来在客户端与服务器之间保持状态的解决方案,有时候session也用来指这种解决方案的存储结构,如“把xxx保存在session里。由于各种用于web开发的语言在一定程度上都提供了对这种解决方案的支持,所以在某种特定语言的语境下,session也被用来指代该语言的解决方案,比如经常把Java里提供的javax.servlet.http.HttpSession简称为session,当用户登录后,需要把用户信息保存到session中,便于确保用户操作权限,在其它页面通过检查session是否为null可以知道用户是否登录。
②session的使用:使用request对象获取session,然后进行操作:(1)引入包servlet-api.jar;(2)使用request获取session:HttpSession session = request.getSession();(3)对session的操作:
session.setAttribute("key", value); session.getAttribute("key"); session.removeAttribute("key"); session.invalidate(); //删除所有session中保存的键
③怎样管理:session管理,有四种方法:
(1)session复制:需要专门的同步进程, 同步集群中的应用服务器对象。这种方法比较简单, 从本地读取session也比较快,但是集群较大时, 会占用较多服务器和网络资源。
(2)session绑定:通过负载均衡的源地址hash算法, 将源ip的请求,总是发送到固定的应用服务器。但是, 这种方法不能满足系统高可用, 如果一台应用服务器宕机之后, 用户转发到其它应用服务器时, 其session将丢失。
(3)cookie记录session:cookie方式将session信息保存在客户端,这种方式虽然简单易用且能降低应用服务器负载,但是缺点较多:受cookie大小限制;需要客户端浏览器支持cookie;每次请求需要传递cookie,增加网络负担;安全性问题。
(4) session服务器:采用独立服务器, 使用文件、数据库或缓存系统来管理session, 实现session在应用服务器间的共享。 这种方式满足可伸缩(可集群化)、高可用(建立session服务器集群),性能也不错。