Il vantaggio principale di JSP è che è più facile codificarlo e leggere quando stai creando un front-end HTML dinamico.
Questo perché scrivi principalmente HTML e in alcuni casi incorpora il codice Java.
In una servlet dovresti invertire la logica, cioè scrivere codice java e stampare HTML.
Questo perché nel livello di presentazione la maggior parte del codice è HTML / JS.
D'altro canto, la logica aziendale è in gran parte codice Java, quindi in tal caso è meglio usare Servlet o POJO (semplici, vecchi oggetti Java).
EDIT: non c'è differenza di prestazioni dal momento che il codice JSP, in quanto tale, non viene mai eseguito, viene convertito in servlet. Solo la prima volta che esegui il JSP dopo che è stato modificato, è necessario un po 'più di tempo perché venga convertito in servlet.
Confronta un semplice programma "Hello World" in JSP vs servlet:
JSP:
<html>
<head><title>Hello World JSP Page.</title></head>
<body>
<font size="10"><%="Hello World!" %></font>
</body>
</html>
Servlet
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HelloWorld extends HttpServlet{
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException,IOException{
response.setContentType("text/html");
PrintWriter pw = response.getWriter();
pw.println("<html>");
pw.println("<head><title>Hello World</title></title>");
pw.println("<body>");
pw.println("<h1>Hello World</h1>");
pw.println("</body></html>");
}
}