Senza usare framework particolari, il minimo per fare qualcosa di un po' "pulito" e sensato sarebbe usare Servlet e pagine JSP. Le Servlet ricevono la request in prima battuta, fanno validazioni dei parametri, accessi/elaborazioni su DB e altra logica ma non generano alcunché in response.
Poi a seconda di cosa succede (successo, errore, ....) fanno un "forward" interno ad una pagina JSP (tipicamente non accessibile direttamente dal client, cioè messa di norma sotto WEB-INF) che si occupa solo di fare da "view" (vista).
All'interno della pagina JSP c'è il codice HTML e si possono usare custom tag come quelli di JSTL, in modo da evitare di mettere scriplet (codice Java) all'interno della pagina.
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
Ok,allora non avendo ancora studiato javascript l'unica soluzione per ora è proprio solo servlet