Here we will consider only the HttpDecoderExample class with AsyncServlet as it contains
Consider this example as a concise representation of the MVC pattern:
To model a Contact representation, we will create a plain java class with fields (name, age, address), constructor and accessors to the fields.
To simplify the example, we will use an ArrayList to store the Contact objects. ContactDAO interface and its implementation are used for this purpose.
To build a view we will use a single HTML file, compiled with the help of the Mustache template engine.
An AsyncServlet will be used as a controller. We will also add RoutingServlet for routing a concrete request to a particular endpoint.
Decoder provides you with tools for parsing requests.
Creating HttpDecoderExample Class
Let’s create the HttpDecoderExample class which extends HttpServerLauncher. By extending the HttpServerLauncher we will take care
of the server’s lifecycle and service management. Next, we provide two custom parsers based on HttpDecoder- ADDRESS_DECODER and CONTACT_DECODER - which will be used
If you want to learn more about template engines integration, check out this example.
Also, we need to create applyTemplate(Mustache mustache, Map<String, Object> scopes) method to fill the provided
Mustache template with the given data:
Next, let’s provide a ContactDAOImpl factory method:
Now we have everything needed to create AsyncServlet to handle requests:
Here we provide an AsyncServlet, which receives HttpRequests from clients, creates HttpResponses depending on route path and sends it.
Inside the RoutingServlet two route paths are defined. The first one matches requests to the root route "/" -
it simply displays a contact list.
The second one, "/add" - is an HTTP POST method that adds or declines adding new users. We will process this request parsing with the
help of the aforementioned HttpDecoder by using decode(request) method:
Either represents a value of two possible data types (Contact, DecodeErrors).
Either is either Left(Contact) or Right(DecodeErrors).
In order to determine whether a parse was successfull or not, we check it’s value by using the isLeft() and isRight() methods.
Finally, write down the main() method which will launch our application:
Running the application
If you want to run the example, you need to clone DataKernel and
import it as a Maven project. Check out branch v3.1. Before running the example, build the project (Ctrl + F9 for IntelliJ IDEA).
Then open HttpDecoderExample class, which is located at datakernel -> examples -> tutorials -> decoder
and run its main() method. Open your favourite browser and go to localhost:8080.