In this example we will implement template engines in ActiveJ applications. The example shows how to create a simple Poll app which creates new polls with a custom title, description, and options. Each new poll gets a unique generated link that leads to the page where you can vote.
See how simple it is to implement such features using ActiveJ: 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, takes care of routing and proper content generation on HTML pages. We will extend ActiveJ's
HttpServerLauncher to manage the application's lifecycle:
In this example we omit error handling to keep everything brief and simple.
Let's have a closer look at the launcher. It contains two methods:
applyTemplate(Mustache mustache, Map<String, Object> scopes)fills the provided Mustache template with the given data through a
ByteBuf- a more efficient implementation of ByteBuffer;
pollRepo()provides the business logic of our app. The
@Providesannotation means it's done through ActiveJ Inject DI.
Next, we provide
AsyncServlet we create three Mustache objects, one for each HTML page.
To define routing, we create a
RoutingServlet. You may notice that the routing approach resembles Express.js. In the example above
we've added the mapping to the homepage by using the
map(@Nullable HttpMethod method, String path, AsyncServlet servlet) adds a route to the
methodis one of the HTTP methods (
POSTand so on)
pathis the path on the server
servletdefines the logic of request processing. If you need to get some data from the request while processing you can use:
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
In this request we get all current polls and info about them in order to generate listPolls page.
Let's add one more request:
This request returns a page with a poll which id was specified in the path.
Pay attention to the provided path
: states that the following characters until the next
/ are a
variable; in this case, its keyword is
id. This way you don't have to map each poll's id to a different request.
The next requests with
/delete paths take care of providing a page for creating
new polls, voting, adding created polls to the pollDao and deleting them from it respectively:
Also, we defined
main() method which will start our launcher:
And that's it, we have a full-functional poll application!
If you want to run the example, you need to from GitHub and import
it as a Maven project. Check out branch v4.3. Before running the example, build the project (Ctrl + F9 for IntelliJ IDEA).
ApplicationLauncher class and run its
Then open your favourite browser and go to localhost:8080