⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 countservlet.java

📁 深入JavaWeb开发内幕核心基础书中源码
💻 JAVA
字号:
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.awt.*;
import java.awt.image.*;
import javax.imageio.ImageIO;
import java.util.Properties;

public class CountServlet extends HttpServlet
{
	public void doGet(HttpServletRequest request,
		HttpServletResponse response) throws ServletException,IOException
	{		
		response.setContentType("image/jpeg");
		//设置浏览器不要缓存此图片
		response.setHeader("Pragma","No-cache");
		response.setHeader("Cache-Control","no-cache");
		response.setDateHeader("Expires", 0);

		ServletOutputStream sos = response.getOutputStream();

		BufferedImage image = 
				new BufferedImage(80, 20, BufferedImage.TYPE_INT_RGB); 
		Graphics g = image.getGraphics();
		/*g.setColor(Color.BLACK);
		g.fillRect(0, 0, width, height);*/
		g.setColor(Color.WHITE);
		g.setFont(new Font(null,Font.ITALIC|Font.BOLD,18));
		String value = getAccessCount(request);
		int len = value.length();
		//最大访问次数不能超过9999999
		if(len > 7)
		{
			value = "9999999";
		}
		else
		{
			/*改为StringBuffer类的append方法来完成下面的逻辑,程序的
			运行效率将更高,建议读者自己修改一下*/
			String tmp="";
			for(int i=0;i<7-len;i++)
			{
				tmp = tmp +"0";
			}
			value = tmp + value;
		}
		g.drawString(value,0,18);
		//结束图像的绘制过程,完成图像
		g.dispose();
	
		ImageIO.write(image, "JPEG", sos);
		sos.close();
	}
	
	private String getAccessCount(HttpServletRequest request)
	{
		//得到引用页面的URL地址,并以此作为访问次数的检索关键字
		String pageKey = request.getHeader("referer");
		if(pageKey == null)
		{
			return "0";
		}

		Properties settings = new Properties();
		//count.txt等内部文件最好是保存在WEB-INF目录中
		String countFilePath = getServletContext().getRealPath("/count.txt");
		try
		{
			//下面的语句没有使用close方法关闭流,有缺陷!
			settings.load(new FileInputStream(countFilePath));
		}
		catch(Exception e){}

		String count = "0";
		try
		{
			count = settings.getProperty(pageKey);
			if(count == null)
			{
				count = "0";
			}
			int c = Integer.parseInt(count) + 1;
			count = new Integer(c).toString();
			settings.put(pageKey,count);
			//下面的语句没有使用close方法关闭流,有缺陷!
			settings.store(new FileOutputStream(countFilePath),
					"the page is accessed:");
		}
		catch(Exception e)
		{
			System.out.println(e.getMessage());
		}
		return count;		
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -