JAVA 代码如下:
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
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;
public class CountServlet extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
resp.setContentType("image/jpeg");
// 设置浏览器不要缓存此图片
resp.setHeader("Pragma", "No-cache");
resp.setHeader("Cache-Control", "no-cache");
resp.setDateHeader("Expires", 0);
ServletOutputStream sos = resp.getOutputStream();
BufferedImage image = new BufferedImage(80, 20,
BufferedImage.TYPE_INT_RGB);
Graphics g = image.getGraphics();
g.setColor(Color.WHITE);
g.setFont(new Font(null, Font.ITALIC | Font.BOLD, 18));
String value = "1";
try {
value = getAccessCount(req);
} catch (Exception e) {
e.printStackTrace();
}
g.drawString(value, 0, 18);
// 结束图像的绘制过程,完成图像
g.dispose();
ImageIO.write(image, "JPEG", sos);
sos.close();
}
private String getAccessCount(HttpServletRequest req) throws Exception {
// 得到引用页面的URL地址,并以此作为访问次数的检索关键字
String pageKey = req.getHeader("referer");
if (pageKey == null) {
return "0";
}
HttpSession session = req.getSession();
int number = session.isNew() ?1 :Integer.valueOf((null==session.getAttribute("visit")?"1":""+session.getAttribute("visit")));
if (session.getAttribute("visit") == null) {
session.setMaxInactiveInterval(60 * 60 * 24);// 设置最大时效 单位是秒
// count.txt等内部文件最好是保存在WEB-INF目录中
String countFilePath = getServletContext()
.getRealPath("/count.txt");
FileInputStream in = new FileInputStream(countFilePath);
DataInputStream dataIn = new DataInputStream(in);
String v = String.valueOf(dataIn.read());
System.out.println("--------v --"+v );
number = Integer.valueOf(v);
++number;
session.setAttribute("visit", number);// 将未访问设置为访问
in.close();
dataIn.close();
FileOutputStream out = new FileOutputStream(countFilePath);
DataOutputStream dataOut = new DataOutputStream(out);
dataOut.writeInt(number);
out.close();
dataOut.close();
}
return number + "";
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
this.doGet(req, resp);
}
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
super.service(req, resp);
}
@Override
public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException {
// TODO Auto-generated method stub
super.service(req, res);
}
}
效果如下
问题解决: