java登录的验证码

来源:互联网 发布:单机版销售软件 编辑:程序博客网 时间:2024/04/29 05:04

1、创建一个servlet取名为LoginServlet,将url mappings设置成"/servlet/LogiServlet"


2、在web.xml文件中加入

<servlet>
    <servlet-name>ImageServlet</servlet-name>
    <servlet-class>com.test.oa.web.login.action.LoginServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>ImageServlet</servlet-name>
    <url-pattern>/servlet/LoginServlet</url-pattern>
  </servlet-mapping>

3、在loginservlet中做如下处理:

@WebServlet("/servlet/LoginServlet")
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;

    public LoginServlet() {
        super();
    }


protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}


protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
BufferedImage img = new BufferedImage(68, 22, BufferedImage.TYPE_INT_RGB);
//得到该图片的绘图对象
Graphics g = img.getGraphics();
Random r = new Random();
Color c = new Color(200,150,225);
g.setColor(c);
//填充整个图片的颜色
g.fillRect(0, 0, 68, 22);
//向图片中输出数字和字母
StringBuffer sb = new StringBuffer();
char[] ch = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".toCharArray();
int index,len = ch.length;
for (int i = 0; i < 4; i++) {
index = r.nextInt(len);
g.setColor(new Color(r.nextInt(88),r.nextInt(188),r.nextInt(225)));
g.setFont(new Font("Arial",Font.BOLD | Font.ITALIC,22));//输出的字体和大小
g.drawString("" + ch[index], (i * 15)+3, 18);//写什么数字,在图片的什么位置画
sb.append(ch[index]);
}
request.getSession().setAttribute("piccode", sb.toString());
ImageIO.write(img, "JPG", response.getOutputStream());
}
}

在jsp文件上加入

<tr><td class="left">验&nbsp;证&nbsp;码:</td>
<td class="right"><input type="text" id="verifycode" name="verifycode" />
<img alt="验证码" id="safecode" src="<%=request.getContextPath()%>/servlet/LoginServlet" />
</td>
</tr>

重载验证码:

//重载验证码
function reloadVerifyCode(){
var timenow = new Date().getTime();
document.getElementById("safecode").src = "<%=request.getContextPath()%>/servlet/LoginServlet?d="+timenow;
}