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. 他的第一个NDK的Demo

    DEMO下载链接: http://download.csdn.net/detail/logicsboy/7535409 首先给你们恶补下啥是NDK:(我从百度Copy的) NDK全称:Native D ...

  2. 第6章 适配器模式(Adapter Pattern)

    原文 第6章 适配器模式(Adapter Pattern) 概述 将一个类的接口转换成客户希望的另外一个接口.Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作.  解决的问 ...

  3. MVC客户管理(添加、修改、查询、分页)

    ASP.NET MVC搭建项目后台UI框架—6.客户管理(添加.修改.查询.分页)   目录 ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2 ...

  4. 手机新闻网站,手持移动新闻,手机报client,jQuery Mobile手机新闻网站,手机新闻网站demo,新闻阅读器开发

    我们坐在地铁.经常拿出新浪手机查看新闻.腾讯新闻,或者看新闻,等刷微信功能.你有没有想过如何实现这些目标. 移动互联网.更活泼. 由于HTML5未来,jQuery Moblie未来. 今天我用jqm的 ...

  5. 雅居乐在核心产品 &quot;决策&quot;

    2015.6.2 在武汉-- 这是一支谦卑且认真学习,又实实在在做产品的 "产品级敏捷团队". "产品级敏捷团队"--在产品版本号开发的生命周期中.均能共同高效 ...

  6. Hadoop上传文件的报错

    baidu了很多,都说防火墙,datanode没有正常启动的问题,可是检查了都是正常,后来还是在老外的网站上找到了解决的方法 修改了/etc/security/limits.conf文件,上传成功 这 ...

  7. jsp的&lt;%%&gt;

    于jsp于 可以使用<% %> 嵌入java代码,简称jsp文字. 可以使用<% -- -- %> 凝视,这是jsp注视 可以使用<%! %> 声明全局变量 版权声 ...

  8. JVMTI 中间JNI系列功能,线程安全和故障排除技巧

    JVMTI 中间JNI系列功能,线程安全和故障排除技巧 jni functions 在使用 JVMTI 的过程中,有一大系列的函数是在 JVMTI 的文档中 没有提及的,但在实际使用却是很实用的. 这 ...

  9. 【百度地图API】除夕夜,大家一起来赶走“夕”——删除标注功能

    原文:[百度地图API]除夕夜,大家一起来赶走"夕"--删除标注功能 任务描述: 农历12月31日是中国传统的节日——除夕.你知道除夕是怎么来的麼? “夕”在中国古代神话中,可是一 ...

  10. c# 替换非法字符

    保存文件的时候,文件名不允许非法字符. public string ReplaceSpecialCharacter(string str)        {            List<ch ...