验证码demo

其他:/servlet/WebRoot/js/jquery-1.11.0.min.js

===================================================================================================================

web.xml文件中几处修改

<servlet-mapping>
    <servlet-name>IdentityServlet</servlet-name>
    <url-pattern>/servlet/IdentityServlet</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>UserInfoManager</servlet-name>
    <url-pattern>/servlet/UserInfoManager</url-pattern>
  </servlet-mapping>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>


=================================================================================================================================

/servlet/WebRoot/identity.jsp文件

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>




<script type="text/javascript" language="javascript" src="./js/jquery-1.7.2.min.js" ></script>
<script type="text/javascript">
  function changeImg() 
	{
		var imgObj = document.getElementById("img");
		imgObj.src =  "/servlet/servlet/IdentityServlet?ran=" + Math.random();
	}
</script>


  <head>
    <base href="<%=basePath%>">
    
    <title>验证码页面</title>
	
  </head>
  
  <body>
     <%
    	HttpSession s = request.getSession(); 
   		
      %>
    	得到Session的值是<%=s.getAttribute("account") %>
	<form action="/servlet/servlet/UserInfoManager" id="commentForm" method="post">
			<img src="/servlet/servlet/IdentityServlet" id="img" class="yzm" width="109" height="40" /> 
			<a href="javascript:changeImg()" class="login-text03">看不清楚,换张图片</a>
			</br>
			<span class="login_txt">验证码:</span>
			<input name="code" type="text" value="" maxLength=4 size=10 /> 
			
			</br>
			<input type="submit" value="提交" />
	</form>
  </body>
</html>


==================================================================================================================================

客户端的文件:


package com.nci;


import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;




import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.util.Random;


import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


/*验证码小程序*/


public class IdentityServlet extends HttpServlet {


	  //产生随即的字体  
    private Font getFont() {  
    	
	    //创建random对象用来生成随机数
	    Random random = new Random();
	    //创建字体数组,用来装不同的字体的Font对象
	    Font font[] = new Font[5];  
	    font[0] = new Font("Ravie", Font.PLAIN, 24);  
	    font[1] = new Font("Antique Olive Compact", Font.PLAIN, 24);  
	    font[2] = new Font("Forte", Font.PLAIN, 24);  
	    font[3] = new Font("Wide Latin", Font.PLAIN, 24);  
	    font[4] = new Font("Gill Sans Ultra Bold", Font.PLAIN, 24);  
	    return font[random.nextInt(5)];  
    }  
    
    
	public void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {


	        // 设置响应头 Content-type类型  
	        resp.setContentType("image/jpeg");  
	        
	        OutputStream os = resp.getOutputStream();  
	        int width = 83, height = 30;  
	        // 建立指定宽、高和BufferedImage对象  
	        BufferedImage image = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);  
	  
	        Graphics g = image.getGraphics(); // 该画笔画在image上  
	        Color c = g.getColor(); // 保存当前画笔的颜色
	        //填充矩形
	        g.fillRect(0, 0, width, height);  
	          
	  
	            char[] ch = "abcdefghjkmnpqrstuvwxyz23456789".toCharArray();
	            
	            // 随即产生的字符串 不包括 i l(小写L) o(小写O) 1(数字1)0(数字0)  
	            int length = ch.length; // 随即字符串的长度  
	            String sRand = ""; // 保存随即产生的字符串  
	            Random random = new Random();  
	            for (int i = 0; i < 4; i++) {  
	            // 设置随机字体调用了getFont()函数  
	            g.setFont(getFont());  
	            // 随即生成0-9的数字  
	            String rand = new Character(ch[random.nextInt(length)]).toString();  
	            sRand += rand;  
	            // 设置随机颜色  
	            g.setColor(new Color(random.nextInt(255), random.nextInt(255), random.nextInt(255)));  
	            g.drawString(rand, 20 * i + 6, 25);  
	        }  
	        //产生随即干扰点  
	        for (int i = 0; i < 20; i++) {  
	            int x1 = random.nextInt(width);  
	            int y1 = random.nextInt(height);  
	            g.drawOval(x1, y1, 2, 2);  
	        }  
	         // 将画笔的颜色再设置回去  
	        g.setColor(c); 
	        // 释放此图形的上下文以及它使用的所有系统资源。
	        g.dispose();  
	  
	        //将验证码记录到session  
	        req.getSession().setAttribute("safecode", sRand);  
	        // 输出图像到页面  
	        ImageIO.write(image, "JPEG", os);  
	  
	    }  
	  
	    protected void doPost(HttpServletRequest req, HttpServletResponse resp)  
	            throws ServletException, IOException {  
		        doGet(req, resp);  
		 } 
		
	
		
		 
		


}


-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

服务器端文件:

package com.nci;


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 javax.servlet.http.HttpSession;


public class UserInfoManager extends HttpServlet {




	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {


		response.setContentType("text/html");
		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>");
		out.print("    This is ");
		out.print(this.getClass());
		out.println(", using the GET method");
		out.println("  </BODY>");
		out.println("</HTML>");
		out.flush();
		out.close();
	}




	
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {


			//获取页面传过来的参数(验证码)
	
	
			String code=request.getParameter("code");    //这里的“code”为<input class=“” name="code" type="rext" value="" maxLength=4 size=10 /> 中的name属性名
			System.out.println(code);//控制台打印传过来的code值
			HttpSession session=request.getSession();//初始化Session
	
			String sessionCode=(String)session.getAttribute("safecode");//获取的验证码
	
			System.out.println(sessionCode);//打印从CheckCodeServlet 类获取随即生成的验证码参数
			//判断用户输入的验证码与随机产生的验证码是否对应
			if (!(sessionCode.equals(code)))
			{
					//验证验证码不正确的情况
			
					request.setAttribute("msg", "对不起验证码不正确");
					//提示内容
			
					request.getRequestDispatcher("/login.jsp").forward(request, response);//如果不正确返回一个提示(msg)给页面,在login.jsp页面利用${msg}显示提示
			}
			else
			{
				//验证成功
		
				String msg=request.getParameter("account");
		
				request.setAttribute("msg",msg);
		
				session.setAttribute("account", msg);
		
				//页面跳转
		
				request.getRequestDispatcher("/login.jsp").forward(request, response);
		
				System.out.println("登陆成功!");  //控制台测试是否登录成功!
			}
		}
	}





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值