jsp实现验证码实例
2013-12-11 20:38
232 查看
大家都知道,验证码的出现无非就是为了安全期间,防止非法操作!
这其实没什么技术可言,用到的事java绘画中的一些知识而已~~其实验证码各式各样多得很,实现方式五花八门,大家可以自己去研究一下!
废话不多说了,在这里给出的的一个项目中用到的一个例子~~~~
验证码生成程序:
checkCodeServlet.java
code.html
loginServlet.java
servlet的配置文件在这里就不再贴出了~~~·
当然,code.html文件中点击验证码是会自动变换的(存在浏览器兼容问题),如果想点击验证码不变换的话,可以将script的代码和<span>代码去掉即可!!
运行截图如下:
这其实没什么技术可言,用到的事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>代码去掉即可!!
运行截图如下:
相关文章推荐
- JSP实现彩色验证码—源码实例
- JSP + Servlet实现登录验证码
- JSP实现添加功能和分页显示实例分析
- 简单ajax应用实例:ajax+jsp实现用户名验证
- jsp验证码的使用实例
- jsp验证码两个实例
- JSP使用Servlet作为控制器实现MVC模式实例详解[转]
- JSP验证码大全之Servlet实现(二)
- JSP+Servlet验证码的实现
- JSP+Servlet+Tomcat+Mysql实现用户注册、登陆、修改、添加、查看详情、分页实例之---数据库
- JSP彩色验证码的实现
- jsp连接mysql数据库,实现含验证码的用户登录
- [JavaWeb]Servlet验证码实现(实例代码)
- JSP实现验证码
- JSP+Servlet+Tomcat+Mysql实现注册、登陆、修改、添加、查看、分页实例之----分页操作
- java实现动态验证码源代码——jsp页面
- 小工具-jsp实现验证码功能
- 基于java实现,封装验证码实例
- Ajax+Struts2实现验证码验证功能实例代码
- Java 实现随机验证码功能简单实例