import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class ValidateCode extends HttpServlet {
private static final long serialVersionUID = 1L;
// Process the HTTP Get request
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
// 在内存中创建图象
int width = 60, height = 20;
BufferedImage image = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
// 获取图形上下文
Graphics g = image.getGraphics();
// 生成随机类
Random random = new Random();
// 设定背景色
g.setColor(getRandColor(200, 250));
g.fillRect(0, 0, width, height);
// 设定字体
g.setFont(new Font("Times New Roman", Font.PLAIN, 18));
// 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到
g.setColor(getRandColor(160, 200));
for (int i = 0; i < 155; i++) {
int x = random.nextInt(width);
int y = random.nextInt(height);
int xl = random.nextInt(12);
int yl = random.nextInt(12);
g.drawLine(x, y, x + xl, y + yl);
}
// 取随机产生的认证码(4位数字)
String sRand = "";
for (int i = 0; i < 4; i++) {
String rand = String.valueOf(random.nextInt(10));
sRand += rand;
// 将认证码显示到图象中
g.setColor(new Color(20 + random.nextInt(110), 20 + random
.nextInt(110), 20 + random.nextInt(110)));// 调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成
g.drawString(rand, 13 * i + 6, 16);
}
HttpSession session = request.getSession();
// 将认证码存入SESSION
session.setAttribute("validateCode", sRand);
// 图象生效
g.dispose();
OutputStream output = response.getOutputStream();
// 输出图象到页面
ImageIO.write(image, "JPEG", response.getOutputStream());
output.flush();
output.close();
}
// Process the HTTP Post request
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
Color getRandColor(int fc, int bc) {// 给定范围获得随机颜色
Random random = new Random();
if (fc > 255)
fc = 255;
if (bc > 255)
bc = 255;
int r = fc + random.nextInt(bc - fc);
int g = fc + random.nextInt(bc - fc);
int b = fc + random.nextInt(bc - fc);
return new Color(r, g, b);
}
}
分享到:
相关推荐
本项目“ValidateForm”使用Java的JSP(JavaServer Pages)和Servlet技术进行简单的表单验证,旨在帮助初学者理解如何在服务器端处理和验证用户提交的数据。 一、JSP简介 JSP是一种动态网页技术,它允许开发者将...
在这些页面中,通过设置表单的`action`属性,我们可以指定请求发送到哪个Servlet进行处理。 4. **转账流程**: - 用户通过JSP页面输入账号和密码登录,点击“登陆”按钮,表单数据通过POST方法提交到Servlet。 - ...
这个页面通常包含`<form>`标签,它的`action`属性指向处理注册的Servlet,`method`属性设置为"POST",以匹配Servlet中的`doPost`方法。在表单中,我们可以使用`<input>`标签来创建输入字段,如用户名、密码、邮箱等...
前端使用HTML、CSS和JavaScript(如jQuery和jQuery Validate插件)创建和验证表单,后端(如Servlet)负责处理验证后的数据,如果验证失败,则返回错误信息供前端显示。整个过程确保了数据的有效性和安全性,提高了...
开发者可能会使用`<form>`标签创建表单,`<input>`标签定义输入字段,`<button>`提交表单,同时可能还会利用EL(Expression Language)和JSTL(JavaServer Pages Standard Tag Library)简化页面逻辑。 **2. ...
Servlet是Java Web开发中的一个核心组件,主要用于处理HTTP请求并生成响应。在本场景中,我们讨论的是如何使用Servlet实现用户登录功能。这个过程通常包括从客户端接收数据、验证数据以及向客户端返回结果。 首先,...
在表单验证场景中,`Filter`可以在用户提交表单后对请求进行拦截,检查数据的有效性,然后决定是否允许请求继续传递到目标资源(如Servlet或JSP页面)。 1. **创建Filter**: 首先,我们需要创建一个实现了`javax....
通过`<form>`标签接收用户输入,然后通过`action`属性将请求提交给Servlet进行处理。 2. **JavaBean**:JavaBean是一种符合JavaBeans规范的Java类,通常用于封装数据和业务逻辑。在用户注册场景下,我们可以创建一...
在服务器端,JSP会被转换为Servlet,然后编译成字节码执行。JSP中的Java代码可以用于控制页面逻辑,如数据处理和显示。例如,在注册和登录功能中,JSP可能包含表单元素,用户输入的数据可以通过`<form>`标签提交到...
在JSP中,可以使用`<form>`标签定义表单,`<input>`标签创建输入字段,然后通过`action`属性指定提交的Servlet。登录验证通常在Servlet中完成,对比用户输入与数据库中的记录。 2. **Servlet注册**: 用户注册过程...
通过这个实验,你可以深入理解Servlet过滤器的工作方式,以及如何在实际应用中利用它们来增强安全性、进行数据校验或实现其他功能。同时,这也是实践HTML5登录表单和Servlet交互的好机会。记得在编码时遵循良好的...
<form action="RegisterServlet" method="post"> 用户名:<input type="text" name="username"><br> 密码:<input type="password" name="password"><br> 确认密码:...
当用户点击登录按钮,前端的表单数据会被发送到后台的Servlet,Servlet验证这些数据并调用相应的业务逻辑。然后,Servlet可能会重定向或转发到一个JSP页面,JSP根据后台处理的结果动态生成页面内容。 5. **安全性...
例如,可以使用`<c:forEach>`遍历列表,`<c:if>`进行条件判断,`<form:form>`处理表单提交等。 8. **Ajax异步请求**:为了提升用户体验,部分功能可能采用Ajax技术,如搜索书籍、添加书籍到购物车等,这样可以在不...
开发者会定义`<form>`标签来接收用户输入,通过`<jsp:include>`或`<jsp:forward>`指令将请求转发给Servlet进行处理。 2. **Servlet**: Servlet是Java Web应用中的核心组件,负责处理HTTP请求并生成响应。在这个QQ...
### Struts2 OGNL 表单提交问题详解 #### 一、背景介绍 Struts2框架作为一款流行的企业级应用开发框架,在处理MVC架构方面有着独特的优势。其中,OGNL (Object-Graph Navigation Language) 作为一种强大的表达式...
2. **错误校验**:添加错误校验码,提高二维码在部分损坏情况下的可读性。常用的有RS(Reed-Solomon)错误纠正算法。 3. **模块分配**:将编码后的二进制数据分配到二维码的像素矩阵中,形成黑白相间的图形。 4. *...
JSP还可以结合Servlet或MVC框架(如Spring MVC)来处理表单提交,实现更复杂的业务逻辑。 “交验”在Web开发中通常指校验或者验证,确保数据完整性和安全性。在Java源代码中,这可能涉及到异常处理、数据绑定和验证...
这通常在Servlet中实现,通过校验接收到的请求参数。 8. 验证框架:在实际开发中,可能会使用验证框架如Hibernate Validator或Apache Commons BeanUtils,它们提供了便捷的方法来进行复杂的验证,减少代码重复,...
表单提交后,后台JavaServlet或Filter会接收到请求,执行上述逻辑。同时,可以使用AJAX技术实现异步更新,提供更好的用户体验。 以下是一个简单的JSP表单示例: ```jsp ; charset=UTF-8" pageEncoding="UTF-8"%> ...