1. Введение в BufferedImage
Создание изображений кода проверки в основном использует класс BufferedImage, следующим образом:
Создайте сервлет DrawMage для генерации изображений кода проверки
Пакет gacl.response.study; импорт java.awt.color; import java.awt.font; импорт java.awt.graphics; импорт java.awt.graphics2d; импорт java.awt.image.bufferedimage; import java.io.ioexception; импорт java.randomage; импорт. javax.servlet.servletexception; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletrequest; импорт javax.servlet.http.httpservletrespons Окончательный длинный SerialVersionuid = 3038623696184546092L; Общественная статическая конечная ширина int = 120; // Ширина сгенерированного изображения Общедоступное статическое окончательное окончательное высоту = 30; // Высота сгенерированного изображения Public void Doget (httpservletrequest, httpservletresponse response) throws servletexception, ioexception {this.dopost (запрос, ответ); } public void dopost (httpservletrequest, httpservletresponse response) throws servletexception, ioexception {string createTypeflag = request.getParameter ("createTypeFlag"); // Приобретение идентификатора CreateTypeFlag, передаваемого клиентом // 1. Создать изображение в памяти BufferedImage bi = new BufferedImage (ширина, высота, bufferedimage.type_int_rgb); // 2. Получить изображение Graphics g = bi.getGraphics (); // 3. Установить задний цвет изображения STACKBANGER (G); // 4. Установить границу с картинкой setborder (g); // 5. Нарисуйте интерференционную линию на рисунке Drawrandomline (G); // 6. Напишите случайное число на картинке // String random = drawrandomnum (((Graphics2d) G, «CH»); // генерировать китайский код проверки // string random = drawrandomnum ((graphics2d) g, "nl"); // Сгенерировать код проверки для комбинаций чисел и буквы // string random = drawrandomnum (graphics2). Picture // string random = drawrandomnum (((Graphics2d) g, "l"); // генерировать чистый код проверки букв картинки string random = drawrandomnum ((graphics2d) g, createTypeflag); // Сгенерировать изображение кода проверки на основе идентификатора CreateTypeFlag, передаваемого клиентом // 7. Хранить случайные числа в Session request.getSession (). SetAtTribute ("CECKCODE", случайный); // 8. Установите заголовок ответа, чтобы уведомить браузер для открытия response.setContentType («image/jpeg»); // эквивалентно response.setheader («Тип контента», «Image/jpeg»); // 9. Установите заголовок ответа, чтобы управлять браузером, чтобы не кэшировать response.setDateHeader ("expries", -1); response.setheader («Контроль кэша», «без каша»); response.setheader ("pragma", "без Cache"); // 10. Напишите изображение в браузер Imageio.Write (BI, "jpg", response.getOutputStream ()); } / *** Установите цвет фона изображения* @param g* / private void setbackground (графика g) {// Установить цвет g.setcolor (color.white); // заполнить область G.FillRect (0, 0, ширина, высота); } / *** Установите границу изображения* @param g* / private void setborder (графика g) {// Установить цвет границы g.setcolor (color.blue); // пограничная область g.drawrect (1, 1, ширина - 2, высота - 2); } / *** Нарисуйте случайные линии на картинке* @param g* / private void drawrandomline (графика g) {// set color g.setcolor (color.green); // Установить количество строк и нарисовать линии для (int i = 0; i <5; i ++) {int x1 = new random (). Nextint (width); int y1 = new Random (). NextInt (высота); int x2 = new Random (). NextInt (ширина); int y2 = new Random (). NextInt (высота); g.drawline (x1, y1, x2, y2); }} /** * Нарисуйте случайные символы * @param g * @param createTypeFlag * @return * String ... createTypeflag - это переменная параметр, * Java 1.5 добавляет новые функции: переменные параметры: Подходит для ситуаций, когда число параметров неопределенное, а тип определяется. Java рассматривает переменные параметры как массив. ПРИМЕЧАНИЕ. Параметры переменной должны быть в последнем элементе*/ Private String Drawrandomnum (Graphics2d G, String ... CreateTypeflag) {// установить цвет g.setcolor (color.red); // Установить шрифт g.setfont (новый шрифт ("宋体", font.bold, 20)); // обычно используются китайские символы 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/U584C/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/ 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/U52A01/U8349/U8D8A/U5B57/U52A0//U81 1A/U7D27/U7231/U7B49/U4E60/U9635/U6015/U6708/U9752/U534A/U706B/U6CD5/U9898/UU9752/U534A/U706B/U6CD5/U9898/U534A/U706B/U6CD5/U9898 /U 5FA/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/U55 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 "; // Сочетание чисел и букв строки basenumletter = "0123456789abcdefghjklmnopqrstuvwxyz"; // чистая числовая строка basenum = "0123456789"; // чистая буква строки Baseletter = "AbcDefghjklmnopqrStuvwxyz"; // createTypeFlag [0] == NULL означает, что параметр не передается, если (createTypeflag.length> 0 && null! } else if (createTypeflag [0] .equals ("nl")) {// перехватывает комбинацию чисел и букв возвращать createrandomchar (g, basenumletter); } else if (createTypeflag [0] .equals ("n")) {// перехватывать число возврата createrandomchar (g, basenum); } else if (createTypeflag [0] .equals ("l")) {// перехватить букву return createrandomchar (g, baseletter); }} else {// по умолчанию перехватывает комбинацию чисел и букв return createrandomchar (g, basenumletter); } возвращаться ""; } / *** Создание случайных символов* @param g* @param basechar* @return случайные символы* / private String createrandomchar (Graphics2d G, String basechar) {StringBuffer sb = new StringBuffer (); int x = 5; String ch = ""; // контролировать количество слов для (int i = 0; i <4; i ++) {// Установите угол поворота шрифта int destect = new Random (). NextInt () % 30; ch = basechar.charat (new random (). nextint (basechar.length ())) + ""; SB.Append (Ch); // Правный угол G.Rotate (степень * Math.pi / 180, x, 20); G.DrawString (Ch, X, 20); // Обратный угол g.rotate (-degree * math.pi / 180, x, 20); x += 30; } вернуть sb.toString (); }}Результаты работы следующие:
2. Используйте изображения кода проверки в формах форм
<%@ page language = "java" import = "java.util.*" pageencoding = "utf-8"%> <! Doctype html public "-// w3c // dtd html 4.01 transitional // en"> <html> <Head> <Title> Использовать код версии в форме </title> <fcript extrift vicize> "/javiscizce11 function changeImg () {document.getElementById ("validAteCodeimg"). src = "$ {pageContext.Request.contextPath}/Servlet/drawMage?"+math.random (); } </script> </head> <body> <form action = "$ {pagecontext.request.contextpath}/servlet/ceckservlet" method = "post"> verification code: <input type = "name =" validatecode "/> <img src =" $ {pagecontext.request.contextpath}/> viMage/"$ {pageContext.Request.ContextPath}/> <img src =" $ {pageContext.Request.contextpath}/> <img src = " id = "validatecodeimg" onclick = "changeImg ()"> <a href = "javascript: void (0)" onclick = "changeImg ()"> Я не могу ясно видеть, измените еще один </a> <br/> <input type = "value =" prope "> </form> </body> </html> </html> </html>Результаты работы:
В дополнение к изображению кода проверки комбинации букв и чисел, которые могут быть сгенерированы, сервлет DrawImage также может генерировать изображения кода проверки китайских иерок, чистых чисел и чистых букв. Вам нужно только передать согласованные параметры идентификатора генерации в сервлет DrawImage, как показано ниже:
<%@ page language = "java" import = "java.util.*" pageencoding = "utf-8"%> <! Doctype html public "-// w3c // dtd html 4.01 transitional // en"> <html> <Head> <Title> Использовать код версии в форме </title> <fcript extrift vicize> "/javiscizce11 function readyImg (obj, createTypeflag) {document.getElementByid (obj.id) .src = "$ {pagecontext.request.contextPath}/servlet/drawmage? CreateTypeflag ="+createTypeflag+"&"+math.random (); } </script> </head> <body> <form action = "$ {pagecontext.request.contextPath}/servlet/ceckservlet" method = "post"> код цифровой буквы смешанной проверки: <input type = "text" name = "validatecode"/> <img src = "$ {pagecontext.Request.contextpate. id = "validatecodeimg1" onclick = "changeImg (this, 'nl')"> <br/> китайский код проверки: <input type = "text" name = "validatecode"/> <img src = "$ {pagecontext.request.contextpath}/servlet/drallymage? onclick = "changeimg (this, 'ch')"> <br/> код проверки английского языка: <input type = "text" name = "validatecode"/> <img src = "$ {pagecontext.request.contextPath}/servlet/drawMage? <br/> цифровой код проверки: <input type = "text" name = "validatecode"/> <img src = "$ {pagecontext.request.contextPath}/servlet/drawmage? createTypeflag = n" id = "validatecodeimg4" onclick = "changeImg (this, 'n')"> <br/> <into varue = "vanpect =" vatipe = "vatipe =" vanpect = "vance =" vatipe = "into". </form> </body> </html>Результаты работы следующие:
3. Обработка кодов проверки, представленных формой формы на стороне сервера
Package gacl.response.study; импорт java.io.ioexception; import javax.servlet.servletexception; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservlectrequest; import javax.servlet.http.httpservlectrequest; import javax.servlet.http.htpserquestrequest; javax.servlet.http.httpservletresponse;/*** @author gacl* Обработка после получения кода проверки на стороне сервера*/public clessservtlet httpservlet {public void doget (httpservletrequest, httpservonse response). request.getParameter ("validAteCode"); // получение кода проверки, представленного клиентским браузером String ServerCheckCode = (String) request.getSession (). getAttribute ("fectCode"); // Извлечение кода проверки с сеанса сервера if (clientCheckCode.equals (ServerCheckCode)) {/ Comper Verification Verification Verification Verification Code. Если это равно, это означает, что проверка прошла System.out.println («Проверка проверки кода проверки!»); } else {System.out.println ("Проверка проверки проверки!"); }} public void dopost (httpservletrequest -запрос, httpservletresponse response) throws servletexception, ioexception {Doget (запрос, ответ); }}Выше приведено в этой статье, я надеюсь, что это будет полезно для каждого обучения.