欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

java实现验证码完整版,java验证码完整版,第一步:在web.xml

来源: javaer 分享于  点击 9743 次 点评:124

java实现验证码完整版,java验证码完整版,第一步:在web.xml


第一步:在web.xml中配置servlet ```xml <servlet>
<servlet-name>ImageServlet</servlet-name>
<servlet-class>org.servlet.ImageServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ImageServlet</servlet-name>
<url-pattern>/ImageServlet</url-pattern>
</servlet-mapping>

第二步: ImageServlet 实现```java    import javax.servlet.ServletException;      import javax.servlet.http.HttpServlet;      import javax.servlet.http.HttpServletRequest;      import javax.servlet.http.HttpServletResponse;      import com.farm.web.tool.RandomValidateCode;      public class ImageServlet extends HttpServlet {          private static final long serialVersionUID = 1L;          public void doGet(HttpServletRequest request, HttpServletResponse response)                  throws ServletException, IOException {              response.setContentType("image/jpeg");// 设置相应类型,告诉浏览器输出的内容为图片              response.setHeader("Pragma", "No-cache");// 设置响应头信息,告诉浏览器不要缓存此内容              response.setHeader("Cache-Control", "no-cache");              response.setDateHeader("Expire", 0);              RandomValidateCode randomValidateCode = new RandomValidateCode();              try {                  randomValidateCode.getRandcode(request, response);// 输出图片方法              } catch (Exception e) {                  e.printStackTrace();              }          }          public void doPost(HttpServletRequest request, HttpServletResponse response)                  throws ServletException, IOException {              doGet(request, response);          }      }  
    import java.awt.Color;      import java.awt.Font;      import java.awt.Graphics;      import java.awt.image.BufferedImage;      import java.util.Random;      import javax.imageio.ImageIO;      import javax.servlet.http.HttpServletRequest;      import javax.servlet.http.HttpServletResponse;      import javax.servlet.http.HttpSession;      public class RandomValidateCode {          public static String validateCode = null;          public static final String RANDOMCODEKEY = "RANDOMVALIDATECODEKEY";// 放到session中的key          private Random random = new Random();          private String randString = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";// 随机产生的字符串          private int width = 80;// 图片宽          private int height = 26;// 图片高          private int lineSize = 40;// 干扰线数量          private int stringNum = 4;// 随机产生字符数量          /*          * 获得字体          */          private Font getFont() {              return new Font("Fixedsys", Font.CENTER_BASELINE, 18);          }          /*          * 获得颜色          */          private Color getRandColor(int fc, int bc) {              if (fc > 255)                  fc = 255;              if (bc > 255)                  bc = 255;              int r = fc + random.nextInt(bc - fc - 16);              int g = fc + random.nextInt(bc - fc - 14);              int b = fc + random.nextInt(bc - fc - 18);              return new Color(r, g, b);          }          /**          * 生成随机图片          */          public void getRandcode(HttpServletRequest request,                  HttpServletResponse response) {              HttpSession session = request.getSession();              // BufferedImage类是具有缓冲区的Image类,Image类是用于描述图像信息的类              BufferedImage image = new BufferedImage(width, height,                      BufferedImage.TYPE_INT_BGR);              Graphics g = image.getGraphics();// 产生Image对象的Graphics对象,改对象可以在图像上进行各种绘制操作              g.fillRect(0, 0, width, height);              g.setFont(new Font("Times New Roman", Font.ROMAN_BASELINE, 18));              g.setColor(getRandColor(110, 133));              // 绘制干扰线              for (int i = 0; i <= lineSize; i++) {                  drowLine(g);              }              // 绘制随机字符              String randomString = "";              for (int i = 1; i <= stringNum; i++) {                  randomString = drowString(g, randomString, i);              }              session.removeAttribute(RANDOMCODEKEY);              session.setAttribute(RANDOMCODEKEY, randomString);              validateCode = randomString.toUpperCase();              g.dispose();              try {                  ImageIO.write(image, "JPEG", response.getOutputStream());// 将内存中的图片通过流动形式输出到客户端              } catch (Exception e) {                  e.printStackTrace();              }          }          /*          * 绘制字符串          */          private String drowString(Graphics g, String randomString, int i) {              g.setFont(getFont());              g.setColor(new Color(random.nextInt(101), random.nextInt(111), random                      .nextInt(121)));              String rand = String.valueOf(getRandomString(random.nextInt(randString                      .length())));              randomString += rand;              g.translate(random.nextInt(3), random.nextInt(3));              g.drawString(rand, 13 * i, 16);              return randomString;          }          /*          * 绘制干扰线          */          private void drowLine(Graphics g) {              int x = random.nextInt(width);              int y = random.nextInt(height);              int xl = random.nextInt(13);              int yl = random.nextInt(15);              g.drawLine(x, y, x + xl, y + yl);          }          /*          * 获取随机的字符          */          public String getRandomString(int num) {              return String.valueOf(randString.charAt(num));          }      }  

第三步:jsp展现```xml <tr>
<td>
<div align="right">
验证码:
</div>
</td>
<td>
<input style="width: 65px" id="validatecode" name="validatecode" type="text" />
</td>
<td>
<img title="看不清楚,换一张?" style="cursor: pointer;"
onclick="javascript:refresh(this);"
src="<PF:basePath/>/ImageServlet">
</td>
</tr>

src路径根据情况修改 ```javascript    function refresh(obj) {          obj.src = "<PF:basePath/>/ImageServlet?"+Math.random();        }  

第四步:Action验证 javaif(RandomValidateCode.validateCode!=null&amp;&amp;validatecode.trim().toUpperCase().equals(RandomValidateCode.validateCode)){ System.out.println("验证码正确"); }

相关栏目:

用户点评