JPS alternative for Dropwizard - Servlet with Apache Velocity template engine
JSP
JSP (Java Server Pages) is used to create web applications. It easy to separate presentation from business logic. JSP defines a page template with static content and tags inside which are evaluated in business logic and replaced in a template.
Dropwizard
Dropwizard is Java framework for building a RESTful web server in very short time. It has incorporated proven libraries like Jetty, Jersey, Jackson and many more to reliably do the job in shortest possible time. They have very good getting started tutorial how to make a project from scratch. Dropwizard doesn't have support for JPS. This is because its purpose is to be REST server, not a web application server.
Dropwizard servlet support
JSP support is not in the scope of Dropwizard as it is designed for microservices not for Web application server see more in Any JSP support going on? thread. Dropwizard has servlet support though. Internally JSP is compiled to the servlet so it is alternative to use some template engine within a servlet.
Dropwizard views
Dropwizard provides so-called Views which actually uses FreeMarker or Mustache template engines. See more about views in Dropwizard Views page. This is Dropwizard's build in JSP alternative. If you want to go that way then the rest of this post is not really helpful to you.
Apache Velocity
Apache Velocity is a template engine. HTML code is defined as a template with dynamic values substituted with special tags, similar to JSP.
Define Velocity template
The template contains HTML code and tags starting with $ sign, in the example below this is $productId. The template is put in project's "resource" folder.
This is 'Product $productId name' details page.
Initialise Velocity engine
This is done in Servlet's init() method. It is important to give as a property where Velocity should look for its resources. It is in the class loader.
In order to render the template $variable needs to be substituted with valued values in a VelocityContext map. Note that if given value is null then $variable is being outputted directly, so this case should be handled correctly.
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String productId = request.getParameter("id"); if (StringUtils.isEmpty(productId)) { productId = ""; } VelocityContext context = new VelocityContext(); context.put("productId", productId); StringWriter writer = new StringWriter(); details.merge(context, writer); String result = writer.toString(); // Output response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println(result);}