La principal ventaja de JSP es que es más fácil de codificar y leer cuando está creando un front-end HTML dinámico.
Eso es porque escribe principalmente HTML y en algunos lugares incrusta el código Java.
En un servlet, tendría que invertir la lógica, es decir, escribir código Java e imprimir HTML.
Eso es porque en la capa de presentación la mayoría del código es HTML / JS.
Por otro lado, la lógica empresarial se encuentra en la mayoría de los códigos Java de la parte, por lo que en ese caso es mejor usar servlets o POJOS (objetos llanos, antiguos Java).
Editar: No hay una diferencia de rendimiento desde el código JSP, como tal, nunca se ejecuta, se convierte en un servlet.Solo la primera vez que ejecuta el JSP después de que se haya cambiado, se tarda un poco más tiempo en ejecutarse porque debe convertirse en servlet.
Compare un programa simple "Hello World" en 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>");
}
}