您的位置:首页 > 运维架构 > 网站架构

【附】使用监听器ServletContextListener实现网站登录人数统计,可以实现重启服务器后记录仍然存在

2016-09-05 11:57 726 查看
project目录截图:



ContextListener.java:

package com.zmj.web.listener;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

/**
* Listener监听器
* @author 周孟军  时间:2016年9月5日 上午11:46:08
*
*/
public class ContextListener implements ServletContextListener {

@Override
public void contextDestroyed(ServletContextEvent sce) {
//在容器关闭的时候记录当前的访人数保存在count.txt文件中
ServletContext context = sce.getServletContext();
Integer count = (Integer)context.getAttribute("count");
String path = context.getRealPath("WEB-INF/classes/com/zmj/web/listener/count.txt");
File file = new File(path);
//buffer字符输出流
BufferedWriter bw;
try {
bw = new BufferedWriter(new FileWriter(file));
bw.write(count.toString());
bw.flush();
bw.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

@Override
public void contextInitialized(ServletContextEvent sce) {
//在容器开启的时候,从count.txt文件中读取计数值,然后重新设置count的值
ServletContext context = sce.getServletContext();
String path = context.getRealPath("WEB-INF/classes/com/zmj/web/listener/count.txt");
File file = new File(path);
int count = 0;
//buffer字符输入流
BufferedReader br;
try {
br = new BufferedReader(new FileReader(file));
count = Integer.parseInt(br.readLine());
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NumberFormatException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//设置context的值
context.setAttribute("count", count);
}

}


ContextServlet .java

package com.zmj.web.servlet;

import java.io.IOException;

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

/**
* 登录的Servlet
* @author 周孟军  时间:2016年9月5日 上午11:47:32
*
*/
public class ContextServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String name = req.getParameter("username");
String password = req.getParameter("password");

if(name.equals("admin") && password.equals("1234")){
//统计人数
ServletContext context = this.getServletContext();
Integer counts = (Integer) context.getAttribute("count");
System.out.println(counts+"servlet");
int count = 0;

if(counts==null){
count = 1;
}else{
count = Integer.parseInt(counts.toString());
count++;
}
context.setAttribute("count", count);
req.getRequestDispatcher("success.jsp").forward(req, resp);
}
}
}


需要配置下监听器:

listener>
<listener-class>com.zmj.web.listener.ContextListener</listener-class>
</listener>


其他的jsp页面就不粘出来了,做个简单的就可以。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