session学习-实现访问计数

来源:互联网 发布:mac系统忘记密码 编辑:程序博客网 时间:2024/05/22 06:55

浏览器访问Web服务器时,服务器会为每一个浏览器在服务端的内存中分配空间,单独创建一个Session对象,该对象有一个ID属性,其值唯一,一般称为sessionID,并且服务器会将这个sessionID(使用Cookie的方式)发送给浏览器;浏览器再次访问服务器时,会将sessionID发送给服务器,服务器可以依据sessionID找到对应的session对象.

以下是本文的目录大纲:
1、session 工作原理
2、如何获得session
3、如何使用session绑定对象
4、实例:使用session实现访问技术

若有不正之处,请批评指正,不胜感激。
若转载请标明原文链接:
session学习-实现访问计数



1、session 工作原理
session工作原理

2、如何获得session

HttpSession session = request.getSession(boolean flag);
注:

  • HttpSession是个借口,后面返回的是符合接口规范的对象
  • 当flag为true时:先查看请求中有没有sesssionID,如果没有sessionID,服务器创建一个session对象;如果有sessionID,依据sessionID查找对应session对象,找到则返回,找不到则创建一个新的session对象,所以flag为true时,一定能得到一个session对象
  • 当flag为false时,没有sessionID及有sessionID但没有找到session对象,均返回null;找到则返回。

HttpSession session = request.getSession();
等价于request.getSession(true);

3、如何使用session绑定对象

绑定对象:

void session.setAttribute(String name,Object obj);

获取绑定对象:

Object session.getAttribute(String name);

移除绑定对象:

void session.removeAttribute(String name);

注:getAttribute方法的返回值是Object类型,在去除数据时要对其进行数据类型转换,且必须与我们存入的数据类型一致

4、实例:使用session实现访问技术

  • 问题

记录不同客户端访问服务器的次数

  • 方案

由于对不同的客户端需要区分,所以使用session记录不同客户端的数据。由于访问次数需要保留,所以使用setAttribute方法进行记录。第一次访问时存储为1,后续访问在此基础上自增。

  • 步骤

step1 :新建CountServlet

package web;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;public class CountServlet extends HttpServlet {    public void doGet(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        response.setContentType("text/html;charset=UTF-8");        PrintWriter out = response.getWriter();        //获取session对象        HttpSession session = request.getSession();        //输出sessionID        System.out.println(session.getId());        //获取绑定的计数器        Integer count=(Integer) session.getAttribute("count");        if(count==null){            count=1;        }else{            count++;        }        //在session中绑定计数器        session.setAttribute("count", count);        //输出提示信息        out.println("这是第"+count+"次访问");        out.close();    }}

step2:配置web.xml

<servlet>    <servlet-name>CountServlet</servlet-name>    <servlet-class>web.CountServlet</servlet-class>  </servlet>  <servlet-mapping>    <servlet-name>CountServlet</servlet-name>    <url-pattern>/count</url-pattern>  </servlet-mapping>    

step3:部署,访问
访问

查看控制台输出窗口:
控制台输出sessionID

*结论:
sessionID跟随一次会话,存储在客户端浏览器的内存中的Cookie里面。第一次创建后,只要不关闭浏览器,那么每一次的请求sessionID都会被自动发送到服务器端。重启浏览器后,sessionID会被销毁,重新创建新的数值。另外,及时打开多个同一个浏览器,sessionID不改变,计数会累加。*


如果有哪位朋友有补充的内容,欢迎下方留言,不胜感激。

0 0