第三十一节(java-实现QQ空间访问量统计系统)

LoginServlet登录页面:

package com.tanzhou.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.util.Enumeration;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import com.tanzhou.util.User;
import com.tanzhou.util.UserList;

public class LoginServlet extends HttpServlet {

    public LoginServlet() {
        super();
    }

    public void destroy() {
        super.destroy(); // Just puts "destroy" string in log
    }

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

           doPost(request,response);
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        response.setContentType("text/html;charset=utf-8");

        String name = getNewString(request.getParameter("username"));
        String pass = request.getParameter("userpass");

        if(name==null || "".equals(name)){
            response.sendRedirect("/OnlineUserDemo/login.html");
            return ;
        }else{

            // 讲登录的用户名和密码保存到session中
            HttpSession session = request.getSession(true);

            // 保存对象到session
            User user = (User)session.getAttribute("user");
            if(user==null || !name.equals(user.getName())){
                user = new User(name);
                session.setAttribute("user", user);
            }
        }

        PrintWriter out = response.getWriter();
        out.println("欢迎用户:"+name+"登录"+"<br/>");
        out.println("<hr>"+"在线人数列表:"+"<br/>");
        UserList ul = UserList.getInstance();
        /**
         * Enumeration(列举)
         */
        Enumeration<String> enums = ul.getUserList();
        int i = 0;
        while(enums.hasMoreElements()){
            out.println(enums.nextElement()); // 遍历出来的用户信息
            out.println("&nbsp;&nbsp;&nbsp;");
            if((++i%8)==0){
                out.println("<br>");
            }
        }
        out.println("<hr>");
        out.println("<br>"+"在线人数:"+ul.getUserCount());
        out.println("<br>"+"<a href=‘/OnlineUserDemo/servlet/OutServlet‘>退出登录</a>");
        out.flush();
        out.close();
    }

    public void init() throws ServletException {
    }
   /**
    * 编码集处理
    * @param str
    * @return
    * @throws UnsupportedEncodingException
    */
    public static String getNewString(String str) throws UnsupportedEncodingException
    {
        return new String(str.getBytes("ISO-8859-1"),"UTF-8");
    }
}

OutServlet退出页面:

package com.tanzhou.servlet;

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;

import com.tanzhou.util.User;

public class OutServlet extends HttpServlet {

    /**
     * Constructor of the object.
     */
    public OutServlet() {
        super();
    }

    /**
     * Destruction of the servlet. <br>
     */
    public void destroy() {
        super.destroy(); // Just puts "destroy" string in log
        // Put your code here
    }

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        doPost(request,response);
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        response.setContentType("text/html");
        PrintWriter out = response.getWriter();

        HttpSession session = request.getSession(true);
        User user = (User)session.getAttribute("user");

        session.invalidate(); // session销毁
        response.sendRedirect("/OnlineUserDemo/login.html");
    }

    /**
     * Initialization of the servlet. <br>
     *
     * @throws ServletException if an error occurs
     */
    public void init() throws ServletException {
        // Put your code here
    }

}

User页面:
package com.tanzhou.util;

import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;
/**
 *
 * @author Tony Liu
 *
 *
 *如果一个对象实现了HttpSessionBindingListener接口,当这个对象被绑定到session中或者从session中被删除时,
 *Servlet容器会通知该对象。
 */
public class User implements HttpSessionBindingListener{
    // 得到UserList的实例
    private UserList ul = UserList.getInstance();
    private String name;

    public User(String name){
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
    /**
     * session创建对象--自动调用valueBound     用户登录
     */
    @Override
    public void valueBound(HttpSessionBindingEvent arg0) {
        ul.addUser(name);  // 添加用户
    }
    /**
     * session销毁--自动调用valueUnbound  用户退出
     */
    @Override
    public void valueUnbound(HttpSessionBindingEvent arg0) {
        ul.removeUser(name);  //删除用户
    }

}

UserList页面:

package com.tanzhou.util;

import java.util.Enumeration;
import java.util.Vector;

/**
 * 用户集合类
 * @author Tony Liu
 *
 *
 *
 * 单例模式---是指一个类只有一个实例,并且能够自行的实例化
 * 特点:构造方法是私有
 *
 * 单例模式:懒汉式单例  饿汉式单例   登记式单例
 * 特点:
 *   1、单例类只能有一个实例
 *   2、单例类必须自己创建自己的唯一实例
 *   3、单例类必须给所有其他对象提供这一实例
 */
public class UserList {

    private static final UserList userList = new UserList();
    /**
     * List 接口一共有三个 ArrayList  Vector  LinkedList
     */
    private Vector<String> v; //用户集合

    private UserList(){
        v = new Vector<String>();
    }

    public static UserList getInstance(){
        return userList;
    }
    /**
     * 用户登录-添加用户信息
     * @param name
     */
    public void addUser(String name){
        if(name!=null){
            v.addElement(name);
        }
    }

