Simple web application with template engine integration
In this example you can explore how to implement template engines in DataKernel applications. This example is a Poll app
which can create new polls with custom title, description and options. After poll is created, its unique link is generated. It
leads to a page where you can vote.
See how simple it is to implement such features using DataKernel HTTP module. The
embedded application server has only about 100 lines of code with no additional xml
configurations. In this example we used Mustache as a template engine.
ApplicationLauncher launches our application and takes care of routing and generating needed content on HTML pages. We
will extend DataKernel HttpServerLauncher, which manages application lifecycle:
In this example we are omitting error handling to keep everything brief and simple.
Let’s have a closer look at the launcher.
applyTemplate(Mustache mustache, Map<String, Object> scopes) fills the provided Mustache template with given data.
provide PollDaoImpl which includes business logic of our application.
Next, we provide AsyncServlet:
In the AsyncServlet we create three Mustache objects for our three HTML pages.
Then we create a DataKernel RoutingServlet and define routing. Routing approach resembles Express. In the example
we’ve added the request to the homepage.
In the request we are getting all current polls and information about them. This information is used to generate listPolls page correctly.
Method map(@Nullable HttpMethod method, String path, AsyncServlet servlet) adds the route to the RoutingServlet:
method is one of the HTTP methods (GET, POST and so on)
path is the path on the server
servlet defines the logic of request processing. If you need to get some data from the request while processing you can use:
request.getPathParameter(String key)/request.getQueryParameter(String key) (see example of query parameter usage
to provide the key of the needed parameter and receive back a corresponding String
request.getPostParameters() to get a Map of all request parameters
Let’s add one more request:
This request returns a page with specific poll (if there is a poll with such id).
Pay attention to the provided path /poll/:id. : states that the following characters until the next / is a
variable which keyword is, in this case, id.
The next requests with /create, /vote, /add and /delete paths take care of providing page for creating
new polls, voting, adding created polls to the pollDao and deleting them from the pollDao respectively:
Also, we defined main() method which will start our launcher:
And that’s it, we have a full-functioning poll application!
Running the application
If you want to run the example, you need to clone DataKernel and import
it as a Maven project. Before running the example, build the project (Ctrl + F9 for IntelliJ IDEA).
Open PollLauncher class and run its main() method.
Then open your favourite browser and go to localhost:8080.