步骤
生成图片
BufferedImage图像数据缓冲区
Graphics绘制图片
Color获取颜色
Random生成随机数
ImageIO输出图片
public class ImageServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
BufferedImage bi=new BufferedImage(80, 22, BufferedImage.TYPE_INT_RGB);
Graphics g=bi.getGraphics();
g.setColor(new Color(220, 220, 220));
g.fillRect(0, 0, 80, 22);
char[] code="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".toCharArray();
StringBuffer sBuffer=new StringBuffer();
Random r=new Random();
int len=code.length,index;
for(int i=0;i<4;i++){
index=r.nextInt(len);
g.setColor(new Color(r.nextInt(255), r.nextInt(255), r.nextInt(255)));
g.drawString(code[index]+"", (i*15)+3, 18);
sBuffer.append(code[index]);
}
request.getSession().setAttribute("codeImage", sBuffer.toString());
ImageIO.write(bi, "jpg", response.getOutputStream());
}
}
在web.xml中注册ImageServlet
<servlet>
<servlet-name>ImageServlet</servlet-name>
<servlet-class>servlet.ImageServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ImageServlet</servlet-name>
<url-pattern>/servlet/ImageServlet</url-pattern>
</servlet-mapping>
jsp页面中使用
<form action="<%=request.getContextPath()%>/servlet/VerifyServlet" method="post">
<input type="text" name="verificationCode"/>
<img alt="验证码" id="vcode" src="<%=request.getContextPath() %>/servlet/ImageServlet">
<a href="javascript:refreshcode()">刷新</a>
<br>
<input type="submit" value="提交">
</form>
校验验证码
获取页面验证码
获取session保存的验证码
比较验证码
返回校验结果
public class VerifyServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String code=(String) request.getSession().getAttribute("codeImage");
String vcode=request.getParameter("verificationCode").toUpperCase();
response.setContentType("text/html;charset=utf-8");
PrintWriter out=response.getWriter();
if(code.equals(vcode)){
out.println("验证码输入正确");
}else {
out.print("验证码输入错误");
}
}
}
在web.xml中注册VerifyServlet
<servlet>
<servlet-name>VerifyServlet</servlet-name>
<servlet-class>servlet.VerifyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>VerifyServlet</servlet-name>
<url-pattern>/servlet/VerifyServlet</url-pattern>
</servlet-mapping>
完整示例:https://github.com/lazyboy20150303/VerificationCode