jsp代码:
<form action="<%=basePath%>login" method="post" >
验证码:<input type="text" id="imageCode" name="imageCode" />
<img id="validateImage" src="<%=basePath%>imagecode-getImage" />
<input type="submit" value="提交"/>
</form>
生成验证码图片的servlet代码:
@WebServlet(urlPatterns="/imagecode-getImage")
public class GetCheckImp extends HttpServlet{
protected void doPost(javax.servlet.http.HttpServletRequest req, javax.servlet.http.HttpServletResponse resp)
throws javax.servlet.ServletException ,java.io.IOException {
resp.setHeader("Pragma", "No-cache");
resp.setHeader("Cache-Control", "no-cache");
resp.setDateHeader("Expires", 0);
// 在内存中创建图象
int width = 60, height = 20;
BufferedImage image = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);
// 获取图形上下文
Graphics g = image.getGraphics();
// 设定背景色
g.setColor(new Color(188, 217, 236));// getRandColor(200,250)
g.fillRect(0, 0, width, height);
// 设定字体
g.setFont(new Font("Times New Roman", Font.PLAIN, 18));
// 取随机产生的验证码(4位数字)
// 生成随机类
Random random = new Random();
String sRand = "";
for (int i = 0; i < 4; i++) {
String rand = String.valueOf(random.nextInt(10));
sRand += rand;
g.setColor(new Color(0, 102, 204));
g.drawString(rand, 13 * i + 6, 16);
}
// 将验证码存入SESSION
req.getSession().setAttribute("randnum", sRand);
// 图象生效
g.dispose();
// 输出图象到页面
OutputStream out = null;
try{
out =resp.getOutputStream();
ImageIO.write(image, "JPEG", resp.getOutputStream());
out.flush();
//out.close();
}catch(Exception e){
e.printStackTrace();
}
finally
{
if(out!=null)
{
try{
out.close();
}catch(Exception e)
{
}
}
}
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
this.doPost(req, resp);
}
}
前台提交后验证验证码是否正确:
@WebServlet(urlPatterns="/login")
public class Checknum extends HttpServlet{
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String checknum=(String) req.getSession().getAttribute("randnum");
String imageCode= req.getParameter("imageCode");
if(checknum.equals(imageCode)){
resp.sendRedirect(req.getContextPath()+"/index.jsp");
}else{
resp.sendRedirect(req.getContextPath()+"/checknum.jsp");
}
}
}