package com.ctcsys.util;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
import java.awt.image.*;
import java.awt.*;
import javax.imageio.*;
public class CodeMakerServlet extends HttpServlet
...{
//验证码字体
private Font[] codeFont =
...{
new Font("Algerian", Font.BOLD,25),
new Font("Vivaldi", Font.BOLD, 25),
new Font("Broadway", Font.BOLD,25),
new Font("Forte", Font.BOLD, 25)
};
//验证码数字颜色
private Color[] color =
...{
Color.BLACK, Color.RED, Color.DARK_GRAY, Color.BLUE
};
String codeNumbers = "";
int width = 90, height = 25;
// 处理 HTTP get 请求
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
...{
// 清空缓冲区
response.reset();
// 注意这里的MIME类型
response.setContentType("image/png");
// 设置页面不缓存
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
// 创建一个 110X40 的图像,验证码显示的图片大小
BufferedImage image = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
// 得到图形环境对象 g
Graphics g = image.getGraphics();
// 填充背景
g.setColor(new Color(64,219,255));
g.fillRect(0, 0, width, height);
for (int i = 0; i < 4; i++)
...{
drawCode(g, i);
}
drawNoise(g, 17);
// 绘制边框
g.setColor(Color.gray);
g.drawRect(0, 0, width - 1, height - 1);
// 将验证码内容保存进session中,用于验证用户输入是否正确时使用
HttpSession session = request.getSession(true);
session.removeAttribute("codeNumbers");
session.setAttribute("codeNumbers", codeNumbers);
// 重设字符串
codeNumbers = "";
// 利用ImageIO类的write方法对图像进行编码
ServletOutputStream sos = response.getOutputStream();
ImageIO.write(image, "PNG", sos);
sos.close();
}
// 绘制验证码
public void drawCode(Graphics graphics, int i)
...{
int number = (int)(Math.random() * 10);
graphics.setFont(codeFont[i]);
graphics.setColor(color[i]);
graphics.drawString("" + number, 10 + i * 17,22);
codeNumbers += number;
}
// 绘制干扰线
public void drawNoise(Graphics graphics, int lineNumber)
...{
graphics.setColor(new Color(9,143,134));
for (int i = 0; i < lineNumber; i++)
...{
int pointX1 = 1 + (int)(Math.random() * width);
int pointY1 = 1 + (int)(Math.random() * height);
int pointX2 = 1 + (int)(Math.random() * width);
int pointY2 = 1 + (int)(Math.random() * height);
graphics.drawLine(pointX1, pointY1, pointX2, pointY2);
}
}
// 处理 HTTP post 请求, 和doGet一样
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
...{
doGet(request, response);
}
}
在要显示验证码位置的页面代码中加入<img id="code" src="/ctcmcdisplay/codeMaker" title="点击刷新验证码"
style="cursor : pointer;" align="absmiddle" onclick="return refreshcode()"/>即可,刷新验证码的javascript脚本如下:
<script type="text/javascript">
function refreshcode(){
document.getElementById("code").src="/ctcmcdisplay/codeMaker?update="+Math.random();
return false;
}
</script>
红色部分是存放servlet的功能名称,蓝色部分就是在web.xml中配置的servlet映射,web.xml中的配置代码段:
<!-- 生成验证码的servlet -->
<servlet>
<servlet-name>CodeMakerServlet</servlet-name>
<servlet-class>com.ctcsys.util.CodeMakerServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>CodeMakerServlet</servlet-name>
<url-pattern>/codeMaker</url-pattern>
</servlet-mapping>
这样在页面中就可以随机出现验证码了,点击验证码图片的时候也可以刷新验证码。
分享到:
相关推荐
在Web开发中,Servlet是一种Java技术,用于生成动态网页内容。本教程主要讲解如何利用Servlet来实现动态生成验证码的功能,这对于防止机器人或恶意自动化程序在网站上进行非法操作至关重要。验证码通常由一串随机...
Servlet是Java Web开发中的一...总之,Servlet生成图片验证码是一种常见的Web安全实践,通过结合Java的图形库和HTTP交互,可以实现高效且安全的用户验证机制。在设计和实现时,应充分考虑用户体验和安全性之间的平衡。
- **响应验证码**:Servlet生成验证码后,需要将验证码的值以特定方式(如隐藏字段、Cookie或Session)返回给前端,并同时将验证码图像作为HTTP响应的一部分发送出去。 3. **前端交互**: - **JavaScript**:前端...
在Servlet中生成图片验证码,首先需要创建一个Servlet类,该类将负责生成随机字符串并将其转化为图像。以下是一些关键步骤: 1. **生成随机字符串**:使用`java.util.Random`和`char[]`数组来创建一个指定长度的...
在IT行业中,Servlet是Java Web开发中的重要组成部分,主要用于处理HTTP请求并生成动态网页内容。在Web应用中,为了增加安全性,通常会采用验证码技术来防止自动化的恶意操作,如机器人注册、刷票等。本篇文章将深入...
综上所述,Servlet生成动态验证码是Web安全中的一项重要技术,涉及到了Servlet生命周期管理、HTTP交互、图像处理和随机数生成等多个方面的知识。在实际开发中,为了提高用户体验,还需要考虑验证码的可读性和刷新...
本笔记将详细探讨如何使用Servlet来生成验证码。 一、验证码的原理与作用 验证码的主要目的是区分人类用户和自动化程序,通过要求用户输入图片上的文字或者完成简单的数学问题,来验证其为真实的人类。这有助于防止...
在Servlet中实现这一功能,可以通过重新调用生成验证码的逻辑,每次请求都生成不同的随机字符串和图像。 ### 五、安全性考虑 虽然生成验证码增加了攻击者的难度,但为了进一步增强安全性,还可以采取以下措施: - ...
`servlet`生成验证码图片是通过服务器端动态创建一个包含随机字符的图像,用户需要输入图像中显示的文字或数字来验证其身份。以下将详细解释这个过程及其相关知识点: 1. **Servlet**:Servlet是Java中用于扩展...
`index.jsp`文件通常是用户首次请求验证码的页面,它可能包含一个HTML表单,用户可以通过点击按钮触发Servlet生成验证码。表单的ACTION属性应该指向我们的Servlet。 `result.jsp`文件则用于显示验证结果。当用户...
在servlet中动态生成验证码图片,可被JSP或servlet引用,每次刷新都会改变验证码
### JSP中利用Servlet生成验证码图片 在Web应用开发中,验证码被广泛应用于用户登录、表单提交等场景,以防止自动化的恶意攻击。本文将详细介绍如何在Java Server Pages (JSP) 和 Servlet 技术的基础上,实现一个...
2. **Servlet处理**:在Servlet中,接收到这个请求后,重新生成一个验证码并返回新图像的二进制数据。浏览器接收到数据后,会自动更新图像。 四、验证码校验 1. **用户输入**:用户在表单中输入看到的验证码,表单...
Java servlet 自动生成 图片验证码 生成 Java源码
接下来,我们需要创建一个Servlet来生成验证码图像。验证码通常以图像的形式显示,以防止被自动化脚本通过读取文本的方式破解。我们可以使用Java的`java.awt`和`javax.imageio`包来创建和输出图像。以下是一个简单的...
在这个imooc课程中,"checkcode"可能是生成和校验验证码的Servlet类名或者是相关的文件夹,包含用于生成验证码的Java源代码和可能的配置文件。学习者需要理解Servlet的工作原理,以及如何在Java中生成和操作图像,...
在这个例子中,JSP页面可能包含一个`<img>`标签,其`src`属性指向一个Servlet,该Servlet负责生成验证码的图像并将其作为HTTP响应的一部分返回给浏览器。 3. **控制器(Controller)**: 用户输入验证码后,会提交...
正在学习Java,在教程书和网上不断的学习。servlet 提供了 Java 强大的 web 交互,在这个小项目中,我用servlet 实现了在web上生成验证码的功能,正在入门Java的同学不妨试试。
了解了这些基本概念后,你可以通过阅读`ValidateCodeServlet.java`的源代码,查看具体的实现细节,如如何生成验证码、如何将验证码存储在session中、如何构建和发送图像响应等。通过这种方式,你可以更好地理解和...