Javaweb Learning Summary (ix)-Generate a CAPTCHA image from a servlet

Source: Internet
Author: User
Tags border color

Javaweb Learning Summary (ix)-Generate a CAPTCHA image from a servlet BufferedImageClass Introduction

Generate the CAPTCHA image is mainly used in a BufferedImage class, as follows:

Create a drawimage Servlet to generate the captcha picture

  1 package gacl.response.study;  2 Import Java.awt.Color;  3 Import Java.awt.Font;  4 Import Java.awt.Graphics;  5 Import Java.awt.Graphics2D;  6 Import Java.awt.image.BufferedImage;  7 Import java.io.IOException;  8 Import Java.util.Random; 9 Import Javax.imageio.ImageIO; Ten import javax.servlet.ServletException; Import Javax.servlet.http.HttpServlet; Import Javax.servlet.http.HttpServletRequest; Import Javax.servlet.http.HttpServletResponse; 14/** 15 * Generate a random image, used as a verification code.//public class DrawImage extends HttpServlet {private static final long serial Versionuid = 3038623696184546092L;      public static final int width = 120;//the width of the resulting picture is public static final int height = 30;//the height of the resulting picture 22 23 public void doget (HttpServletRequest request, httpservletresponse response) throws Servletexception, I  oexception {this.dopost (Request, response), and the public void DoPost (HttpServletRequest request, HttpservletresponSE response) throws Servletexception, IOException {String Createtypeflag = Request.getparameter ("Createtypeflag");//Receive client-passed Createtypeflag identity 31//1. Create a picture in memory. BufferedImage bi = new BufferedImage (WI DTH, Height,bufferedimage.type_int_rgb); 33//2. Get the picture of the graphics G = bi.getgraphics (); 35//3. Set the background color of the picture setbackground (g); 37//4. Set the border of the picture SetBorder (g); 39//5. Draw the interference line on the picture Drawrandomline (g); 41//6. Write a random number on the image//string random = Drawrandomnum ((graphics2d) G, "ch");//Generate Chinese captcha picture//string RA Ndom = Drawrandomnum ((graphics2d) G, "NL");//Generate a digital and alphabetic combination of CAPTCHA images//string random = Drawrandomnum ((graphics2d) G, "n") ;//Generate a pure digital code picture of//string random = Drawrandomnum ((graphics2d) G, "L");//Generate a pure letter captcha picture of String random = DRA Wrandomnum ((graphics2d) g,createtypeflag);//Generate a CAPTCHA image based on the Createtypeflag identity passed by the client 47//7. The random number exists in the session in the Reque St.getsessIon (). SetAttribute ("Checkcode", random);  49//8. Set the response header to notify the browser to open a picture as a response.setcontenttype ("image/jpeg");//equivalent to Response.setheader ("Content-type", "Image/jpeg"); 51//9. Setting the response header control browser do not cache the Response.setdateheader ("Expries",-1); Response.setheader ("Cache-control", "No-cache"); Response.setheader ("Pragma", "No-cache"); 55//10. Write the picture to the browser, Imageio.write (bi, "JPG", Response.getoutputstream ()); 57} 58 59/** 60 * Set the background color of the picture * @param g */SetBackground (Graphics g) {6 4//Set color G.setcolor (Color.White); 66//Fill area g.fillrect (0, 0, WIDTH, HEIGHT);         68} 69 70/** 71 * Set the border of the picture * @param g * * * * SetBorder private void (Graphics g) {75 Set Border color G.setcolor (color.blue); 77//Border area g.drawrect (1, 1, WIDTH-2, HEIGHT-2); 79} 80 81/** 82 * Draw random lines on the picture * @pAram G/Drawrandomline private void (Graphics g) {86//Set color G.setcolor (Color.green); 88//Set the number of lines and draw lines for (int i = 0; i < 5; i++) {$ int x1 = new Random (). Nextint (WIDTH); 9 1 int y1 = new Random (). Nextint (HEIGHT); x2 int = new Random (). Nextint (WIDTH); y2 int = new Random (). Nextint (HEIGHT); 94 G.drawline (x1, y1, x2, y2); 95} 96} 97 98/** 99 * Draw random characters * @param g101 * @param createTypeFlag102 * @return1 * String ... createtypeflag is a mutable parameter, 104 * Java1.5 adds new features: variable parameters: For cases where the parameter number is indeterminate and the type is determined, Java handles the mutable parameter as an array. Note: mutable parameters must be in the last item */106 private String drawrandomnum (graphics2d g,string ... createtypeflag) {107//Set Color 108 G.setcolor (color.red); 109//Set font G.setfont (new font ("Arial", Font.Bold, 20)); 111//Common The Chinese character of the Basechinesechar String = "\u7684\u4e00\u4e86\u662f\u6211\u4e0d\u5728\u4eba\u4eec\u6709\u6765\u4ed6\u8fd9\u4e0a\u7740\u4e2a\u5730\u5230\u5927\u91cc\u8bf4\u5c31\u53bb\u5b50\ U5f97\u4e5f\u548c\u90a3\u8981\u4e0b\u770b\u5929\u65f6\u8fc7\u51fa\u5c0f\u4e48\u8d77\u4f60\u90fd\u628a\u597d\ U8fd8\u591a\u6ca1\u4e3a\u53c8\u53ef\u5bb6\u5b66\u53ea\u4ee5\u4e3b\u4f1a\u6837\u5e74\u60f3\u751f\u540c\u8001\ U4e2d\u5341\u4ece\u81ea\u9762\u524d\u5934\u9053\u5b83\u540e\u7136\u8d70\u5f88\u50cf\u89c1\u4e24\u7528\u5979\ u56fd\u52a8\u8fdb\u6210\u56de\u4ec0\u8fb9\u4f5c\u5bf9\u5f00\u800c\u5df1\u4e9b\u73b0\u5c71\u6c11\u5019\u7ecf\ U53d1\u5de5\u5411\u4e8b\u547d\u7ed9\u957f\u6c34\u51e0\u4e49\u4e09\u58f0\u4e8e\u9ad8\u624b\u77e5\u7406\u773c\ U5fd7\u70b9\u5fc3\u6218\u4e8c\u95ee\u4f46\u8eab\u65b9\u5b9e\u5403\u505a\u53eb\u5f53\u4f4f\u542c\u9769\u6253\ U5462\u771f\u5168\u624d\u56db\u5df2\u6240\u654c\u4e4b\u6700\u5149\u4ea7\u60c5\u8def\u5206\u603b\u6761\u767d\ U8bdd\u4e1c\u5e2d\u6b21\u4eb2\u5982\u88ab\u82b1\u53e3\u653e\u513f\u5e38\u6c14\u4e94\u7b2c\u4f7f\u5199\u519b\ U5427\u6587\u8fd0\u518d\u679c\U600e\u5b9a\u8bb8\u5feb\u660e\u884c\u56e0\u522b\u98de\u5916\u6811\u7269\u6d3b\u90e8\u95e8\u65e0\u5f80\u8239\ U671b\u65b0\u5e26\u961f\u5148\u529b\u5b8c\u5374\u7ad9\u4ee3\u5458\u673a\u66f4\u4e5d\u60a8\u6bcf\u98ce\u7ea7\ U8ddf\u7b11\u554a\u5b69\u4e07\u5c11\u76f4\u610f\u591c\u6bd4\u9636\u8fde\u8f66\u91cd\u4fbf\u6597\u9a6c\u54ea\ U5316\u592a\u6307\u53d8\u793e\u4f3c\u58eb\u8005\u5e72\u77f3\u6ee1\u65e5\u51b3\u767e\u539f\u62ff\u7fa4\u7a76\ U5404\u516d\u672c\u601d\u89e3\u7acb\u6cb3\u6751\u516b\u96be\u65e9\u8bba\u5417\u6839\u5171\u8ba9\u76f8\u7814\ U4eca\u5176\u4e66\u5750\u63a5\u5e94\u5173\u4fe1\u89c9\u6b65\u53cd\u5904\u8bb0\u5c06\u5343\u627e\u4e89\u9886\ U6216\u5e08\u7ed3\u5757\u8dd1\u8c01\u8349\u8d8a\u5b57\u52a0\u811a\u7d27\u7231\u7b49\u4e60\u9635\u6015\u6708\ U9752\u534a\u706b\u6cd5\u9898\u5efa\u8d76\u4f4d\u5531\u6d77\u4e03\u5973\u4efb\u4ef6\u611f\u51c6\u5f20\u56e2\ U5c4b\u79bb\u8272\u8138\u7247\u79d1\u5012\u775b\u5229\u4e16\u521a\u4e14\u7531\u9001\u5207\u661f\u5bfc\u665a\ u8868\u591f\u6574\u8ba4\u54cD\u96ea\u6d41\u672a\u573a\u8be5\u5e76\u5e95\u6df1\u523b\u5e73\u4f1f\u5fd9\u63d0\u786e\u8fd1\u4eae\u8f7b\u8bb2\ U519c\u53e4\u9ed1\u544a\u754c\u62c9\u540d\u5440\u571f\u6e05\u9633\u7167\u529e\u53f2\u6539\u5386\u8f6c\u753b\ U9020\u5634\u6b64\u6cbb\u5317\u5fc5\u670d\u96e8\u7a7f\u5185\u8bc6\u9a8c\u4f20\u4e1a\u83dc\u722c\u7761\u5174\ u5f62\u91cf\u54b1\u89c2\u82e6\u4f53\u4f17\u901a\u51b2\u5408\u7834\u53cb\u5ea6\u672f\u996d\u516c\u65c1\u623f\ U6781\u5357\u67aa\u8bfb\u6c99\u5c81\u7ebf\u91ce\u575a\u7a7a\u6536\u7b97\u81f3\u653f\u57ce\u52b3\u843d\u94b1\ U7279\u56f4\u5f1f\u80dc\u6559\u70ed\u5c55\u5305\u6b4c\u7c7b\u6e10\u5f3a\u6570\u4e61\u547c\u6027\u97f3\u7b54\ U54e5\u9645\u65e7\u795e\u5ea7\u7ae0\u5e2e\u5566\u53d7\u7cfb\u4ee4\u8df3\u975e\u4f55\u725b\u53d6\u5165\u5cb8\ U6562\u6389\u5ffd\u79cd\u88c5\u9876\u6025\u6797\u505c\u606f\u53e5\u533a\u8863\u822c\u62a5\u53f6\u538b\u6162\         U53D4\U80CC\U7EC6 "; 113//combination of numbers and letters, String basenumletter =" 0123456789ABCDEFGHJKLMNOPQRSTUVWXYZ "; 115 Pure Number 116         String basenum = "0123456789"; 117//plain Letter 118 String baseletter = "abcdefghjklmnopqrstuvwxyz"; 119 Createtypeflag[0]==null indicates that no parameters are passed if (createtypeflag.length > 0 && null! = Createtypeflag[0]) {121 if (createtypeflag[0].equals ("ch")) {122//intercept Kanji 123 return CREATERANDOMCH                 AR (g, Basechinesechar); 124}else if (createtypeflag[0].equals ("NL")) {125//intercept number and letter combinations 126                 Return Createrandomchar (g, basenumletter); 127}else if (Createtypeflag[0].equals ("n")) {128 Intercept the number 129 return Createrandomchar (g, basenum);}else if (Createtypeflag[0].equa         LS ("L")) {131//intercept letter Createrandomchar (g, baseletter); 133}134         }else {135//default intercept combination of numbers and letters 136 return Createrandomchar (g, basenumletter); 137}138 139 Return "";140}141 142/**143 * Create random characters 144 * @param g145 * @param baseChar146 * @return Random characters 147 */14         8 Private String Createrandomchar (graphics2d g,string basechar) {149 StringBuffer sb = new StringBuffer (); 150             int x = 5;151 String ch = ""; 152//Control word 153 for (int i = 0; i < 4; i++) {154 Set font rotation angle 155 int degree = new random (). Nextint ()% 30;156 ch = basechar.charat (new random (). NEX TInt (Basechar.length ())) + "", 157 sb.append (CH), 158//Positive angle 159 g.rotate (Degree * Math).  pi/180, X, g.drawstring (CH, x, 20), 161//Reverse Angle 162 g.rotate (-degree * Math.PI 163 x + = 30;164}165 return sb.tostring (); 166}167}

The results of the operation are as follows:

  

Second, use the Verification code picture in form form
 1 <%@ page language= "java" import= "java.util.*" pageencoding= "UTF-8"%> 2 <! DOCTYPE HTML PUBLIC "-//w3c//dtd HTML 4.01 transitional//en" > 3 

Operation Result:

  

DrawImage servlet In addition to the combination of letters and numbers can generate a code picture, you can also generate Chinese characters, pure numbers, pure letters of the verification Code picture, just to the DrawImage Servlet pass the agreed-upon generation identifier parameters, as follows:

 1 <%@ page language= "java" import= "java.util.*" pageencoding= "UTF-8"%> 2 <! DOCTYPE HTML PUBLIC "-//w3c//dtd HTML 4.01 transitional//en" > 3 

The results of the operation are as follows:

  

third, the server side of the form form submitted by the Verification Code processing
 1 package gacl.response.study; 2 Import java.io.IOException; 3 Import javax.servlet.ServletException; 4 Import Javax.servlet.http.HttpServlet; 5 Import Javax.servlet.http.HttpServletRequest; 6 Import Javax.servlet.http.HttpServletResponse; 7/** 8 * @author gacl 9 * Processing after the server has received the Verification Code */11 public class Checkservlet extends HttpServlet {gb public void DoGe         T (httpservletrequest request, httpservletresponse response) throws Servletexception, IOException {14 String clientcheckcode = Request.getparameter ("Validatecode");//receive the verification code submitted by the client browser, string servercheckcode = (stri ng) Request.getsession (). getattribute ("Checkcode");//Remove the CAPTCHA from the server-side session (Clientcheckcode.equals (Servercheck Code) {//compares the client and server-side validations, if equal, means that the validation passes through the SYSTEM.OUT.PRINTLN ("Verification Code Verification pass!"). ");}else {System.out.println (" Verification Code verification failed!             ");}21}22 DoPost (httpservletrequest request, httpservletresponse response) 24 ThRows Servletexception, IOException {doget (request, response); 26}27 28} 

Javaweb Learning Summary (ix)-Generate a CAPTCHA image from a servlet

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.