利用servlet产生随机数,原理是获取Graphics对象进行绘图
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对象进行绘图的更多相关文章
- 获取Graphics对象的方法
在做自定义控件时或者GDI+的时候经常会遇到获取Graphics实例的问题.一般有三种获取方式 1.从Paint事件的参数中获取.窗体和许多控件都有一个Paint事件,有一个PaintEventArg ...
- 在Servlet使用getServletContext()获取ServletContext对象出现java.lang.NullPointerException(空指针)异常的解决办法
今天遇到了一个在servlet的service方法中获取ServletContext对象出现java.lang.NullPointerException(空指针)异常,代码如下: 1 //获取Serv ...
- 利用location.hash+iframe跨域获取数据详解
前言 如果看懂了前文利用window.name+iframe跨域获取数据,那么此文也就很好理解了.一样都是动态插入一个iframe,然后把iframe的src指向服务端地址,而服务端同样都是输出一段j ...
- 利用window.name+iframe跨域获取数据详解
详解 前文提到用jsonp的方式来跨域获取数据,本文为大家介绍下如何利用window.name+iframe跨域获取数据. 首先我们要简单了解下window.name和iframe的相关知识.ifra ...
- Servlet学习(二):ServletConfig获取参数;ServletContext应用:请求转发,参数获取,资源读取;类装载器读取文件
转载:http://www.cnblogs.com/xdp-gacl/p/3763559.html 一.ServletConfig讲解 1.1.配置Servlet初始化参数 在Servlet的配置文件 ...
- iframe 跨域问题解决方案 利用window.name+iframe跨域获取数据详解
详解 前文提到用jsonp的方式来跨域获取数据,本文为大家介绍下如何利用window.name+iframe跨域获取数据. 首先我们要简单了解下window.name和iframe的相关知识.ifra ...
- JavaWeb_利用Servlet处理注册登录请求
利用Servlet处理注册登录请求 程序结构 <%@page import="com.Gary.model.User"%> <%@ page language=& ...
- php随机数原理
php随机数原理: 系统自动生成一个随机数种子(mt_srand函数可以自己生成种子),mt_rand先判断是否有生成种子,没有就自动生成一个,然后根据种子生成随机数. 生成10000-99999随机 ...
- 利用Servlet导出Excel
-----因为Excel可以打开HTML文件,因此可以利用页面的Form表单把页面中的table内容提交给Servlet,然后后台把提交上来的table内容转换成文件流的形式,并以下载的形式转给客户端 ...
随机推荐
- 左右GNU Linux企业加密文件系统 eCryptfs简介
/********************************************************************* * Author : Samson * Date ...
- 十天学Linux内核之第十天---总结篇(kconfig和Makefile & 讲不出再见)
原文:十天学Linux内核之第十天---总结篇(kconfig和Makefile & 讲不出再见) 非常开心能够和大家一起分享这些,让我受益匪浅,感激之情也溢于言表,,code monkey的 ...
- SQL2000 MD5加密
原文:SQL2000 MD5加密 /***************************************************************************** * Na ...
- find your present (2) 2095
Problem Description In the new year party, everybody will get a "special present".Now it's ...
- IronPython和C#交互
IronPython和C#交互 IronPython是一个.NET平台上的Python实现,包括了完整的编译器.执行引擎与运行时支持,能够与.NET已有的库无缝整合到一起. IronPython已经很 ...
- Python美女[从新手到高手]--阅读"见个面问题 HashMap 储存方法"联想
今伯乐在线 上看到一篇文章.一道面试题看 HashMap 的存储方式.也就是问: 在 HashMap 中存放的一系列键值对,当中键为某个我们自己定义的类型.放入 HashMap 后,我们在外部把某一个 ...
- BIP Requests Are Failing With Error "OPP Error Oracle.apps.xdo.XDOException: Error Creating Lock Fil
In this Document Symptoms Cause _afrLoop=975833031487795&id=1512691.1&displayIndex=1&a ...
- BAT 特殊符号总结
原文:BAT 特殊符号总结 BAT特殊符号总结,用好特殊符号,利用提高开发效率.^ 转义符 用在特殊符号之前 比如: echo 非常^&批处理 如果不加^ 那么"批处理"将 ...
- VS2015前端工具:NPM和Web Essentials
VS2015前端工具:NPM和Web Essentials 1.写作背景 想在5月份前换个工作环境了,“检讨”一下自己混饭的技术水平和处世的人脉关系,觉得很不给力!为人方面,人各有志也就不纠结了,但本 ...
- Swift入门教程:基本语法(二)
数字格式 数字可以增加额外的格式,使它们更容易阅读 可以增加额外的零 0 let money = 001999 // 1999 let money2 = 001999.000 ...