JAva(簡単なWebサイトトラフィック統計)フィルタリスナー構成


   
/** 
 * @author   : zhujiang 
 * @version     :2010-5-17   10:25:33 
 *     
 */
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Scanner;

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

import org.apache.log4j.Logger;

public class ApplicationListener implements ServletContextListener {
	private static final Logger logger = Logger.getLogger(ApplicationListener.class);
	public void contextDestroyed(ServletContextEvent arg0) {
		ServletContext sc = arg0.getServletContext();
		Integer count = (Integer) sc.getAttribute("AccessCount");
		try {
			PrintWriter out = new PrintWriter(new FileWriter("c:/count.txt"));//           
			System.out.println("count:" + count);
			logger.error("count:"+count);
			out.print(count);
			out.flush();
			out.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public void contextInitialized(ServletContextEvent arg0) {
		Integer count = 0;
		ServletContext sc = arg0.getServletContext();

		try {
			Scanner in = new Scanner(new FileReader("c:/count.txt"));//            ,      
			count = in.nextInt();
			in.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
		sc.setAttribute("AccessCount", count);
	}
}
//   
/** 
 * @author   : zhujiang 
 * @version     :2010-5-17   10:29:45 
 *     
 */
import java.io.FileWriter;
import java.io.PrintWriter;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.log4j.Logger;
import org.apache.struts2.ServletActionContext;

import com.duanqu.wap.action.booklt.BookltAction;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;

@SuppressWarnings("serial")
public class AccessInterceptor implements Interceptor {
	private static final Logger logger = Logger.getLogger(AccessInterceptor.class);
	private String id;

	public void destroy() {

	}

	public void init() {

	}

	@SuppressWarnings("unchecked")
	public String intercept(ActionInvocation ai) throws Exception {
		ServletContext sc = ServletActionContext.getServletContext();
		HttpServletRequest request = ServletActionContext.getRequest();
		HttpSession session = request.getSession();
		if (!session.getId().equals(id)) {
			Integer count = (Integer) sc.getAttribute("AccessCount");//         ,      
			sc.setAttribute("AccessCount", count + 1);
			PrintWriter out = new PrintWriter(new FileWriter("c:/count.txt"));//           
			logger.error("AccessCount:"+count);
			id = session.getId();
			logger.error("id:"+id);
			System.out.println("count:" + count);
			logger.error("count:"+count);
			out.print(count);
			out.flush();
			out.close();
		}
		String result = ai.invoke();
		return result;
	}

}

struts構成フィルタ
class="com.duanqu.common.AccessInterceptor"/>
アクション構成に設定

*
       


Web.xmlリスニング

 
   com.duanqu.common.ApplicationListener