最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java實(shí)現(xiàn)圖片驗(yàn)證碼

 更新時(shí)間:2022年04月21日 16:17:26   作者:潯者  
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)圖片驗(yàn)證碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了java實(shí)現(xiàn)圖片驗(yàn)證碼的具體代碼,供大家參考,具體內(nèi)容如下

目的:

1) 驗(yàn)證操作者是否是人

2) 防止表單重復(fù)提交

生成驗(yàn)證碼的要點(diǎn):

1) 使用java代碼生成圖片對(duì)象

BufferedImage

2) 使用Random生成隨機(jī)字符串

3) 將圖片對(duì)象用

ImageIO.write(圖片對(duì)象, "jpeg|png", 響應(yīng)字節(jié)輸出流)
返回給客戶(hù)端瀏覽器

驗(yàn)證驗(yàn)證碼:

要點(diǎn):

1) 將驗(yàn)證碼文字存入session作用域

2) 表單提交時(shí),對(duì)比session中的驗(yàn)證碼和表單中的驗(yàn)證碼

CaptchaUtils.java

package cn.seeker.utils;
?
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.*;
import java.util.List;
?
public class CaptchaUtil {
?
? ? public static String [] fuhao = {"+","-","*","/"};
? ? public static int num = 0;
?
? ? //生成隨機(jī)算式
? ? public static String random(){
?
? ? ? ? List list = new ArrayList();
? ? ? ? Random ran = new Random();
? ? ? ? int n1 = ran.nextInt(10);
? ? ? ? int n2 = ran.nextInt(10);
? ? ? ? String f = fuhao[ran.nextInt(fuhao.length)];
? ? ? ? StringBuilder sb = new StringBuilder(4);
?
? ? ? ? switch (f){
? ? ? ? ? ? case "+":
? ? ? ? ? ? ? ? num = n1+n2;
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? case "-":
? ? ? ? ? ? ? ? num =n1-n2;
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? case "*":
? ? ? ? ? ? ? ? num = n1*n2;
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? case "/":
? ? ? ? ? ? ? ? if(n2 == 0){
? ? ? ? ? ? ? ? ? ? n2 = ran.nextInt(10)+1;
? ? ? ? ? ? ? ? ? ? num = n1/n2;
? ? ? ? ? ? ? ? }else{
? ? ? ? ? ? ? ? ? ? num = n1/n2;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? break;
? ? ? ? }
? ? ? ? sb.append(n1);
? ? ? ? sb.append(f);
? ? ? ? sb.append(n2);
? ? ? ? sb.append("=");
?
? ? ? ? return sb.toString();
? ? }
? ? public static void outputImage(String str, OutputStream os){
? ? ? ? Random ran = new Random();
? ? ? ? //創(chuàng)建圖片對(duì)象
? ? ? ? BufferedImage img = new BufferedImage(100,40, BufferedImage.TYPE_INT_RGB);
? ? ? ? //獲取畫(huà)布
? ? ? ? Graphics g = img.getGraphics();
? ? ? ? //設(shè)置背景
? ? ? ? g.setColor(Color.white);
? ? ? ? g.fillRect(0,0,100,40);
? ? ? ? //寫(xiě)字
? ? ? ? g.setColor(Color.black);
? ? ? ? g.setFont(new Font("微軟雅黑",Font.PLAIN,30));
? ? ? ? g.drawString(str,10,40);
? ? ? ? //隨機(jī)三條線
? ? ? ? g.drawLine(ran.nextInt(100),ran.nextInt(40),
? ? ? ? ? ? ? ? ran.nextInt(100),ran.nextInt(40));
? ? ? ? g.drawLine(ran.nextInt(100),ran.nextInt(40),
? ? ? ? ? ? ? ? ran.nextInt(100),ran.nextInt(40));
? ? ? ? g.drawLine(ran.nextInt(100),ran.nextInt(40),
? ? ? ? ? ? ? ? ran.nextInt(100),ran.nextInt(40));
? ? ? ? // 4. 輸出結(jié)果
? ? ? ? // 常見(jiàn)的壓縮格式:jpeg(有損壓縮), png(無(wú)損壓縮) ...
? ? ? ? try {
? ? ? ? ? ? ImageIO.write(img, "png", os);
? ? ? ? } catch (IOException e) {
? ? ? ? ? ? e.printStackTrace();
? ? ? ? }
? ? }
?
?
}

regist.jsp

<%--
? Created by IntelliJ IDEA.
? User: Administrator
? Date: 2018/10/14
? Time: 15:43
? To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
? ? <title>注冊(cè)</title>
? ? <style>
? ? ??
? ? ? ? img { cursor: pointer}
? ? </style>
</head>
<body>
<form action="/regist" method="post">
? ? <img src="/captcha.png" onclick="changeImg(this)">
? ? 輸入驗(yàn)證碼:<input type="text" name="cap">
? ? <input type="submit" value="提交">
</form>
?
<script>
?
? ? function changeImg(img) {
? ? ? ? // 瀏覽器有一個(gè)緩存特性,
? ? ? ? // 第一次從服務(wù)器獲取圖片,瀏覽器第二次發(fā)送請(qǐng)求時(shí)發(fā)現(xiàn)地址沒(méi)有改變,就會(huì)使用第一次的圖片,而不會(huì)真正發(fā)送請(qǐng)求
? ? ? ? // 為了讓瀏覽器每次都把請(qǐng)求發(fā)送給服務(wù)器,給一個(gè)時(shí)間參數(shù)
? ? ? ? img.src = "/captcha.png?t="+new Date().getTime(); // 給src賦一個(gè)新值,就會(huì)向新值的地址發(fā)送一次請(qǐng)求
? ? }
</script>
</body>
</html>

CaptchaServlet.java

package cn.seeker.controller;
?
import cn.seeker.utils.CaptchaUtil;
?
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
?
@WebServlet(urlPatterns = "/captcha.png")
public class CaptchaServlet extends HttpServlet {
?
? ? @Override
? ? protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
?
? ? ? ? response.setContentType("image/png");
? ? ? ? //獲取隨機(jī)字符串
? ? ? ? String random = CaptchaUtil.random();
? ? ? ? //輸出圖片
? ? ? ? CaptchaUtil.outputImage(random,response.getOutputStream());
? ? ? ? //存入結(jié)果
? ? ? ? request.getSession().setAttribute("res",CaptchaUtil.num);
?
? ? }
?
?
}

