java实现网页的验证码的改良版(火狐可点击刷新)

来源:互联网 发布:tomcat优化 编辑:程序博客网 时间:2024/05/16 16:09
util包package www.csdn.net.news.util;import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.image.BufferedImage;import java.util.Random;import javax.servlet.http.HttpSession;public class RandomImage {private final static int WIDTH = 100;private final static int HEIGHT = 30;public static Random rd = new Random();public static BufferedImage creatImage(HttpSession session) {// 在内存中创建图片BufferedImage image = new BufferedImage(WIDTH, HEIGHT,BufferedImage.TYPE_INT_BGR);// 得到图形上下文Graphics g = image.getGraphics();// 设置背景drawBackground(g);// 绘制边框drawBorder(g);// 绘制内容// 将验证码信息发送到当前页的session中String code=String.valueOf(drawContent(g));System.out.println("产生验证码======="+code);session.setAttribute("code", code);// 绘制干扰drawDisturb(g);return image;}private static String drawContent(Graphics g) {// TODO Auto-generated method stubString con = "qwertyuiopasdfgjklzxcvbnm1234567890QWERTYUIOPASDFGHJKLZXCVBNM";//用于显示StringBuffer sb = new StringBuffer();//用于验证StringBuffer st=new StringBuffer();for (int i = 0; i < 4; i++) {int index = rd.nextInt(con.length());char str = con.charAt(index);sb.append(str+" ");st.append(str);}g.setColor(getRandomColor(10, 100));g.setFont(new Font("Gungsuh", Font.BOLD, 20));g.drawString(sb.toString(), 15, 20);System.out.println(st+"=====================");return st.toString();}private static void drawDisturb(Graphics g) {// TODO Auto-generated method stubg.setColor(Color.blue);for (int i = 0; i < 2 * (WIDTH + HEIGHT); i++) {int x1 = rd.nextInt(WIDTH - 10);int y1 = rd.nextInt(HEIGHT - 10);/* * int x2 = rd.nextInt(WIDTH); int y2 = rd.nextInt(HEIGHT); */// /g.drawLine(x1+5, y1+5, x2-5, y2-5);g.setColor(getRandomColor(1, 255));g.drawOval(x1 + 5, y1 + 5, 1, 1);}}private static void drawBorder(Graphics g) {// TODO Auto-generated method stubg.setColor(Color.yellow);g.drawRect(0, 0, WIDTH - 2, HEIGHT - 2);}private static void drawBackground(Graphics g) {// TODO Auto-generated method stubg.setColor(getRandomColor(100, 255));g.fillRect(0, 0, WIDTH, HEIGHT);}// 生成随机图片颜色private static Color getRandomColor(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);}}servlet代码package www.csdn.net.news.servlet;import java.io.IOException;import javax.imageio.ImageIO;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import www.csdn.net.news.util.RandomImage;public class ImageServlet extends HttpServlet {/** *  */private static final long serialVersionUID = 1L;public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {System.out.println("imgservlet第一次被执行");// 通知浏览器以图片的方式打开          response.setContentType("image/jpeg");                          // 设置浏览器不要缓存          response.setIntHeader("expires", 0);          response.setHeader("cache-control", "no-cache");          response.setHeader("pragma", "no-cache");      System.out.println("imgservlet第二次被执行");    ImageIO.write(RandomImage.creatImage(request.getSession()), "jpeg", response.getOutputStream());}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {this.doGet(request, response);}}jsp代码<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%String path = request.getContextPath();String basePath = request.getScheme() + "://"+ request.getServerName() + ":" + request.getServerPort()+ path + "/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><base href="<%=basePath%>"><title>用户登录界面</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0"><meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">--><script type="text/javascript" src="../js/jquery-2.0.3.js"></script><script type="text/javascript" src="./js/getXmlRequest.js"></script><script type="text/javascript" src="./js/login.js"></script></head><body><div align="center"><div align="center"><form action="./login.do" method="post"><table border="1px" cellspacing="0" cellpadding="0"><tr><td>用户名</td><td><input type="text" id="name" name="name" value=""></td></tr><tr><td>密码</td><td><input type="password" id="pass" name="pass" value=""></td></tr><tr><td>身份</td><td><input type="radio" name="permission" value="admin"checked="checked" />管理员<input type="radio" name="permission"value="oper" />发布员</td></tr><tr><td>验证码</td><td><input type="text" id="inputCheck" name="inputCheck"value=""></td></tr><tr><td colspan="2" align="center"><img alt="验证码信息" id="code"src="./creatImage.do" /></td></tr><tr><td colspan="3" align="center"><input type="submit"value="登录" id="login"> <input type="hidden" name="oper"value="login" /></td></tr><tr><td colspan="3"><span id="errorMessage" style="font-size: 12px;color: red;"></span></td></tr></table></form></div></div></body></html>web.xml文件<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"id="WebApp_ID" version="3.0"><display-name>newsManager</display-name><servlet><servlet-name>LoginServlet</servlet-name><servlet-class>www.csdn.net.news.servlet.LoginServlet</servlet-class></servlet><servlet><servlet-name>ImageServlet</servlet-name><servlet-class>www.csdn.net.news.servlet.ImageServlet</servlet-class></servlet>  <servlet>    <servlet-name>NewsMainServlet</servlet-name>    <servlet-class>www.csdn.net.news.servlet.NewsMainServlet</servlet-class>  </servlet><servlet-mapping><servlet-name>LoginServlet</servlet-name><url-pattern>/login.do</url-pattern></servlet-mapping><servlet-mapping><servlet-name>ImageServlet</servlet-name><url-pattern>/creatImage.do</url-pattern></servlet-mapping>  <servlet-mapping>    <servlet-name>NewsMainServlet</servlet-name>    <url-pattern>/initData.do</url-pattern>  </servlet-mapping><welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list></web-app>

1 0
原创粉丝点击