救命呀!关于从数据库读取Word文档(BLOB)在JSP页面显示

来源:互联网 发布:js中的tip 编辑:程序博客网 时间:2024/06/05 18:48

页面输出乱码,但文件写入正确。(运行环境:WebLogic6.1+Jdk1.3.1+WinXP)  
  <%@   page   language="java"   import="java.sql.*,java.util.*"%>  
  <%  
        String   image_id   ="2"   ;  
        int   imglen=0;  
        try   {  
            Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();  
            String   url="jdbc:oracle:thin:@89.0.0.224:1521:bi";  
            //orcl为你的数据库的SID  
            String   user="system";  
            String   password="manager";  
            Connection   conn=   DriverManager.getConnection(url,user,password);  
            Statement   stmt   =   conn.createStatement();  
            ResultSet   rs   =   stmt.executeQuery("select   test   from   tab_test1   where   id=2");  
            if   (rs.next())  
            {  
                oracle.sql.BLOB   m_blob=(oracle.sql.BLOB)   rs.getBlob(1);  
                  int   length=(int)   m_blob.length();  
                  imglen=length;  
   
                  BufferedInputStream   bis=new   BufferedInputStream(m_blob.getBinaryStream());  
                  byte[]   l_buffer   =   new   byte[1024];  
                  int   l_nbytes   =   0;  
   
                  response.setContentType("application/msword");  
                  javax.servlet.ServletOutputStream   op   =   response.getOutputStream();  
                  File   newfile=new   File("d:/new.doc");  
                  FileOutputStream   nn=new   FileOutputStream(newfile);  
  while   ((l_nbytes   =   bis.read(l_buffer))   !=   -1)   {  
                  op.write(l_buffer,0,   l_nbytes);  
                  nn.write(l_buffer,0,   l_nbytes);  
              }  
            op.close();  
            nn.close();  
            }  
   
            System.out.println("文档长度:"imglen);  
            rs.close();  
            stmt.close();  
            conn.close();  
        }  
        catch(Exception   e)   {  
            System.out.println(imglen);  
            System.out.println(e.getMessage());  
   
        }  
  %>  
   
  同时控制台提示如下:  
  文档长度:120832  
  Connection   reset   by   peer:   socket   write   error  
  <2002-8-29   下午06时59分25秒>   <Error>   <HTTP>   <Connection   failure  
  java.net.SocketException:   ReadFile   failed:   ??¨??????????????á?  
    (error   64,   fd   2064)  
                  at   weblogic.socket.NTSocketMuxer.initiateIO(Native   Method)  
                  at   weblogic.socket.NTSocketMuxer.read(NTSocketMuxer.java:407)  
                  at   weblogic.servlet.internal.MuxableSocketHTTP.requeue(MuxableSocketHTTP  
  .java:231)  
                  at   weblogic.servlet.internal.ServletResponseImpl.send(ServletResponseImp  
  l.java:977)  
                  at   weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestIm  
  pl.java:1964)  
                  at   weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:137)  
                  at   weblogic.kernel.ExecuteThread.run(ExecuteThread.java:120)  
  >  

 

jsp的out是个Writer  
  建议用OutputStream,或者正确的编码  
  最好用servlet来实现了

晕~!改成servlet居然就好了  
  反编译jsp运行时生成的class文件发现weblogic自动在开头给加了一句  
  JspWriter   jspwriter   =   pagecontext.getOut();  
  jspwriter.print("/r/n");

原创粉丝点击