public class FormServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println(" <BODY>");
String form = "<form action='LoginCodeServlet' method='post'>"+
"Name:<input type='text' name='name'/><br/>"+
"Pwd:<input type='password' name='pwd'/><br/>"+
"驗證碼:<input type='text' name='code'/><img src='ImgServlet'></img><br/>"+
"<input type='submit' value='登錄'/> </form>";
out.println(form);
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
}
}
---------------------------------------------------------------------------------------------------------
public class LoginCodeServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println(" <BODY>");
String code = request.getParameter("code");//用戶輸入的code
String sCode = (String) request.getSession().getAttribute("sCode");//放在session中真實code
if(sCode==null || !sCode.equals(code)){
out.println("驗證碼錯誤!");
}else{
//驗證碼正確,然后再獲取用戶名和密碼,到后台進行用戶信息驗證
String name = request.getParameter("name");
String pwd = request.getParameter("pwd");
if(name!=null && !name.trim().equals("") &&
pwd!=null && !pwd.trim().equals("")){
System.out.println("到后台數據庫進行信息驗證:"+name+","+pwd);
out.println("登錄成功:"+name+","+pwd);
}else{
out.println("驗證碼正確,但Name或Pwd信息未輸全");
}
}
//※驗證碼用過一次之后,就要讓它失效!!!否則容易被黑
request.getSession().removeAttribute("sCode");//清除容器中的屬性
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
}
}
-------------------------------------------------------------------------------------------------------------------
public class ImgServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("image/jpg");
int w=60;
int h=30;
BufferedImage img = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
Graphics g = img.getGraphics();
g.setFont(new Font("a", Font.BOLD, 18));
Random r = new Random();
int a = r.nextInt(10000);
//把正確的驗證碼存儲到session中
request.getSession().setAttribute("sCode", ""+a);
g.drawString(""+a, 0, h);
g.dispose();
ImageIO.write(img, "JPEG", response.getOutputStream());
}
}
----------------------------------------------------------------------------------------------------------------------
<a href="FormServlet">用戶登錄--驗證碼技術演示</a>