14

Acelera la creación de sitios web con Spring CLI

40081Puntos

hace 4 años

Spring es el framework icónico de Java para BackEnd, con su inyección de dependencia nos libera de controlar el ciclo de vida de las instancias, permitiendo mantener la optimización del uso de recursos. Sin embargo no está limitado para construir API, también se puede hacer orientado a presentación, aunque con unos ajustes adicionales.

Go, es el lenguaje de Google que tiene frameworks que agilizan la creación de aplicaciones web, uno de ellos es Hugo para sitios estáticos y otro Revel para permitir hacer sitios dinámicos. En este sentido tenía la curiosidad de saber si existía algo similar para Java. No lo encontré pero, esto se le acerca bastante.

En la página https://start.spring.io/ tienen la herramienta que ayudará a descargar un template con las librerías que escojas, aunque mi opción favorita es Spring Boot CLI.

En ArchLinux la pueden instalar con:

yaourt -S spring-boot-cli

Entonces para crear un proyecto de forma más rápida que usando NetBeans o Spring Tool Suite, se hace lo siguiente:

springinit--dependencies=web,mustache--group=com.osmandi--artifact=platziplatzi

  • web Nos permite las opciones para manejar sitios web.
  • mustache Es un *templating engine". Los probé todos incluyendo thymeleaf, y mustache es el que se adaptó mejor.

¿Qué hacen estas librerías? Pues “parsean” los html guardados en src/main/resources/templates ya que esto no lo hace de forma automática Spring Boot. Si ya terminaste el Curso Profesional de Java EE me entenderás mejor. Thymeleaf digamos que tiene “más fama” pero no te dejará compilar si tienes <meta charset="“utf-8”"> en tu head de tu html.

El paso siguiente es entrar en la carpeta platzi. Desde aquí haremos todo el proyecto.

cd platzi

Lo primero que haremos es el index.html. Yo usaré Atom.

atom src/main/resources/templates/index.html

<html><head><metacharset="utf-8"><title>Platzi</title></head><body><h1>Bienvenido, esto es Spring Boot CLI</h1>
    br>
    <h2>¿Qué tal el curso?</h2></body></html>

El paso siguiente es decirle a Spring Boot que tenemos un index.html que queremos que muestre.

atom src/main/java/com/osmandi/platzi/DemoApplication.java

package com.osmandi.platzi;

import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@SpringBootApplication
publicclassDemoApplication {

        publicstaticvoid main(String[] args) {
                SpringApplication.run(DemoApplication.class, args);
        }

        @RequestMapping("/")
        String index(){
                return"index";
        }
}

Solo queda compilar en nuestro local.

mvn spring-boot:run

Si entramos en nuestro navegador, localhost:8080 accederemos a nuestra aplicación así sin más.

Subí el codigo a GitHub lo tienes aquí https://github.com/osmandi/spring-boot-cli-platzi. Puedes hacerle un fork y modificarlo a tu gusto, pero la programación es más divertida cuando se comparte, así que quiero ir un poco más allá.

¿Qué tal si unimos a Docker y a Now.sh para subirlo a internet?

¡Boom! platzi-spring-cli.now.sh

En resumen, para esa página tan sencilla utilicé:

  • Java
  • mvn (Maven)
  • Spring CLI (Librerías web y mustache)
  • Docker
  • Now.sh
  • Incontables deploy a Now.sh
  • 9 Horas (No encotré ningún tutorial de deploy a Now con Spring Boot y tuve muchos errores)

¿Qué te pareció Spring CLI?

_Nota: Los químicos jamás sostendríamos un matraz erlenmeyer en medio de una reacción con desprendimiento de gas, como lo tiene Duke en la imagen de cover, y menos con la bata desabotonada. _

Osmandi
Osmandi
osmandi

40081Puntos

hace 4 años

Todas sus entradas
Escribe tu comentario
+ 2
1
2260Puntos

Muy buen tutorial, concreto y comprensible

1
40081Puntos
4 años

Muchas gracias por tus comentarios, esos eran los objetivos 😃

1
3088Puntos

Hola, no me queda claro porque la funcion main está como una sola cadena en lugar de sentencias separadas…publicstaticvoid. Funciona eso?

2
40081Puntos
4 años

Hola Alan, gracias por tu comentario.

Desconozco el motivo por el que se unen, pero están separadas y cada una tiene su función:

  • public: Acceso público a otras clases
  • static: Diciendo que es un método estático
  • void: Que no devuelve ningún valor

La función debió quedar así:

publicstaticvoid main(String[] args) { 

                SpringApplication.run(DemoApplication.class, args);

        }