Javalin - Microframework
Javalin - Microframework
Javalin - Microframework
1
Javalin
● Inspirado en SparkJava (Sinatra (Ruby)) y Koa.js, integrando lo mejor
de ambos mundos.
● Integra el servidor web Jetty de forma empotrada, permitiendo su
completa configuración en caso de ser necesarios.
● Permite trabajar con el protocolo HTTP, HTTP2 y SSL en minutos.
● Enfocado en resolver problemas de integración y aplicaciones web
para un problema en concreto. Ver Encuesta.
● API rediseñada para trabajar en Java 8 en adelante.
● Basado en Servlets.
2
Javalin - Características de Diseño
● Desde su diseño Javalin trata de ser simple y robusto permitiendo
cumpliendo con las siguientes puntos:
○ No utiliza anotaciones.
○ No utiliza variables globales de estado.
○ No utiliza el API de reflexión.
○ No utiliza archivo de configuración.
○ Basado en Servlets.
○ API diseñada fácil de entender.
3
Funcionalidades Soportadas:
● Disponible en repositorio Maven o Gradle.
● Manejadores:
○ Before
○ Endpoint.
○ After.
● Cookies.
● Sesiones.
● Filtros.
● Excepciones.
● Templates.
● Websocket.
4
Hola Mundo en Javalin - Gradle
● Incluir las siguientes dependencias en el build.gradle Gradle:
○ compile "io.javalin:javalin:3.8.0"
○ compile "org.slf4j:slf4j-simple:1.7.28"
● Crear clase Main con el siguiente código:
6
Concepto de Manejadores (Handlers)
http://localhost:7000/isc415/
Servidor
EndPoint
Before verbo(ruta) After
Cliente Cliente
Excepciones y Errores
7
Manejo de Rutas
8
Ejemplo de Rutas
/**
* la ruta (path) puede ser la misma siempre y cuando el verbo cambie.
* Ver los diferentes ejemplos.
*/
app.post("/isc415",this::procesamiento);
app.put("/isc415", this::procesamiento);
app.delete("/isc415", this::procesamiento);
app.options("/isc415", this::procesamiento);
app.patch("/isc415", this::procesamiento);
app.head("/isc415", this::procesamiento);
9
Procesar información de Cliente
Tenemos varias formas de enviar información en el proceso de petición:
10
Query Params
11
Parametros URL
12
Cuerpo de la trama HTTP
13
Header de la trama HTTP
14
Archivos Estáticos
Representan todos los archivos que no reciben cambios entre las peticiones del
cliente y no es necesario que pasen por un endpoint de forma explícita. Los
archivos que tradicionalmente cumplen con esa regla:
● HTML estáticos.
● Hojas de Estilo (CSS).
● JavaScript.
● Imágenes.
15
Configurar Rutas Estáticas
16
Trazabilidad de Peticiones
● Cookies: Pequeña información (4KB) enviada por el servidor y
almacenada en el navegador del cliente. Cada vez que se realiza una
petición del cliente envía los cookies propios de ese servidor.
17
Ejemplo de Cookies y Sesiones
18
Sesiones - Contador Simple
19
Sesiones - Invalidar Sesión
20
Filtros
● Son elementos que permiten interceptar las llamadas antes de
alcanzar el recurso solicitado y después de procesarlo.
21
Concepto de Manejadores (Handlers)
http://localhost:7000/isc415/
Servidor
EndPoint
Before verbo(ruta) After
Cliente Cliente
Excepciones y Errores
22
Ejemplo de Filtros - Before
23
Ejemplo de Filtros - After
24
Plantillas
● Implementa un patrón de arquitectura Modelo – Vista, separando
elementos de la vista con el modelo de datos.
● Permite trabajar en páginas más vistosas incluyendo CSS, JavaScript
e Imágenes.
● Javalin implementa varios motores de plantilla:
○ Freemarker.
○ Velocity.
○ Thymeleaf.
25
Registro de Plantillas
26
Freemarker
● Librería para el manejo de plantillas el cual utiliza el lenguaje Java.
● Nos permite implementar de forma sencilla el patrón MVC en
nuestras proyectos Web.
● Su API nos brinda elementos básicos de programación para la toma
de decisiones en la plantilla. (No abusar)
27
Ejemplo de Plantilla - Freemarker
28
Thymeleaf
● Motor de plantilla que nos permite aplicar el patrón MVC en nuestros
proyectos.
● Excelente integración con la tecnología Spring.
● Se diferencia por su implementación basada en atributos.
● Excelente para la integración con plantilla web.
29
Ejemplo de Plantilla - Thymeleaf
30
Apache Velocity
● Motor con larga data en proyectos Web.
● Inspirado en JSP eliminando complejidad en su implementación.
● Implementa funcionalidades para reutilización de código.
31
Ejemplo de Plantilla - Velocity
32
Acceso al repositorio de GitHub:
https://github.com/vacax/javalin-demo
33
Referencias:
● https://javalin.io/documentation
●
34