黑马程序员技术交流社区

标题: web阶段学习心得 [打印本页]

作者: llw1995    时间: 2018-4-2 17:34
标题: web阶段学习心得
javaweb的学习持续长达二十多天之久,从刚开始的手足无措到后来的慢慢适应,经历了太多的坎坷。经过这个阶段的学习,我体会到web项目最根本的就是页面传参和java代码带值展示到页面中。能熟练掌握数据的传递和展示,web项目就离大成不远了


参数传递无非在页面中提交或者异步访问,相对好理解。往往从javaee中往页面传参让我犯难,不知道该用cookie还是session。所以这里我深入去了解了这二者的异同。


一.Cookie 1.什么是Cookie?

Cookie是保存在客户端的,以name,value的形式保存。当用户使用浏览器访问服务器产生数据时,服务器程序把每个用户的数据以cookie的形式写给用户各自的浏览器。当用户使用浏览器再去访问服务器中的web资源时,就会带着各自的数据去。这样,web服务器就可以从请求中获得用户的数据了。

2.java 中实现cookie的相应的API

javax.servlet.http.Cookie类是java中的一个类。它用于创建一个Cookie,java的Response接口定义了一个addCookie方法,它可以在其响应头中增加一个相应的Set-Cookie头字段。同样,request接口中也定义了一个getCookies方法,它用于获取客户端提交的Cookie。Cookie类有以下的一些常用的方法:

publicCookie(String name,String value) 构造方法

setValue与getValue 设值与取值

setMaxAge与getMaxAge 设置和获取cookie的最长存在的时间,单位为秒。

setPath与getPath方法 设置路径,可以实现同一应用服务器内共享cookie

setDomain与getDomain 设置主机,可以实现跨域共享cookie

getName方法 获取cookie的名字

3. 操作cookie需要注意的一些问题

Cookie的setMaxAge的方法的单位为秒,当设置为-1时,浏览器关闭cookie从浏览器自动删除。

一个Cookie只能标识一种信息,它必须含有一个name和一个value,一个WEB应用可以给一个WEB浏览器发送多个Cookie,同样的,用户的浏览器也可以存储多个WEB站点写入的Cookie。

浏览器存储的cookie的个数和大小是有限制的,一般只允许存放300个Cookie,每个站点最多存放20个Cookie,每个Cookie的大小限制为4KB。

cookie默认是用户退出浏览器之后即被删除。若希望浏览器将该cookie存储在磁盘上,服务器程序就需要使用maxAge,并给出一个以秒为单位的时间。如果设置为0则是命令浏览器删除该cookie。

比较重要,也比较容易忽略的是,删除cookie时,path和domin必须一致,否则不会删除.所以当我们想要删除一个cookie时,不光要设置maxAge为0,还需要把他的path和domin也设置的和原来的一样,以前做一个项目的时候,遇到过这个问题。

所以在我们需要保存客户信息的时候,我们往往会使用cookie,他可以将信息保存在浏览器端,方便客户下次登录时使用。比如我们实现的自动登录和显示客户昵称,都是使用cookie来带值展示的。不过cookie的生命要根据需求进行设置。


二.Session 1.什么是Session?

和cookie不同的是,Session是保存在服务器端的,服务器在运行时可以为每一个用户的浏览器创建一个其独享的session对象,session是用户浏览器独享的,用户浏览器在访问服务器时,产生的数据也可以放在各自的session中,当用户再去访问服务器中的其它web资源时,其它web资源再从用户各自的session中取出数据为用户服务。

2.Session的API

在java中,有一个接口,javax.servlet.http.HttpSession。它主要有下面一些方法。

getId 此方法返回唯一的标识,这些标识为每个session而产生。

   getCreationTime()返回session被创建的时间。返回的是一个long型的从1970年1月1日到创建时间的毫秒数,即时间戳。

   GetLastAccessedTime 返回session最后被客户发送的时间。最小单位为千分之一秒。

   getAttribute 取session中的一个对象的值,由于这个方法的返回值是Object,所以要进行强制类型的转换。

setAttribute 设置一个key和value。相同的key时,新的值会替换掉任何以前的值。类似于HashMap.需要注意的是,设置的值为简单类型时,会自动装箱成对应的包装类。

3.Session的一些细节问题

服务器为每个用户浏览器创建一个session对象,默认情况下,一个浏览器独占一个session对象。因此,在需要保存用户数据时,服务器程序可以把用户数据写到用户浏览器独占的session中,当用户使用浏览器访问这个web应用的其他资源时,可以从用户的session中取出该用户的数据,为用户服务。Session对象由服务器创建,保存在服务器的内存中,我们可以调用request对象的getSession方法得到服务器的session对象。

当一个session长时间不在服务器活动时,就会被从服务器内存中清除,此时Session便失效。Tomcat中的Session的默认失效时间为20分钟。

用户浏览器传递上来的cookie中,会有一个保存诸如sessionID之类的cookie。所以服务器可以识别客户端浏览器对应的Session。所以当客户端禁用Cookie后,可以URL重写解决这个问题。主要有两个方法:response. encodeRedirectURL(java.lang.Stringurl) 用于对sendRedirect方法后的url地址进行重写。response.encodeURL(java.lang.Stringurl)用于对表单action和超链接的url地址进行重写。


与cookie不同时的是,session存储的是服务器气端的信息,用户可以在这个服务器的任意一个页面访问到session中存储的信息,所以session中存储的多为web开发中的资源信息,比如商城项目中商品的信息,一般不存储客户信息。


了解了cookie和session的API我们不难发现他们的异同之处。

相同点:二者都是作为存储信息的对象,且都可以将其中的值展示在页面中。


我们主要关注的是二者的不行之处:
1.Cookie是把用户的数据写给用户的浏览器,保存在浏览器中。Session是把用户的数据写到用户独占的session中,保存在服务器端。

2.一个Cookie对象代表一个cookie,只能表示一个name和value,cookie中保存的是字符串。。Session类似于一个服务器端的一个基于HashMap的缓存。可以放入多个具有key,value的键值对的属性。value可以是任意的对象。

3.Session没有path和domain,同一个用户在访问一个网站期间,所有的session在任何一个地方都可以访问到。而cookie中如果设置了路径参数,那么同一个网站中不同路径下的cookie互相是访问不到的。

4.session是以cookie为基础的, 服务器需要通过客户端传来的一个名为JSESSIONID的cookie 来找到它对应的session。


这就是我在刚学web项目中困扰我些许时间的问题,今天能拿出来和大家分享,深感荣幸,如果有不恰当的或者理解理解有误的地方,希望大家不吝指教。


作者: 小皖妹妹    时间: 2018-5-3 15:21
如果我有会的地方,一定会告诉你
作者: 奥斯托洛夫斯基    时间: 2018-5-3 15:48

作者: 项老师    时间: 2018-5-3 15:50

作者: O-limin    时间: 2018-5-3 15:50

作者: hguilin    时间: 2018-5-3 15:52

作者: 美美就是美    时间: 2018-5-3 16:03
厉害哦
作者: 皖哥哥    时间: 2018-5-3 17:59
一看就是大牛
作者: 黑马啸西风    时间: 2018-5-3 18:00

作者: 朱浩    时间: 2018-5-3 18:02
6666666
作者: 骑着小猪看雪    时间: 2018-5-4 10:21
6666
作者: 鸟语花香    时间: 2018-5-4 11:10





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2