public WebResource( InputStream stream, String contentType, int responseCode ) { _stream = stream; _contentType = contentType; _responseCode = responseCode; addHeader( "Connection: close" ); }
private byte[] getContentsAsBytes() throws UnsupportedEncodingException { if (_contents != null) { return _contents; } else if (_string != null) { return _string.getBytes( getCharacterSet() ); } else { throw new IllegalStateException( "Cannot get bytes from stream" ); } }
private String getContentTypeHeader() { return "Content-Type: " + _contentType + getCharacterSetParameter(); }
String[] getHeaders() throws UnsupportedEncodingException { final Vector effectiveHeaders = (Vector) _headers.clone(); if (!_hasExplicitContentTypeHeader) effectiveHeaders.add( getContentTypeHeader() ); if (_stream == null && !_hasExplicitContentLengthHeader && !isChunked()) effectiveHeaders.add( getContentLengthHeader() ); String[] headers = new String[ effectiveHeaders.size() ]; effectiveHeaders.copyInto( headers ); return headers; }
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; }
/** * Specifies the character set encoding for a resource. **/ public void setCharacterSet( String name, String characterSet ) { WebResource resource = (WebResource) _resources.get( asResourceName( name ) ); if (resource == null) { resource = new WebResource( "" ); _resources.put( asResourceName( name ), resource ); } resource.setCharacterSet( characterSet ); }
/** * Defines the contents of an expected resource. **/ public void setResource( String name, String value, String contentType ) { _resources.put( asResourceName( name ), new WebResource( value, contentType ) ); }
/** * Adds a header to a defined resource. **/ public void addResourceHeader( String name, String header ) { WebResource resource = (WebResource) _resources.get( asResourceName( name ) ); if (resource == null) { resource = new WebResource( "" ); _resources.put( asResourceName( name ), resource ); } resource.addHeader( header ); }
private String getContentLengthHeader() throws UnsupportedEncodingException { return "Content-Length: " + getContentsAsBytes().length; }
public String toString() { return "WebResource [code=" + _responseCode + "; type = " + _contentType + "; charset = " + _characterSet + "]\n" + getContentsAsString(); }
String[] getHeaders() throws UnsupportedEncodingException { final Vector effectiveHeaders = (Vector) _headers.clone(); if (!_hasExplicitContentTypeHeader) effectiveHeaders.add( getContentTypeHeader() ); if (_stream == null && !_hasExplicitContentLengthHeader && !isChunked()) effectiveHeaders.add( getContentLengthHeader() ); String[] headers = new String[ effectiveHeaders.size() ]; effectiveHeaders.copyInto( headers ); return headers; }
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; }
/** * Specifies the character set encoding for a resource. **/ public void setCharacterSet( String name, String characterSet ) { WebResource resource = (WebResource) _resources.get( asResourceName( name ) ); if (resource == null) { resource = new WebResource( "" ); _resources.put( asResourceName( name ), resource ); } resource.setCharacterSet( characterSet ); }
/** * Defines a resource which will result in an error message. **/ public void setErrorResource( String name, int errorCode, String errorMessage ) { _resources.put( asResourceName( name ), new WebResource( errorMessage, errorCode ) ); }
/** * Adds a header to a defined resource. **/ public void addResourceHeader( String name, String header ) { WebResource resource = (WebResource) _resources.get( asResourceName( name ) ); if (resource == null) { resource = new WebResource( "" ); _resources.put( asResourceName( name ), resource ); } resource.addHeader( header ); }
private String getContentLengthHeader() throws UnsupportedEncodingException { return "Content-Length: " + getContentsAsBytes().length; }
public String toString() { return "WebResource [code=" + _responseCode + "; type = " + _contentType + "; charset = " + _characterSet + "]\n" + getContentsAsString(); }
String[] getHeaders() throws UnsupportedEncodingException { final Vector effectiveHeaders = (Vector) _headers.clone(); if (!_hasExplicitContentTypeHeader) effectiveHeaders.add( getContentTypeHeader() ); if (_stream == null && !_hasExplicitContentLengthHeader && !isChunked()) effectiveHeaders.add( getContentLengthHeader() ); String[] headers = new String[ effectiveHeaders.size() ]; effectiveHeaders.copyInto( headers ); return headers; }
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; }
/** * Specifies the character set encoding for a resource. **/ public void setCharacterSet( String name, String characterSet ) { WebResource resource = (WebResource) _resources.get( asResourceName( name ) ); if (resource == null) { resource = new WebResource( "" ); _resources.put( asResourceName( name ), resource ); } resource.setCharacterSet( characterSet ); }