public class ResonpeRandomImgDemo extends HttpServlet {

int width=100;

int height=30;

public void doGet(HttpServletRequest request, HttpServletResponse response)    throws ServletException, IOException {

response.setContentType("text/html;charset=utf-8");

//获取BufferedImage对象,并设置画布的大小还有类型

BufferedImage img=new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

//获取绘图对象

Graphics2D g =(Graphics2D)img.getGraphics();

//设置背景颜色

setBackgroudColor(g);

//产生随机数

getNum(g);

//把图形写给浏览器

response.setContentType("image/jpeg");

ImageIO.write(img, "jpg", response.getOutputStream());

}

private void getNum(Graphics2D g) {

String str="0123456789qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM";

g.setColor(Color.BLUE);

for (int i = 0; i < 4; i++) {

//产生随机数,%30为了产生随机数-30-30之间,这个也是旋转角度

int degee=new Random().nextInt()%30;

//进行旋转

g.rotate(degee*Math.PI/180 , 20+(i*12), 15);

g.setFont(new Font("宋体",Font.BOLD, 20));

g.drawString(str.charAt(new Random().nextInt(str.length()))+"", 20+(i*12), 15);

//旋转回来

g.rotate(-degee*Math.PI/180 , 20+(i*12), 15);

}

}

private void setBackgroudColor(Graphics2D g) {

g.setBackground(Color.WHITE);

g.fillRect(0, 0, width, height);

}

public void doPost(HttpServletRequest request, HttpServletResponse response)    throws ServletException, IOException {

doGet(request, response);

}

}

//jsp页面

<script type="text/javascript">
  function changeImg(){
   var img= document.getElementById("img");
   img.src=img.src+"?";
  }
 </script>

验证码:<img alt="" src="/ServletTest/servlet/ResonpeRandomImgDemo" id="img" onclick="changeImg()" style="cursor: pointer;">///ServletTest/servlet/ResonpeRandomImgDemo获取servelt页面的信息

利用servlet产生随机数,原理是获取Graphics对象进行绘图的更多相关文章

  1. 获取Graphics对象的方法

    在做自定义控件时或者GDI+的时候经常会遇到获取Graphics实例的问题.一般有三种获取方式 1.从Paint事件的参数中获取.窗体和许多控件都有一个Paint事件,有一个PaintEventArg ...

  2. 在Servlet使用getServletContext()获取ServletContext对象出现java.lang.NullPointerException(空指针)异常的解决办法

    今天遇到了一个在servlet的service方法中获取ServletContext对象出现java.lang.NullPointerException(空指针)异常,代码如下: 1 //获取Serv ...

  3. 利用location.hash+iframe跨域获取数据详解

    前言 如果看懂了前文利用window.name+iframe跨域获取数据,那么此文也就很好理解了.一样都是动态插入一个iframe,然后把iframe的src指向服务端地址,而服务端同样都是输出一段j ...

  4. 利用window.name+iframe跨域获取数据详解

    详解 前文提到用jsonp的方式来跨域获取数据,本文为大家介绍下如何利用window.name+iframe跨域获取数据. 首先我们要简单了解下window.name和iframe的相关知识.ifra ...

  5. Servlet学习(二):ServletConfig获取参数;ServletContext应用:请求转发,参数获取,资源读取;类装载器读取文件

    转载:http://www.cnblogs.com/xdp-gacl/p/3763559.html 一.ServletConfig讲解 1.1.配置Servlet初始化参数 在Servlet的配置文件 ...

  6. iframe 跨域问题解决方案 利用window.name+iframe跨域获取数据详解

    详解 前文提到用jsonp的方式来跨域获取数据,本文为大家介绍下如何利用window.name+iframe跨域获取数据. 首先我们要简单了解下window.name和iframe的相关知识.ifra ...

  7. JavaWeb_利用Servlet处理注册登录请求

    利用Servlet处理注册登录请求 程序结构 <%@page import="com.Gary.model.User"%> <%@ page language=& ...

  8. php随机数原理

    php随机数原理: 系统自动生成一个随机数种子(mt_srand函数可以自己生成种子),mt_rand先判断是否有生成种子,没有就自动生成一个,然后根据种子生成随机数. 生成10000-99999随机 ...

  9. 利用Servlet导出Excel

    -----因为Excel可以打开HTML文件,因此可以利用页面的Form表单把页面中的table内容提交给Servlet,然后后台把提交上来的table内容转换成文件流的形式,并以下载的形式转给客户端 ...

随机推荐

  1. 彩色图像--色彩空间 HSI(HSL)、HSV(HSB)

    得知DIP文章66日 转载请注明文章出处:http://blog.csdn.net/tonyshengtan ,出于尊重文章作者的劳动,转载请标明出处!文章代码已托管.欢迎共同开发:https://g ...

  2. JSP/Servlet线程安全

    携带servlet开发时间.线程安全是非常重要的.否则会导致一些意想不到的结果. Servlet的生命周期是由Web负责集装箱,什么时候client第一个请求Servlet时间,容器负责初始化Serv ...

  3. 【剑指offer】数字数组中只出现一次(2)

    转载请注明出处:http://blog.csdn.net/mmc_maodun/article/details/27800577 题目:一个int数组中有三个数字a.b.c仅仅出现一次,其它数字都出现 ...

  4. 简单的工具LogUtil、Toast

    简单的工具LogUtil.Toast     能够用了 import android.content.Context; import android.util.Log; import android. ...

  5. IntelliJ IDEA于Make Project时报:子字符串不是票面金额的结束、非法的表达式显示启动

    IntelliJ IDEA于Make Project当系统提示很多错误,什么孩子不是字符串票面金额的结束.非法的表达式显示启动-- 解决方法是改变File Encoding,更改方法:File > ...

  6. malloc,free简单的实现

    有关标准库首先简要malloc其原理:     标准库内部通过一个双向链表.管理在堆中动态分配的内存.     malloc函数分配内存时会附加若干(一般是12个)字节,存放控制信息.     该信息 ...

  7. android download学习记录

    东西拼凑,最终弄出来能够用的代码 [1].[代码] [Java]代码 跳至 [1] ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 ...

  8. 第17章 中介者模式(Mediator Pattern)

    原文 第17章 中介者模式(Mediator Pattern) 中介者模式  概述:   在软件开发中,我们有时会碰上许多对象互相联系互相交互的情况,对象之间存在复杂的引用关系,当需求更改时,对系统进 ...

  9. Android dumpsys命令的使用

    Android提供的dumpsys工具能够用于查看手机中的应用程序和系统服务信息与状态,手机连接电脑后能够直接命令行运行adb shell dumpsys 查看全部支持的Service可是这样输出的太 ...

  10. Android研究之游戏开发处理按键的响应

    1.onKeyDown 方法 onKeyDown 方法是KeyEvent.Callback 接口中的一个抽象方法,重写onKeyDown 方法能够监听到按键被按下的事件,我们先看看onKeyDown方 ...