|
说明:
请直接存放在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;
}
} |
|