Class Server
- All Implemented Interfaces:
Runnable
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
Thread.State, Thread.UncaughtExceptionHandler
-
Field Summary
FieldsModifier and TypeFieldDescriptionint
Count of accepted connections so far.int
Default buffer size for copies to and from client sockets.int
Count of errors that occurred so far.The hostname that this Server should use to identify itself in an HTTP Redirect.boolean
If set, the server will terminate with an initialization failure just before creating the listen socket.The listening socket.static final int
static final int
static final int
static final int
static final int
int
The diagnostic level.int
Maximum amout of POST data allowed per request (in bytes) (default = 2Meg).int
Maximum number of consecutive requests allowed on a single kept-alive socket.int
The max number of threads allowed for the entire VM (default is 250).The string to return as the value for the "Server:" line in the HTTP response header.The handler is passed a prefix to identify which items in the properties object are relevent.Hashtable containing arbitrary information that may be of interest to a Handler.The protocol used to access this resource.int
Count of HTTP requests received so far.If non-null, restrict connections to just the specified ip addresses.int
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
ConstructorsConstructorDescriptionServer()
Set up the server.Server
(ServerSocket listen, String handlerName, Properties props) Create a server using the provided listener socket. -
Method Summary
Modifier and TypeMethodDescriptionvoid
close()
Stop the server, and kill all pending requestsboolean
init()
void
Logs information about the socket toSystem.out
.boolean
Restart the server with a new handler.void
run()
Loops, accepting socket connections and replying to HTTP requests.boolean
setup
(ServerSocket listen, String handlerName, 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
-
Field Details
-
listen
The listening socket. Every time a new socket is accepted, a new thread is created to read the HTTP requests from it. -
handler
-
props
Hashtable containing arbitrary information that may be of interest to a Handler. This table is available to both methods of theHandler
interface, asprops
in theHandler.init(Server, String)
method, and as the default properties ofRequest.props
in theHandler.respond(Request)
method. -
hostName
The hostname that this Server should use to identify itself in an HTTP Redirect. Ifnull
, the hostname is derived by callingInetAddress.getHostAddress
.InetAddress.getHostName
would generally be the wrong thing to return because it returns only the base machine namexxx
and not the machine name as it needs to appear to the rest of the network, such asxxx.yyy.com
.The default value is
null
. -
protocol
The protocol used to access this resource. Normallyhttp
, but can be changed forssl
tohttps
-
restrict
If non-null, restrict connections to just the specified ip addresses.The default value is
null
. -
name
The string to return as the value for the "Server:" line in the HTTP response header. Ifnull
, then no "Server:" line is returned. -
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 timeoutTime in milliseconds before this Server closes an idle socket or in-progress request.The default value is
30000
. -
maxRequests
public int maxRequestsMaximum number of consecutive requests allowed on a single kept-alive socket.The default value is
25
. -
maxThreads
public int maxThreadsThe max number of threads allowed for the entire VM (default is 250). -
maxPost
public int maxPostMaximum amout of POST data allowed per request (in bytes) (default = 2Meg). -
bufsize
public int bufsizeDefault buffer size for copies to and from client sockets. (default is 8192) -
acceptCount
public int acceptCountCount of accepted connections so far. -
requestCount
public int requestCountCount of HTTP requests received so far. -
errorCount
public int errorCountCount of errors that occurred so far. -
logLevel
public int logLevelThe diagnostic level. 0->least, 5->most -
initFailure
public boolean initFailureIf set, the server will terminate with an initialization failure just before creating the listen socket. -
LOG_ERROR
public static final int LOG_ERROR- See Also:
-
LOG_WARNING
public static final int LOG_WARNING- See Also:
-
LOG_LOG
public static final int LOG_LOG- See Also:
-
LOG_INFORMATIONAL
public static final int LOG_INFORMATIONAL- See Also:
-
LOG_DIAGNOSTIC
public static final int LOG_DIAGNOSTIC- See Also:
-
-
Constructor Details
-
Server
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)
, whereport
is the network port to listen on. Alternate implementations ofServerSocket
, such as ssl versions may be used instead.handlerName
- The name of the handler used to process http requests. It must implement theHandler
interface.props
- Arbitrary information made available to the handler. May benull
.- See Also:
-
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 Details
-
setup
-
init
public boolean init() -
restart
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 itsHandler.init
method may have wanted to examine server member variables such ashostName
orbufsize
. -
close
public void close()Stop the server, and kill all pending requests -
log
Logs information about the socket toSystem.out
.- Parameters:
level
- Controls the verbosity (0=least 5=most)obj
- The object that the message relates to.message
- The message to be logged.
-