java生成验证码并可刷新
手心创建一个简单的页面来显示所创建的验证码
<body> <form action="loginName.mvc" method="post"> 用户名:<input type="text" name="name" id="name"/><br/> 密码:<input type="password" name="password" id="password"/><br/> 验证码1:<a href="javascript:changePicture1();" title='看不清楚,换个图片'><img id="checkcode1" src=""><a href="javascript:changePicture1();" class="login-text03" title='看不清楚,换个图片'>看不清楚,换个图片</a><br/> 验证码2:<a href="javascript:changePicture2();" title='看不清楚,换个图片'><img id="checkcode2" src=""><a href="javascript:changePicture2();" class="login-text03" title='看不清楚,换个图片'>看不清楚,换个图片</a><br/> 验证码3:<a href="javascript:changePicture3();" title='看不清楚,换个图片'><img id="checkcode3" src=""><a href="javascript:changePicture3();" class="login-text03" title='看不清楚,换个图片'>看不清楚,换个图片</a> <span id="spantext"></span><br/> <!-- <input type="button" value="登录" onclick="loginPerson()"/>--> <input type="submit" value="登录"/> </form> </body> <script language="javascript"> window.onload=function(){ changePicture1(); changePicture2(); changePicture3(); }; function changePicture1(){ $("#checkcode1").attr("src","servlet/CheckCode?code="+Math.random()); } function changePicture2(){ /* var arry=["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q", "R","S","T","U","V","W","X","Y","Z","0","1","2","3","4","5","6","7","8","9"]; var len=arry.length; var code=""; for(i=0;i<=4;i++){ var index=Math.floor(Math.random()*len); code+=arry[index]; } */ //alert(code); $("#checkcode2").attr("src","servlet/ImageServlet?code="+Math.random()); } function changePicture3(){ $("#checkcode3").attr("src","servlet/graphicsImage?code="+Math.random()); } function loginPerson(){ var name=document.getElementById("name").value; var password=document.getElementById("password").value; if(name==""||password==""){ alert("账户名或密码不能为空"); $("#spantext").html("账户名或密码不能为空"); }else{ $.ajax({ type : "post", url : "./loginName.mvc?name="+name+"&password="+password, success : function(data){ alert(data); var obj=eval("("+data+")"); var message=obj.code; //var name=obj.name; //var password=obj.password; alert(message); //alert(name); //alert(password); }, error : function(data){ $("#spantext").html("网络错误"); } }); } } </script>
在这里写有三个生成验证码的类,其实他们的本质是一样的 ,都是类似的
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package com.chinasoft.ssm.servlet; 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.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import com.sun.image.codec.jpeg.JPEGCodec; import com.sun.image.codec.jpeg.JPEGImageEncoder; public class CheckCode 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/jpeg"); // 图片的内存映像 BufferedImage image = new BufferedImage(60, 20,BufferedImage.TYPE_INT_BGR); // 获取画笔对象 Graphics g = image.getGraphics(); //随机变换图片的颜色 Random r = new Random(); g.setColor(new Color(r.nextInt(255), r.nextInt(255), r.nextInt(255))); //开始绘制图片 g.fillRect(0, 0, 60, 20); //将画笔颜色清零 g.setColor(new Color(0,0,0)); Font font = new Font("Verdana", Font.ITALIC|Font.BOLD, 16); g.setFont(font); String number = String.valueOf(r.nextInt(99999)); HttpSession session = request.getSession(); session.setAttribute("number", number); g.drawString(number, 5, 15); g.setColor(new Color(r.nextInt(255),r.nextInt(255),r.nextInt(255))); //压缩jpeg格式转换为输出流的形式 OutputStream os = response.getOutputStream(); //把输出流对象中的图像信息编码 JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(os); //向创建对象时指定的输出流输出 encoder.encode(image); os.flush(); os.close(); } /** * Initialization of the servlet. <br> * * @throws ServletException if an error occurs */ public void init() throws ServletException { // Put your code here } }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package com.chinasoft.ssm.servlet; 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.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; import com.sun.image.codec.jpeg.JPEGCodec; import com.sun.image.codec.jpeg.JPEGImageEncoder; public class ImageServlet extends HttpServlet { private static final long serialVersionUID = 1L; public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doPost(request,response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub String ch1= (String) request.getParameter("code"); System.out.println(ch1); response.setContentType("image/jpeg"); // 图片的内存映像 BufferedImage bi=new BufferedImage(68, 22,BufferedImage.TYPE_INT_RGB); //获得画笔对象 Graphics g=bi.getGraphics(); //图片的颜色选择 Color c=new Color(200,150,255); g.setColor(c); //开始绘制图片 g.fillRect(0, 0, 68, 22); char[] ch="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".toCharArray(); Random r=new Random(); int len=ch.length; int index; StringBuffer sb=new StringBuffer(); for(int i=0;i<4;i++) { //获取一个随机数 index=r.nextInt(len); //给字体设置颜色 Font font = new Font("Verdana", Font.ITALIC|Font.BOLD, 16); g.setFont(font); g.setColor(new Color(r.nextInt(88),r.nextInt(188),r.nextInt(255))); //将所有选择的字体绘画出来 g.drawString(ch[index]+"",(i*15)+3, 18); //将随机生成的验证码添加到可变字符sb中去 sb.append(ch[index]); } //将生成的验证码对象保存到piccode对应的value中去 //request.getSession().setAttribute("piccode", sb.toString()); //使用给定的支持格式将图像BufferedImage的bi对象写入到响应输出流当中 //ImageIO.write(bi, "JPG", response.getOutputStream()); OutputStream os = response.getOutputStream(); JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(os); //向创建对象时指定的输出流输出 encoder.encode(bi); os.flush(); os.close(); } }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package com.chinasoft.ssm.servlet; import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.IOException; 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 graphicsImage 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 { char[] strs = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".toCharArray(); BufferedImage bi = new BufferedImage(150,40,BufferedImage.TYPE_INT_RGB); Graphics2D g = (Graphics2D)bi.getGraphics(); Random num=new Random(); Color color ; int len = strs.length; g.setColor(Color.WHITE); g.fillRect(0,0,150,40); // 随机画干扰的蛋蛋 for(int i=0;i<15;i++){ color =new Color(150,100, 250); g.setColor(color); // 画蛋蛋,有蛋的生活才精彩 g.drawOval(num.nextInt(150), num.nextInt(40), 5+num.nextInt(10), 5+num.nextInt(10)); color = null; } Font font = new Font("Verdana", Font.ITALIC|Font.BOLD, 28); g.setFont(font); /* 画字符串 */ for(int i=0;i<6;i++) { int index=num.nextInt(len); // 指定透明度 AlphaComposite ac3 = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.7f); g.setComposite(ac3); // 对每个字符都用随机颜色 color = new Color(20 + num.nextInt(110), 20 + num.nextInt(110), 20 + num.nextInt(110)); g.setColor(color); g.drawString(strs[index]+"",(i*15)+40, 40-4); color = null; ac3 = null; } ImageIO.write(bi, "png", response.getOutputStream()); } public void init() throws ServletException { // Put your code here } }