servlet实现网站 验证码

    把学到的知识与实际应用相结合,到网上查资料做的练习 

  

一 新建login.jsp

 

 

<%@page contentType="text/html; charset=gb2312" %>

<html>

<head><title>登录</title></head>

<script language='javascript'>

    function switchImage() {

     var image=document.getElementById('randomImage');

     image.src="ServletDemo/servlet/ImageServlet";

     return false;

       

</script>

 

<body>

 <form action="servlet/LoginServlet" method="post">

 姓名:<input type="test" name="UserName"><br>

 密码:<input type="password" name="Pwd"><br>

 验证码:<input type="text" size="10" name="ValCode">

 <img src="ServletDemo/servlet/ImageServlet" name="randomImage"><!-- 插入验证码图片 -->

 <a href="javascript:" onclick='return switchImage();'><font>看不清,换一张!</font></a>

 <br><input type="submit">

 </form>

</body>

</html>

 

 

二 建立ImageServlet.java

 

 

package com;

 

import java.io.IOException;

import java.io.PrintWriter;

import java.io.*;

import javax.servlet.http.*;

import javax.servlet.*;

import java.util.Random;

import java.awt.*;

import java.awt.image.*;

import javax.imageio.*;

 

public class ImageServlet extends HttpServlet {

 

 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("Expires",0);

  //获得输出的管道,BufferedImage里面的数据写到页面

  OutputStream out=response.getOutputStream();

  //定义缓存图片的高度与宽度

  int width=80,height=20;

  //分配一块内存存储图片

  BufferedImage image=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);

  //获得画笔

  Graphics g=image.getGraphics();

  //获得产生随机数对象

  Random random=new Random();

  //在分配的内存中画一个矩形

  g.fillRect(0, 0, width, height);

  //设置矩形内的字体格式

  g.setFont(new Font("Times New Roman",Font.ITALIC,18));

  //存储四位随机数

  String sRand="";

  for(int i=0;i<4;i++){

   //在获得小于10的一个随机数

   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)));

   //把产生的随机数画在矩形内, 20是高度,20*i+6 随机数的宽度

   g.drawString(rand, 20*i+6, 20);

  }

  request.getSession().setAttribute("valCode", sRand);

  g.dispose();

  //将产生的随机数写到client

  ImageIO.write(image,"JPEG",out);

 

 } 

 public void doPost(HttpServletRequest request, HttpServletResponse response)

   throws ServletException, IOException {

  doGet(request,response);

 }

 

}

 

 

三 配置web.xml

 

 <servlet>
  <servlet-name>ImageServlet</servlet-name>
  <servlet-class>com.ImageServlet</servlet-class>
 </servlet>
 
 <servlet-mapping>
  <servlet-name>ImageServlet</servlet-name>
  <url-pattern>/ServletDemo/servlet/ImageServlet</url-pattern>
 </servlet-mapping>

 

完毕!!!

 

 

 

四  网上有些关于效率的讨论

 

 

ImageIO.write(image, "JPEG", bos);  

这句效率极低...


try{
    com.sun.jimi.core.Jimi.putImage("image/jpeg", image4, out);
}catch(Exception e){
    e.printStackTrace();
}
速度快,需要使用Sun提供的包,独立;
下载地址,不知道现在是否换有效:http://java.sun.com/products/jimi/
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章