標籤:jsp 驗證碼
1、login.jsp登陸介面
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Login Page</title><script language="javascript">function loadImage(){document.getElementById("randImage").src="image.jsp?"+Math.random();}</script></head><body><form action="validate.jsp" method="post"><table cellspacing="1" cellpadding="3" border="0"><tr><td colspan="2">Please enter your verification code</td></tr><tr><td><input type="text" name="vcode"/></td><td><img src="image.jsp" id="randImage"/></td></tr><tr><td colspan="2"><a href="javascript:loadImage()">Change an image</a></td></tr><tr><td colspan="2"><input type="submit" value="Submit"/></td></tr></table></form></body></html>
2、image.jsp產生驗證碼圖片的jsp檔案
<%@ page language="java"%><%@ page import="java.awt.*,java.awt.image.*,java.util.*" %><%@ page import="java.io.OutputStream,javax.imageio.*"%><%!Color getRandColor(int fc,int bc){if(fc>255){fc=255;}if(bc>255){bc=255;}Random random=new Random();int r=fc+random.nextInt(bc-fc);int g=fc+random.nextInt(bc-fc);int b=fc+random.nextInt(bc-fc);return new Color(r,g,b);}%><%//本地無緩衝,每次自動重新整理response.addHeader("pragma", "No-cashe");response.addHeader("cashe-control","no-cashe");response.setDateHeader("expires",0);int width=60,height=20;BufferedImage bimg=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);Graphics g=bimg.getGraphics();g.setColor(getRandColor(200,250));g.fillRect(0, 0, width, height);g.setColor(getRandColor(160,200));Random rand=new Random();for(int i=0;i<200;i++){int x=rand.nextInt(width);int y=rand.nextInt(height);int w=rand.nextInt(12);int h=rand.nextInt(12);g.drawLine(x, y, x+w, y+h);}String srand="";g.setFont(new Font("Times New Roman",Font.PLAIN,18));for(int i=0;i<4;i++){String num=String.valueOf(rand.nextInt(10));srand+=num;g.setColor(new Color(20+rand.nextInt(110),20+rand.nextInt(110),20+rand.nextInt(110)));g.drawString(num, 13*i+6, 16);}session.setAttribute("srand", srand);OutputStream os=response.getOutputStream();ImageIO.write(bimg, "jpeg", os);os.flush();os.close();os=null;g.dispose();//這兩句非常重要,如果沒有會報錯out.clear();out=pageContext.popBody();%>
3、validate.jsp對驗證碼進行驗證
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Validate Page</title></head><body><%String str=(String)session.getAttribute("srand");String incode=request.getParameter("vcode");if(str.equals(incode)){out.println("<font size=\"+3\" color=\"#000\">The verification is right!</font><br/>");out.println("<font size=\"+4\" color=\"#FF0000\">Welcone to the page!</font><br/><hr/>");}else{out.println("<font size=\"+4\" color=\"#FF0000\">"+"Sorry the verification code is not right</font></br><hr>");}out.println("<br/><a href=\"login.jsp\">Back to the login page</a>");%></body></html>
4、結果
JSP驗證碼