L'uso più frequente delle servlet è la generazione di pagine webdinamiche a seconda dei parametri di richiesta inviati dal client browser dell'utente al server. Nelle applicazioni più moderne non viene eseguita la programmazione diretta delle servlet, ma si preferisce usare dei framework web che implementano la specifica servlet, oppure delle JavaServer Pages che vengono poi tradotte (compilate) in servlet a runtime.
I programmi che implementano le specifiche dei servlet possono girare all'interno di qualunque servlet container e non sono vincolati ad un particolare server. Lo standard delle servlet rientra all'interno di un vasto insieme di standard detto Java EE[2][3]. Una servlet può avere molteplici funzionalità e può essere associata ad una o più risorse web.
Per esempio per la realizzazione della parte di Controller nel patternModel-View-Controller (MVC) in una architettura basata su Java si può ricorrere ad una servlet (es. Spring framework, Java Server Faces). Questa servlet, una volta invocata dal server, deciderà quale pagina visualizzare o quale parte dell'applicazione invocare.
Un altro esempio potrebbe essere un meccanismo per il riconoscimento dell'utente (login): quando si digita un URL del tipo miosito/login.login viene invocata una servlet che verifica la correttezza delle credenziali di accesso inserite appoggiandosi ad un database e indirizza ad una pagina di conferma o di errore a seconda del risultato.
Sotto quest'ottica una servlet è un programma che deve rispettare determinate regole e che processa in un determinato modo una richiesta HTTP.
Nulla vieta che all'interno dello stesso server web possano girare più servlet associate a URL diversi, ognuna delle quali eseguirà operazioni diverse ed estenderà le funzionalità del server web.
Versioni
La versione della specifica servlet 3.0 corrisponde alla JSR 315[4]. Tra le novità più importanti, la possibilità di gestire in modo asincrono le richieste HTTP ed il fatto che il file di configurazione web.xml diventa opzionale. La versione 3.1, corrispondente alla JSR 340[5], permette l'elaborazione di richieste asincrone.
La versione 4.0 di questa specifica, corrisponde alla JSR 369[6] è stata l'ultima versione rilasciata nell'ambito Java EE. Questa versione supporta HTTP/2 e permette di inviare delle risorse in modalità push dal server al client[7].
La versione 5.0 è stata parte del rilascio di Jakarta EE 9[8], in questa versione, tutti i pacchetti javax.servlet sono stati rinominati in jakarta.servlet.