用servlet实现的添加和显示图片功能,能够添加成功,但是显示一直出问题:大体思路是:添加成功后,有listPhone这个servlet跳转到显示图片页面,下面是listPhoneDao代码:
public class ListPA {
private Connection conn;
private PreparedStatement prep;
private ResultSet res;
public void list(ServletOutputStream os){
String photo=null;
conn=DBConnectionManager.conn();
String sql="select photo from photo where id=1";
try {
prep=conn.prepareStatement(sql);
res=prep.executeQuery();
while(res.next()){
Blob blob=res.getBlob(1);
InputStream is=blob.getBinaryStream();
byte[] by=new byte[1024];
int i;
for(i=is.read(by);i!=-1;){
os.write(by,0,i);
} }
os.flush();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//return photo;
}
}
listPhoneServlet代码:
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {ListPA ad=new ListPA();
response.reset();
try {
ad.list(response.getOutputStream());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
但是一直报错:ClientAbortException: java.net.SocketException: Connection reset by peer: socket write error
at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:358)
at org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:434)
at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:349)
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 com.fan.dao.ListPA.list(ListPA.java:36)
at com.fan.servlet.ListPhoto.doGet(ListPhoto.java:22)
at com.fan.servlet.ListPhoto.doPost(ListPhoto.java:37)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
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.ApplicationDispatcher.invoke(ApplicationDispatcher.java:654)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:445)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:379)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:292)
at com.fan.servlet.AddPhotoServlet.doGet(AddPhotoServlet.java:42)
at com.fan.servlet.AddPhotoServlet.doPost(AddPhotoServlet.java:49)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
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 com.ny.Data.util.F_Login_Check.doFilter(F_Login_Check.java:47)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.ldh.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:142)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
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:261)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:619)
Caused by: java.net.SocketException: Connection reset by peer: 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:124)
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)
... 38 more
在网上搜了半天了,但是看他们的原因和我自己的有点不大一样。就是一个显示图片而已,oracle里面是blob型,
字段也是blob,在dao层将blob转化为string型,但是为什么显示出问题那?有人帮帮我吗
public class ListPA {
private Connection conn;
private PreparedStatement prep;
private ResultSet res;
public void list(ServletOutputStream os){
String photo=null;
conn=DBConnectionManager.conn();
String sql="select photo from photo where id=1";
try {
prep=conn.prepareStatement(sql);
res=prep.executeQuery();
while(res.next()){
Blob blob=res.getBlob(1);
InputStream is=blob.getBinaryStream();
byte[] by=new byte[1024];
int i;
for(i=is.read(by);i!=-1;){
os.write(by,0,i);
} }
os.flush();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//return photo;
}
}
listPhoneServlet代码:
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {ListPA ad=new ListPA();
response.reset();
try {
ad.list(response.getOutputStream());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
但是一直报错:ClientAbortException: java.net.SocketException: Connection reset by peer: socket write error
at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:358)
at org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:434)
at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:349)
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 com.fan.dao.ListPA.list(ListPA.java:36)
at com.fan.servlet.ListPhoto.doGet(ListPhoto.java:22)
at com.fan.servlet.ListPhoto.doPost(ListPhoto.java:37)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
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.ApplicationDispatcher.invoke(ApplicationDispatcher.java:654)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:445)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:379)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:292)
at com.fan.servlet.AddPhotoServlet.doGet(AddPhotoServlet.java:42)
at com.fan.servlet.AddPhotoServlet.doPost(AddPhotoServlet.java:49)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
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 com.ny.Data.util.F_Login_Check.doFilter(F_Login_Check.java:47)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.ldh.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:142)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
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:261)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:619)
Caused by: java.net.SocketException: Connection reset by peer: 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:124)
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)
... 38 more
在网上搜了半天了,但是看他们的原因和我自己的有点不大一样。就是一个显示图片而已,oracle里面是blob型,
字段也是blob,在dao层将blob转化为string型,但是为什么显示出问题那?有人帮帮我吗
public void list(ServletOutputStream os){
String photo=null;
conn=DBConnectionManager.conn();
String sql="select photo from photo where id=1";
try {
prep=conn.prepareStatement(sql);
res=prep.executeQuery();
while(res.next()){
Blob blob=res.getBlob(1);
InputStream is=blob.getBinaryStream();
byte[] by=new byte[1024];
int i=0;
for(i=is.read(by);i!=-1;){
os.write(by,0,i);
// is.read(by);
}
os.flush();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//return photo;
}
然后是servlet。这里有个地方要注意了: public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
ListPA ad=new ListPA();
response.reset();
try {
ServletOutputStream so=response.getOutputStream();
System.out.println(so+"出来吧");
ad.list(so);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
response.reset()必须加上,具体原因不清楚、、、、
暂时就这样吧 。结贴了、