jsp实现验证码实例
来源:互联网 发布:火爆网络兔子舞 编辑:程序博客网 时间:2024/06/05 04:02
大家都知道,验证码的出现无非就是为了安全期间,防止非法操作!
这其实没什么技术可言,用到的事java绘画中的一些知识而已~~其实验证码各式各样多得很,实现方式五花八门,大家可以自己去研究一下!
废话不多说了,在这里给出的的一个项目中用到的一个例子~~~~
验证码生成程序:
checkCodeServlet.java
package servlet;import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.image.BufferedImage;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.PrintWriter;import javax.imageio.ImageIO;import javax.servlet.ServletException;import javax.servlet.ServletOutputStream;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;public class checkCodeServlet extends HttpServlet {private static int WIDTH=60;private static int HEIGHT=20; public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {HttpSession session=request.getSession();response.setContentType("image/jpeg");ServletOutputStream sos=response.getOutputStream();response.setHeader("Pragma", "No-cache");response.setHeader("Cache-Control", "no-cache");response.setDateHeader("Expires", 0);//创建内存图像,并获得其图形上下文BufferedImage image=new BufferedImage(WIDTH,HEIGHT,BufferedImage.TYPE_INT_RGB);Graphics g=image.getGraphics();char [] rands=generateCheckCode();drawBackground(g);drawRands(g,rands);g.dispose();ByteArrayOutputStream bos=new ByteArrayOutputStream();ImageIO.write(image, "JPEG", bos);byte[] buf=bos.toByteArray();response.setContentLength(buf.length);sos.write(buf);bos.close();sos.close();session.setAttribute("check_code", new String(rands));}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request,response); }private char[] generateCheckCode(){String chars="0123456789abcdefghijklmnopqrstuvwxyz";char [] rands =new char[4];for(int i=0;i<4;i++){int rand=(int)(Math.random()*36);rands[i]=chars.charAt(rand);}return rands;}//输出 而我I有干扰元素的验证码private void drawRands(Graphics g,char[] rands){g.setColor(Color.black);g.setFont(new Font(null,Font.ITALIC|Font.BOLD,18));//在不同的高度上输出验证码的每个字符g.drawString(""+rands[0], 1,17);g.drawString(""+rands[1], 16,15);g.drawString(""+rands[2], 31,18);g.drawString(""+rands[3], 46,16);System.out.println(rands);}//输出有干扰元素的验证码private void drawBackground(Graphics g){//画背景g.setColor(new Color(0xDCDCDC));g.fillRect(0,0, WIDTH,HEIGHT);//随机产生20个干扰点for(int i=0;i<20;i++){int x=(int)(Math.random()*WIDTH);int y=(int)(Math.random()*HEIGHT);int red=(int)(Math.random()*255);int green=(int)(Math.random()*255);int blue=(int)(Math.random()*255);g.setColor(new Color(red,green,blue));g.drawOval(x,y,1,0);}}}
code.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <title>显示验证码</title> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="this is my page"> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <script type="text/javascript" language="javascript"> function change(){ // alert("wwwwwwwwwwwwww"); var chg=document.getElementById("code"); chg.innerHTML="<img src='checkCodeServlet'>"; } </script> </head> <body> <form action="loginServlet" method="post"><input type="text" name="name"><br><input type="password" name="password"><br><input type="text" name="code" ><span id="code" bgcolor="red" onclick="change()"><img src="checkCodeServlet"></span><br><input type="submit" value="登录"></form> </body></html>
loginServlet.java
package 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 javax.servlet.http.HttpSession;public class loginServlet 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 { request.setCharacterEncoding("utf-8");response.setCharacterEncoding("utf-8");String code=request.getParameter("code");PrintWriter out=response.getWriter();HttpSession session=request.getSession();String check_code=session.getAttribute("check_code").toString();if(code.equals(check_code)){out.println("验证码正确!!"+check_code); return;}out.println("验证码错误!!应该为:"+check_code);}}
servlet的配置文件在这里就不再贴出了~~~·
当然,code.html文件中点击验证码是会自动变换的(存在浏览器兼容问题),如果想点击验证码不变换的话,可以将script的代码和<span>代码去掉即可!!
运行截图如下:
0 0
- jsp实现验证码实例
- JSP实现彩色验证码—源码实例
- JSP实例-彩色验证码
- jsp验证码两个实例
- jsp验证码两个实例
- jsp验证码两个实例
- jsp验证码两个实例
- jsp验证码两个实例
- JSP实现验证码
- jsp验证码实现
- JSP实现验证码
- JSP实现验证码
- JSP实现验证码
- JSP实现验证码
- JSP实现验证码
- JSP实现验证码
- JSP验证码实现
- JSP实现验证码
- #define GPBCON (*(volatile unsigned *)0x56000010) 的理解
- 大表更新方法--使用rowid
- poj2769之寻找最小完全剩余系
- c# excel 新建工作薄
- java中的synchronized理解
- jsp实现验证码实例
- MySQL学习笔记(一)
- “JAX-WS版本不一致导致Webservice异常”与《共享达成共赢》
- 【WPF】使用PSD模板制作巨漂亮的ToggleButton --- 上篇
- Hibernate复合主键
- DB2权限管理
- public,private,protected的使用
- POJ 2386 Lake Counting
- java点滴学习 2013-12-10