    /**
     * 用户退出的方法
     * @param anme
     */
    public void removeUser(String name){
        if(name!=null){
            v.remove(name);
        }
    }
    /**
     * 用户数量的统计
     * @return
     */
    public int getUserCount(){
        return v.size();
    }
    /**
     * Enumeration (列举)
     * @return
     */
    public Enumeration<String> getUserList(){
        return v.elements();
    }
}
时间: 2024-10-08 11:04:51

第三十一节(java-实现QQ空间访问量统计系统)的相关文章

第三十七节(java-开发流量分析统计系统)

User.java文件里: package com.tanzhou.util; import javax.servlet.http.HttpSessionBindingEvent; import javax.servlet.http.HttpSessionBindingListener; /** * 用户对象 * * @author Ming * @version 1.0 * 2015-2-7 * *实现了HttpSessionBindingListener接口,就会把user对象绑定到sess

centos 邮件服务 第三十一节课

centos   邮件服务  第三十一节课 上半节课 下半节课 f

三十一、Java图形化界面设计——布局管理器之GridLayout(网格布局)

摘自http://blog.csdn.net/liujun13579/article/details/7772491 三十一.Java图形化界面设计--布局管理器之GridLayout(网格布局) 网格布局特点: l  使容器中的各组件呈M行×N列的网格状分布. l  网格每列宽度相同,等于容器的宽度除以网格的列数. l  网格每行高度相同,等于容器的高度除以网格的行数. l  各组件的排列方式为:从上到下,从左到右. l  组件放入容器的次序决定了它在容器中的位置. l  容器大小改变时,组件

基于SSM框架下的JAVA制造业企业工料报废统计系统

最近了解了制造业企业工料报废统计项目,在这个平台记录一下这个制造业企业工料报废统计项目,方便以后再次使用或学习的时候能够及时的翻阅.在完成这个项目的时候,考虑了很多框架.最终决定选用SSM(MYECLIPSE),该框架具有极强的移植性,多平台性,便于操作性等优点.此框架能在MYECLIPSE开发工具中完美的编写和运行,制造业企业工料报废统计为一个 后台项目.这个项目的描述是这样的:随着计算机技术的飞速发展,计算机在各行各业管理中应用的普及,利用计算机实现制造业经济效益管理势在必行.本系统是结合制

I学霸官方免费教程三十一:Java集合框架之List集合

集合框架 在数组的使用过程中可以看到,想要向数组中插入元素和删除元素非常麻烦,而且数组的长度是无法改变的.java为我们提供了批量存储数据更加方便的容器,就是集合.集合和数组的作用一样,都是为了使用一个变量来存储一批数据的:但集合使用起来更加方便,而且集合的长度是可以变化的. List接口 List集合可以存储有序的,可重复的数据:常用的子类是ArrayList和LinkedList两个类 ArrayList类 这是一个底层由数组实现的集合类,是对数组进行了封装. 实例: package col

第二百三十一节,Bootstrap 介绍

Bootstrap 介绍 学习要点: 1.Bootstrap 概述 2.Bootstrap 特点 3.Bootstrap 结构 4.创建第一个页面 5.学习的各项准备 本节课我们主要了解一下 Boostrap 历史.特点.用途,以及为什么选择 Boostrap 来开 发我们的 Web 项目. 一.Bootstrap 概述 Bootstrap 是由 Twitter 公司(全球最大的微博)的两名技术工程师研发的一个基于 HTML.CSS.JavaScript 的开源框架.该框架代码简洁.视觉优美,可

第三十一节,使用谷歌Object Detection API进行目标检测

Object Detection API是谷歌开放的一个内部使用的物体识别系统.2016年 10月,该系统在COCO识别挑战中名列第一.它支持当前最佳的实物检测模型,能够在单个图像中定位和识别多个对象.该系统不仅用于谷歌于自身的产品和服务,还被推广至整个研究社区. 一.代码位置与内置的模型 1.Object Detection Object Detection模块的位置与slim的位置相近,同在github.com 中TensorFlow 的models\research目录下.类似slim,

第一百三十一节,JavaScript,封装库--CSS

JavaScript,封装库--CSS 将封装库里的方法,改成了原型添加方法 增加4个方法 tian_jia_class()方法,给获取到的元素添加class属性,参数是class属性值,可以连缀1 yi_chu_class()方法,给获取到的元素移除class属性,参数是要移除的class属性值,可以连缀2 she_zhi_link_css()方法,设置link连接.或style内嵌.中的CSS样式3 yi_chu_link_css()方法,移除link连接.或style内嵌.中的CSS样式4

[ExtJS5学习笔记]第三十一节 sencha extjs 5使用cmd生成的工程部署到tomcat服务器

本文地址:http://blog.csdn.net/sushengmiyan/article/details/42940883 本文作者:sushengmiyan ------------------------------------------------------------------------------------------------------------------------------------ 使用sencha cmd build app 生成的工程,我们期望只使