ServletContext对象
-
概念:代表整个web应用,可以和程序的容器(服务器)来通信
可以将其想象成表
名字(String) 值(Object) -
获取:
-
通过request对象获取
request.getServletContext();
-
通过HttpServlet获取
this.getServletContext();
this.getServletConfig().getServletContext();
-
请求转发:
this.getServletContext().getRequestDispatcher("/url").forward(request, response);
//效果等同request转发
-
-
功能:
-
获取mime类型:
- MIME类型:在互联网通信过程中定义的一种文件数据类型
- 格式:大类型/小类型 text/html img/jpeg
- 获取:String getMimeType(String file)
- MIME类型:在互联网通信过程中定义的一种文件数据类型
-
域对象:共享数据
添加属性:setAttribute(String name , Object obj );
获取值:Object getAttribute(String name) ;
删除属性:removeAttribute(String name);
ServletContext对象范围:所有用户所有请求的数据
谨慎使用!!这个对象会在内存中存在较长时间,占用内存
-
获取文件的真实(服务器)路径
-
方法:String getRealPath(String path)
String realpath = context.getRealPath("/b.txt"); //对应web目录下的资源访问 File file = new File(realpath); ``` //src下的目录未来将被放到/WEB-INF/classes/下 String realpath = context.getRealPath("/WEB-INF/CLASSES/a.txt");
//session,cookie
-
-
Cookie
简介
Cookies 是存储在客户端计算机上的文本文件,并保留了各种跟踪信息。
识别步骤
- 服务器脚本向浏览器发送一组 Cookies。例如:姓名、年龄或识别号码等。
- 浏览器将这些信息存储在本地计算机上,以备将来使用。
- 当下一次浏览器向 Web 服务器发送任何请求时,浏览器会把这些 Cookies 信息发送到服务器,服务器将使用这些信息来识别用户。
使用步骤
-
创建cookie对象,绑定数据
new Cookie(String name, String value);
-
发送cookie
response.addCookie(Cookie cookie);
-
获取Cookie,获取数据
Cookie[] request.getCookies();
在服务器向浏览器发送好请求后,浏览器会自动保存cookie,
下次发送请求时,会自动放在消息头里
默认情况下,当浏览器关闭后,Cookie数据被销毁
持久储存:
setMaxAge(int seconds):1. 正数:将cookie数据写到硬盘文件中。cookie存活时间
2. 负数:默认值
3. 零:删除cookie信息
- 默认情况下cookie不能共享
setPath(String path):设置cookie的获取范围。默认情况下,设置当前的虚拟目录(如果要共享,设置"/")
特点
- cookie存储于客户端浏览器
- 浏览器对应单个cookie大小有限制(4kb),同一个域名下的cookie数量也有限制(20个)
- 一般用于存储少量不太敏感数据
- 在不登录的情况下,完成服务器对客户端的身份识别
Session
概念:
服务器会话技术,再一次会话的多次请求间共享数据,将数据保存在服务器端的对象中。HttpSession也是一个域对象,同样可以使用
getAttribute(String name)
setAttribute(String name, object value)
removeAttribute(String name)
使用步骤
-
获取session对象
HttpSession session = request.getSession();
-
使用对象
原理
服务器如何确保在一次会话范围内,多次获取的Session对象是同一个:
Session是依赖于Cookie的
响应头:set-cookie:JSESSIONID=xxxxxxxx
服务通过JSESSIONID获取同一个session对象
请求头: cookie:JSESSIONID=xxxxxxxx
细节
-
客户端关闭后,服务器不关闭,两次获取session不是同一个
-
客户端不关闭,服务器关闭后,两次获取的session
- 不是同一个,但是要确保数据不丢失
- session的钝化:
- 在服务器正常关闭之前,将session对象系列化到硬盘上
- session的活化:
- 在服务器启动后,将session文件转化为内存中的session对象即可。
- session的钝化:
- 不是同一个,但是要确保数据不丢失
-
session对象的失效时间
-
服务器关闭
-
session对象调用invalidate()
-
默认失效时间30分钟:
在web.xml中进行修改
-
session的特点
- session用于一次会话中的任意请求的数据,存在服务端
- session可以储存任意类型,任意大小的数据
- 与cookie的区别
- session存储在服务器,cookie存储在客户端
- session没有数据大小的限制,Cookie有
- session数据安全,Cookie相对不安全