Bien, en esta clase vamos a crear el controlador.
Es importante que esté siempre dentro del package, base o raíz.
Vamos a crear un nuevo package controller punto.
Dentro de este package principal controllers y dentro este package vamos a crear una clase controladora.
Click derecho new class Una clase de yaba index.
Controlás le podemos dar el nombre que queramos.
Por ejemplo, index o Home Inicio Controller.
Básicamente Index por dar un nombre por defecto.
Un controlador que representa nuestra página de inicio.
Lo que sí es importante como una convención de nombre un estándar es que toda clase controladora debe
iniciar en mayúscula como cualquier clase en Java.
Eso es un estándar, pero además debe llevar el sufijo controller tal cual index controles.
Cada controlador, cada nombre de una clase controladora siempre debe terminar con controles y por supuesto
que se separa en mayúscula.
Dos palabras compuestas finalizar.
Es una clase típica de Yaba, pero está anotada con Controller, con control y la barra importamos esta
anotación o decorador como le queramos llamar, marca o configura esta clase como un componente de Spring,
pero del tipo controlador.
Por ejemplo, si hacemos un click con control click sobre controles sobre esta anotación observamos
que está anotada con component y toda clase anotada con component.
En este caso va a estar anotada con component a través de Controller.
Marca esta clase como un componente de Spring.
Básicamente es un objeto del tipo controlador que va a ser manejado dentro del contenedor de Spring
Framework y lo va a manejar de forma automática.
Y cómo está dentro del РАМКАХ base automáticamente nuestra clase principal?
Acá tenemos la configuración dentro de put application.
La anotación component scan va a buscar toda esta clase con estas anotaciones y las va a configurar
de forma automática.
Eso lo vimos en la clase anterior.
Bien, un controlador va a tener métodos, métodos de acción o handler que va a manejar una petición
http del usuario.
Por ejemplo, para mostrar un formulario para cargar datos, un listado de algo, consultas a la base
datos guardar, insertar, eliminar en cada método handler o de acción representa una página web que
hace algo y que trabaja con los datos de nuestra aplicación.
Y estos datos se van a mostrar.
Se van a representar en una vista dentro de la respuesta.
En este caso con Emily.
Entonces básicamente el controlador se encarga de manejar las peticiones del usuario, mostrar la página,
la respuesta con los datos que el usuario ha solicitado.
Por ejemplo, vamos a tener un método.
Siempre son públicos.
Va a retornar un string.
Después lo vamos a ver con más detalle, pero básicamente es el nombre de la vista que tiene que mostrar
o cargar el nombre de lo mismo index o le colocamos como queramos.
Inicio.
Hola!
Qué se yo.
Cualquier nombre, pero una buena idea.
Como es un controlador por defecto, nuestro método por defecto se va a llamar index.
Un controlador puede tener varios métodos y cada método va a manejar una página, una petición http
distinta.
Por ejemplo, una para listar, otra para mostrar el formulario, otra para editar el formulario, otra
para guardar los datos para eliminar.
En fin, habíamos dicho que retorna el nombre de la vista.
Por ejemplo, si retornamos acá Index tendremos que crear una plantilla que se llama Index punto HTML.
Y esa plantilla la tenemos que guardar en los recursos en templates, pero eso lo vamos a hacer luego.
Por ahora tenemos que terminar de implementar este método.
Lo siguiente es mapear.
Claro, tendremos que mapear de alguna forma o relacionar este método index a una ruta u RL para que
el cliente, el usuario cuando navegue en nuestra aplicación, escriba, por ejemplo index y automáticamente
se invoque este método y cargue y muestre la vista index punto html con los datos, con los datos que
implementemos dentro de este método.
Lógica de negocio.
Lo que queramos.
Entonces para mapear usamos la anotación Request Mapping.
La importamos con control, barra espacio.
Acá tenemos el import y acá vamos a indicar en el value o en el Paz en cualquiera de los dos.
De hecho el value es un alias del path.
Por lo general se usa el value, pero da lo mismo.
Igual un string siempre comienza con un es el larch y acá la ruta que queramos.
Un nombre también alfanuméricos, simple, sin caracteres especiales, sin espacios, sin acentos,
sin eñes, una ruta u RL, por ejemplo index.
Entonces cada vez que escribamos en el navegador localhost 80 80 Larch Index va a ejecutar este método.
Ricoh es mapping por defecto, es del tipo del request o el método de petición GET.
Si no se indica en GET, pero también podríamos indicar otro tipo, otro método de petición.
Por ejemplo el post si estamos trabajando con formulario para enviar datos, si estamos trabajando con
API, rest, put, delete, en fin, de toda forma.
Si se omite, nyet, pero también lo podemos indicar de forma explícita.
Por ejemplo, igual request method también se importa.
Punto.
Guet.
Perfecto.
Ahí lo tenemos.
El tipo GET.
Ahora como explicabas, si se omite también que el tipo GET.
Si trabajamos con datos del formulario cuando el formulario envía los datos acá en el controlador se
recibe como tipo post.
Bueno, después lo vamos a ver.
Esto sería una forma.
También tenemos otra forma que son alias del rico.
Es Mapping, por ejemplo.
Esto lo puedo quitar bjo el value index y en vez de Rickert colocamos acá get con una sola T y por supuesto
tenemos que importar get mapping solamente es del tipo GET y acá lo dice es un rico, es mapping con
el método GET.
Pero también tenemos post.
Acá es rico, es mapping de método post del tipo post y así también por cada tipo de petición tenemos
el post, el get, el delight, el put@, en fin, cualquiera.
Así que en nuestro ejemplo, obviamente del tipo GET, ya que simplemente vamos a cargar una página
mediante una ruta u RL, podemos usar Get Mapping o El Rico es mapping.
Cualquiera de las formas que usemos es exactamente lo mismo.
No hay ninguna diferencia.
Por ejemplo, get mapping o si usamos Rico es mapping o El Rico es mapping con el método GET de forma
explícita.
Esas tres formas da exactamente igual el mismo resultado.
Por lo tanto, si me preguntan qué recomiendo, usen el que quieran, el que más les guste de preferencia.
Encuentro mucho más simple utilizar por ejemplo el liggett o el post o el put o el delito solamente
porque más limpio, pero nada más.
Así que para el ejemplo lo voy a dejar con Get Mapping y también el value es el parámetro por defecto.
Por lo tanto, si no tengo más parámetro lo puedo omitir y simplemente le colocamos Index Get Mapping,
doble comilla y la ruta Ureta automáticamente.
Esto se va a asignar al value o al paz de la notación get nappy.
Qué más?
Un método puede estar mapeado a más de una ruta?
VL Bueno, por supuesto que sí, indicando acá las llaves, por ejemplo, en vez de un string, colocamos
llaves y separamos por comas, por ejemplo Index, Koma.
También va a estar mapeado a la raíz de nuestra aplicación, pero también podría estar mapeado a ON.
Está mapeado a otra ruta.
RL con las llaves representa un arreglo perfecto y ahí tenemos nuestro controlador básico que está mapeado
a rutas a una o varias y carga una vista.
Ahora el siguiente paso es crear esta vista con este mismo nombre.
Entonces nos vamos a Recursos Templates y acá vamos a crear la vista index.
Un html new otro.
Por acá tenemos que buscar un web HTML file.
Siguiente y le colocamos el nombre Índex, tal cual, en minúscula, tal como lo colocamos acá.
Bueno, lo nombre de vistas siempre van en minúscula.
FINALIZARLA bueno por defecto crea un HTML con el juego de caracteres en ISO lo vamos a cambiar a UTF
8 y también vamos a agregar acá el cierre.
El es latch para cerrar este elemento HTML.
Si bien un estándar de HTML5 se puede omitir el cierre, pero en Taine LIF eso significa un error,
entonces cerramos este elemento.
Ahora es importante que el meta el charse un Tf8 de juego de carácter sea exactamente el mismo que el
archivo index.
Por ejemplo, si nos vamos a template, nos vamos a index.
Kily derecho.
Pero partís.
Acá tenemos en los resources el encoding o la codificación de los caracteres.
En UTF 8.
Entonces por eso importante campear at Tc8 porque se está en hizo acá y acá está en uted F8.
Bueno, va a tener conflicto.
Por un lado el HTML en un juego de caracteres distinto al que tiene el archivo tiene que ser el mismo.
Dejamos siempre los dos iguales para no tener problema, porque después tenemos problemas con los acentos,
con la ñ que se rompen y un dolor de cabeza.
Y si lo queremos cambiar, acá tenemos otro y seleccionamos.
Acá tenemos el ISO 88 59 1, pero obviamente es mejor siempre y es más estándar usar el VF 8, así que
lo cancelamos, lo dejamos tal como está, perfecto.
Y acá vamos a tener un H1, un título de HTML.
Hola Spring.
Por ahora, por ahora le vamos a colocar ese título de forma literal y también copiamos esto y lo dejamos
en el título del HTML.
Bien, y vamos a levantar.
Vamos a probar cómo quedó nuestra aplicación simple para partir entonces sobre el proyecto con clic
derecho.
Ranas.
Es Spring Boot App.
Hoy arrancamos.
Ahí se abre la pestaña Consola y levanta nuestra aplicación.
Si todo sale bien y nos vamos al navegador y seguimos Index, debería aparecer.
Hola Spring, veamos el boot Dashboard.
Acá tenemos la aplicación como levantada en el puerto 80 80.
Está perfecto.
Acá podemos detener, podemos reiniciar la aplicación.
En fin, lo que nunca deben hacer, una vez que esté levantada, volver a levantar.
Lo que sí pueden es reiniciar, pero no volver a levantar.
Por qué va a ocurrir un error?
Va a detectar que el puerto 80 80 ya está tomado.
Entonces, obviamente, si volvemos a levantar, va a legar por el puerto.
Hagamos la prueba.
Clic derecho.
Ranas es imputado.
Va a dar error.
Esto lo hago para que no lo hagan.
Un error de Tomcat.
La aplicación ha fallado.
Y acá dice que el puerto 80 80 no se pudo levantar porque está tomado.
Está usado por otro servicio.
Bueno, y obviamente porque ya tenemos la anotada cada vez que necesitemos reiniciar, en vez de hacer
esto de volver a levantar, tenemos que reiniciar.
Simplemente acá.
Clic derecho restart.
Y se reinicia.
Se fijan y ahí está perfecto para que lo tengan en cuenta.
Ahora, como tema aparte, como tenemos el TEP Tools, cada cambio que hagamos en el código se va a
reflejar de forma automática y se va a actualizar el display.
El despliegue, por lo tanto, no es necesario tener que reiniciar.
Ahora vámonos al navegador, vámonos al proyecto en el Boot Dashboard, click derecho Open Web Browser.
Perfecto, se fijan, lo tenemos mapeado a la raíz.
Por lo tanto, está funcionando bien.
Si colocamos OUM también debería funcionar perfecto.
Y si colocamos Index, también.
Ahora, si colocamos otra cosa, no?
Porque no está mapeado a la ruta.
Hola.
Perfecto.
Hola, SPRI.
Bien.
Un punto importante que hay que tener en cuenta es que el navegador interno de Eclipse es bastante limitado.
Yo recomiendo por sobretodo utilizar un navegador externo.
Por ejemplo, Firefox o Krom.
Simplemente copian esta ruta wireless y utilizan el navegador externo a Eclipse, por ejemplo, con
Fauré Fox.
Ahí lo tenemos.
Simplemente pegan la ruta o RT localhost 80 80 index.
Hola, hola.
Obviamente no existe porque no está mapeado, pero si escribimos Oum funciona perfecto.
Bien.
Y para finalizar, mencionar que la próxima clase vamos a dedicar a los posibles errores que pueden
ocurrir cuando levantamos nuestra aplicación.
Vamos a analizar los errores más típicos para que tengan cuidado y también para que lo tengan en cuenta.
Bien, por ahora nada más.
Nos vemos.