利用img标签实现的静态的HTML页面访问次数的Servlet

来源:互联网 发布:金勃良知乎 编辑:程序博客网 时间:2024/06/05 19:20

第一次写博客,Java初学者,所有的代码都加上注释,方便以后返回查阅,如有错误请不吝指正。谢谢

文章是从各种书籍中抄写的实例,如有雷同,不胜荣幸;



public class CountServlet extends HttpServlet{

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//告诉浏览器文件类型
resp.setContentType("image/jpeg");
//设置浏览器不要缓存图片
resp.setHeader("Prama", "no-cache");

resp.setHeader("Cache-Control", "no-cache");

resp.setDateHeader("Expires", 0);

//由Servlet引擎使用的抽象类。Servlet通过使用ServletResponse接口的使用获得了对一个这种类型的对象的说明。

ServletOutputStream sos = resp.getOutputStream();

ByteArrayOutputStream bos = new ByteArrayOutputStream();

//创建一个内存的映像,即将图片写入到内存

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

//调用getAccessCount方法,获取value,

String value = getAccessCount(req);

//获取value的长度

int len =value.length();

//如果len大于7

if (len>7) {

//value的最大限制是7位数,超出后上限也是999999+

value ="9999999+";

}else{

//小于7就用零来补

String tmp = "";
for(int i=0;i<7-len;i++){

tmp = tmp + "0";

}
value = tmp + value;

}

//将value‘写在’ x=0,y=18的位置

g.drawString(value, 0, 18);
//结束图像的绘画过程,完成绘画

g.dispose();

//将图像以jpeg格式输出

ImageIO.write(image, "JPEG", bos);

byte[] b = bos.toByteArray();
resp.setContentLength(b.length);

bos.close();

sos.write(b);

sos.close();

}

//getAccessCount类,返回一个String类型的值

private String getAccessCount(HttpServletRequest res) {

//得到引用界面的URL地址,并以此作为访问次数的检索关键字

//referer是头文件里URL地址

String pageKey =res.getHeader("referer");

//如果URL地址为空,返回0

if(pageKey ==null){
return"0";

}

//定义一个读取java配置的对象settings

Properties settings = new Properties();

//count.txt等内部文件最好保存在web-INF目录中

//获得count.txt文件的路径

String countFilePath = getServletContext().getRealPath("/count.txt");

try{

//加载count.txt文件

settings.load(new FileInputStream(countFilePath));
}catch (Exception e) {}
String count = "0";

try{

//将pageKey的值赋给count

count = settings.getProperty(pageKey);

//如果count是空的,count就是0

if(count ==null){
count="0";

}

//将count转换成数值型并+1赋给c

int c= Integer.parseInt(count) + 1;

//将c转换成字符型并赋给count

count = new Integer(c).toString();

//设置setting的键值

settings.put(pageKey, count);
//将this page is accessed 写入到counfilepath
settings.store(new FileOutputStream(countFilePath) ,"this page is accessed");
}catch (Exception ex) {
System.out.println(ex.getMessage());

}

//返回count

return count;
}

}




原创粉丝点击