void write( String contents, String charset ) throws IOException { flushHeaders(); setCharacterSet( charset ); sendText( contents ); }
private void flushHeaders() { if (!_headersWritten) { sendResponse( _responseCode, _responseText ); for (Enumeration e = _headers.elements(); e.hasMoreElements();) { sendLine( (String) e.nextElement() ); } sendText( CRLF ); _headersWritten = true; _pw.flush(); } }
private void serveRequests( Socket socket ) throws IOException { socket.setSoTimeout( _socketTimeout ); socket.setTcpNoDelay( true ); debug( "Created server thread " + socket.getInetAddress() + ':' + socket.getPort() ); final BufferedInputStream inputStream = new BufferedInputStream( socket.getInputStream() ); final HttpResponseStream outputStream = new HttpResponseStream( socket.getOutputStream() ); try { while (_active) { HttpRequest request = new HttpRequest( inputStream ); boolean keepAlive = respondToRequest( request, outputStream ); if (!keepAlive) break; while (_active && 0 == inputStream.available()) { try { Thread.sleep( INPUT_POLL_INTERVAL ); } catch (InterruptedException e) {} } } } catch (IOException e) { outputStream.restart(); outputStream.setProtocol( "HTTP/1.0" ); outputStream.setResponse( HttpURLConnection.HTTP_BAD_REQUEST, e.toString() ); } debug( "Closing server thread" ); outputStream.close(); socket.close(); debug( "Server thread closed" ); }
private boolean respondToRequest( HttpRequest request, HttpResponseStream response ) { debug( "Server thread handling request: " + request ); boolean keepAlive = isKeepAlive( request ); WebResource resource = null; try { response.restart(); response.setProtocol( getResponseProtocol( request ) ); resource = getResource( request ); if (resource == null) { response.setResponse( HttpURLConnection.HTTP_NOT_FOUND, "unable to find " + request.getURI() ); } else { if (resource.closesConnection()) keepAlive = false; if (resource.getResponseCode() != HttpURLConnection.HTTP_OK) { response.setResponse( resource.getResponseCode(), "" ); } String[] headers = resource.getHeaders(); for (int i = 0; i < headers.length; i++) { debug( "Server thread sending header: " + headers[i] ); response.addHeader( headers[i] ); } } } catch (UnknownMethodException e) { response.setResponse( HttpURLConnection.HTTP_BAD_METHOD, "unsupported method: " + e.getMethod() ); } catch (Throwable t) { t.printStackTrace(); response.setResponse( HttpURLConnection.HTTP_INTERNAL_ERROR, t.toString() ); } try { response.write( resource ); } catch (IOException e) { System.out.println( "*** Failed to send reply: " + e ); } return keepAlive; }
void close() throws IOException { flushHeaders(); _pw.close(); }
HttpResponseStream( OutputStream stream ) { _stream = stream; try { setCharacterSet( "us-ascii" ); } catch (UnsupportedEncodingException e) { _pw = new PrintWriter( new OutputStreamWriter( _stream ) ); } }
private void sendResponse( int responseCode, String responseText ) { sendLine( _protocol + ' ' + responseCode + ' ' + responseText ); }
private void serveRequests( Socket socket ) throws IOException { socket.setSoTimeout( _socketTimeout ); socket.setTcpNoDelay( true ); debug( "Created server thread " + socket.getInetAddress() + ':' + socket.getPort() ); final BufferedInputStream inputStream = new BufferedInputStream( socket.getInputStream() ); final HttpResponseStream outputStream = new HttpResponseStream( socket.getOutputStream() ); try { while (_active) { HttpRequest request = new HttpRequest( inputStream ); boolean keepAlive = respondToRequest( request, outputStream ); if (!keepAlive) break; while (_active && 0 == inputStream.available()) { try { Thread.sleep( INPUT_POLL_INTERVAL ); } catch (InterruptedException e) {} } } } catch (IOException e) { outputStream.restart(); outputStream.setProtocol( "HTTP/1.0" ); outputStream.setResponse( HttpURLConnection.HTTP_BAD_REQUEST, e.toString() ); } debug( "Closing server thread" ); outputStream.close(); socket.close(); debug( "Server thread closed" ); }
private boolean respondToRequest( HttpRequest request, HttpResponseStream response ) { debug( "Server thread handling request: " + request ); boolean keepAlive = isKeepAlive( request ); WebResource resource = null; try { response.restart(); response.setProtocol( getResponseProtocol( request ) ); resource = getResource( request ); if (resource == null) { response.setResponse( HttpURLConnection.HTTP_NOT_FOUND, "unable to find " + request.getURI() ); } else { if (resource.closesConnection()) keepAlive = false; if (resource.getResponseCode() != HttpURLConnection.HTTP_OK) { response.setResponse( resource.getResponseCode(), "" ); } String[] headers = resource.getHeaders(); for (int i = 0; i < headers.length; i++) { debug( "Server thread sending header: " + headers[i] ); response.addHeader( headers[i] ); } } } catch (UnknownMethodException e) { response.setResponse( HttpURLConnection.HTTP_BAD_METHOD, "unsupported method: " + e.getMethod() ); } catch (Throwable t) { t.printStackTrace(); response.setResponse( HttpURLConnection.HTTP_INTERNAL_ERROR, t.toString() ); } try { response.write( resource ); } catch (IOException e) { System.out.println( "*** Failed to send reply: " + e ); } return keepAlive; }
void close() throws IOException { flushHeaders(); _pw.close(); }
HttpResponseStream( OutputStream stream ) { _stream = stream; try { setCharacterSet( "us-ascii" ); } catch (UnsupportedEncodingException e) { _pw = new PrintWriter( new OutputStreamWriter( _stream ) ); } }
private void sendResponse( int responseCode, String responseText ) { sendLine( _protocol + ' ' + responseCode + ' ' + responseText ); }
private void serveRequests( Socket socket ) throws IOException { socket.setSoTimeout( _socketTimeout ); socket.setTcpNoDelay( true ); debug( "Created server thread " + socket.getInetAddress() + ':' + socket.getPort() ); final BufferedInputStream inputStream = new BufferedInputStream( socket.getInputStream() ); final HttpResponseStream outputStream = new HttpResponseStream( socket.getOutputStream() ); try { while (_active) { HttpRequest request = new HttpRequest( inputStream ); boolean keepAlive = respondToRequest( request, outputStream ); if (!keepAlive) break; while (_active && 0 == inputStream.available()) { try { Thread.sleep( INPUT_POLL_INTERVAL ); } catch (InterruptedException e) {} } } } catch (IOException e) { outputStream.restart(); outputStream.setProtocol( "HTTP/1.0" ); outputStream.setResponse( HttpURLConnection.HTTP_BAD_REQUEST, e.toString() ); } debug( "Closing server thread" ); outputStream.close(); socket.close(); debug( "Server thread closed" ); }
private boolean respondToRequest( HttpRequest request, HttpResponseStream response ) { debug( "Server thread handling request: " + request ); boolean keepAlive = isKeepAlive( request ); WebResource resource = null; try { response.restart(); response.setProtocol( getResponseProtocol( request ) ); resource = getResource( request ); if (resource == null) { response.setResponse( HttpURLConnection.HTTP_NOT_FOUND, "unable to find " + request.getURI() ); } else { if (resource.closesConnection()) keepAlive = false; if (resource.getResponseCode() != HttpURLConnection.HTTP_OK) { response.setResponse( resource.getResponseCode(), "" ); } String[] headers = resource.getHeaders(); for (int i = 0; i < headers.length; i++) { debug( "Server thread sending header: " + headers[i] ); response.addHeader( headers[i] ); } } } catch (UnknownMethodException e) { response.setResponse( HttpURLConnection.HTTP_BAD_METHOD, "unsupported method: " + e.getMethod() ); } catch (Throwable t) { t.printStackTrace(); response.setResponse( HttpURLConnection.HTTP_INTERNAL_ERROR, t.toString() ); } try { response.write( resource ); } catch (IOException e) { System.out.println( "*** Failed to send reply: " + e ); } return keepAlive; }
void write( String contents, String charset ) throws IOException { flushHeaders(); setCharacterSet( charset ); sendText( contents ); }
private void flushHeaders() { if (!_headersWritten) { sendResponse( _responseCode, _responseText ); for (Enumeration e = _headers.elements(); e.hasMoreElements();) { sendLine( (String) e.nextElement() ); } sendText( CRLF ); _headersWritten = true; _pw.flush(); } }
void close() throws IOException { flushHeaders(); _pw.close(); }
HttpResponseStream( OutputStream stream ) { _stream = stream; try { setCharacterSet( "us-ascii" ); } catch (UnsupportedEncodingException e) { _pw = new PrintWriter( new OutputStreamWriter( _stream ) ); } }