⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 0214.htm

📁 JspServlet教程专栏 对javaservlet讲述的非常详细
💻 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 &nbsp;(文/东方一蛇)</div>

<br>一、前言&nbsp; <br>
<br>
  &nbsp; 本文原作者为Tony&nbsp; Wang&nbsp; ,该文章涉及到文件的读写和jpg图片的自动生成。利用jsp+servlet的技术,jsp调用servlet生成图片。&nbsp; <br>
<br>
二、首文件index.jsp如下:<br>
<br>
&lt;%--&nbsp; <br>
<br>
Author:&nbsp; Tony&nbsp; Wang&nbsp; <br>
<br>
E-mail:&nbsp; lucky_tony@163.net&nbsp; <br>
<br>
Date:&nbsp; 2001-01-01&nbsp; <br>
<br>
如果对程序有什么疑问,可以和我联系,&nbsp; 另外程序如果有什么bug,麻烦指出!!&nbsp; <br>
<br>
--%><br>
<br>
&lt;%@&nbsp; page&nbsp; contentType="text/html;charSet=gb2312"%><br>
&lt;%<br>
response.setHeader("Cache-Control","no-store");<br>
response.setDateHeader("Expires",0);<br>
%><br>
&lt;%!<br>
public&nbsp; String[]&nbsp; getQuestion(String&nbsp; s)<br>
{<br>
String[]&nbsp; strQ&nbsp; =&nbsp; new&nbsp; String[4];<br>
String&nbsp; strTemp&nbsp; =&nbsp; null;<br>
int&nbsp; i;<br>
java.io.RandomAccessFile&nbsp; rf&nbsp; =&nbsp; null;<br>
try&nbsp; {<br>
rf&nbsp; =&nbsp; new&nbsp; java.io.RandomAccessFile(s,"r");<br>
}&nbsp; catch(Exception&nbsp; e)<br>
{<br>
System.out.println(e);<br>
System.exit(0);<br>
}<br>
for(i=0;i&lt;4;i++)&nbsp; <br>
{<br>
try&nbsp; {<br>
strTemp&nbsp; =&nbsp; rf.readLine();<br>
}&nbsp; catch(Exception&nbsp; e)&nbsp; {<br>
strTemp&nbsp; =&nbsp; "None&nbsp; Question";<br>
}<br>
if(strTemp==null)strTemp&nbsp; =&nbsp; "None&nbsp; Question";<br>
strQ&nbsp; =&nbsp; strTemp;<br>
}<br>
return&nbsp; strQ;<br>
}<br>
<br>
%><br>
<br>
&lt;%<br>
String&nbsp; s&nbsp; =&nbsp; null;<br>
String[]&nbsp; question&nbsp; =&nbsp; new&nbsp; String[4];<br>
<br>
s&nbsp; =&nbsp; request.getRealPath("question.txt");<br>
question&nbsp; =&nbsp; getQuestion(s);<br>
%><br>
<br>
<br>
&lt;html><br>
&lt;head><br>
&lt;title>&lt;/title><br>
&lt;link&nbsp; href="css.css"&nbsp; rel="StyleSheet"&nbsp; type="text/css">&lt;/link><br>
&lt;/head><br>
<br>
&lt;body><br>
&lt;table&nbsp; width="180"&nbsp; border="1"&nbsp; bordercolor="#999999"><br>
&lt;tr><br>
&lt;td&nbsp; align=center>冰帆调查&lt;/td><br>
&lt;/tr><br>
&lt;form&nbsp; name=frm&nbsp; method=post&nbsp; action=write.jsp><br>
&lt;tr>&nbsp; <br>
&lt;td><br>
&lt;%<br>
String&nbsp; ss&nbsp; =&nbsp; null;<br>
for&nbsp; (int&nbsp; i=0;i&lt;4;i++)<br>
{<br>
ss&nbsp; =&nbsp; "&lt;input&nbsp; type=\"radio\"&nbsp; name=\"choice\"&nbsp; value="&nbsp; +&nbsp; i+">"+(char)('A'+i)+"、"+&nbsp; question[i]+"&lt;br>";<br>
out.println(ss);<br>
}<br>
%><br>
&lt;/td><br>
&lt;/tr><br>
&lt;tr><br>
&lt;td&nbsp; align=center>&lt;input&nbsp; type=submit&nbsp; value="我&nbsp; 投&nbsp; 一&nbsp; 票">&lt;/td><br>
&lt;/tr><br>
&lt;tr><br>
&lt;td&nbsp; align=center>&lt;img&nbsp; src="/vote/servlet/VoteImage"&nbsp; width=150&nbsp; height=100>&lt;/td><br>
&lt;/tr><br>
&lt;/form><br>
&lt;/table><br>
&lt;/body><br>
&lt;/html><br>
<br>
<br>
三、写文件write.jsp<br>
<br>
&lt;%--<br>
Author:&nbsp; Tony&nbsp; Wang<br>
E-mail:&nbsp; lucky_tony@163.net<br>
Date:&nbsp; 2001-01-01<br>
如果对程序有什么疑问,可以和我联系,<br>
另外程序如果有什么bug,麻烦指出!!<br>
--%><br>
&lt;%!<br>
public&nbsp; int[]&nbsp; getNumber(String&nbsp; s)<br>
{<br>
int[]&nbsp; mCount&nbsp; =&nbsp; new&nbsp; int[4];<br>
String&nbsp; strTemp&nbsp; =&nbsp; null;<br>
int&nbsp; i;<br>
java.io.RandomAccessFile&nbsp; rf&nbsp; =&nbsp; null;<br>
try&nbsp; {<br>
rf&nbsp; =&nbsp; new&nbsp; java.io.RandomAccessFile(s,"r");<br>
}&nbsp; catch(Exception&nbsp; e)<br>
{<br>
System.out.println(e);<br>
System.exit(0);<br>
}<br>
for(i=0;i&lt;4;i++)&nbsp; <br>
{<br>
try&nbsp; {<br>
strTemp&nbsp; =&nbsp; rf.readLine();<br>
}&nbsp; catch(Exception&nbsp; e)&nbsp; {<br>
strTemp&nbsp; =&nbsp; "0";<br>
}<br>
if(strTemp==null)strTemp&nbsp; =&nbsp; "0";<br>
mCount[i]&nbsp; =&nbsp; new&nbsp; Integer(strTemp).intValue();<br>
}<br>
return&nbsp; mCount;<br>
}<br>
<br>
public&nbsp; void&nbsp; setNumber(String&nbsp; s,int[]&nbsp; x)<br>
{<br>
try&nbsp; {<br>
java.io.PrintWriter&nbsp; pw&nbsp; =&nbsp; new&nbsp; java.io.PrintWriter(new&nbsp; java.io.FileOutputStream(s));<br>
for&nbsp; (int&nbsp; i=0;i&lt;4;i++){<br>
pw.println(x[i]+"");<br>
}<br>
pw.close();<br>
}&nbsp; catch(Exception&nbsp; e)&nbsp; {<br>
System.out.println("Write&nbsp; file&nbsp; error:"+e.getMessage());<br>
}<br>
}<br>
%><br>
<br>
<br>
&lt;%<br>
String&nbsp; tmp&nbsp; =&nbsp; null;<br>
int&nbsp; choice&nbsp; =&nbsp; -1;<br>
int[]&nbsp; count&nbsp; =&nbsp; new&nbsp; int[4];<br>
tmp&nbsp; =&nbsp; request.getParameter("choice");<br>
if&nbsp; (tmp==null){<br>
}&nbsp; else&nbsp; {<br>
choice&nbsp; =&nbsp; new&nbsp; Integer(tmp).intValue();<br>
}<br>
/////////////<br>
String&nbsp; s&nbsp; =&nbsp; request.getRealPath("count.txt");<br>
if(choice>=0){<br>
count&nbsp; =&nbsp; getNumber(s);<br>
count[choice]++;<br>
setNumber(s,count);<br>
}<br>
<br>
response.sendRedirect("index.jsp");<br>
%><br>
四、servlet原代码:VoteImage.java&nbsp; :<br>
<br>
/*<br>
Author:&nbsp; Tony&nbsp; Wang<br>
E-mail:&nbsp; lucky_tony@163.net<br>
Date:&nbsp; 2001-01-01<br>
如果对程序有什么疑问,可以和我联系,<br>
另外程序如果有什么bug,麻烦指出!!<br>
*/<br>
import&nbsp; java.io.*;<br>
import&nbsp; java.util.*;<br>
import&nbsp; com.sun.image.codec.jpeg.*;<br>
import&nbsp; javax.servlet.*;<br>
import&nbsp; javax.servlet.http.*;<br>
import&nbsp; java.awt.*;<br>
import&nbsp; java.awt.geom.*;<br>
import&nbsp; java.awt.image.*;<br>
public&nbsp; class&nbsp; VoteImage&nbsp; extends&nbsp; HttpServlet&nbsp; <br>
{<br>
private&nbsp; String&nbsp; strFile&nbsp; =&nbsp; null;<br>
private&nbsp; Color&nbsp; color[]={Color.red,Color.black,Color.orange,Color.green};<br>
private&nbsp; int&nbsp; baseAng&nbsp; =&nbsp; 30;<br>
public&nbsp; void&nbsp; doGet(HttpServletRequest&nbsp; request,HttpServletResponse&nbsp; response)<br>
throws&nbsp; ServletException,IOException&nbsp; <br>
{<br>
strFile&nbsp; =&nbsp; request.getRealPath("count.txt");<br>
float[][]&nbsp; xy&nbsp; =&nbsp; new&nbsp; float[4][2];<br>
xy&nbsp; =&nbsp; getNumAndPercent(strFile);<br>
<br>
int[]&nbsp; ang&nbsp; =&nbsp; new&nbsp; int[4];<br>
ang[0]&nbsp; =&nbsp; (int)(xy[0][1]*360);<br>
ang[1]&nbsp; =&nbsp; (int)(xy[1][1]*360);<br>
ang[2]&nbsp; =&nbsp; (int)(xy[2][1]*360);<br>
ang[3]&nbsp; =&nbsp; 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&nbsp; out=response.getOutputStream();<br>
BufferedImage&nbsp; image=new&nbsp; BufferedImage(150,100,BufferedImage.TYPE_INT_RGB);<br>
Graphics2D&nbsp; 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);&nbsp; <br>
AffineTransform&nbsp; at&nbsp; =&nbsp; null;<br>
Arc2D&nbsp; arc&nbsp; =&nbsp; null;<br>
int&nbsp; fromAng&nbsp; =&nbsp; baseAng;<br>
<br>
at&nbsp; =&nbsp; AffineTransform.getRotateInstance((-20*java.lang.Math.PI)/180,45,37);<br>
g.setTransform(at);<br>
<br>
int&nbsp; r&nbsp; =6;<br>
int&nbsp; dx&nbsp; =&nbsp; (int)(r*java.lang.Math.cos((baseAng+ang[0])/2.0*java.lang.Math.PI/180));<br>
int&nbsp; dy&nbsp; =&nbsp; (int)(r*java.lang.Math.sin((baseAng+ang[0])/2.0*java.lang.Math.PI/180));<br>
arc&nbsp; =&nbsp; new&nbsp; 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&nbsp; (int&nbsp; i=1;i&lt;4;i++)<br>
{<br>
g.setColor(color[i]);<br>
arc&nbsp; =&nbsp; new&nbsp; Arc2D.Double(10,24,80,50,fromAng,ang[i],Arc2D.PIE);<br>
g.fill(arc);<br>
fromAng+=ang[i];<br>
if&nbsp; (fromAng>360)<br>
{<br>
fromAng-=360;<br>
}<br>
}<br>
<br>
at&nbsp; =&nbsp; AffineTransform.getRotateInstance(0,arc.getCenterX(),arc.getCenterY());<br>
g.setTransform(at);<br>
<br>
for&nbsp; (int&nbsp; i=0;i&lt;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&nbsp; encoder=JPEGCodec.createJPEGEncoder(out);<br>
encoder.encode(image);<br>
out.close();<br>
}<br>
<br>
public&nbsp; void&nbsp; doPost(HttpServletRequest&nbsp; request,HttpServletResponse&nbsp; response)<br>
throws&nbsp; ServletException,IOException&nbsp; <br>
{<br>
doGet(request,response);<br>
}<br>
<br>
public&nbsp; synchronized&nbsp; float[][]&nbsp; getNumAndPercent(String&nbsp; sFileName)<br>
{<br>
float&nbsp; xx[][]&nbsp; =&nbsp; new&nbsp; float[4][2];<br>
int&nbsp; totalNum&nbsp; =&nbsp; 0&nbsp; ;<br>
String&nbsp; strTemp&nbsp; =&nbsp; null;<br>
int&nbsp; i&nbsp; =&nbsp; 0;<br>
java.io.RandomAccessFile&nbsp; rf&nbsp; =&nbsp; null;<br>
try&nbsp; <br>
{<br>
rf&nbsp; =&nbsp; new&nbsp; java.io.RandomAccessFile&nbsp; (sFileName,"r");<br>
}&nbsp; catch(Exception&nbsp; e)<br>
{<br>
System.out.println(e);<br>
System.exit(0);<br>
}<br>
for&nbsp; (i=0;i&lt;4;i++)<br>
{<br>
int&nbsp; m=0;<br>
try&nbsp; {<br>
strTemp&nbsp; =&nbsp; rf.readLine();<br>
}&nbsp; catch&nbsp; (Exception&nbsp; e){<br>
strTemp&nbsp; =&nbsp; "0";<br>
}<br>
<br>
if&nbsp; (strTemp&nbsp; ==&nbsp; null)&nbsp; strTemp&nbsp; =&nbsp; "0";<br>
m&nbsp; =&nbsp; new&nbsp; Integer(strTemp).intValue();<br>
xx[i][0]=m;<br>
totalNum&nbsp; +=&nbsp; m;<br>
}<br>
if&nbsp; (totalNum==0)&nbsp; totalNum=1;<br>
for&nbsp; (&nbsp; i=0;i&lt;4;i++){<br>
xx[i][1]&nbsp; =&nbsp; xx[i][0]/totalNum;<br>
}<br>
return&nbsp; 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&nbsp; think&nbsp; so!&nbsp; <br>
<br>
No,I&nbsp; dont&nbsp; think&nbsp; so!&nbsp; <br>
<br>
Sorry,I&nbsp; dont&nbsp; know&nbsp; the&nbsp; answer!<br>
<br>
<br>
count.txt:<br>
<br>
12<br>
<br>
9<br>
<br>
5<br>
<br>
9&nbsp; <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 + -