Servlet部分:
package servlet;
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
public class CreateImage extends HttpServlet {
String width;
String height;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//生成4位数字随机数
int randnumber=(int)Math.floor(Math.random()*10000);
String rand=String.valueOf(randnumber);
switch(rand.length()){
case 1: rand = "000"+rand; break;
case 2: rand = "00"+rand; break;
case 3: rand = "0"+rand; break;
case 4: break;
}
//生成图象
try {
response.setContentType("image/jpeg");
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
BufferedImage image = new BufferedImage(Integer.parseInt(width), Integer.parseInt(height),
BufferedImage.TYPE_INT_RGB);
// 获取图形上下文
Graphics g = image.getGraphics();
// 设定背景色
g.setColor(Color.white);
g.fillRect(0, 0, Integer.parseInt(width), Integer.parseInt(height));
// 将认证码显示到图象中
g.setColor(Color.black);
g.setFont(new Font("Times New Roman", Font.PLAIN, 18));
g.drawString(rand, 15, 16);
// 随机产生88个干扰点,使图象中的认证码不易被其它程序探测到
Random random = new Random();
for (int i = 0; i < 88; i++) {
int x = random.nextInt(Integer.parseInt(width));
int y = random.nextInt(Integer.parseInt(height));
g.drawLine(x, y, x, y);
}
// 图象生效
g.dispose();
ServletOutputStream responseOutputStream = response.getOutputStream();
// 输出图象到页面
ImageIO.write(image, "JPEG", responseOutputStream);
// 以下关闭输入流!
responseOutputStream.flush();
responseOutputStream.close();
//随机数字放到session
request.getSession().setAttribute("randNumber", rand);
} catch (Exception e) {
e.printStackTrace();
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
/**
* @function: 初试化方法,得到xml配置文件中数值
*/
public void init() throws ServletException {
width=getInitParameter("width");
height=getInitParameter("height");
}
}
xml配置部分:
<!-- 随即生成验证数字 -->
<servlet>
<servlet-name>picShow</servlet-name>
<servlet-class>servlet.CreateImage</servlet-class>
<init-param>
<param-name>width</param-name>
<param-value>60</param-value>
</init-param>
<init-param>
<param-name>height</param-name>
<param-value>22</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>picShow</servlet-name>
<url-pattern>/imageShow</url-pattern>
</servlet-mapping>
页面调用部分:
<img src="imageShow" />