Sun and Oracle Community Voices How to Buy Log In United States [Change] English

»  Spotlight Articles
»  Projects
»  Publications
»  People
»  Awards
»  Events
»  Downloads
»  Internships
»  Contrarian Minds
»  About Sun Labs
Brazil project: Class Server

sunlabs.brazil.server Class Server

java.lang.Object
  |
  +--java.lang.Thread
        |
        +--sunlabs.brazil.server.Server
All Implemented Interfaces:
Runnable

public class Server
extends 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.


Field Summary
 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            
 String hostName           The hostname that this Server should use to identify itself in an HTTP Redirect.
 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 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
 String name           The string to return as the value for the "Server:" line in the HTTP response header.
 String prefix           The handler is passed a prefix to identify which items in the properties object are relevent.
 Properties props           Hashtable containing arbitrary information that may be of interest to a Handler.
 String protocol           The protocol used to access this resource.
 int requestCount           Count of HTTP requests received so far.
 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
Server()           Set up the server.
Server(ServerSocket listen, String handlerName, Properties props)           Create a server using the provided listener socket.
 
Method Summary
 void close()           Stop the server, and kill all pending requests
 void log(int level, Object obj, String message)           Logs information about the socket to System.out.
 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, countStackFrames, currentThread, destroy, dumpStack, enumerate, getContextClassLoader, getName, getPriority, getThreadGroup, interrupt, interrupted, isAlive, isDaemon, isInterrupted, join, join, join, resume, setContextClassLoader, setDaemon, setName, setPriority, sleep, sleep, start, stop, stop, suspend, toString, yield
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

listen

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

handler

public Handler handler

props

public Properties props
Hashtable containing arbitrary information that may be of interest to a Handler. This table is available to both methods of the Handler interface, as props in the Handler.init(Server, String) method, and as the default properties of Request.props in the Handler.respond(Request) method.

hostName

public 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 String protocol
The protocol used to access this resource. Normally http, but can be changed for ssl to https

restrict

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

The default value is null.


name

public 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 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

bufsize

public int bufsize
Default buffer size for copies to and from client sockets.

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

LOG_ERROR

public static final int LOG_ERROR

LOG_WARNING

public static final int LOG_WARNING

LOG_LOG

public static final int LOG_LOG

LOG_INFORMATIONAL

public static final int LOG_INFORMATIONAL

LOG_DIAGNOSTIC

public static final int LOG_DIAGNOSTIC
Constructor Detail

Server

public Server(ServerSocket listen,
              String handlerName,
              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(ServerSocket listen,
                     String handlerName,
                     Properties props)

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.

Overrides:
run in class Thread

close

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

log

public void log(int level,
                Object obj,
                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.

Version 2.2, Generated 07/25/00
Copyright (c) 2000, Sun Microsystems.