///////////////////////////////////////////////////////////////
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
///////////////////////////////////////////////////////////////

[[library-http, HTTP Library]]
= HTTP =

[devstatus]
--------------
source=libraries/http/dev-status.xml
--------------

The HTTP library provides a Jetty based embedded HTTP service with support for easy event listeners, servlets and
filters assembly as Services.

It's an easy way to embedd a servlet container and reuse everything that can be run in it (JAX-*, Restlet, Wicket,
Vaadin, GWT etc..). If instead you want to run a Zest™ Application in a servlet container, see <<library-servlet>>.

include::../../build/docs/buildinfo/artifact.txt[]

== Create an EventListenerService ==

EventListeners in HttpService are assembled as Services, so one have to declare a ServiceComposite like this:

[snippet,java]
----
source=libraries/http/src/test/java/org/apache/zest/library/http/FooServletContextListenerService.java
tag=context-listener
----

== Create a ServletService ==

Servlets in HttpService are assembled as Services, so one have to declare a ServiceComposite like this:

[snippet,java]
----
source=libraries/http/src/test/java/org/apache/zest/library/http/HelloWorldServletService.java
tag=servletservice
----

== Create a FilterService ==

It's the same for Filters. As an example here is the bundled UnitOfWorkFilterService declaration:

[snippet,java]
----
source=libraries/http/src/main/java/org/apache/zest/library/http/UnitOfWorkFilterService.java
tag=filterservice
----

== Jetty Service ==

=== Assembly ===

The HTTP library provide a JettyServiceAssembler and a fluent API to easily assemble Servlets and Filters.

[snippet,java]
----
source=libraries/http/src/test/java/org/apache/zest/library/http/JettyServiceTest.java
tag=assembly
----

This library can be used alonside the JMX library, described in <<library-jmx>>. If it is
visible and that you enable Jetty statistics configuration property they will be
automatically exposed through JMX.

Here is a simple example from the unit tests showing what's necessary but inside a simple
Module for the sake of clarity:

[snippet,java]
----
source=libraries/http/src/test/java/org/apache/zest/library/http/JettyJMXStatisticsTest.java
tag=jmx
----

=== Configuration ===

Underlying Jetty engine configuration is exposed as a Zest™ Service Configuration.
The only one that is mandatory is the port.

See org.apache.zest.library.http.JettyConfiguration for a reference of all available
configuration properties.

== Secure Jetty Service ==

The HTTP library provides a second HttpService that brings SSL support.

=== Assembly ===

Simply change from JettyServiceAssembler to SecureJettyServiceAssembler:

[snippet,java]
----
source=libraries/http/src/test/java/org/apache/zest/library/http/SecureJettyServiceTest.java
tag=assemblyssl
----

=== Configuration ===

You must at least configure a KeyStore using the three related properties. All the other
ones have sensible defaults.

If you want, or need, to do client certificate authentication you'll need to configure at
least a "trust store", a KeyStore that contains your trusted trust anchors.

Here is some code that set HTTP port a well as a KeyStore and a TrustStore as
SecureJettyConfiguration default during assembly:

[snippet,java]
----
source=libraries/http/src/test/java/org/apache/zest/library/http/MutualSecureJettyServiceTest.java
tag=config
----

See org.apache.zest.library.http.SecureJettyConfiguration for a reference of all available
configuration properties.


