雪,真大啊!地面上是白茫茫的一片,可雪还在不停的下着,好像仙女散花一般。你看那雪花,像白云,像棉花。它是那样的洁白,那样的耀眼。
一、前言本文原作者为TonyWang,该文章涉及到文件的读写和jpg图片的自动生成。利用jsp+servlet的技术,jsp调用servlet生成图片。二、首文件index.jsp如下:<%--Author:TonyWangE-mail:lucky_tony@163.netDate:2001-01-01如果对程序有什么疑问,可以和我联系,另外程序如果有什么bug,麻烦指出!!--%><%@pagecontentType="text/html;charSet=gb2312"%><%response.setHeader("Cache-Control","no-store");response.setDateHeader("Expires",0);%><%!publicString[]getQuestion(Strings){String[]strQ=newString[4];StringstrTemp=null;inti;java.io.RandomAccessFilerf=null;try{rf=newjava.io.RandomAccessFile(s,"r");}catch(Exceptione){System.out.println(e);System.exit(0);}for(i=0;i<4;i++){try{strTemp=rf.readLine();}catch(Exceptione){strTemp="NoneQuestion";}if(strTemp==null)strTemp="NoneQuestion";strQ[i]=strTemp;}returnstrQ;}%><%Strings=null;String[]question=newString[4];s=request.getRealPath("question.txt");question=getQuestion(s);%><html><head><title></title><linkrel="nofollow noopener noreferrer" href="css.css"rel="StyleSheet"type="text/css"></link></head><body><tablewidth="180"border="1"bordercolor="#999999"><tr><tdalign=center>冰帆调查</td></tr><formname=frmmethod=postaction=write.jsp><tr><td><%Stringss=null;for(inti=0;i<4;i++){ss="<inputtype=\"radio\"name=\"choice\"value="+i+">"+(char)("A"+i)+"、"+question[i]+"<br>";out.println(ss);}%></td></tr><tr><tdalign=center><inputtype=submitvalue="我投一票"></td></tr><tr><tdalign=center><imgsrc="/vote/servlet/VoteImage"width=150height=100></td></tr></form></table></body></html>三、写文件write.jsp<%--Author:TonyWangE-mail:lucky_tony@163.netDate:2001-01-01如果对程序有什么疑问,可以和我联系,另外程序如果有什么bug,麻烦指出!!--%><%!publicint[]getNumber(Strings){int[]mCount=newint[4];StringstrTemp=null;inti;java.io.RandomAccessFilerf=null;try{rf=newjava.io.RandomAccessFile(s,"r");}catch(Exceptione){System.out.println(e);System.exit(0);}for(i=0;i<4;i++){try{strTemp=rf.readLine();}catch(Exceptione){strTemp="0";}if(strTemp==null)strTemp="0";mCount[i]=newInteger(strTemp).intValue();}returnmCount;}publicvoidsetNumber(Strings,int[]x){try{java.io.PrintWriterpw=newjava.io.PrintWriter(newjava.io.FileOutputStream(s));for(inti=0;i<4;i++){pw.println(x[i]+"");}pw.close();}catch(Exceptione){System.out.println("Writefileerror:"+e.getMessage());}}%><%Stringtmp=null;intchoice=-1;int[]count=newint[4];tmp=request.getParameter("choice");if(tmp==null){}else{choice=newInteger(tmp).intValue();}/////////////Strings=request.getRealPath("count.txt");if(choice>=0){count=getNumber(s);count[choice]++;setNumber(s,count);}response.sendRedirect("index.jsp");%>四、servlet原代码:VoteImage.java:/*Author:TonyWangE-mail:lucky_tony@163.netDate:2001-01-01如果对程序有什么疑问,可以和我联系,另外程序如果有什么bug,麻烦指出!!*/importjava.io.*;importjava.util.*;importcom.sun.image.codec.jpeg.*;importjavax.servlet.*;importjavax.servlet.http.*;importjava.awt.*;importjava.awt.geom.*;importjava.awt.image.*;publicclassVoteImageextendsHttpServlet{privateStringstrFile=null;privateColorcolor[]={Color.red,Color.black,Color.orange,Color.green};privateintbaseAng=30;publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{strFile=request.getRealPath("count.txt");float[][]xy=newfloat[4][2];xy=getNumAndPercent(strFile);int[]ang=newint[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");ServletOutputStreamout=response.getOutputStream();BufferedImageimage=newBufferedImage(150,100,BufferedImage.TYPE_INT_RGB);Graphics2Dg=(Graphics2D)image.getGraphics();g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);g.setColor(Color.white);g.fillRect(0,0,150,100);AffineTransformat=null;Arc2Darc=null;intfromAng=baseAng;at=AffineTransform.getRotateInstance((-20*java.lang.Math.PI)/180,45,37);g.setTransform(at);intr=6;intdx=(int)(r*java.lang.Math.cos((baseAng+ang[0])/2.0*java.lang.Math.PI/180));intdy=(int)(r*java.lang.Math.sin((baseAng+ang[0])/2.0*java.lang.Math.PI/180));arc=newArc2D.Double(10+dx,24-dy,80,50,fromAng,ang[0],Arc2D.PIE);g.setColor(color[0]);g.fill(arc);fromAng+=ang[0];for(inti=1;i<4;i++){g.setColor(color[i]);arc=newArc2D.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(inti=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);}JPEGImageEncoderencoder=JPEGCodec.createJPEGEncoder(out);encoder.encode(image);out.close();}publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{doGet(request,response);}publicsynchronizedfloat[][]getNumAndPercent(StringsFileName){floatxx[][]=newfloat[4][2];inttotalNum=0;StringstrTemp=null;inti=0;java.io.RandomAccessFilerf=null;try{rf=newjava.io.RandomAccessFile(sFileName,"r");}catch(Exceptione){System.out.println(e);System.exit(0);}for(i=0;i<4;i++){intm=0;try{strTemp=rf.readLine();}catch(Exceptione){strTemp="0";}if(strTemp==null)strTemp="0";m=newInteger(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;}returnxx;}}五、在index.jsp目录下建立question.txt和count.txt文件分别用来保存投票的问题和投票的数量,用户投票后,就修改count.txt的值。为了对原作者表示感谢,这2个文件内容不变化,如下:question.txt:Yes,Ithinkso!No,Idontthinkso!Sorry,Idontknowtheanswer!count.txt:12959六、目录结构:(1)jsp文件和txt文件同一个目录(2).java文件是servlet目录下七、测试:http://[server:port]/dir/index.jsp 以上就是JSP生成jpeg图片用于投票。世事往往如此,想回头也已经来不及,即使你肯沦为劣马,也不一定有回头草在等你。更多关于JSP生成jpeg图片用于投票请关注haodaima.com其它相关文章!