通过session的id号获取对应的session

说说为什么要用session!!!

每次访问端通过普通http协议访问tomcat时,访问端包括网页或Android app等,tomcat都会自动生成一个不同的session,而且session的id都不同,一般存活周期五个小时

web的便捷之处就是只要浏览器不关闭或者不注销session,session的id都是固定的,

可是Android的就是个奇葩,每次访问id都会变,可是为什么Android还要执意用session呢?

因为我当时想做一个验证功能,让验证码存在后端的某个地方,同时还可以自动销毁,方便获取

因为servlet的版本升级原因,直接通过session的id获取之前已经存在的session的这个方法已经被官方api抛弃了,所以,想要实现这个给功能,需要自己手动创造这么个方法!!!

话不多说,上代码

步骤1.

找个地方写两个Java的类文件

第一个类:

代码:


import javax.servlet.http.HttpSession;
import java.util.HashMap;

public class MySessionContext {
private static HashMap mymap = new HashMap();
public static synchronized void AddSession(HttpSession session) {
if (session != null) {
mymap.put(session.getId(), session);
}
}
public static synchronized void DelSession(HttpSession session) {
if (session != null) {
mymap.remove(session.getId());
}
}
public static synchronized HttpSession getSession(String session_id) {
if (session_id == null)
return null;
return (HttpSession) mymap.get(session_id);
}
}

第二个类:

代码:

import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

public class MySessionListener implements HttpSessionListener {
public void sessionCreated(HttpSessionEvent httpSessionEvent) {
MySessionContext.AddSession(httpSessionEvent.getSession());
}
public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
HttpSession session = httpSessionEvent.getSession();
MySessionContext.DelSession(session);
}
}

 步骤2:

写好后,去web.xml文件里写一个监听器,监听器的位置不要写错,中间白色的是写上面的第二个类的路径,我把它放在mySession的文件夹里,

所以才写mySession.MySessionListener

 代码:


<listener>
<listener-class>mySession.MySessionListener</listener-class>
</listener>

好了,代码过程部分都好了,现在需要去调用了

现在假设你知道一个session 的id为 a,a是个String类型数据;

那么可通过下面的第三步获得session

步骤3:

HttpSession session = MySessionContext.getSession(a);

这个session就是你要根据id找的session了,如果你之前在session通过方法setAttribute(“key”,“value”)存进去了数据

那么你就可以直接用getAttribute("key")获取这个数据

这时你要注意了,getAttribute("key")获取的值是object类型的,如果你要转成String,

你只需要在获取的值后面加  .String()方法进行转换!!!!

原文地址:https://www.cnblogs.com/c2g5201314/p/10526106.html