说说为什么要用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()方法进行转换!!!!