验证码

------verifycode.java


package cn.e3testmall.controller;


import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Random;


import javax.imageio.ImageIO;


public class VerifyCode {
private int w = 70;
private int h = 35;
  private Random r = new Random();
private String[] fontNames  = {"宋体", "华文楷体", "黑体", "华文新魏", "华文隶书", "微软雅黑", "楷体_GB2312"};
private String codes  = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
private Color bgColor  = new Color(240, 240, 240);
private String text ;

private Color randomColor () {
int red = r.nextInt(256);
int green = r.nextInt(256);
int blue = r.nextInt(256);
return new Color(red, green, blue);
}

private Font randomFont () {
int index = r.nextInt(fontNames.length);
String fontName = fontNames[index];
int style = r.nextInt(4);
int size = r.nextInt(5) + 24; 
return new Font(fontName, style, size);
}

private void drawLine (BufferedImage image) {
int num  = 5;
Graphics2D g2 = (Graphics2D)image.getGraphics();
for(int i = 0; i < num; i++) {
int x1 = r.nextInt(w);
int y1 = r.nextInt(h);
int x2 = r.nextInt(w);
int y2 = r.nextInt(h); 
g2.setStroke(new BasicStroke(1.5F)); 
g2.setColor(Color.BLUE); 
g2.drawLine(x1, y1, x2, y2);
}
}

private char randomChar () {
int index = r.nextInt(codes.length());
return codes.charAt(index);
}

private BufferedImage createImage () {
BufferedImage image = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB); 
Graphics2D g2 = (Graphics2D)image.getGraphics(); 
g2.setColor(this.bgColor);
g2.fillRect(0, 0, w, h);
  return image;
}

public BufferedImage getImage () {
BufferedImage image = createImage(); 
Graphics2D g2 = (Graphics2D)image.getGraphics();
StringBuilder sb = new StringBuilder();
// 向图片中画4个字符
for(int i = 0; i < 4; i++)  {
String s = randomChar() + ""; 
sb.append(s); 
float x = i * 1.0F * w / 4; 
g2.setFont(randomFont()); 
g2.setColor(randomColor()); 
g2.drawString(s, x, h); 
}
this.text = sb.toString(); 
drawLine(image); 
return image;
}

public String getText () {
return text;
}

public static void output (BufferedImage image, OutputStream out) 
throws IOException {
ImageIO.write(image, "JPEG", out);
}
}


----------------------------------------------------------------------------------

---VerifyCodeServlet.java


String name = request.getParameter("name");

VerifyCode vc = new VerifyCode();//创建验证码类
BufferedImage image  = vc.getImage();//创建验证码图片
request.getSession().setAttribute(name, vc.getText());//获取验证码文本
System.out.println(vc.getText());
VerifyCode.output(image, response.getOutputStream());//输出图片到页面


-----------------------------------------------------------------------

---login.jsp


<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>regist.jsp</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">    
    
    <script type="text/javascript">
    function _change() {
    var img = document.getElementById("vCode");
    img.src = "<c:url value='/VerifyCodeServlet?name=loginCode&'/>" + new Date().getTime();
    }
    </script>
  </head>
  
  <body>
    <h1>登录</h1>
    <hr/>
    <p style="font-weight: 900; color: red;">${msg }</p>
    <form action="<c:url value='/LoginServlet'/>" method="post">
    用户名:<input type="text" name="username" value="${user.username }" /><br/>
    密 码:<input type="password" name="password"/><br/>
    验证码:<input type="text" name="loginCode" size="2"/>
    <img id="vCode" src="<c:url value='/VerifyCodeServlet?name=loginCode'/>" border="2"/>
    <a href="javascript:_change()" style="font-size: 12;">看不清,换一张</a><br/>
        <input type="submit" value="登录"/>
    </form>
  </body>
</html>

-----------------------------------------------

--regist.jsp


<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>regist.jsp</title>  
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">    
    
    <script type="text/javascript">
function _change() {
var img = document.getElementById("vCode");
img.src = "<c:url value='/VerifyCodeServlet?name=registCode&'/>" + new Date().getTime();
}
    </script>
  </head>
  
  <body>
    <h1>注册</h1>
    <hr/>
    <p style="font-weight: 900; color: red;">${msg }</p>
    <form action="<c:url value='/RegistServlet'/>" method="post">
    用户名:<input type="text" name="username" value="${user.username }" /><br/>
    密 码:<input type="password" name="password"/><br/>
    确认密码:<input type="password" name="repassword"/><br/>
    验证码:<input type="text" name="registCode" size="2"/>
    <img id="vCode" src="<c:url value='/VerifyCodeServlet?name=registCode'/>" border="2"/>
    <a href="javascript:_change()" style="font-size: 12;">看不清,换一张</a><br/>
        <input type="submit" value="注册"/>
    </form>
   
  </body>
</html>


--------------------------------

--index.jsp


<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>login.jsp</title>
  </head>
  
  <body>
    <h1>主页</h1>
    <hr/>
<c:choose>
<c:when test="${empty sessionScope.user }">
您还没有登录
</c:when>
<c:otherwise>
用户名:${sessionScope.user.username }
<a href="<c:url value='/QuitServlet'/>">退出</a>
</c:otherwise>
</c:choose>
  </body>
</html>






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值