一.http无状态
http每次请求和响应都是独立的,相互没有关系,并且不能共享数据。
二.解决http无状态的方法(会话跟踪技术)
1.URL重写
2.表单隐藏域
3.Cookie
5.Session
6.会话:从浏览器打开一个网址开始,一直到关闭浏览器结
为一次会话.
a.一个会话里包含多个请求与响应。
b.会话开始的标志是:浏览器打开页面;结束的标志是:浏览器关闭
会话跟踪是解决浏览器和服务器多次请求与响应保持数据共享的技术。
三.Cookie
1.Cookie不是jsp内置对象
2.概念:cookie是一小段文本信息,伴随着用户的请求,在服务器和客户端之间进行传递。是javax.servlet.http.cookie的类的对象。以键值对的形式保存数据。
(浏览器最多只能保存300个cookie,每个站点最多保存20个)
3.方法
1.response.addCookie(cookie):通过响应报头将cookie响应到客户端。
2.setMaxAge().设置cookie最大存活时间。
-1:浏览器关闭就清除cookie.
0:立即删除
3.setPath()
a.默认路径是上下文
b .“/”指容器内(或者服务器)所有项目都可以拿到cookie
4.setValue():设置cookie的值
5.getValue():获取cookie的值
6.Cookie cookie = new Cookie(name,value);
7.getName()获取cookie的键名
服务端只能访问同域同路径的cookie
4.保存位置:保存在客户端的硬盘当中。
5.如果要在cookie中写中文,必须要URLencoder.encode()方法进行编码,读取是用URLdecoder.decode()方法进行解码。
6.总结:
a.cookie保存在客户端的硬盘中
b.cookie是由服务器创建的
c.cookie是由服务器通过响应报头发送给客户端的
d.cookie是由浏览器通过请求报头发送给服务端的
四.内置对象Session
1.session:是javax.servlet.http.HttpSession类的对象,在请求到达服务器时创建。在jsp中称为会话。
2.session的作用和核心就是共享数据。
3.session的过期时间是30分钟,如果是在eclipse内,那么在server目录下修改web.xml 中<session-timeout>30</session-timeout>(单位是分钟),如果没有开发工具,直接在tomcat下conf目录下,修改web.xml。
4.方法
4.1 getId()获得sessionID,主要用于浏览器被禁用时通过URL重写向服务器发送sessionID
4.2getCreationTime()获得session创建时间。
4.2getLastAccessedTime()获得最后一次请求时间。
4.3setMaxInactiveInterval(30)设置session过期时间(单位为秒)
4.4getMaxInactiveInterval()获得session过期时间
4.5isNew()判断是否是新的session。
4.6setAttribute(name,value)在session中封装数据,以键值对的形式保存
4.7getAttribute(name)从session中根据键获取数据
4.8invalidate()强制session过期。
5.cookie和session的区别
1.session存储在服务器中,cookie存储在客户端。
2.cookie最多存储4KB数据,只能存储文本类型的数据,session中可以存储Object类型的数据。
3.cookie存储在客户端,安全性较低,session存储在服务器安全性较高。
4.session在生命周期内会存储在服务中内存中,如果访问量大则服务压力较重。
5.浏览器最多只能保存300个cookie,每个站点最多保存20个。
6.session是内置对象,cookie不是,如果要在cookie中写中文,必须要URLencoder.encode()方法进行编码,URLdecoder.decode()方法用于读取时解码,session则不需要。
五.include指令
<%@include file=" 页面名称" %>
六.内置对象Application对象
1.java.servlet.ServletContext接口的对象,作用是共享数据。Applicationd对象当前应用程序的上下问,所有用户都可以访问,相当于一块公共的存储区域,生命周期为容器启动到容器关闭。
2.方法
2.1setAttribute(name,value),在application中封装数据。
2.2 getAttribute(name),获取在application中封装的数据。
2.3 removeAttribute(name),在application中封装数据。
2.4 getRealPath(“”);获得当前请求的项目在服务器中的文件路径。