服务器端解决HTTP协议无状态问题

Servlet中点击流的统计:
servlet属于单例实例

用于统计点击次数的变量设置为全局变量,那么不同的浏览器访问相同网页的点击数就会叠加,这样的统计不准确

然而设置为局部变量的话,每次请求都会重新赋值,无法保存上一次的请求信息,起不到累计统计的效果,这就是http的无状态

这时使用访问状态管理的效果时最佳的
即:tomcat提供了存储机制(seesionid机制) 每个浏览器访问请求都会在服务器里开辟一个空间存储计量变量(相当于一个map)这里的空间容器会给浏览器一个seesionid用于识别, 如果同一个浏览器访问就会被识别 然后可以获取空间容器中存储的变量,在进行累加,并把累加后的值重新设给空间容器中。(浏览器每次请求服务器也都会返回给浏览器一个Cookie,Cookie会携带着seesionid,浏览器同时也会开辟一个空间存储seesionid下次访问请求时把seesionid带上,这样服务器就可以对浏览器进行识别)

**注意:**如果在集群环境中,会出现查询不到seesionid的情况,这时我们需要集中化管理,设置一台专门管理seesionid的服务器。

@Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        int i=0;
        HttpSession session = req.getSession();  //相当于存储编号的容器
        if(session.getAttribute("i")!=null){//判断本台浏览器有没有请求访问过
            i=(Integer) session.getAttribute("i"); 
        }
        i++;
        session.setAttribute("i",i);
        resp.setContentType("text/html;charset=utf-8");  
        PrintWriter out = resp.getWriter();
        //以下属于用非跳转页面编写html页面
        //手工拼写页面
        out.println("<html>");
        out.println("<head>");
        out.println("</head>");
        out.println("<body>");
        out.println(session.getId()+"访问的次数为:"+i);
        out.println("</body>");
        out.println("</html>");
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值