Инструменты:
Пакет com.lhy.web.servlet; импорт java.awt.basicsstroke; импорт java.awt.color; импорт java.awt.font; импорт java.awt.graphics2d; импорт java.awt.image.bufferedimage; импорт java.io.filenotfoundexception; import.io.io.filemage; импорт java.io.filenotexception; java.io.ioexception; import java.io.outputstream; import java.util.random; import javax.imageio.imageio; public class verifycode {private int w = 70; // Длина картины Private int h = 35; // Ширина картины Private Random Randam Шрифт "," Китайская техника Kai "," Bold Font "," китайский новый Wei "," китайский лишу "," Microsoft Elegant Black "," Kai Technique_gb2312 "} Частная строка [] fontnames = {" Song Font "," Technique Kai "," Bold Font ", Microsoft elegant Black" kai_G211111111121 // код проверки необязательные символы частные строковые коды = "23456789abcdefghjkmnopqrstuvwxyzabcdefghjkmnpqrstuvwxyz"; // фоновый цвет частного цвета bgcolor = новый цвет (255, 255, 255); // текст в коде проверки частной строки текст; // генерировать случайный цвет частного цвета randomColor () {int red = r.nextint (150); int green = r.nextint (150); int blue = r.nextint (150); вернуть новый цвет (красный, зеленый, синий); } // генерировать случайный шрифт private font randomFont () {int index = r.nextint (fontnames.length); String fontname = fontnames [index]; // генерировать случайное имя шрифта int style = r.nextint (4); // генерировать случайный стиль, 0 (без стиля), 1 (жирный), 2 (курсив), 3 (жирный шрифт + курсив) int size = r.nextint (5) + 24; // генерировать случайный размер шрифта, 24 ~ 28 возвращать новый шрифт (FontName, стиль, размер); } // Нарисуйте линии интерференции private void -натяжение (BufferedImage Image) {int num = 3; // Нарисовать 3 Graphics2d G2 = (Graphics2d) Image.getGraphics (); for (int i = 0; i <num; i ++) {// Создать координаты двух точек, то есть 4 значения int x1 = r.nextint (w); int y1 = r.nextint (h); int x2 = r.nextint (w); int y2 = r.nextint (h); G2.SetStroke (New BasicStroke (1,5F)); g2.setcolor (color.blue); // интерференционная линия - синий g2.drawline (x1, y1, x2, y2); // draw Line}} // Случайно генерируют символ Private char ardomchar () {int index = r.nextint (codes.length ()); return Codes.charat (index); } // Создать BufferedImage Private BufferedImage createImage () {// Ширина, высота, тип изображения BufferedImage Image = new BufferedImage (w, h, bufferedimage.type_int_rgb); Graphics2d g2 = (graphics2d) image.getGraphics (); g2.setcolor (this.bgcolor); G2.fillRect (0, 0, W, H); вернуть изображение; } // возвращать текст на изображении кода проверки public String getText () {return Text; } // Сохранить изображение в указанный выходной поток Public Static void } // Вызовите этот метод, чтобы получить код проверки Public BufferedImage Getimage () {BuffereMage Image = createImage (); // Создать буфер с изображением Graphics2d G2 = (Graphics2d) Image.getGraphics (); // Получить структуру рисования. 4; // Добавить буквы в sb float x = i * 1.0f * w /4; // Установить координаты оси x текущего символа G2.setFont (randomFont ()); // Установить случайный шрифт g2.setcolor (randomcolor ()); // установить случайный цвет g2.drawstring (s, x, h-5); // рисовать изображение} this.text = sb.toString (); // назначить сгенерированную строку на это. Текст Рейн (Image); // Добавить интерференционную линию возвращаемого изображения; } public static void main (string [] args) бросает filenotfoundexception, ioException {verifycode vc = new VerifyCode (); // Создание объекта класса VerifyCode BufferedImage bi = vc.getImage (); // call GetiMage () для получения BuffereMage object -verifycode.output (biaoutput () CodeM -emartiction eRemiTiam -emortication. 3.jpg ")); // Вызовите метод Static Method output () для сохранения изображения в системе вывода File Stream.out.println (vc.getText ()); // распечатать текстовое значение кода проверки на консоли}}VerifyCodeservlet:
Пакет com.lhy.web.servlet; import java.awt.image.bufferedimage; импорт java.io.ioexception; import javax.servlet.servletexception; импорт javax.servlet.http.httpservlet; import javax.servlet.http.httpservlectrequest; javax.servlet.http.httpservletresponse; public class verifycodeservlet exters httpservlet {public void Doget (httpservletrequest запрос, httpservletrespons vc = new VerifyCode (); BufferedImage Image = vc.GetImage (); request.getSession (). setattribute ("session_vcode", vc.getText ()); // Сохранить текст на изображении в поле Session VerifyCode.output (image, response.getOutputStream ()); }}LoginServlet:
Пакет com.lhy.web.servlet; import java.io.ioexception; import javax.servlet.requestdispatcher; import javax.servlet.servletexception; импорт javax.servlet.http.cookie; импорт javax.servlet.htp.httpservlet; javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletrespons Dopost (httpservletrequest -запрос, ответ httpservletresponse). * 4. Если то же самое верно, запустите, в противном случае сохраните сообщение об ошибке в домен запроса и отправьте в login.jsp */ string sessioncode = (string) request.getSession (). Getattribute ("session_vcode"); String paramcode = request.getParameter ("verifyCode"); if (! paramcode.equalsignorecase (sessioncode)) {request.setattribute ("msg", "ошибка кода проверки!"); request.getRequestDispatcher ("/login.jsp"). возвращаться; } /** 1. Получить данные формы* / // Обработка китайских вопросов request.setcharacterencoding ("utf-8"); // получить string username = request.getParameter ("имя пользователя"); String password = request.getParameter ("пароль"); /** 2. Убедитесь, правильны ли имя пользователя и пароль*/if ("itcast" .equalsignorecase (username)) {// Вход успешно/** Дополнительный элемент: Сохраните имя пользователя в cookie и отправьте его в клиентский браузер* Когда в login.jsp снова открыт. Cookie ("uname", username); // Создание cookie cookie.setmaxage (60* 60* 24); // Установить жизнь cookie на 1 день. session.setattribute ("username", username); // Сохранить имя пользователя в Session Domain response.sendredirect ("/test/sact1.jsp"); } else {// login не удастся/** 4. Если не удалось*> Сохранить сообщение об ошибке для запроса домена*> вернуть в login.jsp*/request.setattribute ("msg", "ошибка в имени пользователя или пароля!"); RequestDispatcher qr = request.getRequestDispatcher ("/login.jsp"); // gate Froader qr.forward (request, response); // перенаправление}}}Login.jsp:
<%@ page language = "java" import = "java.util.*" pageencoding = "utf-8"%> <%string path = request.getContextPath (); string basePath = request.getScheme ()+": //"+request.getServername ()+":"+request.getSerperport () phate+"/";%> <t) <). "-// w3c // dtd html 4.01 transitional // en"> <html> <head> <base href = "<%= basepath%>" rel = "внешний nofollow"> <title> my jsp 'login.jsp' nate-contage </title> <meta http-equiv = "pragma" = "no-cont http-equiv = "cache-control" content = "no-cache"> <meta http-equiv = "expires" content = "0"> <meta http-equiv = "Content" Content = ", ключевое слово1, ключевое слово3"> <meta http-equiv = "description". type = "text/css" href = "styles.css" rel = "внешний nofollow"> -> <script type = "text/javascript"> function _change () {/ * 1. Получить элемент IMG 2. Модифицировать его src */var imgele = document.getelementbyid ("img"); imgele.src = "<%= basepath%> servlet/verifycodeservlet? a =" + new Date (). gettime ();} </script> </head> <body> <%-эта страница содержит форму для входа в систему, а также отображает сообщение об ошибке-%> <h1> login </h1> <%/*Читает Cookie, названный Uname! Если он пуст, он отображается: «Если не пусто, он отображается: значение cookie */string uname =»; "; cookie [] cs = request.getcookies (); // Получить все файлы cookie в запросе (cs! = Null) {// Если есть cookie для (cookie c: cs) {/////coop через все cookie ealles (cookie c: case) {//////cookies (cookie c: case) {//////cookies (cookie c: case) {//////cookies (cookie c: case) {/////coop через все cookies (cookie c: case) {////coop через все cookies (cookie c: cse) {/////coop через все cookie {// Ищите файл cookie с именем uname uname = c.getvalue (); // Получить значение этого cookie и дать переменной uname}}}%> <% string message = ""; String msg = (string) request.getattribute ("msg"); // Получить атрибут с именем MSG в поле запроса if (msg! = Null) {message = msg; }%><font color="red"><b><%=message %> </b></font><form action="servlet/LoginServlet" method="post"> <%-- Show the user name in the cookie to the user name text box--%> Username: <input type="text" name="username" value="<%=uname%>"/><br/> Password: <input type="password" name="password"/><br/> Verification code: <input type="text" name="verifyCode" size="3"/> <img id="img" src="<%=basePath%>servlet/VerifyCodeServlet"/> <a href="javascript:_change()" rel="external nofollow" > Change one</a> <br/> <input type="submit" value = "login"/> </form> </body> </html>Loginsuccess:
<body> <h1> sact1 </h1> <%string username = (string) session.getattribute ("username"); if (username == null) {/ * 1. Сохранить сообщение об ошибке в домен запроса и пересылать его, чтобы войти в систему. request.getRequestDispatcher ("/login.jsp"). возврат;}%> Добро пожаловать, теплый приветствие, добро пожаловать <%=username %> Лидер для руководства работой!
</body> </html>
Файл конфигурации:
<servlet> <servlet-name>LoginServlet</servlet-name> <servlet-class>com.lhy.web.servlet.LoginServlet</servlet-class> </servlet> <servlet-mapping> <servlet-mapping> <servlet-name>LoginServlet</servlet-name> <url-pattern>/servlet/LoginServlet</url-pattern> </servlet-mapping> <servlet> <vervlet-name> verifycodeservlet </servlet-name> <berlet-class> com.lhy.web.servlet.verifycodeservlet </servlet> </servlet> <servlet-mapping> <servlet-name> verifycodeservlet </servlet-name> <urll-pattern>/servletcodervervlet </servlet-pattern> <url-pattern>/servlet </servlet-mapping>
Предложение: Лучше всего установить сервлет, который генерирует код проверки без кэша, поэтому вам не нужно добавлять метку времени, когда страница запрашивает изображение кода проверки. Добавление TimeStamp - это обмануть браузер, чтобы не было прочитать рисунок кода проверки в кэше, и после нажатия нет ответа, чтобы изменить его. Это не очень хорошая вещь. Каждый раз, когда я нажимаю, чтобы изменить другое изображение, браузер будет кэшировать недавно полученные изображения локально. Если он не кэширован в сервлете, он не будет кэшировать их локально.
Суммировать
Выше приведен пример кода инструмента проверки Java Verification, представленный вам редактором. Я надеюсь, что это будет полезно для вас. Если у вас есть какие -либо вопросы, пожалуйста, оставьте мне сообщение, и редактор ответит вам вовремя. Большое спасибо за вашу поддержку сайту wulin.com!