public class CheckCoderTool extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("image/jpeg");
//客户端那边处理好的4位验证码字符串
String c = (String) request.getSession().getAttribute("c");
int width = c.length() * 8 + 10;
int height = 16;
int startX = 5;
int startY = 12;
BufferedImage bi = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);
Graphics2D g = bi.createGraphics();
g.setColor(Color.GREEN);
g.setBackground(Color.black);
g.clearRect(0, 0, width, height);
g.drawString(c, startX, startY);
JPEGImageEncoder encoder = null;
JPEGEncodeParam param = null;
try {
encoder = JPEGCodec.createJPEGEncoder(response.getOutputStream());
param = encoder.getDefaultJPEGEncodeParam(bi);
param.setQuality(1f,false);
encoder.encode(bi);
} catch (Exception e) {
e.printStackTrace();
} finally {
bi = null;
g = null;
c = null;
encoder = null;
param = null;
}
System.out.println("试一试");
}
}
以上是一段验证码的代码,我想问有几个问题
1、response.getOutputStream()不是指这个bi吗里面的东西吗
2、param.setQuality(1f,false); 我知道这里是设置了图片的压缩的格式,1f就是无损了,但是false是什么参数,为什么是false不是true,我查看过api只找到这个接口方法,还没有实现的,看到参数的解释是力基准量化表,简直汗颜了。不明白啊
3、一般servlet返回到客户端如果是转发到另外的页面最后会写类似
RequestDispatcher rd=request.getRequestDispatcher("/index.jsp");
rd.forward(request, response);
这个代码最后会转发带index.jsp的,而我写的这个servlet代码,虽然最后用作验证码的图片输出,代码最上面也写了返回的类型
response.setContentType("image/jpeg");
最后输出到图片的引用地址,是不是这样就可以了,不用写其他了吗?
4、而且当所有对象设置为空时,程序是没有结束的,最后还能运行下面的“试一试”的字眼,当程序结束时应该报空才对啊,为什么还在客户端看到图片的,还有这个类什么时候会结束返回到客户端