Javalin - Microframework

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 34

Javalin - Microframework

Ing. Carlos Camacho


Twitter: ccamachog

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:

public static void main(String[] args) {


String mensaje = "Hola Mundo en Javalin :-D";
System.out.println(mensaje);
//Creando la instancia del servidor.
Javalin app = Javalin.create().start(7000);
//creando el manejador
app.get("/", ctx -> ctx.result("Hola Mundo en Javalin :-D"));
}

Acceder en el siguiente enlace: http://localhost:7000/


5
Concepto de Manejadores (Handlers)
● Contamos con los siguientes manejadores:
○ Before
○ Endpoint
○ After
○ Excepciones y Errores
● Cada manejador está compuesto de tres partes:
○ El verbo (before, get, post, delete, put, after, entre otros).
○ La ruta (path), /, /hola-mundo, /hola/mundo/
○ Una Implementación del manejador. Representa la funcionalidad del verbo.

6
Concepto de Manejadores (Handlers)
http://localhost:7000/isc415/
Servidor

EndPoint
Before verbo(ruta) After

Cliente Cliente

Excepciones y Errores

7
Manejo de Rutas

app.before("/isc415", ctx -> { //código…...});

app.get("/isc415", ctx -> {


ctx.result("Endpoint "+ctx.req.getRequestURI());
});

app.after("/isc415", ctx -> {});

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:

● Como Información adicional a la URL, separado por ?, conocidos como


parámetros o queryparam. Ej:
http://localhost:7000?param1=valor1&param2=valor2&....
● Como parte de la URL.
● Como cuerpo del mensaje según el método del protocolo HTTP (Post, Put,
entre otros).
● Como parte de la trama del protocolo HTTP: Headers.

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.

● Sesiones: Crea un identificador único en el servidor para la primera


petición de un usuario, enviado dicho ID mediante una Cookie al
cliente. En el servidor es creado un ámbito de variable que tiene
vigencia mientras la sesión esté disponible.

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.

● Son utilizados para controlar elementos transversales de nuestra


aplicación, como son:
○ Seguridad.
○ Registro de log.
○ Agregar o cambiar Header del protocolo HTTP.

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

También podría gustarte