cookie ,session,servletContext的区分
刚刚学完servlet,感觉也没什么东西,只是用到了api中的几个类。这几个类能够作为一门技术来被人学习,可见他们是很重要的。
servlet的整个过程就是cookie,session和servletContext的处理,再加上一些分页的处理。
其实这三个类很容易区分。
cookie:
cookie对我们并不陌生,每个浏览器都有是否要保存cookie的设置。cookie是存放在客户端的缓存文件,比如登录的用户名,密码。对页面的一些个性设置等。
session是客户端意识不到的。他是存放在服务器的内存中的。他存在的时间比较短,一般处理页面的跳转时用到,用来提交数据。session是对浏览器而言的,而不是对浏览器的每一个页面。比如我登录人人网时就在服务器端创建一个该浏览器的session,欢迎界面也可以访问到这个session,他可以从这个session中提取数据。如果我们在单独打开一个浏览器,他是访问不到上面的那个session的。
servletContext也是保存在服务器端的。但他与session不同,他是可以被每个连接到该服务器的客户访问到的。我们在处理网页的浏览次数时就用到了servletContext,我们把浏览次数保存在servletContext中,每个人都可以看到这个网页总共被浏览了多少次。这是session做不到的。
下面说一下登录的处理过程进一步体会cookie,session,servletContext的用法:
我们用到了三个页面,login (登录界面) ,loginCl(登录处理界面,处理完就会跳转到欢迎界面,跳转很快客户是看不到的),wel(欢迎界面)
当用户输入用户名,密码,点击登录后,就会跳转到logincl界面,并把用户名,密码数据提交过去。
在logincl界面接受数据,并访问数据库进行校验,把校验成功的数据写入cookie(用户可以下次直接进入欢迎界面不必重新登录)和session
写完之后跳转到欢迎界面。
在欢迎界面 服务器 获取session,并校验是否存在该用户名,如果存在校验成功。如果不存在就可能是以前登录过的用户直接输入的欢迎界面的url,应该从客户端获取cookie,从中取值在到logincl中校验。
浏览次数的处理用到了cookie和servletContext。 这个cookie是保存在服务器端的,当servlet启动时就从cookie文件中读取浏览次数(比如是100次)并把数据存放到servletContext中。客户端没登录一次,servletContext中的值就+1。当服务器关闭时再把servletContext中的值写入到cookie文件中。为了做到上面的功能,cookie的读取应该放到servlet的init()方法里(这样他只读取一次)。把写入存放在destory()方法中。这样服务器从启动到关闭只对这个cookie进行了一次读取,一次写入,大大减少了服务器的负担。
注:cookie,session,servletContext 中存放的数据应该是小量的。他们扮演的角色是为他人做嫁衣。他们就像是救苦救难的观音菩萨,只有当自己遇到克服不了的困难时才会求救于他,如果事事都叫菩萨来帮忙,菩萨就不灵了。