src 目录下com.xieyuan包MyServlet.java文件(Servlet文件)

  1. package com.xieyuan;
  2.  
  3. import java.awt.Color;
  4. import java.awt.Font;
  5. import java.awt.Graphics2D;
  6. import java.awt.image.BufferedImage;
  7. import java.io.IOException;
  8. import java.io.PrintWriter;
  9. import java.net.URLEncoder;
  10. import java.util.Random;
  11.  
  12. import javax.servlet.ServletException;
  13. import javax.servlet.ServletOutputStream;
  14. import javax.servlet.http.HttpServlet;
  15. import javax.servlet.http.HttpServletRequest;
  16. import javax.servlet.http.HttpServletResponse;
  17.  
  18. import com.sun.corba.se.impl.javax.rmi.CORBA.Util;
  19. import com.sun.image.codec.jpeg.JPEGCodec;
  20. import com.sun.image.codec.jpeg.JPEGImageEncoder;
  21.  
  22. public class MyServlet extends HttpServlet {
  23.  
  24. /**
  25. * Constructor of the object.
  26. */
  27. public MyServlet() {
  28. super();
  29. }
  30.  
  31. /**
  32. * Destruction of the servlet. <br>
  33. */
  34. public void destroy() {
  35. super.destroy(); // Just puts "destroy" string in log
  36. // Put your code here
  37. }
  38.  
  39. /**
  40. * The doGet method of the servlet. <br>
  41. *
  42. * This method is called when a form has its tag value method equals to get.
  43. *
  44. * @param request the request send by the client to the server
  45. * @param response the response send by the server to the client
  46. * @throws ServletException if an error occurred
  47. * @throws IOException if an error occurred
  48. */
  49. public void doGet(HttpServletRequest request, HttpServletResponse response)
  50. throws ServletException, IOException {
  51. execute(request, response);
  52. }
  53.  
  54. /**
  55. * The doPost method of the servlet. <br>
  56. *
  57. * This method is called when a form has its tag value method equals to post.
  58. *
  59. * @param request the request send by the client to the server
  60. * @param response the response send by the server to the client
  61. * @throws ServletException if an error occurred
  62. * @throws IOException if an error occurred
  63. */
  64. public void doPost(HttpServletRequest request, HttpServletResponse response)
  65. throws ServletException, IOException {
  66. execute(request, response);
  67. }
  68.  
  69. private static final char CHARS[]={'2','3','4','5','6','7','8','9','A','B','C','D','E',
  70. 'F','G','H','J','K','L','M','N','P','Q','R','S','T','U','V',
  71. 'W','X','Y','Z'
  72. };
  73. public static Random random=new Random();
  74. //生成随机数字,len为需要随机数字的个数
  75. public static String getRandomString(int len)
  76. {
  77. StringBuilder builder=new StringBuilder();
  78. for(int i=0;i<len;i++)
  79. {
  80. builder.append(CHARS[random.nextInt(CHARS.length)]) ;
  81. }
  82. return builder.toString();
  83. }
  84. //随机生成颜色,座位背景色
  85. public static Color getColor()
  86. {
  87. return new Color(random.nextInt(255),random.nextInt(255),random.nextInt(255));
  88. }
  89. //取颜色的反色
  90. public static Color getReverseColor(Color color)
  91. {
  92. return new Color(255-color.getRed(),255-color.getGreen(),255-color.getBlue());
  93. }
  94.  
  95. private void execute(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException
  96. {
  97. response.setCharacterEncoding("utf-8");
  98. //设置返回的文件编码
  99. response.setContentType("image/jpeg");
  100.  
  101. //获取随机码
  102. String getRandomCode=getRandomString(5);
  103. //将随机码放到Session中
  104. request.getSession().setAttribute("randomcode", getRandomCode);
  105. int width=100;
  106. int height=30;
  107. Color color=getColor();
  108. Color reverseColor=getReverseColor(color);
  109. //创建一个彩色图片
  110. BufferedImage bi=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
  111. Graphics2D g=bi.createGraphics();
  112. g.setFont(new Font(null,Font.BOLD,16));
  113. g.setColor(color);
  114. g.fillRect(0,0,width,height);
  115. g.setColor(reverseColor);
  116. g.drawString(getRandomCode, 18,20);
  117. //绘制噪点,最多100个
  118. for(int i=0,n=random.nextInt(100);i<n;i++)
  119. {
  120. g.drawRect(random.nextInt(width), random.nextInt(height), 1,1);
  121. }
  122. ServletOutputStream out=response.getOutputStream();
  123. JPEGImageEncoder encoder=JPEGCodec.createJPEGEncoder(out);
  124. encoder.encode(bi);
  125. out.flush();
  126. }
  127.  
  128. /**
  129. * Initialization of the servlet. <br>
  130. *
  131. * @throws ServletException if an error occurs
  132. */
  133. public void init() throws ServletException {
  134. }
  135.  
  136. }

配置好web.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app version="2.4"
  3. xmlns="http://java.sun.com/xml/ns/j2ee"
  4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  5. xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
  6. http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
  7. <servlet>
  8. <description>This is the description of my J2EE component</description>
  9. <display-name>This is the display name of my J2EE component</display-name>
  10. <servlet-name>MyServlet</servlet-name>
  11. <servlet-class>com.xieyuan.MyServlet</servlet-class>
  12. </servlet>
  13.  
  14. <servlet-mapping>
  15. <servlet-name>MyServlet</servlet-name>
  16. <url-pattern>/servlet/MyServlet</url-pattern>
  17. </servlet-mapping>
  18. <welcome-file-list>
  19. <welcome-file>index.jsp</welcome-file>
  20. </welcome-file-list>
  21. </web-app>

接着部署您的WEB 应用,此时访问:

http://127.0.0.1:8080/Test/servlet/MyServlet

可以看到一张图片验证码。但是,这种效果好吗?这,并不是我们想要的,图片验证码应该混搭在HTML页面里,做登录等功能才对。

那么,接下来我们来做个JSP页面,直接使用项目WebRoot目录下的,index.jsp

  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
  2. <%
  3. String path = request.getContextPath();
  4. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
  5. %>
  6.  
  7. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  8. <html>
  9. <head>
  10. <base href="<%=basePath%>">
  11.  
  12. <title>My JSP 'index.jsp' starting page</title>
  13. <meta http-equiv="pragma" content="no-cache">
  14. <meta http-equiv="cache-control" content="no-cache">
  15. <meta http-equiv="expires" content="0">
  16. <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
  17. <meta http-equiv="description" content="This is my page">
  18. <!--
  19. <link rel="stylesheet" type="text/css" href="styles.css">
  20. -->
  21. <script language="JavaScript" >
  22. function reloadImage()
  23. {
  24. <!--将按钮状态设置为不可用,当图片加载完成触发onload后,按钮状态就为可用了。这样可用避免重复获取-->
  25. document.getElementById("btn").disabled=true;
  26. <!--第一次连接的时候不会有问题,第二次连接时,假如你后面没有new Date().getTime(),加参数就会连接的时候拿缓存,没有连到服务器。加上时间函数就能保证你每次得到的不是浏览器的缓存。-->
  27. document.getElementById("img").src="servlet/MyServlet?timestamp="+new Date().getTime();
  28. }
  29. </script>
  30. </head>
  31.  
  32. <body>
  33. <img src="servlet/MyServlet" id="img" onload="btn.disabled=false;" /><br/><br/>
  34. <input type="button" value="换一张图片" onClick="reloadImage()" id="btn" /><br/>
  35. <script>document.write("页面最后更新:"+document.lastModified)</script>
  36. </body>
  37. </html>

此时,我直接访问:http://127.0.0.1:8080/Test/

结果就是我们想要的了

可以看到,无论我们点击多少次 “换一张图片”按钮,网页始终没有刷新,页面最后更新时间也没变,变的就是图片验证码!

Servlet:response生成图片验证码的更多相关文章

  1. response生成图片验证码

    新建一个java web工程 src 目录下xieyuan包MyServlet.java文件(Servlet文件) package xieyuan; import java.awt.Color; im ...

  2. (七)利用servlet生成图片验证码

    总结: 验证码就是一张图,然后往这张图上写入随机的字符(数字字母等). 1.1 编写html页面 <!DOCTYPE html> <html> <head> < ...

  3. servlet中生成验证码

    在servlet中生成验证码 package login; import java.awt.Color; import java.awt.Graphics; import java.awt.image ...

  4. net生成图片验证码--转自Lisliefor

    目前,机器识别验证码已经相当强大了,比较常见的避免被机器识别的方法,就是将验证码的字符串连到一起,这样就加大的识别的难度,毕竟机器没有人工智能.我找了很多的.net生成图片验证码的例子,后来经过一些修 ...

  5. 【转载】Asp.Net生成图片验证码工具类

    在Asp.Net应用程序中,很多时候登陆页面以及其他安全重要操作的页面需要输入验证码,本文提供一个生成验证码图片的工具类,该工具类通过随机数生成验证码文本后,再通过C#中的图片处理类位图类,字体类,一 ...

  6. Django登录(含随机生成图片验证码)注册实例

    登录,生成随机图片验证码 一.登录 - 随机生成图片验证码 1.随机生成验证码 Python随机生成图片验证码,需要使用PIL模块,安装方式如下: pip3 install pillow 1)创建图片 ...

  7. PHP生成图片验证码demo【OOP面向对象版本】

    下面是我今天下午用PHP写的一个生成图片验证码demo,仅供参考. 这个demo总共分为4个文件,具体代码如下: 1.code.html中的代码: <!doctype html> < ...

  8. python 全栈开发,Day85(Git补充,随机生成图片验证码)

    昨日内容回顾 第一部分:django相关 1.django请求生命周期 1. 当用户在浏览器中输入url时,浏览器会生成请求头和请求体发给服务端 请求头和请求体中会包含浏览器的动作(action),这 ...

  9. python PIL图像处理-生成图片验证码

    生成效果如图: 代码 from PIL import Image,ImageDraw,ImageFont,ImageFilter import random # 打开一个jpg图像文件: im = I ...

