¿Cuál es la diferencia entre JSF, Servlet y JSP?

826

Tengo algunas preguntas. Estos son :

  1. ¿Cómo se relacionan JSP y Servlet?
  2. ¿Es JSP algún tipo de servlet?
  3. ¿Cómo se relacionan JSP y JSF entre sí?
  4. ¿Es JSF algún tipo de JSP basado en IU precompilado como ASP.NET-MVC?
Cheung
fuente
3
En JSF 2.0+, xml no es necesario.
Divyesh Kanzariya

Respuestas:

1229

JSP (páginas de JavaServer)

JSP es una tecnología de vista Java que se ejecuta en la máquina del servidor que le permite escribir texto de plantilla en los idiomas del lado del cliente (como HTML, CSS, JavaScript, etc.). JSP admite taglibs , que están respaldados por fragmentos de código Java que le permiten controlar el flujo o la salida de la página dinámicamente. Un taglib bien conocido es JSTL . JSP también admite Expression Language , que se puede utilizar para acceder a datos de back-end (a través de los atributos disponibles en la página, solicitud, sesión y ámbitos de aplicación), principalmente en combinación con taglibs.

Cuando se solicita un JSP por primera vez o cuando se inicia la aplicación web, el contenedor de servlets lo compilará en una clase que se extenderá HttpServlety lo usará durante la vida útil de la aplicación web. Puede encontrar el código fuente generado en el directorio de trabajo del servidor. En, por ejemplo , Tomcat , es el /workdirectorio. En una solicitud JSP, el contenedor de servlet ejecutará la clase JSP compilada y enviará la salida generada (generalmente solo HTML / CSS / JS) a través del servidor web a través de una red al lado del cliente, que a su vez lo muestra en el navegador web.

Servlets

Servlet es una interfaz de programación de aplicaciones (API) de Java que se ejecuta en la máquina del servidor, que intercepta las solicitudes realizadas por el cliente y genera / envía una respuesta. Un ejemplo bien conocido es el HttpServletque proporciona métodos para enganchar solicitudes HTTP utilizando los métodos HTTP populares como GETy POST. Puede configurar HttpServlets para escuchar un determinado patrón de URL HTTP, que se puede configurar en Java EE 6 , web.xmlo más recientemente , con anotaciones.@WebServlet

Cuando se solicita un Servlet por primera vez o durante el inicio de la aplicación web, el contenedor del servlet creará una instancia del mismo y lo mantendrá en la memoria durante la vida útil de la aplicación web. La misma instancia se reutilizará para cada solicitud entrante cuya URL coincida con el patrón de URL del servlet. Puede acceder a los datos de la solicitud HttpServletRequesty manejar la respuesta mediante HttpServletResponse. Ambos objetos están disponibles como argumentos de método dentro de cualquiera de los métodos anulados de HttpServlet, como doGet()y doPost().

JSF (Caras JavaServer)

JSF es un marco MVC basado en componentes que se construye sobre la API de Servlet y proporciona componentes a través de taglibs que se pueden usar en JSP o cualquier otra tecnología de vista basada en Java como Facelets . Facelets es mucho más adecuado para JSF que JSP. Es decir, proporciona excelentes capacidades de creación de plantillas , como componentes compuestos , mientras que JSP básicamente solo ofrece la <jsp:include>creación de plantillas en JSF, por lo que se ve obligado a crear componentes personalizados con código Java sin procesar (que es un poco opaco y mucho trabajo tedioso) cuando desea reemplazar un grupo repetido de componentes con un solo componente. Desde JSF 2.0, JSP ha quedado en desuso como tecnología de visualización a favor de Facelets.

Nota : JSP en sí NO está en desuso, solo la combinación de JSF con JSP está en desuso.

Nota : JSP tiene grandes habilidades de plantilla mediante Taglibs, especialmente la variante ( Archivo de etiqueta ). La plantilla JSP en combinación con JSF es lo que falta.

Al ser un marco MVC ( Modelo-Vista-Controlador ), JSF proporciona FacesServletel único controlador de solicitud-respuesta . Toma todo el trabajo estándar y tedioso de solicitud / respuesta HTTP de sus manos, como recopilar información del usuario, validarla / convertirla, colocarla en objetos modelo, invocar acciones y presentar la respuesta. De esta manera, terminará básicamente con una página JSP o Facelets (XHTML) para View y una clase JavaBean como Modelo . Los componentes JSF se utilizan para vincular la vista con el modelo (como lo hace su control web ASP.NET) y FacesServletutiliza el árbol de componentes JSF para hacer todo el trabajo.

