您的位置:首页 → 精文荟萃 → 软件资讯 → JSP生成jpeg图片用于投票
JSP生成jpeg图片用于投票
时间:2004/10/7 18:16:00 来源:本站整理 作者:蓝点 我要评论 (0)
一、前言 本文原作者为Tony Wang ,该文章涉及到文件的读写和jpg图片的自动生成。利用jsp+servlet的技术,jsp调用servlet生成图片。 二、首文件index.jsp如下: <%-- Author: Tony Wang E-mail: lucky_tony@163.net Date: 2001-01-01 如果对程序有什么疑问,可以和我联系, 另外程序如果有什么bug,麻烦指出!! --%> <%@ page contentType="text/html;charSet=gb2312"%> <% response.setHeader("Cache-Control","no-store"); response.setDateHeader("Expires",0); %> <%! public String[] getQuestion(String s) { String[] strQ = new String[4]; String strTemp = null; int i; java.io.RandomAccessFile rf = null; try { rf = new java.io.RandomAccessFile(s,"r"); } catch(Exception e) { System.out.println(e); System.exit(0); } for(i=0;i<4;i++) { try { strTemp = rf.readLine(); } catch(Exception e) { strTemp = "None Question"; } if(strTemp==null)strTemp = "None Question"; strQ[i] = strTemp; } return strQ; } %> <% String s = null; String[] question = new String[4]; s = request.getRealPath("question.txt"); question = getQuestion(s); %> 三、写文件write.jsp <%-- Author: Tony Wang E-mail: lucky_tony@163.net Date: 2001-01-01 如果对程序有什么疑问,可以和我联系, 另外程序如果有什么bug,麻烦指出!! --%> <%! public int[] getNumber(String s) { int[] mCount = new int[4]; String strTemp = null; int i; java.io.RandomAccessFile rf = null; try { rf = new java.io.RandomAccessFile(s,"r"); } catch(Exception e) { System.out.println(e); System.exit(0); } for(i=0;i<4;i++) { try { strTemp = rf.readLine(); } catch(Exception e) { strTemp = "0"; } if(strTemp==null)strTemp = "0"; mCount[i] = new Integer(strTemp).intValue(); } return mCount; } public void setNumber(String s,int[] x) { try { java.io.PrintWriter pw = new java.io.PrintWriter(new java.io. FileOutputStream(s)); for (int i=0;i<4;i++){ pw.println(x[i]+""); } pw.close(); } catch(Exception e) { System.out.println("Write file error:"+e.getMessage()); } } %> <% String tmp = null; int choice = -1; int[] count = new int[4]; tmp = request.getParameter("choice"); if (tmp==null){ } else { choice = new Integer(tmp).intValue(); } ///////////// String s = request.getRealPath("count.txt"); if(choice>=0){ count = getNumber(s); count[choice]++; setNumber(s,count); } response.sendRedirect("index.jsp"); %> 四、servlet原代码:VoteImage.java : /* Author: Tony Wang E-mail: lucky_tony@163.net Date: 2001-01-01 如果对程序有什么疑问,可以和我联系, 另外程序如果有什么bug,麻烦指出!! */ import java.io.*; import java.util.*; import com.sun.image.codec.jpeg.*; import javax.servlet.*; import javax.servlet.http.*; import java.awt.*; import java.awt.geom.*; import java.awt.image.*; public class VoteImage extends HttpServlet { private String strFile = null; private Color color[]={Color.red,Color.black,Color.orange, Color.green}; private int baseAng = 30; public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException { strFile = request.getRealPath("count.txt"); float[][] xy = new float[4][2]; xy = getNumAndPercent(strFile); int[] ang = new int[4]; ang[0] = (int)(xy[0][1]*360); ang[1] = (int)(xy[1][1]*360); ang[2] = (int)(xy[2][1]*360); ang[3] = 360-ang[0]-ang[1]-ang[2]; response.setHeader("Cache-Control","no-store"); response.setDateHeader("Expires",0); response.setContentType("image/jpeg"); ServletOutputStream out=response.getOutputStream(); BufferedImage image=new BufferedImage(150,100,BufferedImage. TYPE_INT_RGB); Graphics2D g=(Graphics2D)image.getGraphics(); g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g.setColor(Color.white); g.fillRect(0,0,150,100); AffineTransform at = null; Arc2D arc = null; int fromAng = baseAng; at = AffineTransform.getRotateInstance((-20*java.lang.Math.PI) /180,45,37); g.setTransform(at); int r =6; int dx = (int)(r*java.lang.Math.cos((baseAng+ang[0])/2.0*java. lang.Math.PI/180)); int dy = (int)(r*java.lang.Math.sin((baseAng+ang[0])/2.0*java. lang.Math.PI/180)); arc = new Arc2D.Double(10+dx,24-dy,80,50,fromAng,ang[0],Arc2D.PIE); g.setColor(color[0]); g.fill(arc); fromAng+=ang[0]; for (int i=1;i<4;i++) { g.setColor(color[i]); arc = new Arc2D.Double(10,24,80,50,fromAng,ang[i],Arc2D.PIE); g.fill(arc); fromAng+=ang[i]; if (fromAng>360) { fromAng-=360; } } at = AffineTransform.getRotateInstance(0,arc.getCenterX(),arc. getCenterY()); g.setTransform(at); for (int i=0;i<4;i++){ g.setColor(color[i]); g.fillRect(100,15*i+20,10,10); g.drawString((char)("A"+i)+"",120,15*i+20+8); } JPEGImageEncoder encoder=JPEGCodec.createJPEGEncoder(out); encoder.encode(image); out.close(); } public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException { doGet(request,response); } public synchronized float[][] getNumAndPercent(String sFileName) { float xx[][] = new float[4][2]; int totalNum = 0 ; String strTemp = null; int i = 0; java.io.RandomAccessFile rf = null; try { rf = new java.io.RandomAccessFile (sFileName,"r"); } catch(Exception e) { System.out.println(e); System.exit(0); } for (i=0;i<4;i++) { int m=0; try { strTemp = rf.readLine(); } catch (Exception e){ strTemp = "0"; } if (strTemp == null) strTemp = "0"; m = new Integer(strTemp).intValue(); xx[i][0]=m; totalNum += m; } if (totalNum==0) totalNum=1; for ( i=0;i<4;i++){ xx[i][1] = xx[i][0]/totalNum; } return xx; } } 五、在index.jsp目录下建立question.txt和count.txt文件分别用来保存投 票的问题和投票的数量,用户投票后,就修改count.txt的值。 为了对原作者表示感谢,这2个文件内容不变化,如下: question.txt: Yes,I think so! No,I dont think so! Sorry,I dont know the answer! count.txt: 12 9 5 9 六、目录结构: (1)jsp文件和txt文件同一个目录 (2).java文件是servlet目录下 七、测试: http://[server:port]/dir/index.jsp
相关阅读
Windows错误代码大全 Windows错误代码查询 激活windows有什么用 Mac QQ和Windows QQ聊天记录怎么合并 Mac QQ和Windows QQ聊天记录 Windows 10自动更新怎么关闭 如何关闭Windows 10自动更新 windows 10 rs4快速预览版17017下载错误问题 Win10秋季创意者更新16291更新了什么 win10 16291更新内容 windows10秋季创意者更新时间 windows10秋季创意者更新内容 kb3150513补丁更新了什么 Windows 10补丁kb3150513是什么
热门文章
360快剪辑怎么使用 36 金山词霸如何屏幕取词 百度收购PPS已敲定!3
最新文章
微信3.6.0测试版更新了 微信支付漏洞会造成哪
360快剪辑怎么使用 360快剪辑软件使用方法介 酷骑单车是什么 酷骑单车有什么用 Apple pay与支付宝有什么区别 Apple pay与 贝贝特卖是正品吗 贝贝特卖网可靠吗
人气排行
xp系统停止服务怎么办?xp系统升级win7系统方 电脑闹钟怎么设置 win7电脑闹钟怎么设置 office2013安装教程图解:手把手教你安装与 qq影音闪退怎么办 QQ影音闪退解决方法 VeryCD镜像网站逐个数,电驴资料库全集 同步推是什么?同步推使用方法介绍 QQ2012什么时候出 最新版下载 EDiary——一款好用的电子日记本
查看所有0条评论>>