?? 0214.htm
字號:
<html>
<head>
<title>新時代軟件教程:操作系統 主頁制作 服務器 設計軟件 網絡技術 編程語言 文字編輯</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<style>
<!--
body, table {font-size: 9pt; font-family: 宋體}
a {text-decoration:none}
a:hover {color: red;text-decoration:underline}
.1 {background-color: rgb(245,245,245)}
-->
</style>
</head>
<p align="center"><script src="../../1.js"></script></a>
<p align="center"><big><strong>JSP生成jpeg圖片用于投票</strong></big></p>
<div align="right">---摘自www.wodejia.net (文/東方一蛇)</div>
<br>一、前言 <br>
<br>
本文原作者為Tony Wang ,該文章涉及到文件的讀寫和jpg圖片的自動生成。利用jsp+servlet的技術,jsp調用servlet生成圖片。 <br>
<br>
二、首文件index.jsp如下:<br>
<br>
<%-- <br>
<br>
Author: Tony Wang <br>
<br>
E-mail: lucky_tony@163.net <br>
<br>
Date: 2001-01-01 <br>
<br>
如果對程序有什么疑問,可以和我聯系, 另外程序如果有什么bug,麻煩指出!! <br>
<br>
--%><br>
<br>
<%@ page contentType="text/html;charSet=gb2312"%><br>
<%<br>
response.setHeader("Cache-Control","no-store");<br>
response.setDateHeader("Expires",0);<br>
%><br>
<%!<br>
public String[] getQuestion(String s)<br>
{<br>
String[] strQ = new String[4];<br>
String strTemp = null;<br>
int i;<br>
java.io.RandomAccessFile rf = null;<br>
try {<br>
rf = new java.io.RandomAccessFile(s,"r");<br>
} catch(Exception e)<br>
{<br>
System.out.println(e);<br>
System.exit(0);<br>
}<br>
for(i=0;i<4;i++) <br>
{<br>
try {<br>
strTemp = rf.readLine();<br>
} catch(Exception e) {<br>
strTemp = "None Question";<br>
}<br>
if(strTemp==null)strTemp = "None Question";<br>
strQ = strTemp;<br>
}<br>
return strQ;<br>
}<br>
<br>
%><br>
<br>
<%<br>
String s = null;<br>
String[] question = new String[4];<br>
<br>
s = request.getRealPath("question.txt");<br>
question = getQuestion(s);<br>
%><br>
<br>
<br>
<html><br>
<head><br>
<title></title><br>
<link href="css.css" rel="StyleSheet" type="text/css"></link><br>
</head><br>
<br>
<body><br>
<table width="180" border="1" bordercolor="#999999"><br>
<tr><br>
<td align=center>冰帆調查</td><br>
</tr><br>
<form name=frm method=post action=write.jsp><br>
<tr> <br>
<td><br>
<%<br>
String ss = null;<br>
for (int i=0;i<4;i++)<br>
{<br>
ss = "<input type=\"radio\" name=\"choice\" value=" + i+">"+(char)('A'+i)+"、"+ question[i]+"<br>";<br>
out.println(ss);<br>
}<br>
%><br>
</td><br>
</tr><br>
<tr><br>
<td align=center><input type=submit value="我 投 一 票"></td><br>
</tr><br>
<tr><br>
<td align=center><img src="/vote/servlet/VoteImage" width=150 height=100></td><br>
</tr><br>
</form><br>
</table><br>
</body><br>
</html><br>
<br>
<br>
三、寫文件write.jsp<br>
<br>
<%--<br>
Author: Tony Wang<br>
E-mail: lucky_tony@163.net<br>
Date: 2001-01-01<br>
如果對程序有什么疑問,可以和我聯系,<br>
另外程序如果有什么bug,麻煩指出!!<br>
--%><br>
<%!<br>
public int[] getNumber(String s)<br>
{<br>
int[] mCount = new int[4];<br>
String strTemp = null;<br>
int i;<br>
java.io.RandomAccessFile rf = null;<br>
try {<br>
rf = new java.io.RandomAccessFile(s,"r");<br>
} catch(Exception e)<br>
{<br>
System.out.println(e);<br>
System.exit(0);<br>
}<br>
for(i=0;i<4;i++) <br>
{<br>
try {<br>
strTemp = rf.readLine();<br>
} catch(Exception e) {<br>
strTemp = "0";<br>
}<br>
if(strTemp==null)strTemp = "0";<br>
mCount[i] = new Integer(strTemp).intValue();<br>
}<br>
return mCount;<br>
}<br>
<br>
public void setNumber(String s,int[] x)<br>
{<br>
try {<br>
java.io.PrintWriter pw = new java.io.PrintWriter(new java.io.FileOutputStream(s));<br>
for (int i=0;i<4;i++){<br>
pw.println(x[i]+"");<br>
}<br>
pw.close();<br>
} catch(Exception e) {<br>
System.out.println("Write file error:"+e.getMessage());<br>
}<br>
}<br>
%><br>
<br>
<br>
<%<br>
String tmp = null;<br>
int choice = -1;<br>
int[] count = new int[4];<br>
tmp = request.getParameter("choice");<br>
if (tmp==null){<br>
} else {<br>
choice = new Integer(tmp).intValue();<br>
}<br>
/////////////<br>
String s = request.getRealPath("count.txt");<br>
if(choice>=0){<br>
count = getNumber(s);<br>
count[choice]++;<br>
setNumber(s,count);<br>
}<br>
<br>
response.sendRedirect("index.jsp");<br>
%><br>
四、servlet原代碼:VoteImage.java :<br>
<br>
/*<br>
Author: Tony Wang<br>
E-mail: lucky_tony@163.net<br>
Date: 2001-01-01<br>
如果對程序有什么疑問,可以和我聯系,<br>
另外程序如果有什么bug,麻煩指出!!<br>
*/<br>
import java.io.*;<br>
import java.util.*;<br>
import com.sun.image.codec.jpeg.*;<br>
import javax.servlet.*;<br>
import javax.servlet.http.*;<br>
import java.awt.*;<br>
import java.awt.geom.*;<br>
import java.awt.image.*;<br>
public class VoteImage extends HttpServlet <br>
{<br>
private String strFile = null;<br>
private Color color[]={Color.red,Color.black,Color.orange,Color.green};<br>
private int baseAng = 30;<br>
public void doGet(HttpServletRequest request,HttpServletResponse response)<br>
throws ServletException,IOException <br>
{<br>
strFile = request.getRealPath("count.txt");<br>
float[][] xy = new float[4][2];<br>
xy = getNumAndPercent(strFile);<br>
<br>
int[] ang = new int[4];<br>
ang[0] = (int)(xy[0][1]*360);<br>
ang[1] = (int)(xy[1][1]*360);<br>
ang[2] = (int)(xy[2][1]*360);<br>
ang[3] = 360-ang[0]-ang[1]-ang[2];<br>
<br>
response.setHeader("Cache-Control","no-store");<br>
response.setDateHeader("Expires",0);<br>
response.setContentType("image/jpeg");<br>
ServletOutputStream out=response.getOutputStream();<br>
BufferedImage image=new BufferedImage(150,100,BufferedImage.TYPE_INT_RGB);<br>
Graphics2D g=(Graphics2D)image.getGraphics();<br>
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);<br>
g.setColor(Color.white);<br>
g.fillRect(0,0,150,100); <br>
AffineTransform at = null;<br>
Arc2D arc = null;<br>
int fromAng = baseAng;<br>
<br>
at = AffineTransform.getRotateInstance((-20*java.lang.Math.PI)/180,45,37);<br>
g.setTransform(at);<br>
<br>
int r =6;<br>
int dx = (int)(r*java.lang.Math.cos((baseAng+ang[0])/2.0*java.lang.Math.PI/180));<br>
int dy = (int)(r*java.lang.Math.sin((baseAng+ang[0])/2.0*java.lang.Math.PI/180));<br>
arc = new Arc2D.Double(10+dx,24-dy,80,50,fromAng,ang[0],Arc2D.PIE);<br>
g.setColor(color[0]);<br>
g.fill(arc);<br>
fromAng+=ang[0];<br>
for (int i=1;i<4;i++)<br>
{<br>
g.setColor(color[i]);<br>
arc = new Arc2D.Double(10,24,80,50,fromAng,ang[i],Arc2D.PIE);<br>
g.fill(arc);<br>
fromAng+=ang[i];<br>
if (fromAng>360)<br>
{<br>
fromAng-=360;<br>
}<br>
}<br>
<br>
at = AffineTransform.getRotateInstance(0,arc.getCenterX(),arc.getCenterY());<br>
g.setTransform(at);<br>
<br>
for (int i=0;i<4;i++){<br>
g.setColor(color[i]);<br>
g.fillRect(100,15*i+20,10,10);<br>
g.drawString((char)('A'+i)+"",120,15*i+20+8);<br>
}<br>
JPEGImageEncoder encoder=JPEGCodec.createJPEGEncoder(out);<br>
encoder.encode(image);<br>
out.close();<br>
}<br>
<br>
public void doPost(HttpServletRequest request,HttpServletResponse response)<br>
throws ServletException,IOException <br>
{<br>
doGet(request,response);<br>
}<br>
<br>
public synchronized float[][] getNumAndPercent(String sFileName)<br>
{<br>
float xx[][] = new float[4][2];<br>
int totalNum = 0 ;<br>
String strTemp = null;<br>
int i = 0;<br>
java.io.RandomAccessFile rf = null;<br>
try <br>
{<br>
rf = new java.io.RandomAccessFile (sFileName,"r");<br>
} catch(Exception e)<br>
{<br>
System.out.println(e);<br>
System.exit(0);<br>
}<br>
for (i=0;i<4;i++)<br>
{<br>
int m=0;<br>
try {<br>
strTemp = rf.readLine();<br>
} catch (Exception e){<br>
strTemp = "0";<br>
}<br>
<br>
if (strTemp == null) strTemp = "0";<br>
m = new Integer(strTemp).intValue();<br>
xx[i][0]=m;<br>
totalNum += m;<br>
}<br>
if (totalNum==0) totalNum=1;<br>
for ( i=0;i<4;i++){<br>
xx[i][1] = xx[i][0]/totalNum;<br>
}<br>
return xx;<br>
}<br>
}<br>
<br>
五、在index.jsp目錄下建立question.txt和count.txt文件分別用來保存投票的問題和投票的數量,用戶投票后,就修改count.txt的值。<br>
<br>
為了對原作者表示感謝,這2個文件內容不變化,如下:<br>
<br>
<br>
question.txt:<br>
<br>
Yes,I think so! <br>
<br>
No,I dont think so! <br>
<br>
Sorry,I dont know the answer!<br>
<br>
<br>
count.txt:<br>
<br>
12<br>
<br>
9<br>
<br>
5<br>
<br>
9 <br>
<br>
六、目錄結構:<br>
<br>
(1)jsp文件和txt文件同一個目錄<br>
<br>
(2).java文件是servlet目錄下<br>
<br>
七、測試:<br>
<br>
http://[server:port]/dir/index.jsp<br>
<br>
<br>
<br>
本文章歸東方一蛇所有,如要轉載,請注名原文作者和網站。
</table>
<p align="center"><script src="../../2.js"></script></a>
</body>
</html>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -