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 } }

浙公网安备 33010602011771号