Servleti su najcesce obicne java klasa koje odgovaraju na neki network request.
Obicno se radi o HTTP zahtevu (Request-response). Http nije jedini protokol, mada je najrasprostranjeniji.
Servleti zive u Servlet containeru koji je odgovoran za pravilno parsiranje zahteva
Uvek imas opciju da handlujes inbound upite tako sto ces pisati klasicne servlete, medjutim daleko ti je lakse da koristis @Controller ili @RestController annotacije specificne za spring framework.
Na taj nacin sve RequestMapping metode ce biti mapirane u DispatcherServlet-u koji ce da sluzi kao jedan veliki servlet ispred svih tvojih kontrolera.
Tako da u tom smislu, svakako da su servleti osnova za spring web aplikacije.
Sto se tice JSP. U sustini jsp je prevazidjen u potpunosti, pogotovo zbog konflikta sa Embedded servlet containerima (koji su sada defakto standard) i jednostavno postoje bolja resenja za serviranje view-a od jsp.
Najpopularniji template engine za javu je Thymeleaf mada ja ponekada koristim i Velocity.
As a side note ja licno nisam napisao klasicnu MVC aplikaciju dosta dugo. U zadnje vreme pisem skoro ekskluzivno RESTFul service, koji kao odgovor na request ne vracaju View (prikaz) nego reprezentaciju u JSON ili XML formatu u zavisnosti od toga sta klijent zeli, tako da se ti kao, server-side developer vise ne bavis prikazima.
Spring, iako je java framework je narastao poprilicno, pa zahteva poprilicno ucenja.
Sam pogled na stranicu
https://spring.io/docs/reference ce ti biti dovoljan da razumes o cemu pricam.
Ono sto ces koristiti u every-day aplikacijama je spring-boot, spring-security, spring-data-jpa (sve ostalo bude specificno od projekta do projekta).