【实现图像访问计数器】

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);

}

 

}

 

效果如下



 问题解决:



 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值