Servlet


最近在学习Servlet,以我的理解:servlet就是运行在服务器端的一个程序,在需要时(如客户端输入某个url时),web容器自动调用某个servlet实现某个功能。我用Servlet实现了一个网站的验证码dome,给大家分享一下。

这是前端的html代码,这里用了下Bootstrap的框架,有想了解这个框架的小伙伴请去官网参考,下载下来将其css和js文件引入就行了。其中写的js脚本中的函数是用来实现:点击验证码图片,重新请求servlet程序,生成不同的验证码。

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" type="text/css" href="css/bootstrap.min.css">
<title>验证码生成</title>
<script type="text/javascript">function changeImg(img) {img.src=img.src+"?"+(new Date().getDate())}
</script></head>
<body><form action="login.do"  method="post">姓名:<input type="text" name="username" > <br/><br/>密码:<input type="password" name="pwd"><br/>验证码:<input type="text" name="yanzhenma"><img id="conform_img" src="/MyFristWebApp/login.do"  onclick="changeImg(this)"><br/><input type="submit"  value="login"></form><!-- Optional JavaScript --><!-- jQuery first, then Popper.js, then Bootstrap JS --><script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.slim.min.js" ></script><script type="text/javascript"  src="js/bootstrap.min.js"></script></body>
</body>
</html>

这是Servlet后台代码:

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/login.do")
public class MyServlet extends HttpServlet {private static final long serialVersionUID = 1L;private static int WIDTH=200;private static int HEIGHT=50;private static BufferedImage image;public MyServlet() {}protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doPost(request, response);}protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {request.setCharacterEncoding("UTF-8");response.setCharacterEncoding("UTF-8");response.setContentType("image/jpeg");generateComfirImg();    fillNumber(4);preventImgRec();//输出到客户端ImageIO.write(image, "jpg", response.getOutputStream());}private void generateComfirImg() {//创建图片对象image=new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_3BYTE_BGR);Graphics graphics=image.getGraphics();//填充图片背景色graphics.setColor(new Color(240,255,240));graphics.fillRect(0, 0, WIDTH, HEIGHT);//填充图片边框颜色graphics.setColor(new Color(187,255,255));graphics.drawRect(1, 1, WIDTH-2, HEIGHT-2);}//向图片中插入count个字符private void fillNumber(int count) {//旋转图片中的文字需要Graphics2D对象Graphics2D graphics=(Graphics2D) image.getGraphics();graphics.setColor(new Color(100,149,237));graphics.setFont(new Font("Times New Roman", Font.BOLD+ Font.ITALIC, 30));//备选字符集final String string="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"+ "abcdefghijklmnopqrstuvwxyz";Random random=new Random();//向图片写入字符的开始位置int x=20,y=40;//便于改变生成验证码的个数int move=(WIDTH-20)/count;for (int i = 0; i < count; i++) {//从所有的字符集中随机选择一个字符int pos=random.nextInt(string.length());int degree=random.nextInt()%25;   //随机-25~25度数graphics.rotate(degree*Math.PI/180, x, y);  //将度数转化为弧度graphics.drawString(string.charAt(pos)+"",x , y);graphics.rotate(-degree*Math.PI/180, x, y);   //每次旋转后恢复//x坐标向右移动x+=move;}}//防止图片识别技术private void preventImgRec() {Graphics graphics=image.getGraphics();graphics.setColor(new Color(100,149,237));graphics.setFont(new Font("Times New Roman", Font.BOLD+ Font.ITALIC, 30));int n=3;Random random=new Random();int startX,startY;int endX,endY;for (int i = 0; i < n; i++) {startX=random.nextInt(WIDTH);endX=random.nextInt(WIDTH);startY=random.nextInt(HEIGHT);endY=random.nextInt(HEIGHT);graphics.drawLine(startX, startY, endX, endY);}}
}

servlet生成网站验证码相关推荐

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

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

  2. Servlet生成动态验证码

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

  3. 转: 通过Servlet生成验证码图片

    孤傲苍狼 只为成功找方法,不为失败找借口! javaweb学习总结(九)-- 通过Servlet生成验证码图片 一.BufferedImage类介绍 生成验证码图片主要用到了一个BufferedIma ...

  4. Java Web学习总结(6)——通过Servlet生成验证码图片

    2019独角兽企业重金招聘Python工程师标准>>> 一.BufferedImage类介绍 生成验证码图片主要用到了一个BufferedImage类,如下: 创建一个DrawIma ...

  5. javaweb学习总结(九):通过Servlet生成验证码图片

    一.BufferedImage类介绍 生成验证码图片主要用到了一个BufferedImage类,如下: 创建一个DrawImage Servlet,用来生成验证码图片 1 package gacl.r ...

  6. 通过Servlet生成验证码图片

    一.BufferedImage类介绍 生成验证码图片主要用到了一个BufferedImage类,如下: 创建一个DrawImage Servlet,用来生成验证码图片 package gacl.res ...

  7. 通过Servlet生成验证码图片 (转孤傲苍狼)

    一.BufferedImage类介绍 生成验证码图片主要用到了一个BufferedImage类,如下: 创建一个DrawImage Servlet,用来生成验证码图片 1 package gacl.r ...

  8. javaweb(九)—— 通过Servlet生成验证码图片

    一.BufferedImage类介绍 生成验证码图片主要用到了一个BufferedImage类,如下: 创建一个DrawImage Servlet,用来生成验证码图片 1 package gacl.r ...

  9. avaweb学习总结(九)—— 通过Servlet生成验证码图片

    一.BufferedImage类介绍 生成验证码图片主要用到了一个BufferedImage类,如下: 创建一个DrawImage Servlet,用来生成验证码图片 1 package gacl.r ...

最新文章

  1. python 时间模块备忘
  2. Java异步通信实现
  3. Geospark-SQL加载SHP数据
  4. 传对象与传串_简单介绍
  5. 算法提高 c++_ch02_01 (强制类型转换)
  6. C#窗体控件-单选按钮控件RadioButton
  7. C/C++三个标准设备文件句柄
  8. 多模态multi-modal 与多视图multi-view
  9. Maven常用插件配置和使用
  10. AbstractQueuedSynchronizer源码分析
  11. sklearn库各个算法学习笔记
  12. RHEL7中设置ssh
  13. 信息熵,交叉熵,KL散度,JS散度之间的关系
  14. php 显示探针_UPUPW PHP探针安全版19.08.06
  15. CocosCreator 制作微信小游戏排行榜,超越好友,分享功能
  16. 《论韩愈 》——陈寅恪
  17. nginx+keepalived+tomcat
  18. 实验一:行为型设计模式之Strategy模式
  19. sqlserver关于发布订阅replication_subscription的总结
  20. 端午节祝福的html,端午节祝福语

热门文章

  1. 遗传算法详解与改良遗传算法
  2. 恋与制作人元旦服务器,恋与制作人元旦节有哪些活动_恋与制作人元旦节活动大全_玩游戏网...
  3. python 单线程与多线程爬虫
  4. 嵌入式Linux上没有wlan0
  5. 物联网应用开发与传统软件开发的区别
  6. 2020年博士研究生报考指南「指南+复习真题」
  7. qt5 python 教材_QT5和python3结合你想不到坑
  8. 东北师范大学计算机调剂复试经验谈,研友分享:东北师范大学2011年调剂经验谈...
  9. 视频质量评价方法:VQM
  10. FEN Self-Supervised Feature Enhancement Networks for Small Object Detection in Noisy Images