boolean wantsKeepAlive() { if ("Keep-alive".equalsIgnoreCase( getConnectionHeader() )) { return true; } else if (_protocol.equals( "HTTP/1.1" )) { return !"Close".equalsIgnoreCase( getConnectionHeader() ); } else { return false; } }
/** * Returns the values for the parameter with the specified name. If no values exist * will return null. **/ protected String[] getParameter( String name ) { return _request.getParameter( name ); }
/** * Returns the parameter with the specified name. If no such parameter exists, will * return null. **/ public String[] getParameter( String name ) { if (_parameters == null) { if (_command.equalsIgnoreCase( "GET" ) || _command.equalsIgnoreCase( "HEAD" )) { _parameters = readParameters( getParameterString( _uri ) ); } else { _parameters = readParameters( new String( getBody() ) ); } } return (String[]) _parameters.get( name ); }
/** * Returns the parameter with the specified name. If no such parameter exists, will * return null. **/ public String[] getParameter( String name ) { if (_parameters == null) { if (_command.equalsIgnoreCase( "GET" ) || _command.equalsIgnoreCase( "HEAD" )) { _parameters = readParameters( getParameterString( _uri ) ); } else { _parameters = readParameters( new String( getBody() ) ); } } return (String[]) _parameters.get( name ); }
private WebResource getResource( HttpRequest request ) throws IOException { Object resource = _resources.get( request.getURI() ); if (resource == null) resource = _resources.get( withoutParameters( request.getURI() ) ); if (request.getCommand().equals( "GET" ) && resource instanceof WebResource) { return (WebResource) resource; } else if (resource instanceof PseudoServlet) { return getResource( (PseudoServlet) resource, request ); } else if (request.getURI().endsWith( ".class" )) { for (Iterator iterator = _classpathDirs.iterator(); iterator.hasNext();) { String directory = (String) iterator.next(); if (request.getURI().startsWith( directory )) { String resourceName = request.getURI().substring( directory.length()+1 ); return new WebResource( getClass().getClassLoader().getResourceAsStream( resourceName ), "application/class", 200 ); } else if (request.getURI().endsWith( ".zip" ) || request.getURI().endsWith( ".jar" )) { for (Iterator iterator = _classpathDirs.iterator(); iterator.hasNext();) { String directory = (String) iterator.next(); if (request.getURI().startsWith( directory )) { String resourceName = request.getURI().substring( directory.length()+1 ); String classPath = System.getProperty( "java.class.path" ); StringTokenizer st = new StringTokenizer( classPath, ":;," );
private Hashtable readParameters( String content ) { Hashtable parameters = new Hashtable(); if (content == null || content.trim().length() == 0) return parameters; StringTokenizer st = new StringTokenizer( content, "&=" ); while (st.hasMoreTokens()) { String name = st.nextToken(); if (st.hasMoreTokens()) { addParameter( parameters, HttpUnitUtils.decode( name ), HttpUnitUtils.decode( st.nextToken() ) ); } } return parameters; }
private WebResource getResource( PseudoServlet servlet, HttpRequest request ) throws IOException { servlet.init( request ); return servlet.getResponse( request.getCommand() ); }
private boolean isKeepAlive( HttpRequest request ) { return request.wantsKeepAlive() && _maxProtocolLevel.equals( "1.1" ); }
private String getResponseProtocol( HttpRequest request ) { return _maxProtocolLevel.equalsIgnoreCase( "1.1" ) ? request.getProtocol() : "HTTP/1.0"; }
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; }
private WebResource getResource( HttpRequest request ) throws IOException { Object resource = _resources.get( request.getURI() ); if (resource == null) resource = _resources.get( withoutParameters( request.getURI() ) ); if (request.getCommand().equals( "GET" ) && resource instanceof WebResource) { return (WebResource) resource; } else if (resource instanceof PseudoServlet) { return getResource( (PseudoServlet) resource, request ); } else if (request.getURI().endsWith( ".class" )) { for (Iterator iterator = _classpathDirs.iterator(); iterator.hasNext();) { String directory = (String) iterator.next(); if (request.getURI().startsWith( directory )) { String resourceName = request.getURI().substring( directory.length()+1 ); return new WebResource( getClass().getClassLoader().getResourceAsStream( resourceName ), "application/class", 200 ); } else if (request.getURI().endsWith( ".zip" ) || request.getURI().endsWith( ".jar" )) { for (Iterator iterator = _classpathDirs.iterator(); iterator.hasNext();) { String directory = (String) iterator.next(); if (request.getURI().startsWith( directory )) { String resourceName = request.getURI().substring( directory.length()+1 ); String classPath = System.getProperty( "java.class.path" ); StringTokenizer st = new StringTokenizer( classPath, ":;," );
private Hashtable readParameters( String content ) { Hashtable parameters = new Hashtable(); if (content == null || content.trim().length() == 0) return parameters; StringTokenizer st = new StringTokenizer( content, "&=" ); while (st.hasMoreTokens()) { String name = st.nextToken(); if (st.hasMoreTokens()) { addParameter( parameters, HttpUnitUtils.decode( name ), HttpUnitUtils.decode( st.nextToken() ) ); } } return parameters; }
private WebResource getResource( PseudoServlet servlet, HttpRequest request ) throws IOException { servlet.init( request ); return servlet.getResponse( request.getCommand() ); }
private boolean isKeepAlive( HttpRequest request ) { return request.wantsKeepAlive() && _maxProtocolLevel.equals( "1.1" ); }
private String getResponseProtocol( HttpRequest request ) { return _maxProtocolLevel.equalsIgnoreCase( "1.1" ) ? request.getProtocol() : "HTTP/1.0"; }
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; }
/** * Returns the parameter with the specified name. If no such parameter exists, will * return null. **/ public String[] getParameter( String name ) { if (_parameters == null) { if (_command.equalsIgnoreCase( "GET" ) || _command.equalsIgnoreCase( "HEAD" )) { _parameters = readParameters( getParameterString( _uri ) ); } else { _parameters = readParameters( new String( getBody() ) ); } } return (String[]) _parameters.get( name ); }
private WebResource getResource( HttpRequest request ) throws IOException { Object resource = _resources.get( request.getURI() ); if (resource == null) resource = _resources.get( withoutParameters( request.getURI() ) ); if (request.getCommand().equals( "GET" ) && resource instanceof WebResource) { return (WebResource) resource; } else if (resource instanceof PseudoServlet) { return getResource( (PseudoServlet) resource, request ); } else if (request.getURI().endsWith( ".class" )) { for (Iterator iterator = _classpathDirs.iterator(); iterator.hasNext();) { String directory = (String) iterator.next(); if (request.getURI().startsWith( directory )) { String resourceName = request.getURI().substring( directory.length()+1 ); return new WebResource( getClass().getClassLoader().getResourceAsStream( resourceName ), "application/class", 200 ); } else if (request.getURI().endsWith( ".zip" ) || request.getURI().endsWith( ".jar" )) { for (Iterator iterator = _classpathDirs.iterator(); iterator.hasNext();) { String directory = (String) iterator.next(); if (request.getURI().startsWith( directory )) { String resourceName = request.getURI().substring( directory.length()+1 ); String classPath = System.getProperty( "java.class.path" ); StringTokenizer st = new StringTokenizer( classPath, ":;," );