java存入cookie

时间:2025-03-18 07:44:10


   

 //创建Cookie
 Cookie cookie = new Cookie("mobile", mobile);
 //设置Cookie的最大生命周期,否则浏览器关闭后Cookie即失效
 (Integer.MAX_VALUE);
 //将Cookie加到response中
 (cookie);
   public static HttpSession getSession(){
		ServletRequestAttributes ra = (ServletRequestAttributes) ();
		HttpServletRequest request = ();
		HttpSession session = ();
		return session;
	}

1. RequestContextHolder类

文档描述: Holder class to expose the web request in the form of a thread-bound RequestAttributes object.,简单翻译下,这个类的作用是通过操作RequestAttributes请求属性这个对象(绑定了线程)来间接处理请求相关的一些东西。

所以你可以看到代码中首先拿到了RequestAttributes对象,当然这里要转成Servlet类型。

2. ServletRequestAttributes类

如果不转型,那个attributes类是无法方便操作requestsession这些原生servlet相关的对象或者属性的,因为本身Java Web最原始的实现就是servlet形式的,Spring框架当然会为其做特定的一些封装,也就是这个类的来源。

代码中首先通过属性拿到了HttpServletRequest对象,然后通过请求对象拿到session

3. NamedThreadLocal

最后一个关键点就是,RequestContextHolder如何绑定线程,说白了,它也是组合了ThreadLocal,在setAttribute中本质上也是把value放到ThreadLocalMap中,相关源码如下:

private static final ThreadLocal<RequestAttributes> requestAttributesHolder =
			new NamedThreadLocal<RequestAttributes>("Request attributes");
public void set(T value) {
        Thread t = ();
        ThreadLocalMap map = getMap(t);
        if (map != null)
            (this, value);
        else
            createMap(t, value);
    }