Session
session学习:
问题:用户不同的请求在处理的时候需要使用其他请求中的数据该怎么办?
解决:使用session技术
使用:
HttpSession session = req.getSession(); 创建session对象
session.setAttribute(String name, Object value); 存储数据到session中
HttpSession session = req.getSession(); 获取session对象
session.getAttribute(String uname); 获取session中的数据
注意:返回的是Object类型,需要强制转化
删除session中的数据
session.removeAttribute(String uname);注意:如果有数据则删除,没有则什么都不做
流程:
1、 浏览器发起请求到Aservlet,在Aservlet中使用req.getSession()获取Session对象,如果此次请求中没有
* SessionID则创建一个新的Session对象,如果有SessionID则将其对应的Session对象返回(前提是该session对象没有到期 )
如果session对象到期销毁了,就算有sessionID也会创建
2、 校验session是否失效,存储数据到session对象中或者获取session中的数据或者删除session中的数据
特点:
session解决了同一个用户不同请求的数据共享问题
session的作用域:浏览器不关闭,session不失效,则同一用户的任意请求获取的都是同一个session
一次会话
session的设置
session默认有效时间为30分钟,可以在tomcat下的web.xml中进行配置
注意:此种配置方式是所有tomcat下的项目默认为30分钟
也可以在代码中使用
session.setMaxInactiveInterval(int seconds);//设置session的有效时间,参数为整数类型的秒
session.invalidate(); //强制销毁session对象
ServletContext对象
作用:解决了不同用户之间的数据共享问题
使用:
创建ServletContext对象的三种方式
ServletContext sc1 = this.getServletContext();
ServletContext sc2 = this.getServletConfig().getServletContext();
ServletContext sc3 = req.getSession().getServletContext();
存储用户共享数据 sc.setAttribute(String name, Object value);
获取用户共享数据 sc.getAttribute(String name);
删除共享数据 sc.removeAttribute(String name);
获取web.xml中的全局配置属性
作用:将部分动作和源文件进行解耦,我们只需要在xml配置文件中进行相关配置就会改变代码的执行效果。
sc.getInitParameter(String name);注意返回的是String类型数据
获取webRoot下的资源对象
sc.getResourceAsStream(String path);
注意:
path为相对路径,写从webRoot开始查找资源的路径即可。
获取webRoot下的资源绝对路径
sc.getRealPath(String path);
注意:
path为相对路径,写从webRoot开始查找资源的路径即可。
特点:
服务器创建
所有用户共享
生命周期:服务器开启到服务器关闭
网友评论