麻烦各位帮忙看看这个java代码,急急急急啊,有一部分不会

 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、而且当所有对象设置为空时,程序是没有结束的,最后还能运行下面的“试一试”的字眼,当程序结束时应该报空才对啊,为什么还在客户端看到图片的,还有这个类什么时候会结束返回到客户端

结贴吧............................