随机推荐

  1. Verilog中的标点

    在Verilog中有时候会误用的上引号 1,define 中的 `define INITIAL  0 这个单引号用的是键盘左上角的那个单引号,其实就是一个小撇. 2,4'd0 这个 用的是才是叫真正的 ...

  2. CCIE路由实验(4) -- BGP路由控制

    1.过滤BGP路由的方法2.用AS-path filter控制路由3.用Community Filter控制路由 enableconf tno ip do loenable pass ciscolin ...

  3. 评侯捷的<深入浅出MFC>和李久进的<MFC深入浅出>

    侯捷的<深入浅出mfc>相信大家都已经很熟悉了,论坛上也有很多介绍,这里我就不多说了. 而李久进的<mfc深入浅出>,听说的人可能就少得多.原因听说是这本书当时没有怎么宣传,而 ...

  4. TreePuzzle 一点感想

    题目链接 这一道题看起来像是一道贪心的水题,但是情况较难考虑周全,比如下图,我就考虑漏了这种情况,点0是可以移动到点1的.然后我就各种奇怪的分类讨论.最终还是没能A,决定放弃治疗. 然后我看了看解答, ...

  5. 【Dior风格/舒适防风面料/抗静电里衬/大身撞色拼接/精致平驳领/时尚便西款/蓝绿色】玛萨玛索男装网购商城

    [Dior风格/舒适防风面料/抗静电里衬/大身撞色拼接/精致平驳领/时尚便西款/蓝绿色]玛萨玛索男装网购商城 [特价商品] Dior风格/舒适防风面料/抗静电里衬/大身撞色拼接/精致平驳领/时尚便西款 ...

  6. python下载文件(图片)源码,包含爬网内容(爬url),可保存cookie

    #coding=utf-8 ''' Created on 2013-7-17 @author: zinan.zhang ''' import re import time import httplib ...

  7. BZOJ 2318: Spoj4060 game with probability Problem( 概率dp )

    概率dp... http://blog.csdn.net/Vmurder/article/details/46467899 ( from : [辗转山河弋流歌 by 空灰冰魂] ) 这个讲得很好 , ...

  8. 我的Python成长之路---第一天---Python基础(作业1:登录验证)---2015年12月26日(雾霾)

    作业一:编写登录接口 输入用户名密码 认证成功系那是欢迎信息 输错三次后锁定 思路: 1.参考模型,这个作业我参考了linux的登录认证流程以及结合网上银行支付宝等锁定规则 1)认证流程参考的是Lin ...

  9. 08-IOSCore - App Store、国际化/本地化

    App Store 1. 帐号身份 0. 有Xcode 写程序,在虚拟机上运行 1. 成为苹果使用者 appleid 验证邮箱 权限: 能下载应用程序 2. 成为苹果开发者 https://devel ...

  10. Mysql主从配置+读写分离(转)

       MySQL从5.5版本开始,通过./configure进行编译配置方式已经被取消,取而代之的是cmake工具.因此,我们首先要在系统中源码编译安装cmake工具. 注:安装前须查看是否已经安装了 ...