(1)介绍
(2)作用
Cookie能够解决在发送了不同请求后的数据共享问题
创建Cookie对象,绑定数据。调用带有 cookie 名称和 cookie 值的 Cookie 的构造函数,cookie 名称和 cookie 值都是字符串。
new Cookie(String name, String value);
设置最大生存周期:使用 setMaxAge(int expiry)
方法来设置 Cookie 可以保存的最长时间,单位为秒,如
c.setMaxAge(10);
当超过设定的最大时间之后,Cookie 会消失,再次加载网页时,不会再获取到之前存入的Cookie
响应 Cookie 对象给客户端。
response.addCookie(Cookie cookie);
获取Cookie,拿到 Cookie 数据数组
Cookie[] cookies = request.getCookies();
遍历数组获取 Cookie 信息,如for循环
if(cookies != null){
for(Cookie c: cookies){
String name = c.getName();
String value = c.getValue();
}
}
(3)Cookie示例
利用Cookie显示上次刷新网页时间
@WebServlet("/cookieDemo1")
public class CookieDemo1 extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
Cookie[] cookie = request.getCookies();
if(cookie != null) {
for(int i = 0; i < cookie.length; i++) {
if(cookie[i].getName().equals("time")) {
response.getOutputStream().write(("上次登录时间:" + cookie[i].getValue() + "\n").getBytes("utf-8"));
}
}
}
String time = new Date().toLocaleString();
Cookie c = new Cookie("time", time);
response.addCookie(c);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
Cookie可以设置临时存储也可以设置定时存储
临时存储:数据存储在浏览器的云个性内存中,历览器关闭Cookie即失效
定时存储:设置cookie的有效期,数据存储在客户端的硬盘中,在有效期内的有效请求都会附带该cookie信息,,如设置一个cookie的有效期为七天
Cookie cookie = new Cookie("key","value");
cookie.setMaxAge(7*24*60*60);
Cookie cookie = new Cookie();
cookie.setPath(String uri);
(1)介绍
(2)session的原理
用户第一次访问服务器,服务器会创建一个session对象给此用户,并将该session对象的JSESSIONID使用Cookie技术存储到浏览器中,保证用户的其他请求能够获取到同一个session对象,也保证了不同请求能够获取到共享的数据。
(3)特点
session由服务器创建,存储在服务器端,其依赖与cookie技术,session的有效期为一次会话。
(1)创建/获取 Session 对象
HttpSession session = request.getSession();
在服务器第一次执行 getSession() 方法,执行时会首先判断当前浏览器是否携带JSESSIONID 的 Cookie。
(2)使用Session对象
//存储数据
void setAttribute(String name, Object value);
//取出数据
Object getAttribute(String name);
void removeAttribute(String name);
(3)session 失效处理
将用户请求中的 JSESSIONID 和后台获取到的 session 对象的 JSESSIONID 进行比对,如果一致则 session 没有失效,如果不一直则说明 session 失效了。
(1)当客户端关闭后,服务器不关闭,两次获取 Session 默认情况下不是同一个,即 JSESSIONID 是存储在 Cookie 的临时存储空间中,浏览器关闭即失效。如果需要两次获取的 Session 是同一个,可以创建 Cookie,键为 JSESSIONID,设置最大存活时间,让 Cookie 持久化保存。
Cookie cookie = new Cookie("JSESSIONID", session.getId());
cookie.setMaxAge(60*60);
response.addCookie(cookie);
(2)客户端不关闭,服务器关闭后,两次获取的 session 不是同一个,但是要确保数据不丢失,tomcat 自动完成以下工作:
(3)Session 的销毁
<session-config>
<session-timeout>30</session-timeout>
</session-config>
(1)ServletContext对象
ServletContext对象特点
由服务器创建,用户共享,一个项目只有一个ServletContext对象,其作用域在整个项目内
获取ServletContext对象
ServletContext sc1 = this.getServletContext();
ServletContext sc2 = this.getServ1etConfig( ).getServletContext();
ServletContext sc3 = request.getSession().getServletContext();
ServletContext对象数据共享
//存储数据
sc1.setAttribute("str","ServletContext 数据共享");
//获取数据
sc1.getAttribute("str");
获取项目中web . xml文件中的全局配置数据
根据键的名字返web. xml中配置的全局数据的值,返回String类型,如果数据不存在返回null。
sc.getInitParameter(String name);
返回键名的枚举
sc.getInitParameterNames() ;
配置方式
<context-param>
<param-name>name</param-name>
<param-value>zhangsan</param-value>
</context-param>
一组
标签只能存储一组键值对数据,多组可以声明多个
进行存储。
(2)ServletConfig对象
ServletConfig对象是Servlet 的专属配置对象,每个Servlet 都单独拥有一个ServletConfig 对象,用来获取web.xml中的配置信息。
获取ServletConfig对象
Serv1etConfig sc=this.getServ1etConfig();
//获取web.xml中的配置数据
String code=sc.getInitParameter("name");
web.xml文件的配置
<init-param>
<param-name>name</param-name>
<param-value>value</param-value>
</init-param>
(1)Session 存储数据在服务器端,Cookie 存储数据在客户端;
(2)Session 没有数据大小限制,Cookie 有数据大小限制;
(3)Session 数据安全,Cookie 数据相对不安全。
(1)会话跟踪介绍
会话跟踪指的是对同一个用户对服务器的连接的请求和接受响应的监视。
(2)会话跟踪作用
浏览器与服务器之间的通信是通过HTTP协议进行通信的,而HTTP协议是“无状态”的协议,它不能保存客户的信息,即一次响应完成之后连接就断开了,下一次的请求需要重新连接,这样就需要判断是否是同一个用户,所以才有会话跟踪技术来实现这种要求。
(1)URL重写
(2)隐藏表单域
(3)Cookie
(4)Session