1、servletcontext:每一个web应用启动(配置到web容器中)时,web容器都会产生一个实现了servletcontext接口的实例(或者说在servlet引擎中产生了一个实现了servletcontext接口的实例对象),servlet引擎实例化servlet,每个servlet都实现了servlet接口和servletconfig接口,servletconfig允许servlet接受servletcontext。在服务停止时servletcontext才会消亡。
2、cookie/session:JSP页面中会话 Cookie 的“会话”这里不是指 Server 端的 Session ,而是指的是浏览器,所以会话 Cookie 的生命周期不是与 Server 端的 Session 那个会话相同,而是与浏览器相同,就是说只要开着浏览器会话 Cookie 就存在,关闭浏览器它就过期了。但是会话 Cookie 的值是与 Server 端的 SessionId 对应相同的。就是说会话Cookie随着Server端Session的创建而创建,但并不随着Session的过期而过期,而是随着Client端的浏览器关闭而销毁。只要会话Cookie 出现了,Server 端的 Session 就已经创建了。当浏览器第一次向服务器发送请求时,serlet引擎产生request请求,当request提交到servlet时,通过HttpServletRequest.getSession(true)就产生了session。
/////////////////////
【cookies介绍】
1.服务器可以向客户端写内容
2.只能是文本内容,而且有大小限制,一般是4K
3.客户端可以阻止服务器写入
4.只能拿自己webapp写入的东西
5.Cookie分为两种:
!属于窗口/子窗口(放在浏览器对应内存中,与浏览器共存亡)
!属于文本(有生命周期的)
6.一个Servlet/Jsp设置的cookies能够被同一路径下面或者子路径下面的Servlet/Jsp读到(路径=URL;路径!=真实文件路径)
7.如何创建cookies?(在服务端创建,存放到客户端)
Cookie cook = new Cookie(String name,String value);
cook.setMaxAge(30);//存在时间,单位:秒,若不设置,则不保存
8.如何将cookie添加到客户端?
response.addCookie(cook);
9.如何读取客户端的cookie到服务器端?
Cookie[] cookies = request.getCookies();
10.在服务器端删除客户端的Cookies?
Cookie[] cookies = request.getCookies();
cookies[i].setMaxAge(0);//设置生存期为0,即删除
【Session介绍】
1.服务器的一块内存(存Key-Value)
2.和客户端窗口对应(包括其子窗口)
3.客户端和服务器端有对应的SessionID
4.客户端向服务器端发送SessionID的两种方式:
!cookie(内存cookie)
!rewrite URL
5.浏览器禁掉cookie,就不能使用session(使用cookie实现的session)
6.如果想安全的使用session(不论客户端是否禁止cookie),只能使用URL重写方式。
7.如何得到session
HttpSession hs = request.getSession(true);
8.向session添加属性
hs.setAttribute(String name,Object value);
9.从session得到某个属性
String name = hs.getAttribute(String name);
10.从session删除某个属性
hs.removeAttribute(String name);
【Cookie VS Session比较】
1.Cookie保存在客户端,Session保存在服务器端,
安全性:Cookie
2.Cookie生命周期是累积的,从创建时开始计时,并且不受主机关机影响;Session生命周期是间隔的,不访问Session连续时间达到设定值时,生命周期才结束,并且主机关机将使Session生命周期结束;
3.Cookie通过网络在客户端与服务器端传输,而Session保存在服务器端不需要传输,但需要在浏览器端保存一个SessionId即可;
#ServletContext用法
1.存在于服务器端,所有访问服务器的客户端共用
2.得到ServletContext:this.getServletContext(); (this-->Servlet子类)
3.添加属性:setAttribute(String name,Object obj);
4.获得属性:(Object)getAttribute(String name);
5.删除属性:removeAttribute(String name);
6.生命周期:ServletContext中的属性从创建开始,到服务器关闭而结束,鉴于其长期存在于服务器内存中,一般不会向其中放入太大数据量;
/////////////////////
3、request: