1. 生成验证码的servlet类
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.io.PrintWriter;
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;
import com.***.constant.Constant;
public class ImageValidate extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 2198678289097775859L;
/**
* Constructor of the object.
*/
public ImageValidate() {
super();
}
/**
* Destruction of the servlet. <br>
*/
public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
}
private String name;
/**
* The doGet method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to get.
*
* @param request
* the request send by the client to the server
* @param response
* the response send by the server to the client
* @throws ServletException
* if an error occurred
* @throws IOException
* if an error occurred
*/
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,
IOException {
OutputStream outputStream = null;
try {
outputStream = response.getOutputStream();
// 在内存中创建图象
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.CENTER_BASELINE, 18));
// 画边框
// g.setColor(new Color());
// g.drawRect(0,0,width-1,height-1);
// 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到
g.setColor(getRandColor(160, 200));
for (int i = 0; i < 40; 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);
}
// 将认证码存入SESSION
HttpSession session=request.getSession();
session.setAttribute(Constant.LOGIN_VALIDATE_IMAGE, sRand);
// 图象生效
g.dispose();
// 输出图象到页面
ImageIO.write(image, "JPEG",outputStream);
outputStream.flush();
} catch (Exception e) {
e.printStackTrace();
}finally{
outputStream.close();
}
}
/**
* 给定范围获得随机颜色
*
* @param fc
* @param bc
* @return
*/
private static 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);
}
/**
* The doPost method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to
* post.
*
* @param request
* the request send by the client to the server
* @param response
* the response send by the server to the client
* @throws ServletException
* if an error occurred
* @throws IOException
* if an error occurred
*/
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException,
IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println(" <BODY>");
out.print(" This is ");
out.print(this.getClass());
out.println(", using the POST method");
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
}
/**
* Initialization of the servlet. <br>
*
* @throws ServletException
* if an error occure
*/
public void init() throws ServletException {
// Put your code here
}
}
2.web.xml 配置
<servlet>
<servlet-name>ImageValidate</servlet-name>
<servlet-class>com.***.web.servlet.ImageValidate</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ImageValidate</servlet-name>
<url-pattern>/servlet/imageValidate</url-pattern>
</servlet-mapping>
3.页面调用
<div class="login-tr">
<div class="login-td-1 ft-sz-12 ft-cl-n">验证码:</div>
<div class="login-td-2"><input type="text" class="tt-text-yz tt-text" name="validateCode">
<span>
<img id="imgValidateCode" src="${BasePath}/servlet/imageValidate" width="55" height="20" align="top" border="0" style="cursor:hand"/>
</span>
<a href="javascript:reloadCode();">看不清?</a></div>
</div>
分享到:
相关推荐
java web笔记之servlet生成验证码java web笔记之servlet生成验证码
java代码生成验证码(servlet).送给需要的人吧。
验证码是每个网站必不可少的要素...此代码就是用servlet生成随机生成验证码
j a v a 服 务 器 端 Servlet 验 证 码 的 生 成 代 码
正在学习Java,在教程书和网上不断的学习。servlet 提供了 Java 强大的 web 交互,在这个小项目中,我用servlet 实现了在web上生成验证码的功能,正在入门Java的同学不妨试试。
java生成验证码代码 主要:一个生成验证码的servlet,一个jsp页面,另外还需要配置下web.xml即可
java生成图片验证码
Java servlet 自动生成 图片验证码 生成 Java源码
Java生成图片验证码 Java代码
生成验证码图片 java类中获得验证码的方法: session.getAttribute("checkcode"); jsp页面中显示图片的方式: ${pageContext.request.contextPath}/checkcode.jsp"/> 另外在web.xml中配置验证码类的加载: ...
java 动态 gif 验证码 工具类 + servlet调用方法 + 测试jsp
Servlet动态生成验证码,运行Tomcat在浏览器输入地址即可。
有个小demo可以看。用到servlet来实现。
java后台根据随机数生成验证码,js调用,点击可以换验证码。测试效果:完全正常使用,Servlet能获取生成的验证码和用户输入的验证码。
通过servlet生成一个验证码图片,加载在页面的img标签中,通过js方法点击事件来控制。
一个小的例子,里面有纯4位数字验证码,还有大小写字母和数字混合验证码,帮助各位理解验证码的生成原理
利用java开源组件及servlet实现生成验证码
在servlet中动态生成验证码图片,可被JSP或servlet引用,每次刷新都会改变验证码
该类是一个专门生成验证码的工具类,完全自定义,简单易懂,下载即可使用