From: Nishant K. <nis...@it...> - 2003-12-19 08:28:36
|
hi, can you try out replacing this jsp with a servlet. jsp should be used for embedding small amount of java in html or xml. since you wan't to send pure binary data you should be using a servlet. when jsp starts it opens a writer for you and you are opening a stream here. may be this is the cause of the problem. i may be wrong here but can you try replacing this with a servlet. thanks, nishant. On Fri, 2003-12-19 at 13:13, Eugeny N Dzhurinsky wrote: > Chris Haynes wrote: > > 24-hour tag-team response here :-) > > > > There's no indication of anything being wrong with the request from the Applet. > > > > There is a problem in you JSP response - and there are two symptoms: > > > > 1) The error message below is Jetty warning you that more octets were returned > > in the response than JSP's buffer told it about. > > Jetty should, however, have transmitted all the 1264 bytes which were written to > > the request's output stream. > > > > 2) The Applet (URLConnection) is probably trusting the Content-Length header > > and only processing the first 1224 bytes. That's why you get no (complete) > > response. > > > > The problem is in your JSP code. Somehow an extra 40 bytes are being written > > which JSP's internal counter is not catching. Maybe you are doing some > > 'unconventional' output somewhere and managing to bypass JSP's (buffered and > > metered) output stream? > > > > And, before you ask, one could only explain why it appears to work on other > > servers when one has found the exact problem. It's possible that other servers > > double-buffer the response and re-calculate the length for themselves. Jetty > > trusts JSP to do the buffering correctly and calculate the length. Jetty > > compares what JSP declared in the Content-Length header with the tally it keeps > > for itself as the response bytes flow through it. The warning you have below is > > the result of that comparison failing. > > So the possible error is inside JSP? > > here is. Can you please tell me what's wrong with it? > > ================================================================================== > > <%@page import="java.io.*, > java.net.*, > javax.servlet.*" %> > > <%@page extends="javax.servlet.GenericServlet" %> > > <%! > public void service(ServletRequest request, ServletResponse > response) > throws IOException > { > String host = "localhost"; > int port = 8088; > > // Getting data from the request > > ServletInputStream reqstream = request.getInputStream( ); > int mType = reqstream.read( ); > int cSize = reqstream.read( ); > int offset = 0; > byte[] b = new byte[ cSize ]; > while ( offset < cSize ) { > offset += reqstream.read( b, offset, cSize - > offset ); > } > > //conecting to SIM server and sending data > > Socket socket = new Socket( host, port ); > OutputStream soutstream = socket.getOutputStream(); > soutstream.write(mType); > soutstream.write(cSize); > soutstream.write( b ); > soutstream.flush( ); > > // Getting data from SIM server > > InputStream sinpstream = socket.getInputStream( ); > mType = sinpstream.read( ); > cSize = sinpstream.read( ); > offset = 0; > b = new byte[ cSize ]; > while ( offset < cSize ) { > offset += sinpstream.read( b, offset, cSize - > offset ); > } > sinpstream.close(); > soutstream.close(); > socket.close( ); > > //sending back data > > response.setContentType( "application/octet-stream" ); > ServletOutputStream respoutstream = > response.getOutputStream(); > respoutstream.write(mType); > respoutstream.write(cSize); > respoutstream.write(b); > respoutstream.flush(); > response.flushBuffer( ); > } > %> |