直接将验证码的生成工作放到jsp中,就可以直接在页面请求这个jsp,不需要再去设置servlet的的映射路径,简化代码。

<%@ page language="java" pageEncoding="UTF-8"%>
<%@ page import="java.util.Random"%>
<%@ page import="java.io.OutputStream"%>
<%@ page import="java.awt.*"%>
<%@ page import="java.awt.image.BufferedImage"%>
<%@ page import="javax.imageio.ImageIO"%>
<%//定义验证码图片的宽和高int width = 95;int height = 32;//创建一个图片缓冲区,作为画布BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);//获取这个“画布”上画图的“画笔”Graphics2D g = (Graphics2D)image.getGraphics();//设置画笔的颜色背景色g.setColor(new Color(0xFAEBD7));//使用画笔绘制画布的背景g.fillRect(0, 0, width, height);//修改画笔颜色为黑色
    g.setColor(Color.black);//绘制画布边框g.drawRect(0, 0, width - 1, height - 1);//创建一个随机数生成对象Random r = new Random();//定义一个字符数组,作为验证码字符源char[] chars = "0123456789QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm".toCharArray();// 在图片上生成干扰点for (int i = 0; i < 300; i++) {g.setColor(new Color(r.nextInt(150)+50,r.nextInt(150)+50, r.nextInt(150)+50));int x = r.nextInt(width);int y = r.nextInt(height);g.drawOval(x, y, 0, 0);}//创建一个字符串缓冲区,用来保存要输出到图片中的所有字符StringBuilder sb = new StringBuilder();//循环往图片中写入字符for( int i = 0, left = 8 ; i < 4 ; i++,left += 21 ){//从字符源中随机获取一个字符char ch = chars[r.nextInt(chars.length)];//将字符添加到字符串缓冲区中
        sb.append(ch);//设置画笔颜色g.setColor(new Color(r.nextInt(100), r.nextInt(100), r.nextInt(100)));//设置字符的字体g.setFont(new Font("Candara", Font.BOLD, 24));//设置一个弧度double theta = Math.PI / 180 * (45 - r.nextInt(90));//旋转画笔输出的方向,旋转弧度为上面获取的弧度g.rotate(theta, left, 24);//往画布中输出字符g.drawString(ch+"", left , 24);//将画笔的输出方向调整回来g.rotate(-theta, left, 24);}//释放画笔资源
    g.dispose();//将输出到画布中的字符保存到session中session.setAttribute("vcCode", sb.toString());//设置相应流的响应内容格式response.setContentType("image/jpeg");//因为jsp页面执行完毕后会释放所有PageContestObject对象,并调用response的getWriter方法,//而response对象不能同时使用getWriter方法和getOutputStream()方法,//为了下面能够使用response对象的getOutputStream()方法获取输出字节流,往浏览器输出图片,//所以需要先对其进行处理
    out.clear();out = pageContext.pushBody();//获取返回给浏览器客户端的响应流OutputStream output = response.getOutputStream();//将画布内容往响应流中输出ImageIO.write(image, "jpeg", output);//关闭流,释放资源
    output.close();
%>

转载于:https://www.cnblogs.com/pf1988/p/9144672.html

生成动态验证码的jsp相关推荐

  1. 登陆界面如何生成动态验证码

    在设计登录界面时验证码是必不可少,本实例将简单的生成动态验证码. 根据个人需求将生成验证码代码放到不同的的地方,可以放到前段控制器中通过请求方式生成验证码,也可已将代码放到一个JSP页面通过应用JSP ...

  2. phpgif图片包_php生成动态验证码gif图片

    这是一个通过php生成的动态验证码图片的示例,重点是可以运行哦!下面先发下效果图: 下面是php生成动态验证码需要用到的相关类和函数. /** *ImageCode 生成包含验证码的GIF图片的函数 ...

  3. .NET中生成动态验证码

    NET中生成动态验证码 验证码是图片上写上几个字,然后对这几个字做特殊处理,如扭曲.旋转.修改文字位置,然后加入一些线条,或加入一些特殊效果,使这些在人类能正常识别的同时,机器却很难识别出来,以达到防 ...

  4. 利用Servlet生成动态验证码

    在Servlet中,设置响应正文的类型为image/jpeg,表示响应的是一个图片,然后通过java.awt包中的操作图形图像的类来生成一个图像 java.awt.image.BufferedImag ...

  5. 利用 PIL模块实现生成动态验证码

    简单说下需求: 当用户点击动态框时,实现实时更换动态库里的数字更换 模块: PIL  io 前端页面: <img src="/get_code/" alt="&qu ...

  6. java实现动态验证码源代码——jsp页面

    我们通常在其他网站注册或者登陆的时候会发现一个很高大上的验证码,那么怎么用java代码实现呢?下面我给大家贴一下我写的方法: 此文章是写的前台jsp页面的代码: <%@ page languag ...

  7. java生成动态验证码_java动态生成验证码

    后台代码:RandomImageServlet.java package com.zhaoran.servlet; import java.awt.Color; import java.awt.Fon ...

  8. Servlet生成动态验证码

    主要代码 public class Abc extends HttpServlet { private static final long serialVersionUID = 1L; public ...

  9. Django 20购物商城项目(注册、登录页面:生成动态验证码)

    dDjango 20购物商城项目 1.安装pillow 2.在注册页面加入验证码 2.1.register.html (增加内容) 2.2.register.js(增加内容) 2.2.路由.视图(增加 ...

最新文章

  1. C++/C++11中std::runtime_error的使用
  2. golang beego 文件上传
  3. Python文件基本操作
  4. 画出沪深300指数曲线
  5. vue 安装指定版本swiper_Vue中的runtime-only和runtime-compiler
  6. 阿里云明确生态边界:不做SaaS、被集成
  7. @SuppressWarnings使用的正确姿势
  8. Java Tomcat
  9. LeetCode Online Judge 题目C# 练习 - Search in Rotated Sorted Array II
  10. 用mysql完成的实际案例_mysql完成SQL统计的案例
  11. ARM嵌入式系统开发之接收函数的实现
  12. mysql事件关闭解决办法
  13. SpringCloud与Ribbon整合的时候是如何提供RestTemplate负载均衡功能?
  14. 电力-103规约主站端实现
  15. 高等数学---用python求极限
  16. XBuilder:Ext表单设计的完美实现
  17. docker进程管理(1号进程,僵尸进程详解)
  18. Xposed入门篇之安装xposed框架
  19. 招行权证割肉比赛开演 10个交易日后寿终正寝
  20. 数据库的长连接和短链接

热门文章

  1. mysql与access数据库_mysql数据库和access数据库有什么不同吗?
  2. php 外部调用内部变量,PHP 如何在方法体外部获取内部变量?
  3. mysql 按小时分组统计_PowerBI业务分析:按排名分组统计
  4. centos6.x 安装php5.6 tar,CentOS6.x安装php5.6.x
  5. mate40能更新鸿蒙,Mate40领衔更新!鸿蒙系统首批升级机型名单:这些机型可坐等推送...
  6. FPGA之道(50)复位的设计
  7. 【 MATLAB 】适合初学者的 chirp 理解与推导
  8. Leaf:GO语言游戏框架介绍及入门
  9. spark安装和优化
  10. robot.txt 搜索引擎 蜘蛛爬虫 搜索规则