scamper.http.server
Members list
Type members
Classlikes
Tags lifecycle hook as a critical service.
Tags lifecycle hook as a critical service.
Server creation is halted if a critical service fails to process the start event.
Attributes
- See also
- Supertypes
-
class Objecttrait Matchableclass Any
- Self type
Defines utility for handling error during request processing.
Defines utility for handling error during request processing.
Attributes
- Companion
- object
- Supertypes
-
class Objecttrait Matchableclass Any
Provides ErrorHandler
utilities.
Provides ErrorHandler
utilities.
Attributes
- Companion
- trait
- Supertypes
-
class Objecttrait Matchableclass Any
- Self type
-
ErrorHandler.type
Defines handle to server instance.
Defines handle to server instance.
Attributes
- See also
- Companion
- object
- Supertypes
-
trait AutoCloseableclass Objecttrait Matchableclass Any
Provides factory for HttpServer
.
Provides factory for HttpServer
.
Attributes
- Companion
- trait
- Supertypes
-
class Objecttrait Matchableclass Any
- Self type
-
HttpServer.type
Indicates lifecycle exception.
Indicates lifecycle exception.
Value parameters
- cause
-
underlying cause
- message
-
detail message
Attributes
- Constructor
-
Creates exception with supplied message and cause.
- Supertypes
-
class RuntimeExceptionclass Exceptionclass Throwabletrait Serializableclass Objecttrait Matchableclass AnyShow all
Defines lifecycle hook.
Defines lifecycle hook.
Attributes
- See also
- Supertypes
-
trait EventListenerclass Objecttrait Matchableclass Any
Indicates parameter cannot be converted.
Indicates parameter cannot be converted.
Attributes
- Supertypes
-
trait Producttrait Equalsclass HttpExceptionclass RuntimeExceptionclass Exceptionclass Throwabletrait Serializableclass Objecttrait Matchableclass AnyShow all
Indicates parameter is not found.
Indicates parameter is not found.
Attributes
- Supertypes
-
trait Producttrait Equalsclass HttpExceptionclass RuntimeExceptionclass Exceptionclass Throwabletrait Serializableclass Objecttrait Matchableclass AnyShow all
Defines access to path parameters.
Defines access to path parameters.
Attributes
- Supertypes
-
class Objecttrait Matchableclass Any
Defines handler for incoming request.
Defines handler for incoming request.
Attributes
- Companion
- object
- Supertypes
-
class Objecttrait Matchableclass Any
Provides RequestHandler
utilities.
Provides RequestHandler
utilities.
Attributes
- Companion
- trait
- Supertypes
-
class Objecttrait Matchableclass Any
- Self type
-
RequestHandler.type
Indicates response was aborted.
Indicates response was aborted.
A RequestHandler
throws ResponseAborted
if no response should be sent for the request.
Attributes
- Supertypes
-
trait Producttrait Equalsclass HttpExceptionclass RuntimeExceptionclass Exceptionclass Throwabletrait Serializableclass Objecttrait Matchableclass AnyShow all
Defines filter for outgoing response.
Defines filter for outgoing response.
Attributes
- Companion
- object
- Supertypes
-
class Objecttrait Matchableclass Any
Provides ResponseFilter
utilities.
Provides ResponseFilter
utilities.
Attributes
- Companion
- trait
- Supertypes
-
class Objecttrait Matchableclass Any
- Self type
-
ResponseFilter.type
Defines router for request handling.
Defines router for request handling.
import scala.language.implicitConversions
import scamper.http.ResponseStatus.Registry.{ BadRequest, NotFound, Ok }
import scamper.http.server.{ ParameterNotConvertible, ServerApplication, toServerHttpRequest }
import scamper.http.stringToEntity
val app = ServerApplication()
// Mount router to /api
app.route("/api") { router =>
val messages = Map(1 -> "Hello, world!", 2 -> "Goodbye, cruel world!")
// Map handler to /api/messages
router.get("/messages") { req =>
Ok(messages.mkString("\r\n"))
}
// Map handler to /api/messages/:id
router.get("/messages/:id") { req =>
val id = req.pathParams.getInt("id")
messages.get(id)
.map(Ok(_))
.getOrElse(NotFound())
}
router.recover { req =>
{ case _: ParameterNotConvertible => BadRequest(req.target.toString) }
}
}
Attributes
- Supertypes
-
class Objecttrait Matchableclass Any
- Known subtypes
-
class ServerApplication
Defines router application.
Defines router application.
Attributes
- Supertypes
-
class Objecttrait Matchableclass Any
Defines server application for creating HttpServer
.
Defines server application for creating HttpServer
.
Default Configuration
The initial application is constructed with the following default configuration:
Key | Value |
---|---|
backlogSize | 50 |
poolSize | Runtime.getRuntime().availableProcessors() |
queueSize | Runtime.getRuntime().availableProcessors() * 4 |
bufferSize | 8192 |
readTimeout | 5000 |
headerLimit | 100 |
keepAlive | (Not configured) |
secure | (Not configured) |
trigger | (Not configured) |
incoming | (Not configured) |
outgoing | (Not configured) |
recover | (Sends 500 Internal Server Error ) |
Building HTTP Server
ServerApplication
is a mutable structure. With each applied change, the application is modified and returned. After the desired configuration is applied, a server is created using a factory method.
import java.io.File
import scala.language.implicitConversions
import scamper.http.{ BodyParser, stringToEntity }
import scamper.http.ResponseStatus.Registry.{ NotFound, NoContent, Ok }
import scamper.http.server.{ *, given }
// Get server application
val app = ServerApplication()
// Add request handler to log all requests
app.incoming { req =>
println(req.startLine)
req
}
// Add request handler for GET requests at specified path
app.get("/about") { req =>
Ok("This server is powered by Scamper.")
}
// Add request handler for PUT requests at specified path
app.put("/data/:id") { req =>
def update(id: Int, data: String): Boolean = ???
given BodyParser[String] = BodyParser.string()
// Get path parameter
val id = req.pathParams.getInt("id")
update(id, req.as[String]) match
case true => NoContent()
case false => NotFound()
}
// Serve files from file directory
app.files("/main", File("/path/to/public"))
// Gzip response body if not empty
app.outgoing { res =>
res.body.isKnownEmpty match
case true => res
case false => res.setGzipContentEncoding()
}
// Create server
val server = app.toHttpServer(8080)
try
printf("Host: %s%n", server.host)
printf("Port: %d%n", server.port)
// Run server for 60 seconds
Thread.sleep(60 * 1000)
finally
// Close server when done
server.close()
Attributes
- Supertypes
Adds server extensions to HttpMessage
.
Adds server extensions to HttpMessage
.
Attributes
- Supertypes
-
class AnyValtrait Matchableclass Any
Adds server extensions to HttpRequest
.
Adds server extensions to HttpRequest
.
Attributes
- Supertypes
-
class AnyValtrait Matchableclass Any
Adds server extensions to HttpResponse
.
Adds server extensions to HttpResponse
.
Attributes
- Supertypes
-
class AnyValtrait Matchableclass Any
Provides factory for upgrading request to WebSocket connection.
Provides factory for upgrading request to WebSocket connection.
import scamper.http.HttpRequest
import scamper.http.ResponseStatus.Registry.Unauthorized
import scamper.http.server.{ ServerApplication, WebSocketUpgrade }
val app = ServerApplication()
app.get("/chat/:roomId") { req =>
def authorize(req: HttpRequest): Boolean = ...
authorize(req) match
case true =>
WebSocketUpgrade(req) { session =>
// Set up session
...
session.open()
}
case false => Unauthorized()
}
Attributes
- Supertypes
-
class Objecttrait Matchableclass Any
- Self type
-
WebSocketUpgrade.type
Givens
Givens
Adds server extensions to HttpMessage
.
Adds server extensions to HttpMessage
.
Attributes
Adds server extensions to HttpRequest
.
Adds server extensions to HttpRequest
.
Attributes
Adds server extensions to HttpResponse
.
Adds server extensions to HttpResponse
.