Preguntas relacionadas

BalusC
fuente
8
@Shashank: No del todo. Solo la <c:forEach>etiqueta es de JSTL. Ver también stackoverflow.com/tags/jstl/info
BalusC
1
Si. <mytag:doesSomething/>parece una etiqueta personalizada y <jsp:attribute>una etiqueta jsp.
Shashank Kadne
3
Dado que esta es una respuesta muy popular, quiero agregar un bit muy importante que son los archivos de etiquetas JSP que permiten la creación de etiquetas personalizadas para la composición y el diseño de la página sin escribir código Java. Esta característica es extremadamente útil y ha sido parte del estándar durante muchos años, pero sigue siendo subutilizada.
jiggy
1
@johnny Facelets ha sido la tecnología de visualización preferida desde que se lanzó Java EE 6 en 2009 ( docs.oracle.com/javaee/6/tutorial/doc/giepx.html ). El conjunto mínimo de tecnologías para desarrollar aplicaciones web Java no es más alto que la mayoría de los otros idiomas, pero hay muchas más opciones y competidores, lo que es confuso para los recién llegados. Desarrollo web en Ruby? La primera opción es obvia.
DavidS
1
@BalusC +1 para una explicación detallada. Mi respuesta favorita
Anish B.
84

Ver http://www.oracle.com/technetwork/java/faq-137059.html

La tecnología JSP es parte de la familia de tecnología Java. Las páginas JSP se compilan en servlets y pueden llamar a componentes JavaBeans (beans) o componentes Enterprise JavaBeans (beans Enterprise) para realizar el procesamiento en el servidor. Como tal, la tecnología JSP es un componente clave en una arquitectura altamente escalable para aplicaciones basadas en web.

Ver https://jcp.org/en/introduction/faq

R: La tecnología JavaServer Faces es un marco para crear interfaces de usuario para aplicaciones web. La tecnología JavaServer Faces incluye:

Un conjunto de API para: representar los componentes de la interfaz de usuario y administrar su estado, manejar eventos y validación de entradas, definir la navegación de la página y apoyar la internacionalización y la accesibilidad.

Una biblioteca de etiquetas personalizadas JavaServer Pages (JSP) para expresar una interfaz JavaServer Faces dentro de una página JSP.

JSP es un tipo especializado de servlet.

JSF es un conjunto de etiquetas que puede usar con JSP.

S.Lott
fuente
66
"JSP es un tipo de servlet especializado. JSF es un conjunto de etiquetas que puede usar con JSP". ¡Esta declaración describe mejor la relación entre los tres!
Libre
34

Desde la perspectiva del navegador / cliente

JSP y JSF tienen el mismo aspecto. Según los requisitos de la aplicación, JSP es más adecuado para aplicaciones basadas en solicitudes y respuestas.

JSF está dirigido a aplicaciones web más ricas basadas en eventos. Veo el evento mucho más granular que la solicitud / respuesta.

Desde la perspectiva del servidor

La página JSP se convierte en servlet y solo tiene un comportamiento mínimo.

La página JSF se convierte en el árbol de componentes (por FacesServlet especializado) y sigue el ciclo de vida del componente definido por las especificaciones.

Vh24
fuente
23

Servlets:

La API de Java Servlet permite a los desarrolladores de Java escribir código del lado del servidor para entregar contenido web dinámico. Al igual que otras API de servidor web patentadas, la API de Java Servlet ofreció un rendimiento mejorado sobre CGI; Sin embargo, tiene algunas ventajas adicionales clave. Debido a que los servlets se codificaron en Java, proporcionan un enfoque de diseño orientado a objetos (OO) y, lo que es más importante, pueden ejecutarse en cualquier plataforma. Por lo tanto, el mismo código era portátil para cualquier host que admitiera Java. Los servlets contribuyeron en gran medida a la popularidad de Java, ya que se convirtió en una tecnología ampliamente utilizada para el desarrollo de aplicaciones web del lado del servidor.

JSP:

JSP se basa en los servlets y proporciona una solución más simple y basada en páginas para generar grandes cantidades de contenido HTML dinámico para las interfaces de usuario web. JavaServer Pages permite a los desarrolladores y diseñadores web simplemente editar páginas HTML con etiquetas especiales para las porciones dinámicas de Java. JavaServer Pages funciona al tener un servlet especial conocido como contenedor JSP, que está instalado en un servidor web y maneja todas las solicitudes de vista de página JSP. El contenedor JSP traduce un JSP solicitado en un código de servlet que luego se compila y se ejecuta inmediatamente. Las solicitudes posteriores a la misma página simplemente invocan el servlet de tiempo de ejecución de la página. Si se realiza un cambio en el JSP en el servidor, una solicitud para verlo desencadena otra traducción, compilación y reinicio del servlet de tiempo de ejecución.

