• 用户登录时生成验证码页面


    1.生成验证页面
    <%@ page language="java" import="java.util.*,java.awt.*" contentType="image/jpeg"%>
    <%@ page import="java.awt.image.*"%>
    <%@ page import="java.awt.Graphics,javax.imageio.*"%>
    
    <%!
    
     Color getRandColor(int fc,int bc){      //在给定范围内获取随机颜色
    	
    		Random random = new Random();
    		if(fc>255) fc=255;
    		if(bc>255) bc=255;
    		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.setHeader("Pragma","No-cache");
      response.setHeader("Cache-Control","no-cache");
      response.setDateHeader("Expires",0);
      
      //在内存中创建图像
      int width=60,height=20;
      BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
      
      //获取图形上下文
      Graphics g = image.getGraphics();
      //生成随机色
      Random random = new Random();
      //设定背景色
      g.setColor(getRandColor(200,250));
      g.fillRect(0,0,width,height);
      //设定字体
      g.setFont(new Font("Times New Roman",Font.PLAIN,18));
      //画边框
      g.setColor(getRandColor(160,200));
      for(int i=0;i<155;i++){
         int x= random.nextInt(width);
         int y = random.nextInt(height);
         int x1 = random.nextInt(12);
         int y1 = random.nextInt(12);
         g.drawLine(x,y,x1,y1);
      }
      
      //随机产生的认证码(4位数)
      String sRand = "";
      for(int i=0;i<4;i++){
       String rand = String.valueOf(random.nextInt(10));
       sRand +=rand;
       g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));
       g.drawString(rand,13*i+6,16);
       
     }
     //将认证码存放在session中
     session.setAttribute("rand",sRand);
     //图像生效
     g.dispose();
     //输出图像到页面
     ImageIO.write(image,"JPEG",response.getOutputStream());
     out.clear();
     out = pageContext.pushBody();
    %>


    2.用户登录页面,调用生成验证码页面

    <%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        
        <title>My JSP 'login.jsp' starting page</title>
        
    	<meta http-equiv="pragma" content="no-cache">
    	<meta http-equiv="cache-control" content="no-cache">
    	<meta http-equiv="expires" content="0">    
    	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    	<meta http-equiv="description" content="This is my page">
    	<link rel="stylesheet" type="text/css" href="../css/login.css">
    	<script type="text/javascript">
    	 function checkForm(){
              
              if(checkUsername() && checkPass() && checkCode()){
                  return true;
              }
              return false;
           }
        
    	    function checkUsername(){
    	        var name = document.getElementById("username").value;
    			var namePattern=/^[a-zA-Z0-9]w{0,15}$/;
    			if(name.length == 0){
    			   alert("用户名不能为空!");
    			   return false;
    			}
    			if(!namePattern.test(name))
    			{
    				alert("用户名输入出错!");
    				return false;
    			}
    			return true;
    		}
    		
    		
          function checkPass(){
            var pass = document.getElementById("password").value;
    		var pushMoneyPattern=/^[a-zA-Z0-9]w{0,15}$/;   //表示只能是数字
    		if(pass.length == 0){
    		   alert("密码不能为空!");
    		   return false;
    		}
    		if(!pushMoneyPattern.test(pass)){
              alert("密码输入错误!");
              return false;
            }
    		 return true;
    	   }
    	   
    	   function checkCode(){
    	      var code = document.getElementById("txtCheckCode").value;
    	      var codePattern = /^[0-9]{4}$/;
    	      if(code.length == 0){
    	        alert("验证码不能为空!");
    	        return false;
    	      }
    	      if(!codePattern.test(code)){
    	        alert("验证码只能是四位数字! ");
    	        return false;
    	      }
    	      return true;
    	   }
    	   function loadimage(){
    	       document.getElementById("randImage").src = "checkCode.jsp?"+Math.random();
    	   }
    	</script>   
      </head>
      
      <body>
    	   <form action="/Chapter06/BankLoginServlet" method="post" onsubmit="return checkForm()">
    	   <table cellpadding="0" cellspacing="0" border="1px solid black" width="320px" height="120px">
    	    <tr>
    	     <td class="loginTitle">用户名:</td>
    	     <td class="loginValue"><input type="text" name="username" /></td>
    	    </tr>
    	    <tr>
    	     <td class="loginTitle">密  码:</td>
    	     <td class="loginValue"><input type="password" name="password" size="21" /></td>
    	    </tr>
    	    <tr>
    	     <td class="loginTitle">验证码:</td>
    	     <td class="loginValue" nowrap>
    	        <input type="text" name="txtCheckCode" id="txtCheckCode">
    	        <img src="checkCode.jsp" name="randImage" id="randImage" alt="看不清换一张" onclick="javascript:loadimage();" />
    	     </td>
    	    </tr>
    	    <tr>
    	     <td id="btn" colspan="2">
    	      <input type="submit" value="提交" />   <input type="reset" value="重置" />
    	     </td>
    	    </tr>          
    	   </table>
    	   </form>
      </body>
    </html>
    


    3.验证用户登录的servlet

    package com.chapter06.servlet;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import com.chapter06.bo.UserBo;
    import com.chapter06.bo.impl.UserBoImpl;
    
    public class BankLoginServlet extends HttpServlet {
    
    	/*
    	 * 对输入的用户名、密码和验证码进行验证
    	 * */
    	
    	private UserBo userBo;
    	
    	@Override
    	protected void doGet(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    		
    		userBo = new UserBoImpl();
    		response.setContentType("text/html;charset=gbk");
    		PrintWriter out = response.getWriter();
    		
    		//获取表单中的数据
    		String username = request.getParameter("username");
    		String password = request.getParameter("password");
    		String checkCode = request.getParameter("txtCheckCode");
    System.out.println(username);
    System.out.println(password);
    System.out.println(checkCode);
    		//获取在session域中随机产生的验证码
    		String randCode = request.getSession().getAttribute("rand").toString();
    System.out.println(randCode);
    		
             //首先对验证码进行判断
            if(!checkCode.equals(randCode)){
            	out.print("<script>alert('验证码输入错误!');location.href='bankLogin/login.jsp';</script>");
            }else{
               if(userBo.validUserByNameAndPwd(username, password)){
            	   request.setAttribute("username", username);
            	   request.getRequestDispatcher("bankLogin/index.jsp").forward(request, response);
               }else{
            	   out.print("<script>alert('用户名或密码验证错误!');location.href='bankLogin/login.jsp';</script>");
               }
            }		
    	}
    	
    
    	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
    			throws ServletException, IOException {
    	
    		this.doGet(req, resp);
    	}
    }
    


     

  • 相关阅读:
    Java中OutOfMemoryError(内存溢出)的情况及解决办法
    php strtotime函数服务器和本地不相同
    Object传入String类型和其他
    Java静态变量,常量,成员变量,局部变量
    Vector使用
    Java反射机制
    List和ArrayList,LinkList的区别
    phpstrtotime()对于31日求上个月有问题
    PGsql解决时差24H
    drawable 另外一种形式dimens.xml
  • 原文地址:https://www.cnblogs.com/snake-hand/p/3151217.html
Copyright © 2020-2023  润新知