Class Server

  • All Implemented Interfaces:
    java.lang.Runnable

    public class Server
    extends java.lang.Thread
    Yet another HTTP/1.1 server. This class is the core of a light weight Web Server. This server is started as a Thread listening on the supplied port, and dispatches to an implementation of a Handler to service http requests. If no handler is supplied, then the FileHandler is used. A ChainHandler is provided to allow multiple handlers in one server.

    Limitations:

    • Starts a new thread for each connection. This may be expensive.
    Version:
    2.4
    Author:
    Stephen Uhler (stephen.uhler@sun.com), Colin Stevens (colin.stevens@sun.com)
    • Nested Class Summary

      • Nested classes/interfaces inherited from class java.lang.Thread

        java.lang.Thread.State, java.lang.Thread.UncaughtExceptionHandler
    • Field Summary

      Fields 
      Modifier and Type Field Description
      int acceptCount
      Count of accepted connections so far.
      int bufsize
      Default buffer size for copies to and from client sockets.
      int errorCount
      Count of errors that occurred so far.
      Handler handler  
      java.lang.String hostName
      The hostname that this Server should use to identify itself in an HTTP Redirect.
      boolean initFailure
      If set, the server will terminate with an initialization failure just before creating the listen socket.
      java.net.ServerSocket listen
      The listening socket.
      static int LOG_DIAGNOSTIC  
      static int LOG_ERROR  
      static int LOG_INFORMATIONAL  
      static int LOG_LOG  
      static int LOG_WARNING  
      int logLevel
      The diagnostic level.
      int maxPost
      Maximum amout of POST data allowed per request (in bytes) (default = 2Meg).
      int maxRequests
      Maximum number of consecutive requests allowed on a single kept-alive socket.
      int maxThreads
      The max number of threads allowed for the entire VM (default is 250).
      java.lang.String name
      The string to return as the value for the "Server:" line in the HTTP response header.
      java.lang.String prefix
      The handler is passed a prefix to identify which items in the properties object are relevent.
      java.util.Properties props
      Hashtable containing arbitrary information that may be of interest to a Handler.
      java.lang.String protocol
      The protocol used to access this resource.
      int requestCount
      Count of HTTP requests received so far.
      java.net.InetAddress[] restrict
      If non-null, restrict connections to just the specified ip addresses.
      int timeout
      Time in milliseconds before this Server closes an idle socket or in-progress request.
      • Fields inherited from class java.lang.Thread

        MAX_PRIORITY, MIN_PRIORITY, NORM_PRIORITY
    • Constructor Summary

      Constructors 
      Constructor Description
      Server()
      Set up the server.
      Server​(java.net.ServerSocket listen, java.lang.String handlerName, java.util.Properties props)
      Create a server using the provided listener socket.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void close()
      Stop the server, and kill all pending requests
      boolean init()  
      void log​(int level, java.lang.Object obj, java.lang.String message)
      Logs information about the socket to System.out.
      boolean restart​(java.lang.String newHandler)
      Restart the server with a new handler.
      void run()
      Loops, accepting socket connections and replying to HTTP requests.
      boolean setup​(java.net.ServerSocket listen, java.lang.String handlerName, java.util.Properties props)  
      • Methods inherited from class java.lang.Thread

        activeCount, checkAccess, clone, countStackFrames, currentThread, dumpStack, enumerate, getAllStackTraces, getContextClassLoader, getDefaultUncaughtExceptionHandler, getId, getName, getPriority, getStackTrace, getState, getThreadGroup, getUncaughtExceptionHandler, holdsLock, interrupt, interrupted, isAlive, isDaemon, isInterrupted, join, join, join, onSpinWait, resume, setContextClassLoader, setDaemon, setDefaultUncaughtExceptionHandler, setName, setPriority, setUncaughtExceptionHandler, sleep, sleep, start, stop, suspend, toString, yield
      • Methods inherited from class java.lang.Object

        equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
    • Field Detail

      • listen

        public java.net.ServerSocket listen
        The listening socket. Every time a new socket is accepted, a new thread is created to read the HTTP requests from it.
      • hostName

        public java.lang.String hostName
        The hostname that this Server should use to identify itself in an HTTP Redirect. If null, the hostname is derived by calling InetAddress.getHostAddress.

        InetAddress.getHostName would generally be the wrong thing to return because it returns only the base machine name xxx and not the machine name as it needs to appear to the rest of the network, such as xxx.yyy.com.

        The default value is null.

      • protocol

        public java.lang.String protocol
        The protocol used to access this resource. Normally http, but can be changed for ssl to https
      • restrict

        public java.net.InetAddress[] restrict
        If non-null, restrict connections to just the specified ip addresses.

        The default value is null.

      • name

        public java.lang.String name
        The string to return as the value for the "Server:" line in the HTTP response header. If null, then no "Server:" line is returned.
      • prefix

        public java.lang.String prefix
        The handler is passed a prefix to identify which items in the properties object are relevent. By convention, non-empty strings end with ".", allowing nested prefixes to be easily distinguished.
      • timeout

        public int timeout
        Time in milliseconds before this Server closes an idle socket or in-progress request.

        The default value is 30000.

      • maxRequests

        public int maxRequests
        Maximum number of consecutive requests allowed on a single kept-alive socket.

        The default value is 25.

      • maxThreads

        public int maxThreads
        The max number of threads allowed for the entire VM (default is 250).
      • maxPost

        public int maxPost
        Maximum amout of POST data allowed per request (in bytes) (default = 2Meg).
      • bufsize

        public int bufsize
        Default buffer size for copies to and from client sockets. (default is 8192)
      • acceptCount

        public int acceptCount
        Count of accepted connections so far.
      • requestCount

        public int requestCount
        Count of HTTP requests received so far.
      • errorCount

        public int errorCount
        Count of errors that occurred so far.
      • logLevel

        public int logLevel
        The diagnostic level. 0->least, 5->most
      • initFailure

        public boolean initFailure
        If set, the server will terminate with an initialization failure just before creating the listen socket.
    • Constructor Detail

      • Server

        public Server​(java.net.ServerSocket listen,
                      java.lang.String handlerName,
                      java.util.Properties props)
        Create a server using the provided listener socket.

        This server will call the Handler.respond method of the specified handler. The specified handler should either respond to the request or perform further dispatches to other handlers.

        Parameters:
        listen - The socket this server should listen to. For ordinary sockets, this is simply: new ServerSocket(port), where port is the network port to listen on. Alternate implementations of ServerSocket, such as ssl versions may be used instead.
        handlerName - The name of the handler used to process http requests. It must implement the Handler interface.
        props - Arbitrary information made available to the handler. May be null.
        See Also:
        FileHandler, ChainHandler
      • Server

        public Server()
        Set up the server. this allows a server to be created with newInstance() followed by setup(), instead of using the above initializer, making it easier to start sub-classes of the server.
    • Method Detail

      • setup

        public boolean setup​(java.net.ServerSocket listen,
                             java.lang.String handlerName,
                             java.util.Properties props)
      • init

        public boolean init()
      • restart

        public boolean restart​(java.lang.String newHandler)
        Restart the server with a new handler.
        Parameters:
        newHandler - Name of the handler to restart the server with
      • run

        public void run()
        Loops, accepting socket connections and replying to HTTP requests. This is called indirectly via Thread.start().

        Many things in the server are not initialized until this point, because the user may have set some related configuration options between the time this server was allocated and the time it was started. For instance, the main Handler is not initialized until now, because its Handler.init method may have wanted to examine server member variables such as hostName or bufsize.

        Specified by:
        run in interface java.lang.Runnable
        Overrides:
        run in class java.lang.Thread
      • close

        public void close()
        Stop the server, and kill all pending requests
      • log

        public void log​(int level,
                        java.lang.Object obj,
                        java.lang.String message)
        Logs information about the socket to System.out.
        Parameters:
        level - Controls the verbosity (0=least 5=most)
        obj - The object that the message relates to.
        message - The message to be logged.