JSF:

JavaServer Faces es un marco estándar de Java para crear interfaces de usuario para aplicaciones web. Lo más importante es que simplifica el desarrollo de la interfaz de usuario, que a menudo es una de las partes más difíciles y tediosas del desarrollo de aplicaciones web.
Aunque es posible construir interfaces de usuario mediante el uso de tecnologías web Java básicas (como servlets Java y páginas JavaServer) sin un marco integral diseñado para el desarrollo de aplicaciones web empresariales, estas tecnologías centrales a menudo pueden conducir a una variedad de problemas de desarrollo y mantenimiento. Más importante aún, cuando los desarrolladores alcancen una solución de calidad de producción, el mismo conjunto de problemas resueltos por JSF se habrá resuelto de manera no estándar. JavaServer Faces está diseñado para simplificar el desarrollo de interfaces de usuario para aplicaciones web Java de las siguientes maneras:
• Proporciona un enfoque de desarrollo centrado en componentes e independiente del cliente para construir interfaces de usuario web, mejorando así la productividad del desarrollador y la facilidad de uso.
• Simplifica el acceso y la gestión de los datos de la aplicación desde la interfaz de usuario web.
• Gestiona automáticamente el estado de la interfaz de usuario entre múltiples solicitudes y múltiples clientes de una manera simple y discreta.
• Proporciona un marco de desarrollo que es amigable para una audiencia diversa de desarrolladores con diferentes conjuntos de habilidades.
• Describe un conjunto estándar de patrones arquitectónicos para una aplicación web.

[ Fuente: Referencia completa: JSF ]

Kishor Prakash
fuente
3
No fui yo, pero imagino que es porque básicamente copias y pegas una respuesta de un libro.
mawburn
77
@ Oberon: Gracias por la respuesta. Me tomó un tiempo encontrar las palabras exactas, así que fui por libro. Si no es apropiado, entonces usted o cualquiera puede sugerirme que anote la respuesta. Estaré encantado de hacerlo.
Kishor Prakash
18

También hay situaciones en las que puede favorecer JSP sobre JSF. La naturaleza de la aplicación debe ser el factor decisivo para elegir la tecnología.

Si tiene una interacción GUI rica y se necesitan muchas secuencias de comandos Java, favorezca JSF. Básicamente, si la arquitectura de su aplicación GUI está orientada a componentes e incluso impulsada como Swing, JSF es la mejor.

Si la aplicación es solo un envío de formulario simple, no se necesita mucha interacción GUI, entonces JSP podría funcionar bien si aprender una nueva tecnología es una sobrecarga y también es innecesario un marco complejo.

Karthi
fuente
13

Servlet: es la capa del lado del servidor de Java.

  • JSP - es Servlet con html
  • JSF: sus componentes se basan en bibliotecas de etiquetas
  • JSP: se convierte en servlet una vez cuando el servidor recibe la solicitud.
cacareo
fuente
2
JSP se convierte en servlet una vez cuando el servidor recibió la solicitud.
cacareo
... cuando el servidor recibió la PRIMERA solicitud. Mente en caché.
dbalakirev
10

eso es cierto que JSP se convierte en servlet en el momento de la ejecución, y JSF es algo totalmente nuevo para que la página web sea más legible ya que JSF permite escribir todas las estructuras de programación en forma de etiqueta.

mahesh
fuente
6

La diferencia básica entre Servlets y JSP es que en Servlets escribimos código java y en que incorporamos código HTML y simplemente hay un caso inverso con JSP. En JSP escribimos código HTML y en él incorporamos código Java usando etiquetas proporcionadas por JSP.

usuario3608245
fuente
5

Java Server Pages (JSP) es una tecnología de Java que permite a los desarrolladores y diseñadores web desarrollar rápidamente y mantener fácilmente páginas web dinámicas y ricas en información que aprovechan los sistemas comerciales existentes. La tecnología JSP separa la interfaz de usuario de la generación de contenido, lo que permite a los diseñadores cambiar el diseño general de la página sin alterar el contenido dinámico subyacente.

