servlet学习笔记1-输出验证码

新建一个servlet,必须在web.xml里配置相应的参数:

  <servlet>
      <servlet-name>HelloServlet</servlet-name>
      <servlet-class>swun.phk.paomo.TestServlet</servlet-class>
  </servlet>
  <servlet-mapping>
      <servlet-name>HelloServlet</servlet-name>
      <url-pattern>/servlet/HelloServlet</url-pattern>
  </servlet-mapping>

servlet标签用来声明servlet类。servlet-name表示server的名字,在web.xml种必须是唯一的。servlet-class表示servlet的类名。

servlet-mapping用来将路径映射到对应的servlet上,一个servlet可以对应多个路径。路径可以使用通配符,'*'表示任意长度的字符串,'?'表示任意字符。

可以通过servlet-mapping来隐藏编程语言。

 

servlet可以通过获取request中的变量来获取用户信息,可以以此作为用户信息库的来源。

 

接下来实现用response来输出验证码图片:

package swun.phk.paomo;

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

import javax.jws.soap.InitParam;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.sun.image.codec.jpeg.ImageFormatException;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGDecodeParam;
import com.sun.image.codec.jpeg.JPEGEncodeParam;
import com.sun.image.codec.jpeg.JPEGImageEncoder;

/**
 * Servlet implementation class IdentityServlet
 */
@WebServlet(
        description = "用来生成验证码", 
        urlPatterns = { "/IdentityServlet" }, 
        initParams = { 
                @WebInitParam(name = "contextType", value = "image/jpeg", description = "内容为验证码图片")
        })
public class IdentityServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    final  static int len = 4;
    
    final static String ct="contextType";
    
    public static Random random = new Random();
    
    
    public static char getChar(){
        int x = random.nextInt(36);
        if(x < 10)    return (char) (x+'0');
        else        return (char)(x-10+'A');
    }
    
    public static String getString(){
        StringBuffer sb = new StringBuffer();
        for(int i = 0; i < len;i++){
            sb.append(getChar());
        }
        return sb.toString();
    }
    
    public static Color getColor(){
        return new Color(random.nextInt(255),random.nextInt(255),random.nextInt(255));
    }
    
    public static Color getRevColor(Color c){
        return new Color(255-c.getRed(),255-c.getGreen(),255-c.getBlue());
    }
    
    public IdentityServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        response.setContentType(this.getInitParameter(ct));    //设置输出类型
        
        String randString = getString();    //获取随机字符串
        int height = 40;                    //设置图片大小
        int width  = 120;
        Color cFront = getColor();    //获取颜色,作为字体颜色
        Color cBack  = getRevColor(cFront);//获取颜色,作为背景色
        BufferedImage bi  = new BufferedImage(width, height, BufferedImage.TYPE_3BYTE_BGR);    //创建图片
        Graphics2D g = bi.createGraphics();    //获取绘图对象
        g.setFont(new Font(Font.SERIF,Font.BOLD,20));
        g.setColor(cBack);    //设置背景颜色
        g.fillRect(0, 0, width, height);//绘制背景
        g.setColor(cFront);//设置字体颜色
        g.drawString(randString,18,20);//绘制随机验证码
        
        ServletOutputStream out = response.getOutputStream();
        JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);//新建一个编码器,用于对数据编码
        
        encoder.encode(bi);//编码
        out.flush();//输出
        out.close();
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
    }

}

 

posted @ 2014-03-16 20:28  phk52  阅读(146)  评论(0)    收藏  举报