【实现图像访问计数器】

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

}

}

效果如下



 问题解决:



 

猜你喜欢

转载自gaojingsong.iteye.com/blog/2392743