知道美河 | 上传资料 | VIP申请 | 精品课程 | 资料搜索 | 问题反馈 | 会员手册 | 积分消费 | 积分充值 | 帐号保护
美河学习学习在线赞助VIP

美河学习在线(主站) eimhe.com

 找回密码
 建立账号
查看: 8578|回复: 2

[转帖] 简单的servlet计数器

[复制链接]
发表于 2007-8-8 15:59:11 | 显示全部楼层 |阅读模式
说明:

请直接存放在tomcat/webapps/ 下则可使用
会直接输出Jpg的计数器
请用html语法 img src=http://ip:port/count/countPng

环境
JAVA: j2sdk1.4.2以上
Version: Apache Tomcat/5.0.30 以上

request 参数
bgr=0&bgg=0&bgb=0&size=24&fr=255&fg=255&
   fb=255&f=Courier
背景R G B的颜色分别为: bgr bgg bgb
前景R G B的颜色分别为: fr fg fb
字型大小 size
字体 f (只吃英文)

使用方法
http://ip:port/count/countPng
http://ip:port/count/countPng?bgr=0&bgg=0&bgb=0&size=24&fr=255&fg=255&fb=255&f=Courier

主要代码:

package web;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;
import java.util.Date;
import javax.imageio.ImageIO;
import javax.servlet.*;
import javax.servlet.http.*;
public class Web_count1 extends HttpServlet
{
    public Web_count1()
    {
    }
    public void init(ServletConfig config)
        throws ServletException
    {
        super.init(config);
    }
    public void doGet(HttpServletRequest req, HttpServletResponse res)
        throws ServletException, IOException
    {
        doPost(req, res);
    }
    public void doPost(HttpServletRequest req, HttpServletResponse res)
        throws ServletException, IOException
    {
        int bgr;
        if(req.getParameter("bgr") == null || req.getParameter("bgr").equals(""))
            bgr = 121;//背景色中的红色值
        else
            bgr = Integer.parseInt(req.getParameter("bgr"));
        int bgg;
        if(req.getParameter("bgg") == null || req.getParameter("bgg").equals(""))
            bgg = 82;//背景色中的绿色值
        else
            bgg = Integer.parseInt(req.getParameter("bgg"));
        int bgb;
        if(req.getParameter("bgb") == null || req.getParameter("bgb").equals(""))
            bgb = 205;//背景色中的兰色值勤
        else
            bgb = Integer.parseInt(req.getParameter("bgb"));
        int size;
        if(req.getParameter("size") == null || req.getParameter("size").equals(""))
            size = 24;//字体大小
        else
            size = Integer.parseInt(req.getParameter("size"));
        int fr;
        if(req.getParameter("fr") == null || req.getParameter("fr").equals(""))
            fr = 255;//字体颜色值中的红色值
        else
            fr = Integer.parseInt(req.getParameter("fr"));
        int fg;
        if(req.getParameter("fg") == null || req.getParameter("fg").equals(""))
            fg = 255;//字体颜色值中的绿色值
        else
            fg = Integer.parseInt(req.getParameter("fg"));
        int fb;
        if(req.getParameter("fb") == null || req.getParameter("fb").equals(""))
            fb = 255;//字体颜色值中的兰色值
        else
            fb = Integer.parseInt(req.getParameter("fb"));
        String f;
        if(req.getParameter("f") == null || req.getParameter("f").equals(""))
            f = "Courier";//字体名
        else
            f = req.getParameter("f");
        res.setContentType("image/jpeg");
        HttpSession session = req.getSession(true);
        String url = getServletContext().getRealPath("/");
        if(!session.isNew())
        {
            Date halfAgo = new Date((long)((double)System.currentTimeMillis() - 1800000D));
            Date create = new Date(session.getLastAccessedTime());
            if(create.before(halfAgo))
            {
                session.invalidate();
                session = req.getSession(true);
            }
        }
        Integer count = (Integer)session.getAttribute("tracker.count");
        if(count == null)
            count = new Integer(got_count(url));//增加计数
        session.setAttribute("tracker.count", count);
        String str = new String(session.getAttribute("tracker.count").toString());
        BufferedImage outimg = out_image(url, (new String("0000000" + str)).substring(         ("0000000" + str).length() - 7, ("0000000" + str).length()), bgr, bgg, bgb, size, f, fr, fg, fb);
        ServletOutputStream sos = res.getOutputStream();
        ImageIO.write(outimg, "PNG", sos);
        sos.close();
        res.flushBuffer();
    }
    public void destroy()
    {
        super.destroy();
    }
    public String getServletInfo()
    {
        return "Servlet Call Test";
    }
    private int got_count(String url)
    {
        File f = new File(url, "count.txt");
        String str = "0";
        try
        {
            if(!f.exists())
            {
                f.createNewFile();
                FileWriter fo = new FileWriter(f);
                fo.write("0".toString());
                fo.close();
            }
            FileReader fi = new FileReader(f);
            StringBuffer sb = new StringBuffer("");
            for(int ch = 0; (ch = fi.read()) != -1;)
                sb.append((char)ch);
            fi.close();
            f = null;
            str = new String(String.valueOf(Integer.parseInt(sb.toString()) + 1));
            FileWriter fw = new FileWriter(url + "count.txt");
            fw.write(str);
            fw.close();
            f = null;
        }
        catch(Exception e)
        {
            System.out.println(e.toString());
        }
        return Integer.parseInt(str.toString());
    }
    private BufferedImage out_image(String url, String count, int bgr, int bgg, int bgb, int size, String f,
            int fr, int fg, int fb)
    {
        Font font = new Font(f, 1, size);
        Color bg = new Color(bgr, bgg, bgb);
        Color fontcolor = new Color(fr, fg, fb);
        int width = 112;
        int height = 21;
        BufferedImage image = new BufferedImage(width, height, 1);
        Graphics g = image.getGraphics();
        g.setColor(bg);
        g.fillRect(0, 0, width, height);
        g.setFont(font);
        FontMetrics fm = g.getFontMetrics(font);
        g.setColor(fontcolor);
        g.drawString(count, (width - fm.stringWidth(count)) / 2, (0 + fm.getHeight()) / 2);
        return image;
    }
}
发表于 2007-8-20 13:00:18 | 显示全部楼层
发表于 2007-8-20 15:42:52 | 显示全部楼层
您需要登录后才可以回帖 登录 | 建立账号

本版积分规则

 
QQ在线咨询

QQ|小黑屋|手机版|Archiver|美河学习在线 ( 浙网备33020302000026号 )

GMT+8, 2025-5-22 22:02

Powered by Discuz!

© 2001-2025 eimhe.com.

快速回复 返回顶部 返回列表