手机
当前位置:查字典教程网 >编程开发 >JSP教程 >JSP生成jpeg图片用于投票
JSP生成jpeg图片用于投票
摘要:一、前言本文原作者为TonyWang,该文章涉及到文件的读写和jpg图片的自动生成。利用jsp+servlet的技术,jsp调用servle...

一、前言

本文原作者为TonyWang,该文章涉及到文件的读写和jpg图片的自动生成。利用jsp+servlet的技术,jsp调用servlet生成图片。

二、首文件index.jsp如下:

<%--

Author:TonyWang

E-mail:lucky_tony@163.net

Date: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>

<linkhref="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:TonyWang

E-mail:lucky_tony@163.net

Date: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:TonyWang

E-mail:lucky_tony@163.net

Date: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,HttpServletResponse

response)

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,HttpServletResponse

response)

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:

12

9

5

9

六、目录结构:

(1)jsp文件和txt文件同一个目录

(2).java文件是servlet目录下

七、测试:

http://[server:port]/dir/index.jsp

【JSP生成jpeg图片用于投票】相关文章:

JSP实现论坛树型结构的具体算法

jsp统计在线人数代码

JSP errorPage设置方法

jsp 页面上图片分行输出小技巧

JSP生成静态页实践及其设计思想[转]

轻松使用JSP生成饼图

JSP表单标签,用于自动生成表单标签html代码

JSP在电子商务网站开发的运用

JSP技术生成动态web页面

JSP/Servlet应用程序优化八法

精品推荐
分类导航