会话技术

1.会话技术

2.Cookie

3.Session

 

一、会话技术

1.会话技术简介

         会话:用户打开浏览器,浏览页面,直到关闭浏览器的过程称为一次会话。

        为什么要学习会话技术?

       http协议是一个无状态协议,服务器端无法记录客户端浏览器身份信息。

       例如:购物网站,购物车(需要记录用户购买商品的信息)。

                如何做到?  request? 无法实现,会发现结账时,没有任何商品信息。

                                     ServletContext? 无法实现,结账时会发现,所有人的商品信息都在购物车中。

         因此,需要使用会话跟踪技术解决。

        会话跟踪技术包括: Cookie(客户端技术)、Session(服务器端技术)

二、Cookie

1.Cookie简介

      生活中常见的使用Cookie的案例:QQ记住密码、网站智能账号密码填充、百度搜索记录

     作用:将数据存储到本地为了智能填充数据,还能够增强用户体验,缓解服务器压力。

     (1)Cookie在哪

      

       删除所有的本地Cookie 方法:Ctrl + shift + Delete

       

      (2)如何给自己的网站缓存数据

       response 是可以将信息返回到浏览器上,所以设置Cookie 的时候是借助Response对象将Cookie发送到本地浏览器。

       获取Cookie的方法时通过reqeust 进行获取

package com.xj.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class CookieDemo1Servlet extends HttpServlet {
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		this.doPost(request,response);
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//1.创建Cookie----参数name和value都是String,而且不能用非西文
		Cookie cookie = new Cookie("company","QQCY");
		//2.通过response将Cookie传给客户端
		response.addCookie(cookie);
	}

}

   :如果再创建一个Cookie,name一样,那么会覆盖原来的值。

package com.xj.servlet;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class CookieDemo2Servlet extends HttpServlet {

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		this.doPost(request, response);
	}
	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		//获取客户端带来的Cookie
		//request.getCookies()获取所有Cookie
		//不支持按个获取,request方法会直接将所有的cookie全部取到并返回一个数组
		Cookie[] cs = request.getCookies();
		for(Cookie c:cs){
			//Cookie没哟提供根据name获取value的方法,提供了两个方法
			System.out.println(c.getName()+":"+c.getValue());
		}
		
	}
}

2.Cookie的常用方法

       构造方法: Cookie c = new Cookie("",""); 创建Cookie时, name和value都是字符串。注意:不能用中文字符串。

      getName() 获得Cookie的name

      getValue() 获得Cookie的value 注意:Cookie没有提供根据name获取value的方法

      setMaxAge(int 秒) 设置Cookie的存活时间

      setPath() 设置Cookie的有效路径

      浏览器将cookie保存硬盘的路径,是各个浏览器自己制定,其他无法进行操作的。

      有效路径:浏览器发送请求时,cookie的代入路径。

      请求路径 等于或者包含cookie的有效路径,该cookie会在请求时被代入。

      请求路径是从资源位置开始进行判断

方法名

描述

setPath(java.lang.String uri)

设置有效路径。

设置cookie允许被访问的路径。设置的路径,以及子路径都被允许访问。

例如:setPath("/web/a/b");

http://localhost:8080/web/a/b/oneServlet,可访问(当前路径)

http://localhost:8080/web/a/b/c/oneServlet,可访问(子路径)

http://localhost:8080/web/a/c/oneServlet,不允许访问(无关路径)

常见设置:setPath("/") ,当前tomcat下的所有的web项目都可以访问

cookie.setPath("/");

3.封装查找Cookie的工具类

package com.xj.utils;

import javax.servlet.http.Cookie;

public class CookieUtils {
	
	public static Cookie findCookieByName(Cookie[] cs,String name){
		if(cs!=null){
			for(Cookie c:cs){
				if(name.equals(c.getName())){
					return c;
				}
			}
		}
		return null;
	}
}
package com.xj.servlet;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.xj.utils.CookieUtils;

public class CookieDemo2Servlet extends HttpServlet {

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		this.doPost(request, response);
	}
	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		Cookie[] cs = request.getCookies();
		Cookie c = CookieUtils.findCookieByName(cs, "company");
		if(c!=null){
			System.out.println(c.getName()+":"+c.getValue());
		}
		
	}
}

4.设置Cookie的存活时间

        上面的代码创建的Cookie,如果关闭浏览器,再访问CookieDemo2Servlet,控制台不会获取到Cookie,说明上面创建的Cookie是瞬时的。下面的代码设置Cookie的存活时间,即使关闭了浏览器,再访问CookieDemo2Servlet时,还是会获取到。

package com.xj.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class CookieDemo1Servlet extends HttpServlet {
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		this.doPost(request,response);
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//创建Cookie
		Cookie c = new Cookie("address","CHINA");
		//设置存活时间,设置完成后,这个Cookie就编程持久化Cookie,保存在浏览器管理的一个磁盘文件中(保存时间为设置的时间)
		c.setMaxAge(7*24*60*60);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值