我在从Oracle数据库中取出图片在jsp页面进行显示时出了错,但图片能在jsp中正常显示,各位大侠帮我看看是哪出的错,怎么改?
代码:package servlet;import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class pictureDisplay extends HttpServlet { /**
* Constructor of the object.
*/
public pictureDisplay() {
super();
} /**
* Destruction of the servlet. <br>
*/
public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
} /**
* The doGet method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to get.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { oracle.sql.BLOB blob1 = null;
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
InputStream inputimage1 = null;
response.setContentType("image/gif");
int readLength=0; try {
Class.forName("oracle.jdbc.driver.OracleDriver");
//建立数据 库连接!
System.out.println("<classok");
conn =DriverManager.getConnection ("jdbc:oracle:thin:@localhost:1521:policetc", "policetc", "admin");
stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
conn.setAutoCommit(false);
System.out.println("连接图片数据库成功");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
String sqlupdate = "select * from PICTURE_TEST where PICTUREID= " + 1 ;
System.out.println("start select");
rs = stmt.executeQuery(sqlupdate);
while (rs.next()) {
blob1 = (oracle.sql.BLOB) ((oracle.jdbc.driver.OracleResultSet) rs).getBLOB("PICTURE");
inputimage1 =blob1.getBinaryStream();
System.out.println(inputimage1);
}
System.out.println("displayover");
int v=inputimage1.available();
System.out.println("图片大小为"+v);
byte[] image=new byte[10000000];
System.out.println("<1");
ServletOutputStream out1=response.getOutputStream();
System.out.println("<2");
while((readLength = inputimage1.read(image))!=-1){
System.out.println("<3");
out1.write(image, 0, readLength);
System.out.println("<4");
System.out.println(readLength);
}
System.out.println("<6");
//out1.flush();
//out1.close();
conn.close();
stmt.close();
rs.close();
System.out.println("pictureok");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} /**
* The doPost method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to post.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet( request, response);
} /**
* Initialization of the servlet. <br>
*
* @throws ServletException if an error occure
*/
public void init() throws ServletException {
// Put your code here
}}
报的错:<classok
连接图片数据库成功
start select
oracle.jdbc.driver.OracleBlobInputStream@1f6d2e3
displayover
图片大小为0
<1
<2
<3
ClientAbortException: java.net.SocketException: Software caused connection abort: socket write error
at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:358)
at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:354)
at org.apache.catalina.connector.OutputBuffer.writeBytes(OutputBuffer.java:381)
at org.apache.catalina.connector.OutputBuffer.write(OutputBuffer.java:370)
at org.apache.catalina.connector.CoyoteOutputStream.write(CoyoteOutputStream.java:89)
at servlet.pictureDisplay.doGet(pictureDisplay.java:105)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:228)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:216)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:634)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:445)
at java.lang.Thread.run(Thread.java:595)
Caused by: java.net.SocketException: Software caused connection abort: socket write error
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
at org.apache.coyote.http11.InternalOutputBuffer$OutputStreamOutputBuffer.doWrite(InternalOutputBuffer.java:764)
at org.apache.coyote.http11.filters.ChunkedOutputFilter.doWrite(ChunkedOutputFilter.java:129)
at org.apache.coyote.http11.InternalOutputBuffer.doWrite(InternalOutputBuffer.java:570)
at org.apache.coyote.Response.doWrite(Response.java:560)
at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:353)
... 19 more
代码:package servlet;import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class pictureDisplay extends HttpServlet { /**
* Constructor of the object.
*/
public pictureDisplay() {
super();
} /**
* Destruction of the servlet. <br>
*/
public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
} /**
* The doGet method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to get.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { oracle.sql.BLOB blob1 = null;
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
InputStream inputimage1 = null;
response.setContentType("image/gif");
int readLength=0; try {
Class.forName("oracle.jdbc.driver.OracleDriver");
//建立数据 库连接!
System.out.println("<classok");
conn =DriverManager.getConnection ("jdbc:oracle:thin:@localhost:1521:policetc", "policetc", "admin");
stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
conn.setAutoCommit(false);
System.out.println("连接图片数据库成功");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
String sqlupdate = "select * from PICTURE_TEST where PICTUREID= " + 1 ;
System.out.println("start select");
rs = stmt.executeQuery(sqlupdate);
while (rs.next()) {
blob1 = (oracle.sql.BLOB) ((oracle.jdbc.driver.OracleResultSet) rs).getBLOB("PICTURE");
inputimage1 =blob1.getBinaryStream();
System.out.println(inputimage1);
}
System.out.println("displayover");
int v=inputimage1.available();
System.out.println("图片大小为"+v);
byte[] image=new byte[10000000];
System.out.println("<1");
ServletOutputStream out1=response.getOutputStream();
System.out.println("<2");
while((readLength = inputimage1.read(image))!=-1){
System.out.println("<3");
out1.write(image, 0, readLength);
System.out.println("<4");
System.out.println(readLength);
}
System.out.println("<6");
//out1.flush();
//out1.close();
conn.close();
stmt.close();
rs.close();
System.out.println("pictureok");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} /**
* The doPost method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to post.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet( request, response);
} /**
* Initialization of the servlet. <br>
*
* @throws ServletException if an error occure
*/
public void init() throws ServletException {
// Put your code here
}}
报的错:<classok
连接图片数据库成功
start select
oracle.jdbc.driver.OracleBlobInputStream@1f6d2e3
displayover
图片大小为0
<1
<2
<3
ClientAbortException: java.net.SocketException: Software caused connection abort: socket write error
at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:358)
at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:354)
at org.apache.catalina.connector.OutputBuffer.writeBytes(OutputBuffer.java:381)
at org.apache.catalina.connector.OutputBuffer.write(OutputBuffer.java:370)
at org.apache.catalina.connector.CoyoteOutputStream.write(CoyoteOutputStream.java:89)
at servlet.pictureDisplay.doGet(pictureDisplay.java:105)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:228)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:216)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:634)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:445)
at java.lang.Thread.run(Thread.java:595)
Caused by: java.net.SocketException: Software caused connection abort: socket write error
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
at org.apache.coyote.http11.InternalOutputBuffer$OutputStreamOutputBuffer.doWrite(InternalOutputBuffer.java:764)
at org.apache.coyote.http11.filters.ChunkedOutputFilter.doWrite(ChunkedOutputFilter.java:129)
at org.apache.coyote.http11.InternalOutputBuffer.doWrite(InternalOutputBuffer.java:570)
at org.apache.coyote.Response.doWrite(Response.java:560)
at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:353)
... 19 more
解决方案 »
- 求助jsp高手帮忙解决一下,急用 非常感谢
- 如何在SQL2005中创建函数?
- 查询出来的数据2-3w条,出现内存溢出
- 什么错误?
- 基于GSM调制解调器的短信收发平台
- 我想制作一个在Jsp页面上向windows地址栏的东西,就是可以自己输入内容,也可以选择的!
- 退出JSP页面
- 在jsp中怎样统计在线人数?
- 用java mail在jsp中发送邮件,为什么@263的邮件接收不到我发的邮件,而其他好像可以,例如163等
- 为什么Dreamwaver UltraDev 4 用JDBC连接数据库是无法处理中文?20分,全部家当!!
- spring中在配置datasource时,怎么解决连接远程access数据库的问题
- 增加根类别,插不到数据库里边去。急,在线等!
stmt.close();
rs.close();
改成:
rs.close();
stmt.close();
conn.close();
lz注意关闭顺序.