1. Pengantar BufferedImage
Menghasilkan gambar kode verifikasi terutama menggunakan kelas buferedImage, sebagai berikut:
Buat Servlet DrawImage untuk menghasilkan gambar kode verifikasi
Paket gacl.response.study; impor java.awt.color; impor java.awt.font; impor java.awt.graphics; java.awt.graphics2d; impor java.awt.image.bufferedimage; impor java.io.io -exception; impor JavaAx; impor Java. javax.servlet.servletException; impor javax.servlet.http.httpservlet; impor javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletResponse; static final long serialversionuid = 3038623696184546092l; Lebar int statis public static = 120; // Lebar gambar yang dihasilkan public static final int tinggi = 30; // tinggi gambar yang dihasilkan void public doGet (httpservletRequest Request, httpservletResponse response) melempar ServletException, ioException {this.dopost (permintaan, respons); } public void dopost (permintaan httpservletRequest, respons httpservletResponse) melempar servletException, ioException {string createTypeflag = request.getParameter ("createTypeflag"); // menerima createTypeflag ID yang disahkan oleh klien/1. Buat gambar dalam memori bufferedImage Bi = BufferedImage baru (lebar, tinggi, bufferedImage.type_int_rgb); // 2. Dapatkan gambar gambar g = bi.getGraphics (); // 3. Atur warna belakang dari Expotbackground (G); // 4. Atur perbatasan gambar Setborder (G); // 5. Gambar garis interferensi pada gambar drawrandomline (g); // 6. Tuliskan nomor acak pada gambar // string acak = drawrandomnum ((grafik2d) g, "ch"); // menghasilkan gambar kode verifikasi Cina // string acak = drawrandomnum ((grafik2d) g, "nl"); // menghasilkan kode verifikasi untuk kombinasi angka dan huruf///string random = drawrandomn Nomor gambar // string acak = drawrandomnum ((graphics2d) g, "l"); // menghasilkan kode verifikasi huruf murni string random = drawrandomnum ((graphics2d) g, createTypeFlag); // menghasilkan gambar kode verifikasi berdasarkan createTypeflag ID yang dilewati oleh klien // 7. Menyimpan nomor acak di sesi request.getSession (). SetAttribute ("checkCode", acak); // 8. Atur header respons untuk memberi tahu browser untuk membuka response.setContentType ("gambar/jpeg"); // setara dengan response.setHeader ("tipe konten", "gambar/jpeg"); // 9. Atur header respons untuk mengontrol browser untuk tidak cache response.setDateheader ("expries", -1); response.setheader ("cache-control", "no-cache"); response.setheader ("pragma", "no-cache"); // 10. Tulis gambar ke browser ImageIO.write (bi, "jpg", response.getoutputStream ()); } / *** Atur warna latar belakang gambar* @param g* / private void setbackground (grafik g) {// atur warna g.setColor (color.white); // Isi area g.fillrect (0, 0, lebar, tinggi); } / *** Atur batas gambar* @param g* / private void setborder (grafik g) {// atur warna perbatasan g.setColor (color.blue); // area perbatasan G.Drawrect (1, 1, lebar - 2, tinggi - 2); } / *** Gambar garis acak pada gambar* @param g* / private void drawrandomline (grafik g) {// atur warna g.setColor (color.green); // Atur jumlah baris dan gambar untuk (int i = 0; i <5; i ++) {int x1 = acak baru (). NextInt (lebar); int y1 = acak baru (). NextInt (tinggi); int x2 = acak baru (). NextInt (lebar); int y2 = acak baru (). NextInt (tinggi); G.Drawline (x1, y1, x2, y2); }} /** * Gambar karakter acak * @param g * @param createTypeflag * @return * string ... createTypeFlag adalah parameter variabel, * Java 1.5 telah menambahkan fitur baru: parameter variabel: Cocok untuk situasi di mana jumlah parameter tidak pasti dan jenisnya ditentukan. Java memperlakukan parameter variabel sebagai array. CATATAN: Parameter variabel harus dalam item terakhir*/ private string drawrandomnum (grafik2d g, string ... createTypeflag) {// atur warna g.setColor (color.red); // atur font g.setfont (font baru ("宋体", font.bold, 20)); // Karakter Cina yang biasa digunakan 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/u 4e3a/u53c8/u53ef/u5bb6/u5b66/u53ea/u4ee5/u4e3b/u4f1a/u6837/u5e74/u60f3/u751f/u540c/u8001/u4e 2D/U5341/U4ECE/U81EA/U9762/U524D/U5934/U9053/U5B83/U540E/U7136/U8D70/U5F88/U50CF/U89C1/U4E2 4/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/u 4e09/u58f0/u4e8e/u9ad8/u624b/u77e5/u7406/u773c/u5fd7/u70b9/u5fc3/u6218/u4e8c/u95ee/u4f46/u8e AB/U65B9/U5B9E/U5403/U505A/U53EB/U5F53/U4F4F/U542C/U9769/U6253/U5462/U771F/U5168/U624D/U56D b/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/u5 916/U6811/U7269/U6D3B/U90E8/U95E8/U65E0/U5F80/U8239/U671B/U65B0/U5E26/U961F/U5148/U529B/U5B 8C/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/u6597/u9a6c/u54ea/u5316// u592a/u6307/u53d8/u793e/u4f3c/u58eb/u8005/u5e72/u77f3/u6ee1/u65e5/u51b3/u767e/u539f/u62ff/u7 FA4/U7A76/U5404/U516D/U672C/U601D/U89E3/U7ACB/U6CB3/U6751/U516B/U96BE/U65E9/U8BBA/U5417/U68 39/u5171/u8ba9/u76f8/u7814/u4eca/u5176/u4e66/u5750/u63a5/u5e94/u5173/u4fe1/u89c9/u6b65/u53c d/u5904/u8bb0/u5c06/u5343/u627e/u4e89/u9886/u6216/u5e08/u7ed3/u5757/u8dd1/u8c01/u8349/u8d8a/u5b57/u52a0/u81 1a/u7d27/u7231/u7b49/u4e60/u9635/u6015/u6708/u9752/u534a/u706b/u6cd5/u9898/uu9752/u534a/u706b/u6cd5/u9898/uu 5EFA/U8D76/U4F4D/U5531/U6D77/U4E03/U5973/U4EFB/U4EF6/U611F/U51C6/U5F20/U56E2/U5C4B/U79BB/U8 272/u8138/u7247/u79d1/u5012/u775b/u5229/u4e16/u521a/u4e14/u7531/u9001/u5207/u661f/u5bfc/u665 a/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/uu 5440/U571F/U6E05/U9633/U7167/U529E/U53F2/U6539/U5386/U8F6C/U753B/U9020/U5634/U6B64/U6CBB/U5 317/u5fc5/u670d/u96e8/u7a7f/u5185/u8bc6/u9a8c/u4f20/u4e1a/u83dc/u722c/u7761/u5174/u5f62/u91c F/U54B1/U89C2/U82E6/U4F53/U4F17/U901A/U51B2/U5408/U7834/U53CB/U5EA6/U672F/U996D/U516C/U65C1/U62 3f/u6781/u5357/u67aa/u8bfb/u6c99/u5c81/u7ebf/u91ce/u575a/u7a7a/u6536/u7b97/u81f3/u653f/uu653f/u 57CE/U52B3/U843D/U94B1/U7279/U56F4/U5F1F/U80DC/U6559/U70ED/U5C55/U5305/U6B4C/U7C7B/U6E10/U5 f3a/u6570/u4e61/u547c/u6027/u97f3/u7b54/u54e5/u9645/u65e7/u795e/u5ea7/u7ae0/u5e2e/u5566/u53d 7/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 "; // kombinasi angka dan huruf string basenumletter = "0123456789AbcDefgHjKlMnopQrStuVwxyz"; // Basenum string numerik murni = "0123456789"; // string huruf murni baseletter = "ABCDEFGHJKLMNOPQRSTUVWXYZ"; // createTypeFlag [0] == null berarti tidak ada parameter yang dilewati jika (createTypeFlag.length> 0 && null! = createTypeflag [0]) {if (createTypeFlag [0] .Equals ("ch")) {// mencegat karakter Cina mengembalikan creatreAdecharchar (G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G. } lain jika (createTypeFlag [0] .Equals ("nl")) {// mencegat kombinasi angka dan huruf return creatreandomchar (g, basenumletter); } lain jika (createTypeFlag [0] .Equals ("n")) {// mencegat nomor return createrandomchar (g, basenum); } lain jika (createTypeFlag [0] .Equals ("l")) {// mencegat surat pengembalian createrandomchar (g, baseletter); }} else {// default mencegat kombinasi angka dan huruf return createrandomchar (g, basenumletter); } kembali ""; } / *** Buat karakter acak* @param g* @param Basechar* @return karakter acak* / private string creatreandomchar (grafik2d g, string basechar) {stringBuffer sb = stringBuffer baru (); int x = 5; String ch = ""; // Kontrol Jumlah Kata untuk (int i = 0; i <4; i ++) {// Atur derajat rotasi rotasi inter = acak baru (). NextInt () % 30; ch = basechar.charat (acak baru (). nextInt (basechar.length ())) + ""; SB.Append (CH); // Forward Angle G.Rotate (derajat * Math.pi / 180, x, 20); G.DrawString (Ch, X, 20); // sudut terbalik g.rotate (-degree * math.pi / 180, x, 20); x += 30; } return sb.toString (); }}Hasil operasi adalah sebagai berikut:
2. Gunakan gambar kode verifikasi dalam bentuk formulir
<%@ page language = "java" import = "java.util.*" pageEncoding = "UTF-8"%> <! Doctype html public "-// w3c // dtd html 4.01 FORMASI VERIFAS // THETML <html> <head> <item changeImg () {document.getElementById ("validateCodeimg"). src = "$ {pagecontext.Request.contextPath}/servlet/drawImage?"+Math.random (); } </script> </head> <body> <Form Action = "$ {pageContext.Request.ContextPath}/servlet/checkServlet" Method = "Post"> Kode verifikasi: <input type = "Teks" nama = "validatecode"/> <img src = "$ {pageContext." id = "validateCodeimg" ontClick = "changeimg ()"> <a href = "javascript: void (0)" onclick = "changeimg ()"> Saya tidak dapat melihat dengan jelas, ubah satu lagi </a> <br/> <input type = "kirim" value = "kirim"> </form> </body> html = ht "ht" ht "ht"Hasil Menjalankan:
Selain gambar kode verifikasi dari kombinasi huruf dan angka yang dapat dihasilkan, servlet drawImage juga dapat menghasilkan gambar kode verifikasi karakter Cina, angka murni, dan huruf murni. Anda hanya perlu meneruskan parameter pengidentifikasi generasi yang disepakati ke Servlet DrawImage, seperti yang ditunjukkan di bawah ini:
<%@ page language = "java" import = "java.util.*" pageEncoding = "UTF-8"%> <! Doctype html public "-// w3c // dtd html 4.01 FORMASI VERIFAS // THETML <html> <head> <item ChangeImg (obj, createTypeFlag) {document.getElementById (obj.id) .src = "$ {pagecontext.Request.contextPath}/servlet/drawImage? createTypeflag ="+createTypeflag+"&"+math.random (); } </script> </head> <body> <form Action = "$ {pageContext.Request.contextPath}/servlet/checkServlet" Method = "Posting"> Kode Verifikasi Campuran Digital: <input type = "Text" Name = "ValidateCode"/> <img src = "$ {pagecontext" pagecontext "/pagecontext"/RAGETEXTEX/PAGECONTEXT "/PAGECONTEXT/PAGECONTEXT/PAGECONTEXT/PAGECONTEXDEX/TEXTETEX/PAGECONTEx id = "validateCodeImg1" ontClick = "changeimg (this, 'nl')"> <br/> kode verifikasi Cina: <input type = "text" name = "validateCode"/> <img src = "$ {pagecontext.request.contextPath}/servlet/drawimage?" onclick="changeImg(this,'ch')"> <br/> English verification code: <input type="text" name="validateCode"/> <img src="${pageContext.request.contextPath}/servlet/DrawImage?createTypeFlag=l" id="validateCodeImg3" onclick="changeImg(this,'l')"> <br/> Kode verifikasi digital: <input type = "text" name = "validateCode"/> <img src = "$ {pageContext.Request.contextPath}/servlet/drawImage? createTypeFlag = n" id = "validatecodeImg4" onklick = "changeMg (ini," ini, "ini," ini, "ini," ini, "ini," ini, "ini," Ini, " value = "Kirim"> </form> </body> </html>Hasil operasi adalah sebagai berikut:
3. Pemrosesan kode verifikasi yang dikirimkan oleh formulir formulir di sisi server
Paket gacl.response.study; import java.io.ioexception; import javax.servlet.servletException; import javax.servlet.http.httpservlet; import javax.servlet.htp.httpservletreest; impor javax.servlet javax.servlet.http.HttpServletResponse;/** * @author gacl * Processing after receiving the verification code on the server side*/public class CheckServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String clientCheckcode = request.getParameter ("ValidAtecode"); // Terima kode verifikasi yang dikirimkan oleh browser klien String serverCheckCode = (string) request.getSession (). getAttribute ("checkCode"); // ambil kode verifikasi dari server verifikasi (clientCheckCode withsals (serverCheckCode) {server verifikasi. Jika itu sama, itu berarti bahwa verifikasi telah melewati System.out.println ("Lulus Verifikasi Kode Verifikasi!"); } else {system.out.println ("Verifikasi kode verifikasi gagal!"); }} public void dopost (permintaan httpservletRequest, respons httpservletResponse) melempar servletException, ioException {doGet (permintaan, respons); }}Di atas adalah semua tentang artikel ini, saya harap ini akan membantu untuk pembelajaran semua orang.