快讯
- 微星B850MPOWER深度评测:超频传奇延续,千元级性能炸裂之选
- 小米17系列发布4499元起售 小尺寸直屏主打颜值、影像和续航
- 满电青年计划再出发!航嘉 ×PConline 校园行 9-24 登陆西南林业大学
- 技嘉“从心出发,我们的主张”2025发布会:超燃新品&黑科技,开创AI时代新格局
- 装机圈新宠儿,微星 MAG B850M MORTAR Wi-Fi迫击炮主板评测
- 微星MPG Z890I EDGE TI WIFI 刀锋 钛评测:14 层 PCB 加持,同级之中强无敌!
- 打造低调而卓越的Ai PC,微星MEG Z890 ACE战神主板开箱
- 解密“星”制造,微星深圳恩斯迈工厂探秘之旅
- 游泳也需音乐相伴!韶音OpenSwim Pro评测
- 又一款轻量化电竞
- 元气满满的充电之旅!铂陆帝商超活动嗨翻周末
- 雷柏机甲编码主题系列警戒线S-07图赏:以机械美感诠释潮流新理念桌搭!
- 更适合新手体质的枪战游戏,《无畏契约》开战!
- 现代与传统的融合之旅:贝尔金笔记本扩展坞体验
- 航天品质下的极速充电体验——航嘉G65 GaN快速充电器评测
- 有颜有实力的外设谁能不爱?来看雷柏商超巡演
- 新潮外设引爆全场!雷柏联合PC打造潮品酷玩趴
- 幻彩绚丽,玩趣十足!雷柏V700DIY键盘图赏
- U皇就该配板皇,超频玩家现身说法教你选主板
- 13代酷睿的超频利器,有好板才有好性能
- 微星B850MPOWER主板深度评测:MPOWER系列的超频传奇延续,千元级性能炸裂之选19日
- 小米17系列发布4499元起售 小尺寸直屏主打颜值、影像和续航25日
- 满电青年计划再出发!航嘉 ×PConline 校园行 9-24 登陆西南林业大学23日
- 技嘉“从心出发,我们的主张”2025发布会:超燃新品&黑科技,开创AI时代新格局20日
- 装机圈新宠儿,微星 MAG B850M MORTAR WiFi迫击炮主板评测31日
- 微星MPG Z890I EDGE TI WIFI 刀锋 钛评测:14 层 PCB 加持,同级之中强无敌!29日
- 打造低调而卓越的Ai PC,微星MEG Z890 ACE战神主板开箱10日
- 解密“星”制造,微星深圳恩斯迈工厂探秘之旅02日
- 游泳也需要音乐相伴!韶音新一代游泳耳机OpenSwim Pro评测12日
- 又一款轻量化电竞"神鼠"来袭!玄熊猫3395游戏鼠标今晚首发149元10日
- 元气满满的充电之旅!铂陆帝商超活动嗨翻周末27日
- 雷柏机甲编码主题系列警戒线S-07图赏:以机械美感诠释潮流新理念桌搭!24日
- 更适合新手体质的枪战游戏,《无畏契约》国服正式开战!20日
- 玩物近话论:现代科技与甘南秘境的融合之旅 贝尔金笔记本扩展坞体验14日
- 航天品质下的极速充电体验——航嘉G65 GaN快速充电器评测12日
- 有颜有实力的外设好物谁能不爱?雷柏点燃PCGROUP潮品商超巡演15日
- 新潮外设好物引爆全场!雷柏联合PCGROUP打造潮品酷玩趴15日
- 幻彩绚丽,玩趣十足!雷柏V700DIY热插拔机械键盘图赏10日
- U皇就该配板皇,超频玩家现身说法教你选主板26日
- 13代酷睿的超频利器,有好板才有好性能25日
JAVA/JSP学习系列之十二(JSP生成jpeg图片用于投票)
2004-02-14 09:33 出处: 作者:东方一蛇 责任编辑:pjl
| 一、前言 本文原作者为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); %> <html> <head> <title></title> <link href="css.css" rel="StyleSheet" type="text/css"></link> </head> <body> <table width="180" border="1" bordercolor="#999999"> <tr> <td align=center>冰帆调查</td> </tr> <form name=frm method=post action=write.jsp> <tr> <td> <% String ss = null; for (int i=0;i<4;i++) { ss = "<input type=\"radio\" name=\"choice\" value=" + i+">"+ (char)('A'+i)+"、"+ question[i]+"<br>"; out.println(ss); } %> </td> </tr> <tr> <td align=center><input type=submit value="我 投 一 票"></td> </tr> <tr> <td align=center><img src="/vote/servlet/VoteImage" width=150 height=100></td> </tr> </form> </table> </body> </html> 三、写文件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 |
最热搜索
无线路由器怎么用 会说话的汤姆猫电脑版 12306网上订火车票 跳舞吧 flash player 下载 PP助手电脑版 Adobe Reader(pdf阅读) iOS6正式版12项新功能 QQ空间克隆器 9158视频KTV 植物大战僵尸辅助工具 Win8怎么关机 QQ空间进不去 2013年春节是几月几号 QQ昵称 QQ空间皮肤 PPT模板 电脑输入法不见了怎么办 2012中秋节是几月几日 word安全模式 qq输入法怎么点亮 IE修复 感恩节是几月几日 CSS布局 PS快捷键 Outlook设置 声卡驱动器官方免费下载 格式工厂怎么用 桌面图标有阴影怎么去掉 Windows RT是什么意思 2013年日历设计 Word打不开怎么办 Win8专区 腾讯微云网 windows8激活工具 剑灵什么时候公测 QQ通讯录怎么用 开心斗地主 拖拉机小游戏 麻将游戏 中国象棋 德州扑克 黄金矿工中文版 保皇扑克游戏 四国军棋 万圣节是几月几日 ps抠图教程 12306订票助手 万圣节小游戏大全 rar文件怎么打开 Photoshop CS6教程 iOS6完美越狱 QQ个性签名