下午在JAVAEYE逛了一会 手有点痒了 可是一时又不知道写点什么 于是想起来几个月前 有位网友问我的 网站的随机图片的生成的问题 当时没有太在意 因为这个东西没有深接触过 只是知道有这种轻量级的东西 况且网上一GOOGLE会有一大片 出于好奇 俺动手写了一写 写的DEMO级别的 超简单 好了 俺上代码
下面我说一下思路吧 首先是随机图片的生成过程 绘制出一定尺寸的图片,产生一组随机数,一般是4个。这里要记得 要把产生的随机数存入到session里面 因为后面的校验还要用到。校验的时候就是获取用户的输入的验证码与session里面已经存取的那个做比较,匹配 则放行。
首先是Login.jsp
<h1> 带有验证码的登录的页面</h1>
<form action="servlet/LogonServlet" method="post">
用户名 : <input type="text" name="name" /><br/>
密 码 : <input type="text" name="password" /><br/>
验证码 : <input type="text" name="check_code" />
<img src="servlet/CheckCodeServlet"><br/>
<input type="submit" value="登录"/>
然后是产生图片的Servlet CheckCodeServlet 写图片的样式绘制的时候比较郁闷 很少用 所以查了一会API 不过最后终于搞定 不过不是很漂亮。。。。随机生成120个干扰点
这个没有实现。。。
package com.blacklee.servlet;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
* Servlet implementation class CheckCodeServlet
*/
public class CheckCodeServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private static int WIDTH = 60;
private static int HEIGHT = 20;
/**
* @see HttpServlet#HttpServlet()
*/
public CheckCodeServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
HttpSession session = request.getSession();
response.setContentType("image/jpeg");
ServletOutputStream sos = response .getOutputStream();
//设置浏览器不要缓存图片
response .setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
//创建内存图像 并获得其上下文
BufferedImage image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);
Graphics g = image.getGraphics();
//产生随机的验证码
char[] rands = createCheckCode();
//产生图像
drawBackGround(g);
drawRands(g,rands);
//结束图像的绘制
g.dispose();
//将图像输出到客户端
ByteArrayOutputStream bos = new ByteArrayOutputStream() ;
ImageIO.write(image, "JPEG", bos);
byte[] buff = bos.toByteArray();
response.setContentLength(buff.length);
//写入到页面的输出流里面去 简单的写可以这样写 bos.writeTo(sos);
sos.write(buff);
bos.close();
sos.close();
//把当前生成的验证码存进session里面去
session.setAttribute("check_code", new String(rands));
}
private void drawRands(Graphics g, char[] rands) {
// TODO Auto-generated method stub
g.setColor(Color.BLACK);
g.setFont(new Font(null, Font.BOLD, 18));
//在不同的高度进行随机数的显示
g.drawString(""+rands[0], 1, 17);
g.drawString(""+rands[1], 16, 15);
g.drawString(""+rands[2], 31, 18);
g.drawString(""+rands[3], 46, 16);
}
private void drawBackGround(Graphics g) {
// TODO Auto-generated method stub
//画背景
g.setColor(new Color(0xDCDCDC));
g.fillRect(0, 0, WIDTH, HEIGHT);
//随机生成120个干扰点
}
private char[] createCheckCode() {
//定义验证码的字符集
String chars = "0123456789abcdefghigklmnopqrstuvwxyz";
char[] rands1 = new char[4];
for(int i = 0 ; i<4 ;i++){
rands1[i] = chars.charAt(new Random().nextInt(37));
}
return rands1;
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
然后是校验的servlet LogonServlet
package com.blacklee.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
* Servlet implementation class LogonServlet
*/
public class LogonServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public LogonServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.setContentType("text/html;charset=utf-8");
PrintWriter writer = response.getWriter();
HttpSession session = request.getSession(false);
if(session==null){
writer.println("验证码处理问题!!!!");
return ;
}
String saveCode = (String) session.getAttribute("check_code");
if(saveCode==null){
writer.println("验证码处理问题!!!");
return ;
}
String checkCode = request.getParameter("check_code");
if(!saveCode.equals(checkCode)){
writer.println("验证码错误");
return ;
}
session.removeAttribute("check_code");
writer.println("验证通过服务器正在校验用户名和密码");
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
程序到了这里大体上就完成了 很简单的一个demo
分享到:
相关推荐
JSP生成随机的验证码图片,Servlet负责验证,Ajax和jQuery提供无刷新的交互体验,共同确保了Web应用的安全性。这种实现方式对于初学者了解Web开发中的关键概念和技术栈,以及在实际项目中应用这些技术,都是很有价值...
验证码通常是一串随机生成的字符,用户需要在提交表单前正确输入。在JavaWeb中,可以使用JavaScript生成验证码并在客户端显示,同时在服务器端验证用户的输入是否匹配。 EL(Expression Language)表达式和JSTL...
2. **随机数生成**:利用Java的`java.util.Random`类生成随机字符和颜色。我们可以定义一个字符集,然后从中随机选择字符;同样,也可以生成随机颜色代码来给文字上色。 3. **扭曲与噪点**:为了增加机器识别的难度...
3. **业务逻辑**:这部分代码负责处理购彩逻辑,如验证用户的投注、生成随机号码、计算奖金等。对于双色球游戏,其规则包括6个红球和1个篮球,红球范围从1到33,蓝球范围从1到16。Java可以使用随机数生成器来模拟...
在JSP中,我们可以使用Java的`java.util.Random`类来生成随机数字或字符,然后通过`java.awt`和`javax.imageio`包中的类来绘制验证码图像。例如,创建一个`BufferedImage`对象,设定其宽度和高度,使用`Graphics2D`...
2. **配置`web.xml`**:在`<web-app>`标签内添加`KaptchaServlet`的servlet配置,指定生成的验证码图片的URL映射。 3. **创建`KaptchaProducer`实例**:在Java代码中,可以通过`KaptchaFactory`获取`...
当用户通过浏览器访问这个页面时,服务器端的JSP代码会被执行,生成一个随机的验证码图像和相应的验证字符串。这个验证码图像会显示在用户界面上,用户需要输入看到的文字或数字以完成验证。 验证码的实现通常涉及...
在JSP中,可以结合Servlet和Java图形库(如Java2D)生成随机的字符组合,并将其转化为图片。服务器端会存储这个随机字符串作为用户输入验证的参考,客户端则显示图片并让用户输入看到的验证码。图片的刷新可以通过...
此处的验证码可能通过一个单独的Java类生成,该类可能包含随机字符生成和图片绘制等方法,用户输入的验证码需要与服务器端生成的验证码匹配。 4. **Servlet处理**:在后端,`/UserLogin/Sample1/loginServlet`会被...
它提供了基本的验证码功能,包括生成随机文本、添加噪声、扭曲等。 使用SimpleCaptcha的基本流程: 1. 引入SimpleCaptcha库。 2. 创建一个SimpleCaptcha对象,设置长度、宽度、字体等参数。 3. 使用SimpleCaptcha...
- **实现**:通常包括生成随机验证码、调用第三方语音服务API、播放验证码给用户以及验证用户输入的验证码是否正确。 - **接口设计**:JSP中的接口通常以HTTP请求的方式暴露,通过GET或POST方法接收请求,返回语音...
它提供了生成随机文本和图像验证码的功能,可以有效地防止机器人或爬虫进行非法操作,如注册、登录等。这款组件以其易用性和灵活性受到开发者的青睐。 首先,我们需要在项目中引入SimpleCaptcha的相关依赖。如果是...
在该服务中,我们可以使用Hutool的`Captcha`类来生成随机的图形验证码。 ```java import cn.hutool.core.io.IoUtil; import cn.hutool.core.util.RandomUtil; import cn.hutool.image.ImageType; import ...
在SSH项目中,通常使用Servlet或JavaServer Pages(JSP)生成随机的图像验证码,并将其与服务器端的一个临时变量关联。客户端提交表单时,服务器会验证输入的验证码是否与服务器端保存的值匹配。如果匹配,则验证...
它生成和验证随机图像验证码,以确保用户是人类。 5. **其他实用工具库**:描述中提到了“一些功能可能用的包”,这可能包括Apache Commons、Google Guava等通用的Java工具库,它们提供了许多方便的类和方法,如...
7. **动态网页生成**:JSP会将Java代码编译成Servlet,每次请求时,Servlet生成响应内容并返回给客户端,实现了动态网页的生成。 8. **考试功能实现**:可能包括创建和编辑试卷、设置考试时间限制、随机抽题、防...
- 存储文件时使用随机生成的文件名,防止文件名冲突。 - 对上传的文件进行验证,确保它们是安全的。 综上所述,Java中的文件上传涉及到HTTP协议的理解,Servlet API的使用,以及可能的第三方库的集成。掌握这些...
【基于JSP的在线考试系统】是一个利用JavaServer Pages(JSP)技术构建的Web应用程序,主要用于实现在线考试的功能。这种系统通常包含用户管理、考试发布、试题库管理、考生答题、自动评分以及成绩查询等一系列模块...
3. 试卷生成与发布:系统根据教师设定的参数(如总分、题数、难度等)随机组合题目,生成试卷。试卷可以设置不同的开放时间、考试时长和提交限制。 4. 在线答题:学生在规定时间内登录系统,完成在线答题。系统可能...