-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathnotes.txt
More file actions
144 lines (120 loc) · 8.33 KB
/
notes.txt
File metadata and controls
144 lines (120 loc) · 8.33 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
###############################################################################
################################ SPRING MVC ###################################
###############################################################################
> Model, View and Controller and it is a design pattern
> Model: Models are responsible for managing the application's data, business logic and business rules
> View: The view is an output representation of information, for example displaying information or reports
to the user either as a web form or as charts
> Controller: The controller is responsible for invoking Models to perform business logic and then updating
the view based on the Models output.
> Tenemos un central Servlet, conocido como DispatcherServlet, que proporciona un algoritmo compartido
para el procesamiento de solicitudes.
Controladores que manejan las solicitudes por lo que este diseño es flexible y permite diferentes
flujos de trabajo en los que el DispatcherServlet espera un WebApplicationContext (contexto de aplicación web),
que es una extensión de un plain ApplicationContext, para su propia configuración.
> DispatcherServlet delega beans especiales para procesar solicitudes y render las respuestas apropiadas.
> Con el WebApplicationContext hay algunos beans que se registran automáticamente
> With Spring MVC we can use different view technologies to render web pages.
For example Groovy Markup, Freemarker, and Thymeleaf.
> Spring MVC also integrates with other web frameworks
############################## SIMPLE CONTROLLER ##############################
> Spring MVC is designed around the DispatcherServlet wich plays the role of Front Controller.
> It receives all of the requests for your application
> We can map requests to method in classes annotated with @Controller.
Those classes are known as annotated controllers or controller classes.
> The @RequestMapping annotation is used to map requests to controller methods, variants:
@GetMapping
@PostMapping
@PutMapping
@DeleteMapping
@PatchMapping
####################### SPRING MVC REQUEST PROCESSING #########################
1 REQUEST 10 RESPONSE
| ^
V |
+---------------------------------------------------------------+
| DISPATCHER SERVLET |
+---------------------------------------------------------------+
| ^ 3 | ^ 5 | ^ 7 | ^ 9
2 V | 4 V | 6 V | 8 V |
+-----------+ +-----------+ +-----------+ +-----------+
| HANDLER | | HANDLER | | VIEW | | VIEW |
| MAPPING | | CONTROLLER| | RESOLVER | | |
+-----------+ +-----------+ +-----------+ +-----------+
1: El navegador crea una solicitud a una URL específica
2: El controlador del dispatcher (DISPATCHER CONTROLLER) recibe la solicitud del navegador
> El dispatcher servlet necesita identificar qué controlador manejará la solicitud
por lo que utiliza la asignación de Controladores (HANDLER MAPPING)
para encontrar el controlador correcto
3: La asignación de controladores (HANDLER MAPPING) retorna el método
de controlador específico que maneja la solicitud
4: El dispatcher servlet llama al método del controlador específico (SPECIFIC HANDLER METHOD)
5: El método del controlador (HANDLER CONTROLLER) retorna el modelo y el nombre de la vista
6: El dispatcher servlet ahora tiene el nombre de vista lógico pero aún necesita determinar
el archivo de vista (VIEW FILE) para usar (ejm: welcome.jsp), para hacerlo encuentra
el VIEW RESOLVER que configuramos y lo llama usando el nombre de la vista lógica
para ver que se pasa a la vista
7: El VIEW RESOLVER necesita encontrar el VIEW FILE, una vez que la encuentra lo retorna al
DISPATCHER SERVLET
8: El DISPATCHER SERVLET lo ejecuta, hace que el modelo esté disponible para la vista
9: Se visualiza la vista (The VIEW is rendered) y se retorna el contenido al DISPATCHER SERVLET
10: El DISPATCHER SERVLET envia el RESPONSE al BROWSER
###############################################################################
################################ JAR VS WAR ###################################
###############################################################################
Estos archivos son simplemente archivos comprimidos con la herramienta java jar.
Estos archivos se crean para diferentes propósitos. Aquí está la descripción de estos archivos:
> Archivos .jar: los archivos .jar contienen bibliotecas, recursos y archivos
de accesorios como archivos de propiedades.
> Archivos .war: el archivo war contiene la aplicación web que se puede implementar
en cualquier contenedor de servlet / jsp. El archivo .war contiene jsp, html, javascript
y otros archivos necesarios para el desarrollo de aplicaciones web.
###############################################################################
########################### EAR VS WAR VS JAR #################################
###############################################################################
La mayor diferencia entre los archivos JAR, WAR y EAR es el hecho de que están dirigidos a
diferentes entornos.
> Un archivo EAR requiere un servidor de aplicaciones totalmente compatible con la plataforma Java,
Enterprise Edition (Java EE) o Jakarta Enterprise Edition (EE), como WebSphere o JBoss, para ejecutarse.
> Un archivo WAR solo requiere un servidor de aplicaciones compatible con Java EE Web Profile para ejecutarse.
> Un archivo JAR solo requiere una instalación Java
También hay restricciones y requisitos internos que se aplican a los archivos EAR, WAR y JAR:
> Los archivos EAR deben tener un archivo application.xml contenido dentro de una carpeta
llamada META-INF.
> Un archivo WAR requiere un archivo web.xml contenido en una carpeta WEB-INF.
> Los archivos JAR no tienen ninguno de estos requisitos.
###############################################################################
################################ MAVEN WAR ####################################
###############################################################################
WAR: Web Application Archive
###############################################################################
############################## MAVEN CARGO ####################################
###############################################################################
> Es un plugin (como install, clean, war que aparece en la sección MAVEN)
> Plugin que permite administrar e implementar aplicaciones en una variedad de servidores de aplicaciones.
> Este complemento nos ayudará a desarrollar rápidamente una aplicación sin necesidad de
instalar un contenedor web standalone(independiente) de tomcat, lo cual es excelente ya que
implementar el tomcat independiente no siempre es un proceso fácil o trivial que puede ser
complicado para que funcione ahora.
> Se especifica si se debe implementar incorporado local o Tomcat remoto, en nuestro caso estamos
usando Embedded porque es la configuración más simple para comenzar a trabajar y eso es
esencialmente lo que necesitamos hacer con esta pequeña configuración que podemos
implementar y comenzar Tomcat con un clic.
<plugin>
<groupId>org.codehaus.cargo</groupId>
<artifactId>cargo-maven2-plugin</artifactId>
<version>1.7.12</version>
<configuration>
<container>
<containerId>tomcat9x</containerId>
<type>embedded</type>
</container>
</configuration>
</plugin>
> mvn cargo:run : run webapp
###############################################################################
########################## LOMBOK ANNOTATIONS #################################
###############################################################################
@Data = @Getter + @Setter + @ToString + @EqualsAndHashCode // importante usarlo en modelos, items
@EqualsAndHashCode(of = {"fieldName1", "fieldName2"}): Especificamos a que campos queremos que se aplique este annotation
@NonNull: verifica que no sea null el campo