最近写了一个用java过滤功能,得到访问者信息的操作,用它可以得到访问者的IP,访问时间,Url等信息,并保存到文件的操作
首先,写一个信息过滤功能类,
package com.elitel.web;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.StringReader;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
* 过滤访问者的信息
* @author chenj
*
*/
public class InfoFilter extends HttpServlet implements Filter {
private FilterConfig filterConfig = null;
private String attribute = null;
private SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
public InfoFilter() {
super();
// TODO 自动生成构造函数存根
}
public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig;
this.attribute = filterConfig.getInitParameter("attribute");
}
/**
* 过滤访问者的信息
*/
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
System.out.println("Call InfoFilter");
if(attribute != null)
request.setAttribute(attribute,this);
response.setContentType("text/html");
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;
HttpSession session = req.getSession();
String dateTime = dateFormat.format(new Date(session.getCreationTime()));
String guestIp = req.getRemoteAddr();
StringBuffer guestUrl = req.getRequestURL();
String info = (" IP: " + guestIp + " date: " + dateTime + " Url: " + guestUrl.toString()+"<br>");
System.out.println(info);
//保存信息
//保存到服务器上项目中,如保存到项目info文件夹里面
String path = session.getServletContext().getRealPath("/info");
BufferedWriter out = new BufferedWriter(new FileWriter(path+File.separator+"saveInfo.html",true));
//保存到别的地方。如D盘
// BufferedWriter out = new BufferedWriter(new FileWriter("d://saveInfo.html",true));
BufferedReader in = new BufferedReader(new StringReader(info));
String data;
while((data = in.readLine())!= null){
out.append(data);
}
in.close();
out.flush();
out.close();
chain.doFilter(request,response);
}
public void destroy() {
filterConfig = null;
attribute = null;
}
}
在web.xml文件中的加入以下配置即可
<filter>
<filter-name>InfoFilter</filter-name>
<filter-class>com.elitel.web.InfoFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>InfoFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>