Facelets es el primer lenguaje de declaración de página que no es JSP diseñado para JSF (Java Server Faces) que proporcionó un modelo de programación más simple y potente para los desarrolladores de JSF en comparación con JSP. Resuelve diferentes problemas que ocurren en JSP para el desarrollo de aplicaciones web.

Aquí hay una tabla que compara las características de scriplets y facelets:

ingrese la descripción de la imagen aquí Fuente

Yster
fuente
0
JSP:means HTML+Java Code:

JSP tiene su propio ciclo de vida jsp_init () jsp_service () jsp_destroy

Después de la primera solicitud, JSP convierte al archivo .java. Hay tres tipos de etiquetas que estamos usando
1.) Sin script

<%  %>

Aquí el desarrollador puede declarar todas esas cosas que el desarrollador quiere tomar los datos

2.) Etiqueta de expresión

<%=  %>

Aquí el desarrollador puede usar algunos datos relacionados con la impresión

3.) Declaración

<!% %>

Aquí el desarrollador puede declarar algunos datos relacionados con el método.

Servlet:

Servlet tiene su propio ciclo de vida.

init()
service()
destroy()

Después del primer contenedor de solicitud leerá los datos del archivo web.xml y luego se mostrará el relleno de bienvenida.
Ahora en adelante, después de realizar la acción, buscará la url y después de este proceso buscará el servlet particular allí mismo. Se realizará la operación de servicio.

JSF:

JSF tiene su propia interfaz de usuario y su ciclo de vida puede funcionar de seis maneras,

A)Restore view phase
B)Apply request values phase
C)Process validations phase
D)Update model values phase
E)Invoke application phase
F)Render response phase

Para ui aquí para la tabla aquí estamos usando una cuadrícula de panel y hay diferentes caras para esto.

Rich Faces
Prime Faces.
Ankit
fuente
-1

Los JSP son el componente de vista de MVC (Model View Controller). El Controlador toma la solicitud entrante y la pasa al Modelo, que podría ser un bean que tiene algún acceso a la base de datos. El JSP luego formatea la salida usando HTML, CSS y JavaScript, y la salida se envía de vuelta al solicitante.

metrangia
fuente
-1

JSF es un marco avanzado en el que es muy fácil implementar una arquitectura basada en Modelo-Vista-Controlador (MVC) para proyectos. La principal ventaja de JSF sobre JSP es la fácil representación dinámica de los componentes en el navegador en función de las condiciones y la fácil integración de los eventos ajax.

El front-end de la aplicación JSF, es decir, los archivos xhtml son los que se muestran al usuario a través del navegador. Estos archivos xhtml invocan internamente beans gestionados, por ejemplo, controladores en los que se escribe la lógica real de la aplicación.

Los controladores invocan internamente varios servicios que se comunican con la base de datos (utilizando Hibernate o JPA API). Así es como el flujo ocurre en resumen.

JSF también se usa en combinación con RichFaces, que es un marco para dar una apariencia rica a su aplicación web.

¡JSF + RichFaces + Hibernate / JPA es una buena tecnología para aprender con seguridad!

Nikhil
fuente
-2

Jsp también tiene un código de servlet incorporado que no necesita ninguna compilación externa, se puede ejecutar directamente. Los cambios tendrán efecto en jsp directamente en un navegador.

El servlet debe compilarse (es decir, tendrá una creación de clase específica)

Jsf es un componente de vista de MVC Framework

Mahender Reddy Yasa
fuente
-2

JSP significa JAVA SERVER PAGE ........ jsp no es un servlet. Jsp usa código y etiqueta HTML, tanto en sí mismo que no necesita hacer un HTML y un servlet por separado. Jsp está desempeñando un papel magnífico en la aplicación web. Servlet es una clase de Java que juega un papel importante para que su página HTML pase de estática a dinámica.

Roopam
fuente
2
Los JSP se convierten en componentes Servlet. "Los JSP se traducen en servlets en tiempo de ejecución". Fuente: en.wikipedia.org/wiki/JavaServer_Pages
dbalakirev
-2

Los servlets son los programas Java del lado del servidor que se ejecutan dentro del contenedor web. El objetivo principal del servlet es procesar las solicitudes recibidas del cliente.

Java Server Pages se usa para crear páginas web dinámicas. Los Jsp se introdujeron para escribir código java plus html en un solo archivo que no fue fácil de hacer en el programa de servlets. Y un archivo jsp se convierte en un servlet java cuando se traduce.

Java Server Faces es un marco web MVC que simplifica el desarrollo de la interfaz de usuario.

Hetal Rachh
fuente