认识并简单编辑Eclipse中的Jsp(二)

(五)

怎么理解序列化

1.实现了serializable接口类,可以被序列化和反序列化。序列化指将java对象变成字节流,反序列化指将字节流变成java对象。由此,对象就可以在不同的JVM之间传递。也可以通过序列化将java对象存入磁盘,再通过反序列将其读取出来。

2.servialVersionUID,若不在java类中显式地声明一个private static final long serivalVersionUID.系统会自动生成。其值受类名,实现的接口名,和所有的public和protected成员(包括属性和方法)的影响。

3.在进行反序列化时,jvm会把传来的字节流中的serivalVersionUID与本地同一个类的UID进行比较,若不相同,会出现序列化不一致的异常

ps:Session中的对象需要可序列化,是在多个服务器间复制Session,支持负载均衡

(六)

jsp的隐含对象(implicit object)

1.request 请求 : HttpServletRequest
2.response 响应 :HttpServletResponse
3.session 会话:HttpSession
4.out 输出 : PrintWriter
5.application 应用 :ServletContext
6.config配置 :ServletConfig
7.pageContext 页面环境:PageContext
8 .exception 异常:Throwable
ps:当page指令的属性isErrorPage为true时,才会有exception隐含对象

(七)

电商网站购物车如何实现?
1.方法1:数据库。购物车数据存在db的相应表中
好处:可伸缩性强,即可以更好地支持应用服务器集群工作;购物车内数据被持久化
坏处:访问速度慢,需要访问db,有更多网络调用和磁盘读写。
2.方法2:session。 购物车数据存在session中
好处:快。只需访问应用服务器的内存。
坏处:可伸缩性较弱,应用服务器集群工作时有出错风险,因为要在多台服务器之间同步会话信息;购物车内数据没有被持久化,通常关闭浏览器后数据丢失
ps:大型电商购物车通常采用方法1。
而session可用在判断用户是否登陆。

什么是Session

1,服务器端创建的一个对象
2.该对象在内存中,其数据可供多个请求共享,访问jsp时,默认会自动创建一个Session对象

为什么用Session

与数据库存储相比较,数据存在session可避免过多磁盘读写,网络调用惑进程之间的访问,磁盘空间占用

Session的生命周期

1.session的生存
客户端向服务器发送请求(request),假设该请求触发了Session对象的创建(默认情况下,jsp请求会创建一个Session对象),当服务器将结果响应(response)给客户端时,会把该Session对象的ID(JSESSIONID)返回给客户端,客户端在后续请求中,会以cookie的形式或者url的形式,将该Session的ID发送给服务器端,服务器端根据此ID获取对应的Session对象。

2.Session的毁灭:
(1)当客户关闭浏览器后,再请求,之前的Session对象将无法访问,垃圾回收器会回收该对象空间

(2)当客户长时间没有发送请求,达到Session到期(timeout)时间时,之前创建的Session对象也将无法访问。在Tomcat的世界中,session到期时间为30分钟。该时间可以在配置文件web.xml中设置如下:
在这里插入图片描述
(3)关闭应用服务器(web应用重载),但Tomcat服务器默认重启时会保留Session(Tomcat7或8)
(4)清除浏览器的cookie数据

ps:Seesion实践总结 *

(1)jsp页面若不需要用session对象,则将session关闭,即设置< %@page session=“false” %>
(2)Session中存放的对象可以序列化(即实现Serializable接口),目的是更好的支持集群的架构
(3)Session中的值改动,都显式地调用setAttribute或removeAttribute,目的也是更好地支持集群,例如对于weblogic应用服务器,当setAttribute被调用时,会触发seesion复制

(七)

Page箱的使用 *

方法1:name表示箱子id,object表示箱子中的东西
代码如下:
pageContext.setAttribute(name,object);
pageContext.getAttribute(name);

方法2:PAGE_SCOPE表示放入page箱
代码如下:
pageContext.setAttribute(name,object,Context.PAGE_SCOPE);
pageContext.getAttribute(name,PageContext.PAGE_SCOPE);

Request箱的使用 *

方法1:
代码如下:
request.setAttribute(name.object);
request.getAttribute(name);

方法2:REQUEST_SCOPE表示放入request箱
pageContext.setAttribute(name,object,PageContext.REQUEST_SCOPE);
pageContext.getAttribute(name,PageContext.REQUEST_SCOPE);

session箱的使用*

方法1:
代码如下:
session.setAttribute(name,object);
session.getAttribute(name);

方法2:SESSION_SCOPE表示放入session箱
pageContext.setAttribute(name,object,PageContext.SEESION_SCOPE);
pageContext.getAttribute(name,PageContext.SESSION_SCOPE);

Application箱的使用*

方法1:
代码如下:
application.setAttribute(name,object);
application.getAttribute(name);

方法2:APPLICATION_SCOPE表示放入application箱
pageContext.seAttribute(name,object,PageContext.APPLICATION_SCOPE);
pgeContext.getAttribute(name,PageContext.APPLICATION_PAGE);

发布了12 篇原创文章 · 获赞 0 · 访问量 177

猜你喜欢

转载自blog.csdn.net/weixin_45722104/article/details/104010803