Javaweb in the development of the servlet generated verification code picture _java

Source: Internet
Author: User
Tags border color stringbuffer

First, BufferedImage class introduction

To generate a CAPTCHA picture the main use of a BufferedImage class, as follows:

Create a drawimage Servlet to generate a captcha picture

Package gacl.response.study;
Import Java.awt.Color;
Import Java.awt.Font;
Import Java.awt.Graphics;
Import Java.awt.Graphics2D;
Import Java.awt.image.BufferedImage;
Import java.io.IOException;
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; /** * Generates a random picture, which is used as a verification code/public class DrawImage extends HttpServlet {private static final long Serialversionuid = 30386
 
 23696184546092L; public static final int width = 120;//The width of the generated picture public static final int height = 30;//The height of the generated picture is public void doget (Httpser Vletrequest request, HttpServletResponse response) throws Servletexception, IOException {this.dopost (Request, Respon
 SE); 
  public void DoPost (HttpServletRequest request, httpservletresponse response) throws Servletexception, IOException { String Createtypeflag = Request.getparameter ("Createtypeflag");The Createtypeflag identity//1 that receives the client delivery. Create a picture in memory bufferedimage bi = new BufferedImage (WIDTH, Height,bufferedimage.type_int_r
  GB);
  2. Get picture Graphics g = bi.getgraphics ();
  3. Set the background color of the picture setbackground (g);
  4. Set the frame of the picture setborder (g);
  5. Draw the disturbing line drawrandomline (g) in the picture; 6. Write in the picture random number//string random = Drawrandomnum ((graphics2d) G, "ch");//Generate Chinese captcha picture//string random = Drawrandomnum (Graphic S2D) G, "NL")://Generate a number and letter combination of the captcha picture//string random = Drawrandomnum ((graphics2d) G, "n");//Generate a pure number of captcha pictures//string random = Dra Wrandomnum ((graphics2d) G, "L")//Generate a plain letter of the captcha picture String random = Drawrandomnum ((graphics2d) g,createtypeflag);
  Generates a CAPTCHA picture//7 based on the Createtypeflag identity passed by the client. The random number exists in the session request.getsession (). setattribute ("Checkcode", random); 8. Set response header to inform the browser to open Response.setcontenttype ("Image/jpeg") in the form of a picture;//equal to Response.setheader ("Content-type", "Image/jpeg
  ");
  9. Set Response Head Control browser do not cache Response.setdateheader ("Expries",-1);
  Response.setheader ("Cache-control", "No-cache"); Response.setheader ("Pragma", "No-cache");
 10. Write the picture to the browser imageio.write (bi, "JPG", Response.getoutputstream ());
  /** * Set the background color of the picture * @param g */private void SetBackground (Graphics g) {//Set color G.setcolor (Color.White);
 Fill area g.fillrect (0, 0, WIDTH, HEIGHT);
  /** * Set the border of the picture * @param g * * * private void SetBorder (Graphics g) {//Set Border color G.setcolor (color.blue);
 Border area G.drawrect (1, 1, WIDTH-2, HEIGHT-2);
  /** * Draw random lines on the picture * @param g * * * private void Drawrandomline (Graphics g) {//Set color G.setcolor (Color.green);
   Set the number of lines and draw a line for (int i = 0; i < 5; i++) {int x1 = new Random (). Nextint (WIDTH);
   int y1 = new Random (). Nextint (HEIGHT);
   int x2 = new Random (). Nextint (WIDTH);
   int y2 = new Random (). Nextint (HEIGHT);
  G.drawline (x1, y1, x2, y2); }/** * Draw random character * @param g * @param createtypeflag * @return * String ... createtypeflag is a variable parameter, * Java1.5 adds a new Features: Variable parameters: Applicable to the uncertainty of parameter number, type determination, Java processing variable parameters as an array. Note: The variable parameter must be at the last item/private String DrawrandoMnum (graphics2d g,string ... createtypeflag) {//Set color G.setcolor (color.red);
  Sets the font g.setfont (new font ("Arial", Font.Bold, 20)); The common Chinese character String Basechinesechar = "\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 ";
  Combination of numbers and letters String Basenumletter = "0123456789ABCDEFGHJKLMNOPQRSTUVWXYZ";
  Pure numeric String basenum = "0123456789";
  Pure letter String Baseletter = "ABCDEFGHJKLMNOPQRSTUVWXYZ"; Createtypeflag[0]==null indicates that there is no pass parameter if (createtypeflag.length > 0 && null!= createtypeflag[0]) {if (create
   Typeflag[0].equals ("ch")) {//Intercept kanji return Createrandomchar (g, Basechinesechar);
   }else if (createtypeflag[0].equals ("NL")) {//intercept combination of numbers and letters return Createrandomchar (g, basenumletter);
   }else if (Createtypeflag[0].equals ("n")) {//Intercept digital return Createrandomchar (g, basenum);
   }else if (createtypeflag[0].equals ("L")) {//Intercept letter return Createrandomchar (g, baseletter);
  }}else {///default intercept number and letter combination return Createrandomchar (g, basenumletter);
 Return ""; /** * Create random character * @param g * @param basechar * @return Random character/private String createRandomchar (graphics2d g,string basechar) {stringbuffer sb = new StringBuffer ();
  int x = 5;
  String ch = "";
   Control word for (int i = 0; i < 4; i++) {//Set font rotation angle int degree = new Random (). Nextint ()% 30;
   ch = basechar.charat (new Random (). Nextint (Basechar.length ())) + "";
   Sb.append (CH);
   Forward angle g.rotate (degree * math.pi/180, X, 20);
   g.DrawString (CH, x, 20);
   Reverse Angle g.rotate (-degree * math.pi/180, X, 20);
  x + 30;
 return sb.tostring ();

 }
}

The results of the operation are as follows:

Second, use the Verification code picture in form forms

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

Run Result:

In addition to the DrawImage servlet can generate the combination of letters and numbers of the verification code picture, you can also generate Chinese characters, pure numbers, pure letter of the verification code picture, only to the DrawImage servlet to pass the agreed build identifier parameters can be as follows:

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

The results of the operation are as follows:

Third, server-side to form forms submitted to the Authentication code processing

 package gacl.response.study; import java.io.IOException; import
Javax.servlet.ServletException;
Import Javax.servlet.http.HttpServlet;
Import Javax.servlet.http.HttpServletRequest;
Import Javax.servlet.http.HttpServletResponse; /** * @author GaCl * The processing of the authentication code received by the server side/public class Checkservlet extends HttpServlet {public void doget (httpservletre Quest request, HttpServletResponse response) throws Servletexception, IOException {String Clientcheckcode = Request. GetParameter ("Validatecode");//Receive authentication code String Servercheckcode = (string) request.getsession () submitted by the client browser. getattribute
   ("Checkcode")//Check out the validation code if (Clientcheckcode.equals (Servercheckcode)) from the server-side session {//Compare client and server-side validation, if equal, means validation passes System.out.println ("Verification Code verification passed!")
  "); }else {System.out.println (Verify code validation failed!)
  "); } public void DoPost (HttpServletRequest request, httpservletresponse response) throws Servletexception, Ioexceptio
 n {doget (request, response); }

}

The above is the entire content of this article, I hope to help you learn.

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.