registServlet.jsp

package cn.seeker.controller;
?
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
?
@WebServlet(urlPatterns = "/regist")
public class registServlet extends HttpServlet {
? ? @Override
? ? protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
? ? ? ? String cap = req.getParameter("cap");
? ? ? ? Integer res = (Integer)req.getSession().getAttribute("res");
? ? ? ? if(Integer.parseInt(cap) == res) {
? ? ? ? ? ? // 填寫(xiě)正確,注冊(cè)成功
? ? ? ? ? ? req.getSession().removeAttribute("res");
? ? ? ? ? ? System.out.println("注冊(cè)成功");
? ? ? ? ? ? resp.sendRedirect("/index.jsp");
?
? ? ? ? } else {
? ? ? ? ? ? req.setAttribute("error", "驗(yàn)證碼不正確");
? ? ? ? ? ? req.getRequestDispatcher("/jsp/regist.jsp").forward(req,resp);
? ? ? ? }
? ? }
}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 解決Mybatis出現(xiàn)報(bào)錯(cuò)Error querying database.Cause: java.lang.IndexOutOfBoundsException: Index 9 out of

    解決Mybatis出現(xiàn)報(bào)錯(cuò)Error querying database.Cause: j

    這篇文章主要介紹了解決Mybatis出現(xiàn)報(bào)錯(cuò)Error querying database.Cause: java.lang.IndexOutOfBoundsException: Index 9 out of,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • 基于重定向RedirectAttributes的用法解析

    基于重定向RedirectAttributes的用法解析

    這篇文章主要介紹了基于重定向RedirectAttributes的用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • SpringCloudAlibaba Nacos開(kāi)啟鑒權(quán)解決跳過(guò)登錄頁(yè)面問(wèn)題

    SpringCloudAlibaba Nacos開(kāi)啟鑒權(quán)解決跳過(guò)登錄頁(yè)面問(wèn)題

    對(duì)于Nacos,如果需要開(kāi)啟權(quán)限控制,可以在 Nacos 控制臺(tái)上進(jìn)行配置,本文主要介紹了SpringCloudAlibaba Nacos開(kāi)啟鑒權(quán)解決跳過(guò)登錄頁(yè)面問(wèn)題,感興趣的可以了解一下
    2023-10-10
  • SpringMVC 重新定向redirect請(qǐng)求中攜帶數(shù)據(jù)方式

    SpringMVC 重新定向redirect請(qǐng)求中攜帶數(shù)據(jù)方式

    這篇文章主要介紹了SpringMVC 重新定向redirect請(qǐng)求中攜帶數(shù)據(jù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Java實(shí)現(xiàn)文件上傳保存

    Java實(shí)現(xiàn)文件上傳保存

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)文件上傳保存,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • 云計(jì)算實(shí)驗(yàn):Java?MapReduce編程

    云計(jì)算實(shí)驗(yàn):Java?MapReduce編程

    這篇文章主要介紹了云計(jì)算實(shí)驗(yàn):Java?MapReduce編程,?居于Java圍繞MapReduce編程展開(kāi)詳細(xì)內(nèi)容,文章助大家掌握MapReduce編程,理解MapReduce原理,需要的朋友可以參考一下
    2021-12-12
  • spring中使用mybatis實(shí)現(xiàn)批量插入的示例代碼

    spring中使用mybatis實(shí)現(xiàn)批量插入的示例代碼

    這篇文章主要介紹了spring中使用mybatis實(shí)現(xiàn)批量插入的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • Spring框架實(shí)現(xiàn)AOP的兩種方式詳解

    Spring框架實(shí)現(xiàn)AOP的兩種方式詳解

    這篇文章主要為大家詳細(xì)介紹了Spring框架實(shí)現(xiàn)AOP的兩種方式,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)有一定的借鑒價(jià)值,需要的可以參考一下
    2022-09-09
  • java Signleton模式詳解及示例代碼

    java Signleton模式詳解及示例代碼

    Singleton模式是創(chuàng)建模式。這種模式只涉及一個(gè)類(lèi)是負(fù)責(zé)創(chuàng)建自己的對(duì)象。該類(lèi)確保只有一個(gè)對(duì)象獲得創(chuàng)建。這個(gè)類(lèi)提供了一種方法來(lái)訪問(wèn)它的唯一對(duì)象
    2016-10-10
  • Idea創(chuàng)建springboot不能選擇java8的解決

    Idea創(chuàng)建springboot不能選擇java8的解決

    在IDEA 2023版本創(chuàng)建Spring Boot項(xiàng)目時(shí),發(fā)現(xiàn)沒(méi)有Java 8選項(xiàng),只有Java 17和Java 20,解決方法包括:通過(guò)修改服務(wù)器URL(推薦)或直接在創(chuàng)建后修改pom.xml文件中的Spring Boot和Java版本
    2025-01-01

最新評(píng)論

万年县| 根河市| 斗六市| 云阳县| 巧家县| 汉源县| 梁河县| 白朗县| 湄潭县| 三穗县| 祥云县| 吉安市| 通榆县| 陇川县| 黎川县| 青阳县| 福清市| 贵南县| 乐安县| 柏乡县| 绥宁县| 克什克腾旗| 龙山县| 固阳县| 夹江县| 芦溪县| 小金县| 长春市| 青神县| 黔东| 茌平县| 于田县| 福建省| 巴南区| 亳州市| 喜德县| 永靖县| 五台县| 贵溪市| 浦北县| 甘谷县|