Search code examples
javahtmlhibernateservletsj2html

login form sample using j2html


I just tried to create the login form using html in servlet.but I got stuck some place.

I'm just using maven dependencies.so I don't have to care about jars.

so,let's take a look my main java code

package tutor.programacion.primerservlet;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import j2html.tags.Tag;

import static j2html.TagCreator.*;
/**
 * Servlet implementation class sampleJava2HTML
 */
@WebServlet("/")
public class sampleJava2HTML extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        System.out.println("inside the servlet calling this");
        enterPasswordInput("please enter something");




    }


public static Tag enterPasswordInput(String placeholder) {
        return passwordInput("enterpassword",placeholder);
    }


public static Tag passwordInput(String identifier,String placeholder) {
    return input()
            .withType("password")
            .withId(identifier)
            .withName(identifier)
            .withPlaceholder(placeholder)
            .isRequired();
}

}

Solution

  • To generate the HTML you should add your Tag to a ContainerTag like html() and then call renderFormatted() method.

    For example:

    import static j2html.TagCreator.body;
    import static j2html.TagCreator.form;
    import static j2html.TagCreator.h1;
    import static j2html.TagCreator.html;
    import static j2html.TagCreator.input;
    
    import j2html.tags.ContainerTag;
    import j2html.tags.Tag;
    
    public class _50480568 {
    
        public static void main(String[] args) {
            System.out.println(generateHTML());
        }
    
        private static String generateHTML() {
            return html(generateBody()).renderFormatted();
        }
    
        private static ContainerTag generateBody() {
            return body(generetaH1Title(), generateForm());
        }
    
        private static ContainerTag generateForm() {
            return form().withMethod("post").withAction("/yourServlet").with(generateUserField(), generatePasswordField());
        }
    
        private static Tag generateUserField() {
            return input().withType("text").withName("user").withId("user");
        }
    
        private static ContainerTag generetaH1Title() {
            return h1("Hello World - Body!");
        }
    
        private static Tag generatePasswordField() {
            return input().withType("password").withName("password").withId("password");
        }
    
    }
    

    Since you are on a Servlet class, instead writing on console (System.out.println()) you should write to your response on doGet method as bellow:

    java.io.PrintWriter pw = resp.getWriter();
    pw.println(generateHTML());
    

    This should render the following HTML:

    <html>
        <body>
            <h1>
                Hello World - Body!
            </h1>
            <form method="post" action="/yourServlet">
                <input type="text" name="user" id="user">
                <input type="password" name="password" id="password">
            </form>
        </body>
    </html>
    

    My project was built with maven using j2html version 1.2.2

    <dependency>
        <groupId>com.j2html</groupId>
        <artifactId>j2html</artifactId>
        <version>1.2.2</version>
    </dependency>