解决方案 »

  1.   

    更正下第二段代码:
     try {     ResultSet rs = t.search(sqll);     while (rs.next()) {
         oracle.sql.BLOB blob = (oracle.sql.BLOB)rs.getBlob("MP_PICTURE");
         inputimage = new BufferedInputStream(blob.getBinaryStream());
         }
         } catch (Exception ex) {
         System.out.println("blobRead()'s exception"+ex);
         throw ex;
         }
          BufferedImage image = null;
         try{
         image = ImageIO.read(inputimage);
         }catch(IOException e){
         System.out.println(e);
         }
         ServletOutputStream sos = response.getOutputStream();
         JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(sos);
         encoder.encode(image);
         inputimage.close();
    问题还未解决,着急!!
      

  2.   

    在 Servlet 编程,你不能两次去 response 中拿 response.getOutputStream() 或 response.getWriter(),
    因为你拿了之后,服务器容器已经准备更新了一些 HTTP HEAD 参数了,你再去拿就有问题了,它不会再去更新了,正常的情况下我们第2次尝试时会得到 IllegalStateException / 500 错误,因此在你输出文字和图片之间你不能 close ()。就算我们程序从来不去 close 也不会出错,因为服务器知道什么时候 close,哪怕我们忘记了也没有关系,服务器在与客户端交互时知道 HTTP 协议的规范要求它怎么做。
      

  3.   


    具体应该怎么解决呢,只要把读取文字和读取图片之间的CLOSE去掉就行了么?
      

  4.   


    那个,我在读取文字的时候没有用到response啊,只是最后CLOSE了一个结果集,response只是用在了读取图片的时候,最后CLOSE了一个BufferedInputStream,一共用到这两个,如果删除上面的CLOSE,应该没什么影响啊,我把两个CLOSE都去掉了,结果还是一样,本应该没用RESPONSE显示的文字还是没有,只有显示的图片,那么文字到底哪里去了呢,我笨。。还望赐教
      

  5.   


    那个,我在读取文字的时候没有用到response啊,只是最后CLOSE了一个结果集,response只是用在了读取图片的时候,最后CLOSE了一个BufferedInputStream,一共用到这两个,如果删除上面的CLOSE,应该没什么影响啊,我把两个CLOSE都去掉了,结果还是一样,本应该没用RESPONSE显示的文字还是没有,只有显示的图片,那么文字到底哪里去了呢,我笨。。还望赐教PS:图片和文字分别在两张表里
      

  6.   

    看了一下你的 JSP 为什么直接写图片的二进制字节,你的 <image ... > 这些东西哪儿去了?平时一个 html 中会是 <image src="http://.../abc.jpg" /> 这样的写法。你在浏览器中看到收到服务器的东西是什么样的?如果你需要直接把图片内容嵌入在浏览器的 html 中需要像这样:
    <image src="data:image/jpg;base64,iVBORw0KGgoAAAANSUhEU...gAAASwAAAAmCC" />
    把你的二进制内容先编码成 base64 纯文本,贴在后面。
      

  7.   


    我没有用IMG,我看到的是直接左上角一张图片。
      

  8.   

    你先了解怎么写一个正确的 html 网页。
    以及一个网页显示出来时浏览器与服务器之间做了哪些事。
    正确的网页大概是:<html>
    <body>
      <!-- 你的文字内容在这里 --> <img src="data:image/jpg;basr64; iVBORw0KGgoAAAANSUhEU...gAAASwAAAAmCC" />
    </body>
    </html>
    要想一个 request 就把文字和图片都返回给客户端只能这样做,否则你需要2个 request 来做,这个 ./loadData.jsp?getPicture=1234 将导致浏览器再发送第2个 request 去服务器,这次只拿图片:
    <html>
    <body>
      <!-- 你的文字内容在这里 -->
     <img src="./loadData.jsp?getPicture=1234" />
    </body>
    </html>