1 00:00:00,000 --> 00:00:03,620 Pues ahora 2 00:00:03,620 --> 00:00:05,919 Tener una entidad del modelo 3 00:00:05,919 --> 00:00:07,120 Sobre el que vamos a hacer 4 00:00:07,120 --> 00:00:09,300 Tareas de CRUD 5 00:00:09,300 --> 00:00:11,160 Si seguimos el patrón DAO 6 00:00:11,160 --> 00:00:12,400 Que es lo que normalmente hacemos 7 00:00:12,400 --> 00:00:14,039 Implica tener una interfaz DAO 8 00:00:14,039 --> 00:00:17,120 En la que recogemos esas funciones 9 00:00:17,120 --> 00:00:18,600 Esas operaciones 10 00:00:18,600 --> 00:00:20,539 Entonces estas son las operaciones 11 00:00:20,539 --> 00:00:22,480 Directamente tocando la base de datos 12 00:00:22,480 --> 00:00:24,640 Insertar un objeto de venta 13 00:00:24,640 --> 00:00:27,100 Recuperar por ID, recuperar todos 14 00:00:27,100 --> 00:00:28,699 Borrar una venta por ID 15 00:00:28,699 --> 00:00:30,100 Y ahí podríamos poner más 16 00:00:30,100 --> 00:00:31,480 No me digas que ya voy de pisa 17 00:00:31,480 --> 00:00:33,259 Dime, dime 18 00:00:33,259 --> 00:00:44,500 Sería una por entidad 19 00:00:44,500 --> 00:00:45,240 En principio 20 00:00:45,240 --> 00:00:51,560 Una para todas 21 00:00:51,560 --> 00:00:53,100 Qué necesidad 22 00:00:53,100 --> 00:00:57,979 Sí, pero una por entidad 23 00:00:57,979 --> 00:01:24,959 O sea, si tú tienes ahora una tabla que es coche, pues tendrás tu propio coche DAO, donde tendrás insert coche, find by del coche, entonces son separados porque así es como tiene que ser, sino que vas a hacer un único DAO que sea DAO en general y ahora insert coche, insert 20, insert no sé qué, no se queda muy acoplado eso, muy easy. 24 00:01:24,959 --> 00:01:28,480 Y luego, la idea es que yo quiero cambiar el relacionado con coche. 25 00:01:28,920 --> 00:01:31,959 Pues rápidamente me voy a la parte de coche, que está aquí metidita. 26 00:01:33,420 --> 00:01:36,579 Precisamente lo que queremos es separar muchas clases pequeñitas, 27 00:01:37,840 --> 00:01:42,340 semánticamente distintas, en lugar de una clase gorda con cosas. 28 00:01:43,299 --> 00:01:47,299 El principio básico es muchas clases pequeñitas y no una gorda con muchas cosas. 29 00:01:47,939 --> 00:01:50,379 Es todo lo contrario a la filosofía del desarrollo. 30 00:01:51,840 --> 00:01:53,840 Es que, de hecho, la aprobación estructurada... 31 00:01:53,840 --> 00:01:56,040 Reconocimiento de objetos 32 00:01:56,040 --> 00:01:57,819 Precisamente 33 00:01:57,819 --> 00:01:59,480 Nació por eso 34 00:01:59,480 --> 00:02:02,459 Para olvidarnos de los programas estructurados 35 00:02:02,459 --> 00:02:03,900 Quedan 200.000 líneas de código 36 00:02:03,900 --> 00:02:06,840 Que eso no había manera de mantener nada 37 00:02:06,840 --> 00:02:08,439 De incorporar ninguna funcionalidad nueva 38 00:02:08,439 --> 00:02:09,960 Nada, es decir, vamos a separar 39 00:02:09,960 --> 00:02:12,120 Lo relacionado con la vista 40 00:02:12,120 --> 00:02:14,199 Aquí lo relacionado con no sé qué, aquí vamos a separar 41 00:02:14,199 --> 00:02:16,080 Entonces nos volvamos a juntar otra vez 42 00:02:16,080 --> 00:02:17,300 Entonces hemos perdido lo que hemos ganado 43 00:02:17,300 --> 00:02:18,340 ¿Sí o no? 44 00:02:20,949 --> 00:02:21,349 Bueno 45 00:02:21,349 --> 00:02:24,449 No solo 46 00:02:24,449 --> 00:02:27,150 vale, entonces, ahora como solo tenemos 47 00:02:27,150 --> 00:02:28,750 una entidad y una única tabla 48 00:02:28,750 --> 00:02:30,949 estamos en versión sencilla, pues una única clase 49 00:02:30,949 --> 00:02:33,129 con los métodos que uno quiera poner 50 00:02:33,129 --> 00:02:34,650 vale 51 00:02:34,650 --> 00:02:35,930 entonces 52 00:02:35,930 --> 00:02:38,770 que poco veo aquí 53 00:02:38,770 --> 00:02:41,629 que poco brillo tiene esto 54 00:02:41,629 --> 00:02:49,969 ahí me va 55 00:02:49,969 --> 00:02:52,169 vale, entonces 56 00:02:52,169 --> 00:02:54,530 esto es una interfaz en la que nos 57 00:02:54,530 --> 00:02:55,509 comprometemos 58 00:02:55,509 --> 00:02:58,689 a realizar ciertas funciones pero no especificamos 59 00:02:58,689 --> 00:03:00,409 cómo, porque cómo lo vamos a hacer 60 00:03:00,409 --> 00:03:02,689 Puede cambiar en un momento dado 61 00:03:02,689 --> 00:03:04,770 Entonces el cómo lo vamos a hacer 62 00:03:04,770 --> 00:03:07,270 Lo especificábamos en la DAO implementación 63 00:03:07,270 --> 00:03:10,789 Que implementaba la DAO 64 00:03:10,789 --> 00:03:12,270 Y la DAO implementación 65 00:03:12,270 --> 00:03:14,750 Ya tiene los detalles sobre cómo se hacen 66 00:03:14,750 --> 00:03:15,969 Las operaciones 67 00:03:15,969 --> 00:03:18,490 En este caso hicimos el insert de esta manera 68 00:03:18,490 --> 00:03:19,830 ¿Vale? 69 00:03:20,129 --> 00:03:22,389 Aquí pues aprovechamos para recordar 70 00:03:22,389 --> 00:03:23,530 Que todos los recursos 71 00:03:23,530 --> 00:03:26,650 Que se usan y necesitan ser cerrados 72 00:03:26,650 --> 00:03:29,409 Si lo que yo estoy haciendo 73 00:03:29,409 --> 00:03:30,409 O como lo estoy diseñando 74 00:03:30,409 --> 00:03:32,150 me permite meterlo en un try con 75 00:03:32,150 --> 00:03:34,270 recursos, pues mejor, porque entonces ya se va 76 00:03:34,270 --> 00:03:36,210 a cerrar solo, no tengo que preocuparme de los 77 00:03:36,210 --> 00:03:37,849 close. Y statement es 78 00:03:37,849 --> 00:03:40,449 un objeto que se 79 00:03:40,449 --> 00:03:42,050 cierra, tiene un close, ¿vale? 80 00:03:42,289 --> 00:03:44,270 Entonces, lo metíamos aquí y ya está. 81 00:03:47,289 --> 00:03:48,270 Aquí lo abrimos 82 00:03:48,270 --> 00:03:50,409 aquí, ¿vale? Suele ser lo habitual. 83 00:03:50,629 --> 00:03:51,930 Los recursos que se cierran, 84 00:03:52,389 --> 00:03:54,289 que además van a generar excepción y meterlo en un try catch. 85 00:03:54,389 --> 00:03:56,189 Pues nada, aquí teníamos ya las particularidades. 86 00:03:56,770 --> 00:03:57,849 Insert, venta, 87 00:03:58,389 --> 00:03:59,349 encontrar por ID, 88 00:03:59,349 --> 00:04:02,490 Que este le hicimos 89 00:04:02,490 --> 00:04:04,210 Y dejamos pues 90 00:04:04,210 --> 00:04:06,330 Estos dos de abajo vacíos 91 00:04:06,330 --> 00:04:06,849 ¿Vale? 92 00:04:08,090 --> 00:04:10,129 Entonces este ya necesita 93 00:04:10,129 --> 00:04:12,210 Tocar el barro 94 00:04:12,210 --> 00:04:14,689 Entonces necesitar tocar el barro 95 00:04:14,689 --> 00:04:15,430 Necesita 96 00:04:15,430 --> 00:04:17,589 Implica que necesita una conexión 97 00:04:17,589 --> 00:04:20,569 Porque las sentencias se crean a partir de conexiones 98 00:04:20,569 --> 00:04:21,569 Bueno pues 99 00:04:21,569 --> 00:04:24,790 Necesita una conexión que ya va a ser una propiedad suya 100 00:04:24,790 --> 00:04:26,089 Una propiedad suya 101 00:04:26,089 --> 00:04:28,709 Que le inyectamos aquí por parámetro 102 00:04:28,709 --> 00:04:30,050 ¿vale? 103 00:04:31,050 --> 00:04:32,790 ahora, esta es la parte que toca 104 00:04:32,790 --> 00:04:34,790 el acceso a datos, luego ya 105 00:04:34,790 --> 00:04:36,769 la aplicación tiene unas funciones 106 00:04:36,769 --> 00:04:38,709 más generales 107 00:04:38,709 --> 00:04:40,670 que seguramente necesiten 108 00:04:40,670 --> 00:04:42,589 tocar la parte de acceso a datos, pero ya son 109 00:04:42,589 --> 00:04:44,629 sus propias funciones, las funciones que de la 110 00:04:44,629 --> 00:04:47,050 aplicación, esas funcionalidades 111 00:04:47,050 --> 00:04:48,589 que me da mi aplicación son 112 00:04:48,589 --> 00:04:50,149 los servicios que me da mi aplicación 113 00:04:50,149 --> 00:04:52,610 eso tiene sentido, que ahora ya lo metamos en otra 114 00:04:52,610 --> 00:04:54,569 clase de servicios, que recoge 115 00:04:54,569 --> 00:04:56,290 que recoge los servicios que me da la aplicación 116 00:04:56,290 --> 00:04:58,129 que esos servicios lógicamente 117 00:04:58,129 --> 00:05:01,790 van a tener que llamar muchos de ellos a esto de aquí 118 00:05:01,790 --> 00:05:05,449 porque lo que hacen es actualizar la base de datos o consultar 119 00:05:05,449 --> 00:05:08,230 bueno pues para eso teníamos esta clase de aquí 120 00:05:08,230 --> 00:05:14,009 y esta clase de aquí pues me daba crear una venta 121 00:05:14,009 --> 00:05:16,389 para lo cual yo llamaba insert venta 122 00:05:16,389 --> 00:05:19,069 para lo cual tenía que usar un objeto dado 123 00:05:19,069 --> 00:05:21,290 bueno pues claro entonces 124 00:05:21,290 --> 00:05:24,670 ventaservice tendrá como propiedad suya un objeto dado 125 00:05:24,670 --> 00:05:27,069 y ya está que le inyectamos también por parámetro 126 00:05:27,069 --> 00:05:30,029 y este objeto dao 127 00:05:30,029 --> 00:05:31,709 nos permite aquí 128 00:05:31,709 --> 00:05:33,050 pues hacer lo que haya que hacer 129 00:05:33,050 --> 00:05:35,689 ¿y cómo sabe ese objeto dao cuál es su implementación? 130 00:05:35,870 --> 00:05:36,730 si dao era la... 131 00:05:36,730 --> 00:05:37,069 eso 132 00:05:37,069 --> 00:05:41,589 da igual como sea, aquí no estamos en tipo de ejecución 133 00:05:41,589 --> 00:05:42,750 todavía, o sea cuando ya 134 00:05:42,750 --> 00:05:45,389 la aplicación se ejecute, instancia es un servicio 135 00:05:45,389 --> 00:05:47,670 ahí es donde importa darle valor 136 00:05:47,670 --> 00:05:49,569 a este, aquí está simplemente declarando 137 00:05:49,569 --> 00:05:51,110 entonces aquí nos da igual 138 00:05:51,110 --> 00:05:53,350 el dao cual sea, nos da igual 139 00:05:53,350 --> 00:05:55,750 claro, con que sea 140 00:05:55,750 --> 00:05:57,670 una instancia de algo que 141 00:05:57,670 --> 00:05:59,870 implemente esto o herede de eso 142 00:05:59,870 --> 00:06:01,550 ¿vale? entonces 143 00:06:01,550 --> 00:06:04,009 crear venta era llamar a inserventa 144 00:06:04,009 --> 00:06:05,790 get venta era 145 00:06:05,790 --> 00:06:07,149 llamar a find by id 146 00:06:07,149 --> 00:06:09,569 y podría tener mucho más servicios 147 00:06:09,569 --> 00:06:11,089 relacionados con acceso a datos o no 148 00:06:11,089 --> 00:06:13,990 estos dos en particular están relacionados con acceso a datos 149 00:06:13,990 --> 00:06:15,810 y ahora ya si que teníamos 150 00:06:15,810 --> 00:06:18,110 nuestra aplicación 151 00:06:18,110 --> 00:06:19,490 que en este caso 152 00:06:19,490 --> 00:06:21,490 en esta versión era de escritorio 153 00:06:21,490 --> 00:06:23,910 y esta aplicación de escritorio 154 00:06:23,910 --> 00:06:25,550 pues ahora tenía que crear 155 00:06:25,550 --> 00:06:27,269 un objeto servicio para hacer las cosas 156 00:06:27,269 --> 00:06:29,350 para eso tenía que crear un objeto servicio 157 00:06:29,350 --> 00:06:30,189 para hacer las cosas 158 00:06:30,189 --> 00:06:32,730 y ahora, para crear un objeto servicio 159 00:06:32,730 --> 00:06:35,430 hay que tener creado ya previamente un objeto DAO 160 00:06:35,430 --> 00:06:37,829 entonces aquí sí que hay que instanciar 161 00:06:37,829 --> 00:06:38,110 ya 162 00:06:38,110 --> 00:06:41,189 un objeto que implemente DAO 163 00:06:41,189 --> 00:06:43,470 aquí ya sí, porque va a haber que metérselo al service 164 00:06:43,470 --> 00:06:45,449 y una vez que tengamos el service 165 00:06:45,449 --> 00:06:46,649 pues ya hacemos lo que nos da la gana 166 00:06:46,649 --> 00:06:48,750 como hicimos aquí, crear una venta 167 00:06:48,750 --> 00:06:49,990 que comprobamos que funcionaba 168 00:06:49,990 --> 00:06:51,769 recuperar una venta por ID 169 00:06:51,769 --> 00:06:53,430 que comprobamos también que funcionaba 170 00:06:53,430 --> 00:06:54,889 las dos únicas cosas que teníamos 171 00:06:54,889 --> 00:06:57,370 entonces para instanciar 172 00:06:57,370 --> 00:06:58,350 este objeto DAO 173 00:06:58,350 --> 00:07:00,790 pues ahora yo ya si elijo 174 00:07:00,790 --> 00:07:01,529 que 175 00:07:01,529 --> 00:07:05,589 como lo instancio 176 00:07:05,589 --> 00:07:07,389 pues probamos 177 00:07:07,389 --> 00:07:08,750 dos versiones 178 00:07:08,750 --> 00:07:10,290 haciendo 179 00:07:10,290 --> 00:07:11,529 un 180 00:07:11,529 --> 00:07:15,170 instanciando con nuestra única 181 00:07:15,170 --> 00:07:17,149 implementación que teníamos hasta ahora hecha 182 00:07:17,149 --> 00:07:19,470 de DAO, la única implementación que teníamos hecha era esta 183 00:07:19,470 --> 00:07:21,069 entonces tengo que implementar esta 184 00:07:21,069 --> 00:07:23,149 y entonces pasándole una conexión 185 00:07:23,709 --> 00:07:24,470 única 186 00:07:24,470 --> 00:07:28,970 o pasando una conexión sacándola de un pool. 187 00:07:29,790 --> 00:07:32,730 Entonces, para eso habíamos hecho esta clase conexión 188 00:07:32,730 --> 00:07:36,029 y esta clase conexión es una clase simplemente 189 00:07:36,029 --> 00:07:38,069 que me sirve para sacar conexiones. 190 00:07:38,449 --> 00:07:41,750 Sacar conexiones que necesita este de aquí. 191 00:07:42,490 --> 00:07:44,569 Porque este de aquí es el que ya habíamos dicho 192 00:07:44,569 --> 00:07:47,870 que ya tocaba la base de datos y necesita este objeto. 193 00:07:48,089 --> 00:07:50,629 Lo necesita, porque si no, no puede tocar la base de datos 194 00:07:50,629 --> 00:07:51,970 y hacer sentencias ni nada. 195 00:07:51,970 --> 00:07:54,870 entonces esta aplicación 196 00:07:54,870 --> 00:07:56,790 para instanciar el venta 197 00:07:56,790 --> 00:07:58,670 de la implementación necesita una conexión 198 00:07:58,670 --> 00:08:00,990 pues en esta clase 199 00:08:00,990 --> 00:08:02,810 recogíamos toda la complejidad 200 00:08:02,810 --> 00:08:03,930 de crear las conexiones 201 00:08:03,930 --> 00:08:05,990 y esta clase 202 00:08:05,990 --> 00:08:07,009 si 203 00:08:07,009 --> 00:08:09,750 y esta clase era esta 204 00:08:09,750 --> 00:08:11,230 vale 205 00:08:11,230 --> 00:08:14,509 y en esta clase metíamos 206 00:08:14,509 --> 00:08:15,589 las dos posibilidades 207 00:08:15,589 --> 00:08:18,189 una conexión única 208 00:08:18,189 --> 00:08:20,850 o un pool de conexiones 209 00:08:20,850 --> 00:08:23,149 entonces la conexión única 210 00:08:23,149 --> 00:08:24,930 la sacamos con getConnection 211 00:08:24,930 --> 00:08:26,949 este es el singleton para la conexión 212 00:08:26,949 --> 00:08:29,269 el singleton para un objeto significa 213 00:08:29,269 --> 00:08:31,189 la clase que te garantiza 214 00:08:31,189 --> 00:08:32,950 que solo vas a tener una instancia 215 00:08:32,950 --> 00:08:35,590 de ese objeto en todo el ámbito de la aplicación 216 00:08:35,590 --> 00:08:37,330 en todo el ámbito 217 00:08:37,330 --> 00:08:39,330 lo que te dirían 218 00:08:39,330 --> 00:08:41,169 en todo el scope, porque queda más fino 219 00:08:41,169 --> 00:08:42,610 pero es el ámbito 220 00:08:42,610 --> 00:08:43,789 se refiere al ámbito 221 00:08:43,789 --> 00:08:47,110 vale, pues el getConnection si la conexión es null 222 00:08:47,110 --> 00:08:49,429 creo una nueva 223 00:08:49,429 --> 00:08:52,029 si la conexión es null, creo una nueva 224 00:08:52,029 --> 00:08:53,710 este con de aquí, no sé para qué está puesto 225 00:08:53,710 --> 00:08:55,929 pero bueno, da igual que esté puesto 226 00:08:55,929 --> 00:08:57,450 que no, si la conexión es nueva 227 00:08:57,450 --> 00:08:59,889 perdón, si la conexión es null, cada vez que llamen 228 00:08:59,889 --> 00:09:01,769 a getConnection, instancio 229 00:09:01,769 --> 00:09:04,230 una nueva, sacando del properties 230 00:09:04,230 --> 00:09:05,769 sacando del properties 231 00:09:05,769 --> 00:09:07,929 las propiedades, la instancio 232 00:09:07,929 --> 00:09:09,950 con el driver manager getConnection 233 00:09:09,950 --> 00:09:11,929 instancio la conexión y ya está 234 00:09:11,929 --> 00:09:14,009 y si la conexión 235 00:09:14,009 --> 00:09:16,090 no es null, ya existe 236 00:09:16,090 --> 00:09:18,129 alguien la ha instanciado antes, no tengo que hacer nada 237 00:09:18,129 --> 00:09:21,190 entonces este retuncon o me devuelve 238 00:09:21,190 --> 00:09:22,870 la que ya está instanciada 239 00:09:22,870 --> 00:09:23,389 de antes 240 00:09:23,389 --> 00:09:27,009 o si no hay ninguna porque es la primera vez 241 00:09:27,009 --> 00:09:28,450 que se llama el getConnection 242 00:09:28,450 --> 00:09:31,070 pues me instancia una, me instancia una con las propiedades 243 00:09:31,070 --> 00:09:33,110 del fichero properties 244 00:09:33,110 --> 00:09:33,710 y ya está 245 00:09:33,710 --> 00:09:37,049 entonces este getConnection ya me devuelve una conexión 246 00:09:37,049 --> 00:09:39,149 pues entonces yo lo puedo llamar desde aquí 247 00:09:39,149 --> 00:09:42,789 este getConnection lo puedo llamar desde aquí 248 00:09:42,789 --> 00:09:44,870 para implementar 249 00:09:44,870 --> 00:09:47,009 un venta da implementación, desde ahí lo puedo llamar 250 00:09:47,009 --> 00:09:48,830 llamar, que 251 00:09:48,830 --> 00:09:50,730 tenga una aplicación multilo y no quiero 252 00:09:50,730 --> 00:09:52,049 una única conexión 253 00:09:52,049 --> 00:09:54,350 que luego voy a tener que cerrar 254 00:09:54,350 --> 00:09:55,750 sino que quiero 255 00:09:55,750 --> 00:09:58,990 un pool de conexiones y pedirle 256 00:09:58,990 --> 00:09:59,870 a él la conexión 257 00:09:59,870 --> 00:10:02,570 bueno, pues 258 00:10:02,570 --> 00:10:04,830 esta clase de conexión la hicimos para que 259 00:10:04,830 --> 00:10:07,190 también me pudiera dar un objeto pool de conexiones 260 00:10:07,190 --> 00:10:08,789 el objeto pool de conexiones es 261 00:10:08,789 --> 00:10:09,409 data source 262 00:10:09,409 --> 00:10:12,909 y entonces este objeto pool de conexiones pues lo mismo 263 00:10:12,909 --> 00:10:15,169 que es la primera vez que instancio 264 00:10:15,169 --> 00:10:16,509 a dame el pool 265 00:10:16,509 --> 00:10:18,750 que es la primera vez que lo instancio, pues lo creo 266 00:10:18,750 --> 00:10:20,610 de nuevas, lo creo de nuevas 267 00:10:20,610 --> 00:10:22,049 de esta manera 268 00:10:22,049 --> 00:10:24,730 vale, esta era una de las posibles 269 00:10:24,730 --> 00:10:26,769 implementaciones 270 00:10:26,769 --> 00:10:28,009 de un pool de conexiones 271 00:10:28,009 --> 00:10:31,129 vale, la que más se usa actualmente 272 00:10:31,129 --> 00:10:32,990 es una de las posibles 273 00:10:32,990 --> 00:10:34,750 que no es null 274 00:10:34,750 --> 00:10:36,570 porque ya lo has instanciado de antes 275 00:10:36,570 --> 00:10:38,649 pues no hagas nada, en cualquier caso me devuelves 276 00:10:38,649 --> 00:10:39,710 ese pool de conexiones 277 00:10:39,710 --> 00:10:42,309 entonces este get pool es la 278 00:10:42,309 --> 00:10:44,730 implementación del 279 00:10:44,730 --> 00:10:46,590 Singleton para este objeto pool 280 00:10:46,590 --> 00:10:48,669 DataSource. Bueno, pues 281 00:10:48,669 --> 00:10:50,889 entonces aquí probamos 282 00:10:50,889 --> 00:10:52,990 las dos posibilidades. O instanciar 283 00:10:52,990 --> 00:10:54,690 un venta dado con una 284 00:10:54,690 --> 00:10:55,490 conexión única 285 00:10:55,490 --> 00:10:58,529 o instanciar un venta dado 286 00:10:58,529 --> 00:11:00,649 con una conexión sacada 287 00:11:00,649 --> 00:11:02,669 del pool. Porque una vez que yo tengo el 288 00:11:02,669 --> 00:11:04,330 pool, pedirle una conexión es 289 00:11:04,330 --> 00:11:06,730 goodConnection y ya está. Vale, una vez 290 00:11:06,730 --> 00:11:08,750 que tengo el pool, pedirle la conexión 291 00:11:08,750 --> 00:11:10,809 es esto. Pues bien, sacando 292 00:11:10,809 --> 00:11:12,590 una conexión del pool o bien 293 00:11:12,590 --> 00:11:14,830 creando una única en ese momento 294 00:11:14,830 --> 00:11:16,809 pues hicimos las comprobaciones 295 00:11:16,809 --> 00:11:18,750 y este servicio funcionaba, hacía las cosas 296 00:11:18,750 --> 00:11:20,590 con la base de datos y todo eso, ¿vale? 297 00:11:22,230 --> 00:11:22,789 Correcto 298 00:11:22,789 --> 00:11:25,289 pues entonces, vamos a 299 00:11:25,289 --> 00:11:26,950 completar 300 00:11:26,950 --> 00:11:28,769 esto, completando los 301 00:11:28,769 --> 00:11:30,990 métodos que nos faltan, pero moviéndonos 302 00:11:30,990 --> 00:11:32,629 de esta arquitectura a 303 00:11:32,629 --> 00:11:33,830 una arquitectura web 304 00:11:33,830 --> 00:11:36,690 desde cero, desde la base con serlets 305 00:11:36,690 --> 00:11:37,409 ¿vale? 306 00:11:38,669 --> 00:11:40,250 Entonces va a ser mucho copia y pega 307 00:11:40,250 --> 00:11:42,529 es llevarme toda esta arquitectura de modelo 308 00:11:42,529 --> 00:11:44,450 de servicio de DAO es llevármelo 309 00:11:44,450 --> 00:11:46,090 todo a mi 310 00:11:46,090 --> 00:11:48,570 aplicación ahora ya web 311 00:11:48,570 --> 00:11:50,250 y luego en lugar de 312 00:11:50,250 --> 00:11:52,350 hacer un ventas app como este 313 00:11:52,350 --> 00:11:53,870 con un main, pues hacerme un serlet 314 00:11:53,870 --> 00:11:56,190 y punto pelota 315 00:11:56,190 --> 00:11:58,090 punto pelota con los pequeños matices 316 00:11:58,090 --> 00:12:00,549 que pueden ir surgiendo, pero ya está 317 00:12:00,549 --> 00:12:01,570 ¿vale? 318 00:12:02,450 --> 00:12:04,230 entonces lo que es importante es tener 319 00:12:04,230 --> 00:12:06,409 en la cabeza las ideas claras 320 00:12:06,409 --> 00:12:08,190 de que es cada cosa, que es 321 00:12:08,190 --> 00:12:10,389 porque si tú tienes las ideas claras de que 322 00:12:10,389 --> 00:12:12,509 es cada cosa y ese puzzle está más o menos ahí 323 00:12:12,509 --> 00:12:15,409 luego ya cuando vas a construir algo nuevo 324 00:12:15,409 --> 00:12:17,009 pues coges las piezas correctas 325 00:12:17,009 --> 00:12:19,389 porque las conoces, sabes lo que significa cada una 326 00:12:19,389 --> 00:12:21,269 entonces coges las piezas correctas 327 00:12:21,269 --> 00:12:23,070 y ya haces el montaje, durante el montaje 328 00:12:23,070 --> 00:12:25,409 te pueden fallar cositas, pero no pasa nada 329 00:12:25,409 --> 00:12:27,429 porque tú más o menos sabes de que va todo 330 00:12:27,429 --> 00:12:28,850 y esas cositas que te fallan 331 00:12:28,850 --> 00:12:31,190 pues si le preguntas a HGPT 332 00:12:31,190 --> 00:12:33,149 a internet, rápidamente 333 00:12:33,149 --> 00:12:34,570 vas a encontrar la solución 334 00:12:34,570 --> 00:12:36,850 pero tienes que conocer las piezas 335 00:12:36,850 --> 00:12:39,250 pues venga entonces, ahora ya 336 00:12:39,250 --> 00:12:40,629 abrimos el otro 337 00:12:40,629 --> 00:12:42,990 web developer 338 00:12:42,990 --> 00:12:44,330 el otro eclipse 339 00:12:44,330 --> 00:12:46,389 el de desarrolladores web para 340 00:12:46,389 --> 00:12:48,610 hacer esta aplicación, ¿qué te pasa? 341 00:12:48,730 --> 00:12:49,870 no puedo hacerla en español 342 00:12:49,870 --> 00:12:53,350 pues no, porque tú, ¿qué quieres ser? ¿listo o tonto? 343 00:12:53,809 --> 00:12:54,289 tonto 344 00:12:54,289 --> 00:12:56,830 no, tú quieres ser alguien que lo controles 345 00:12:56,830 --> 00:12:57,350 todo 346 00:12:57,350 --> 00:12:58,850 ¿vale? 347 00:13:00,269 --> 00:13:02,570 estoy segura, mira, no se lo he preguntado 348 00:13:02,570 --> 00:13:04,389 pero estoy segura que si le preguntas a chat GPT 349 00:13:04,389 --> 00:13:06,850 ¿tiene sentido que mis alumnos de acceso 350 00:13:06,850 --> 00:13:07,889 a datos de segundo de edad 351 00:13:07,889 --> 00:13:10,610 conozcan la arquitectura de Servlet 352 00:13:10,610 --> 00:13:12,690 o directamente les empecéis a hablar en Spring 353 00:13:12,690 --> 00:13:14,669 no se lo he preguntado 354 00:13:14,669 --> 00:13:17,529 pero estoy segurísima de lo que te voy a contestar 355 00:13:17,529 --> 00:13:19,149 otra cosa es que no opinemos de él o no 356 00:13:19,149 --> 00:13:21,009 no, Aitor 357 00:13:21,009 --> 00:13:22,110 se lo he preguntado 358 00:13:22,110 --> 00:13:24,409 se lo preguntamos luego si quieres 359 00:13:24,409 --> 00:13:25,769 pero vamos a ver, es que es verdad 360 00:13:25,769 --> 00:13:29,129 sois una generación que no estáis acostumbrados 361 00:13:29,129 --> 00:13:31,370 a entender las tripas de las cosas 362 00:13:31,370 --> 00:13:32,789 hay que entenderlo todo 363 00:13:32,789 --> 00:13:34,850 porque eso es lo que realmente 364 00:13:34,850 --> 00:13:36,710 te puedes mover de contexto 365 00:13:36,710 --> 00:13:38,230 y te va a haber quedado 366 00:13:38,230 --> 00:13:40,049 unas conexiones neuronales 367 00:13:40,049 --> 00:13:41,529 que al final 368 00:13:41,529 --> 00:13:43,549 le sacas rendimiento 369 00:13:43,549 --> 00:13:51,480 bueno ya, pues por eso os he dicho 370 00:13:51,480 --> 00:13:53,240 espabilitos y rapiditos 371 00:13:53,240 --> 00:13:54,159 porque si hoy estáis 372 00:13:54,159 --> 00:13:56,480 porque si estáis espabilados hoy 373 00:13:56,480 --> 00:13:58,419 he dicho cuando he empezado la clase 374 00:13:58,419 --> 00:14:00,980 si estáis espabilados y hoy 375 00:14:00,980 --> 00:14:03,200 esto queda claro y entendéis 376 00:14:03,200 --> 00:14:05,120 realmente lo que es un servlet 377 00:14:05,120 --> 00:14:07,399 pues entonces os dejo tranquila 378 00:14:07,399 --> 00:14:09,000 con los seres el resto del curso, es lo que he dicho 379 00:14:09,000 --> 00:14:11,139 ¿vale? pero no podéis salir 380 00:14:11,139 --> 00:14:11,779 de aquí 381 00:14:11,779 --> 00:14:17,360 pero si yo no le he dicho 382 00:14:17,360 --> 00:14:18,740 la pregunta no es esa 383 00:14:18,740 --> 00:14:20,840 es si empezar directamente 384 00:14:20,840 --> 00:14:23,240 a ver, le voy a hacer yo 385 00:14:23,240 --> 00:14:23,779 la pregunta 386 00:14:23,779 --> 00:14:26,320 vamos a ver 387 00:14:26,320 --> 00:14:29,139 ya no, pero 388 00:14:29,139 --> 00:14:30,860 la pregunta que le voy a hacer 389 00:14:30,860 --> 00:14:45,360 Con mis alumnos de acceso a datos de Damm. 390 00:14:45,360 --> 00:15:08,360 Si quiero darles aplicaciones web y UMBC, ir directamente a frameworks como Sprint, 391 00:15:08,360 --> 00:15:08,919 sprint 392 00:15:08,919 --> 00:15:14,320 o conviene pasar 393 00:15:14,320 --> 00:15:15,980 por servlets. 394 00:15:17,279 --> 00:15:18,059 Vale, a ver. 395 00:15:19,000 --> 00:15:19,679 Honestidad. 396 00:15:19,899 --> 00:15:21,700 No se lo he preguntado nunca. Vamos a ver 397 00:15:21,700 --> 00:15:22,139 qué dice. 398 00:15:30,159 --> 00:15:31,559 Justo. Conviene 399 00:15:31,559 --> 00:15:33,740 pasar por servlets, pero no eternizarse en ellos. 400 00:15:33,860 --> 00:15:35,559 Por eso os he dicho, si de una vez 401 00:15:35,559 --> 00:15:37,700 ¿cuánto tiempo os he dedicado? Un día 402 00:15:37,700 --> 00:15:39,919 y hoy para que lo entendáis de una puñetera vez 403 00:15:39,919 --> 00:15:42,220 y me veáis vuestro oxidado cerebro 404 00:15:42,220 --> 00:15:42,580 ¿vale? 405 00:15:42,580 --> 00:15:44,220 creo que si me ponéis un poquito en la pantalla 406 00:15:44,220 --> 00:15:45,820 para gastar mi atención, perfecto 407 00:15:45,820 --> 00:16:02,740 por supuesto que no, con lo cual 408 00:16:02,740 --> 00:16:04,440 conclusión 409 00:16:04,440 --> 00:16:05,679 yo decido, pues ya está 410 00:16:05,679 --> 00:16:08,940 y además la que os va a aprobar o suspender 411 00:16:08,940 --> 00:16:10,879 desgraciadamente sea justo o injusto 412 00:16:10,879 --> 00:16:11,799 voy a ser yo 413 00:16:11,799 --> 00:16:14,840 y yo quiero gente lista 414 00:16:14,840 --> 00:16:15,539 en mi clase 415 00:16:15,539 --> 00:16:18,740 ¿eh? 416 00:16:19,539 --> 00:16:20,139 ¿qué dices? 417 00:16:20,399 --> 00:16:21,299 vamos a estar muy bien 418 00:16:21,299 --> 00:16:24,740 Luis dice toma nota y lo hace 419 00:16:24,740 --> 00:16:25,179 lo que sea 420 00:16:25,179 --> 00:16:27,519 ya, bueno 421 00:16:27,519 --> 00:16:29,080 toma nota tú también 422 00:16:29,080 --> 00:16:30,740 ya estamos acostumbrados 423 00:16:30,740 --> 00:16:34,799 bueno, a ver 424 00:16:34,799 --> 00:16:37,059 de todas maneras 425 00:16:37,059 --> 00:16:38,899 de verdad 426 00:16:38,899 --> 00:16:42,019 vale, pues repito 427 00:16:42,019 --> 00:16:44,240 no quiero dedicar 428 00:16:44,240 --> 00:16:46,080 más del día de hoy, le estoy haciendo caso 429 00:16:46,080 --> 00:16:47,799 en lo de no eternizarme 430 00:16:47,799 --> 00:16:49,279 así que vamos a ello 431 00:16:49,279 --> 00:16:50,399 venga 432 00:16:50,399 --> 00:16:54,519 pues donde tenemos 433 00:16:54,519 --> 00:16:56,539 el web developers 434 00:16:56,539 --> 00:16:58,539 aquí, vamos a cerrarlo 435 00:16:58,539 --> 00:17:00,379 todo, tenéis a mano el proyecto ese 436 00:17:00,379 --> 00:17:02,240 de copiar y pegar, de hecho lo he preparado 437 00:17:02,240 --> 00:17:03,299 todo en copiar y pegar 438 00:17:03,299 --> 00:17:05,599 precisamente para que nos eternicemos 439 00:17:05,599 --> 00:17:06,619 y poder terminarlo hoy. 440 00:17:07,339 --> 00:17:09,339 Lo tenéis descargado, es un zip, tiene que tener 441 00:17:09,339 --> 00:17:11,160 una clase, que es la clase servlet 442 00:17:11,160 --> 00:17:13,700 y dos formularios, 443 00:17:13,819 --> 00:17:15,339 creo. La clase servlet 444 00:17:15,339 --> 00:17:17,240 la abrís en un bloc de notas 445 00:17:17,240 --> 00:17:19,339 y de esa clase servlet vamos a ir 446 00:17:19,339 --> 00:17:21,200 copiando y pegando en nuestro servlet 447 00:17:21,200 --> 00:17:23,279 según vayamos necesitando. No es que abráis el servlet 448 00:17:23,279 --> 00:17:24,740 sin más, porque entonces no entendemos nada. 449 00:17:25,440 --> 00:17:27,039 Pues venga, vamos a hacer... 450 00:17:27,039 --> 00:17:31,579 Buenos días. 451 00:17:32,759 --> 00:17:34,420 Vale, pues vamos a hacer nuestra 452 00:17:34,420 --> 00:17:36,200 aplicación web desde el principio. 453 00:17:36,660 --> 00:17:39,079 Venga 454 00:17:39,079 --> 00:17:42,339 Todo el mundo está conectado, ¿no? 455 00:17:42,359 --> 00:17:42,960 Al universo 456 00:17:42,960 --> 00:17:44,579 Venga 457 00:17:44,579 --> 00:17:48,200 Aplicación web dinámica 458 00:17:48,200 --> 00:17:50,099 ¿Qué nombre le queremos poner? 459 00:17:50,460 --> 00:17:53,019 Yo le voy a poner unidad didáctica 2 460 00:17:53,019 --> 00:17:56,960 Esta misma de aquí para no liarme 461 00:17:56,960 --> 00:17:58,319 Pero clase 462 00:17:58,319 --> 00:18:04,059 Llamadla como os organizéis vosotros 463 00:18:04,059 --> 00:18:06,460 Aunque yo esta, tal y como nos quede ya completa 464 00:18:06,460 --> 00:18:07,660 La voy a subir a la ola virtual 465 00:18:07,660 --> 00:18:09,039 Vale 466 00:18:09,039 --> 00:18:12,140 La vamos a ejecutar en el servidor 467 00:18:12,140 --> 00:18:14,599 Tomcat que tenemos instalado 468 00:18:14,599 --> 00:18:16,539 En el equipo e integrado 469 00:18:16,539 --> 00:18:17,400 Con el Eclipse 470 00:18:17,400 --> 00:18:20,359 Todos tendréis en vuestro 471 00:18:20,359 --> 00:18:22,319 Web Developers un entorno 472 00:18:22,319 --> 00:18:23,339 De ejecución Apache 473 00:18:23,339 --> 00:18:26,160 Pues tendrás que 474 00:18:26,160 --> 00:18:28,079 Habilitarlo con el New Runtime 475 00:18:28,079 --> 00:18:32,730 Vale, todo por defecto 476 00:18:32,730 --> 00:18:34,369 Se queda así, estamos yendo 477 00:18:34,369 --> 00:18:36,210 Muy despacito y muy relajados 478 00:18:36,210 --> 00:18:38,390 Para que nadie se estrese 479 00:18:38,390 --> 00:18:43,089 No, aquí lo tenemos 480 00:18:43,089 --> 00:18:45,250 Vale, pero esta estructura 481 00:18:45,250 --> 00:18:46,930 No nos gusta 482 00:18:46,930 --> 00:18:48,690 Nos gusta la de Maven 483 00:18:48,690 --> 00:18:50,970 Porque lógicamente querremos poner 484 00:18:50,970 --> 00:18:52,490 Un Pong con dependencias 485 00:18:52,490 --> 00:18:54,470 Pues entonces 486 00:18:54,470 --> 00:18:57,009 Botón derecho 487 00:18:57,009 --> 00:19:01,170 Configure 488 00:19:01,849 --> 00:19:05,650 Si te la sabías 489 00:19:05,650 --> 00:19:06,509 Porque ya la hemos hecho 490 00:19:06,509 --> 00:19:09,569 Vamos a convertirlo a estructura de Maven 491 00:19:09,569 --> 00:19:11,329 Venga, el grupo 492 00:19:11,329 --> 00:19:13,390 Pues nuestro grupo de siempre 493 00:19:13,390 --> 00:19:15,630 Aunque puede poner uno del dominio que quiera 494 00:19:15,630 --> 00:19:17,170 Vale, ya está 495 00:19:17,170 --> 00:19:18,809 Venga 496 00:19:18,809 --> 00:19:26,009 El de convertir a Maven 497 00:19:26,009 --> 00:19:28,410 Botón derecho 498 00:19:28,410 --> 00:19:30,890 Configure, convert to Maven project 499 00:19:30,890 --> 00:19:34,839 Se te abrirá esta ventanita 500 00:19:34,839 --> 00:19:36,460 Yo he cambiado el grupo 501 00:19:36,460 --> 00:19:37,440 Que me da por defecto 502 00:19:37,440 --> 00:19:39,019 Porque ese grupo es muy feo 503 00:19:39,019 --> 00:19:40,559 Se supone que ahí va un nombre de dominio 504 00:19:40,559 --> 00:19:41,799 Y ya está 505 00:19:41,799 --> 00:19:46,160 Vale, luego 506 00:19:46,160 --> 00:19:49,420 Si nos da tiempo y si no igual echamos a Alejandra 507 00:19:49,420 --> 00:19:51,059 Un rato, hoy teníais algo muy importante 508 00:19:51,059 --> 00:19:53,559 Pues si nos da tiempo 509 00:19:53,559 --> 00:19:54,940 Para dejarlo ya hoy completo 510 00:19:54,940 --> 00:19:57,180 Podemos ya por fin empaquetar en un guard 511 00:19:57,180 --> 00:19:59,140 De una puñetera vez y desplegarlo en un guard 512 00:19:59,140 --> 00:20:01,519 En un Tomcat externo para que no se quede esto tan 513 00:20:01,519 --> 00:20:03,660 Tan eclipse 514 00:20:03,660 --> 00:20:04,259 ¿Perdón? 515 00:20:07,759 --> 00:20:09,079 En el developers 516 00:20:09,079 --> 00:20:12,039 Dynamic Web Project 517 00:20:12,039 --> 00:20:13,140 Vale 518 00:20:13,140 --> 00:20:24,750 Vale, pues ala 519 00:20:24,750 --> 00:20:26,710 Aquí ya tenemos el proyecto Maven 520 00:20:26,710 --> 00:20:27,690 Que 521 00:20:27,690 --> 00:20:30,910 Que máquina virtual 522 00:20:30,910 --> 00:20:32,950 Me ha puesto, lo abrís en librerías 523 00:20:32,950 --> 00:20:34,710 Como veis este proyecto 524 00:20:34,710 --> 00:20:36,690 Como es una aplicación web, tiene dos 525 00:20:36,690 --> 00:20:37,849 Librerías estándar 526 00:20:37,849 --> 00:20:42,920 Con los papelitos, cuánto gasto el Amazonas 527 00:20:42,920 --> 00:20:44,720 Está sufriendo mucho con vuestro justificante 528 00:20:44,720 --> 00:20:49,880 Si es para el jueves 529 00:20:49,880 --> 00:20:50,980 No hace falta que lo olvidéis 530 00:20:50,980 --> 00:20:55,920 Vale, como veis la aplicación web 531 00:20:55,920 --> 00:20:57,920 Tiene dos librerías 532 00:20:57,920 --> 00:20:59,400 La de Jota 533 00:20:59,400 --> 00:21:01,539 La máquina virtual de toda la vida 534 00:21:01,539 --> 00:21:03,539 Y la del Tomcat 535 00:21:03,539 --> 00:21:04,940 Porque ahora aquí va a haber 536 00:21:04,940 --> 00:21:06,420 Y eso va a tener su implicación 537 00:21:06,420 --> 00:21:07,500 Que la vamos a ver ahora 538 00:21:07,500 --> 00:21:11,359 Dos contextos de programa 539 00:21:11,359 --> 00:21:13,240 Nuestra propia aplicación 540 00:21:13,240 --> 00:21:14,319 Es un contexto 541 00:21:14,319 --> 00:21:16,740 Y el Tomcat es otro 542 00:21:16,740 --> 00:21:19,380 Ahora va a haber dos aplicaciones ejecutándose 543 00:21:19,380 --> 00:21:21,180 El Tomcat 544 00:21:21,180 --> 00:21:22,359 Y nuestra aplicación 545 00:21:22,359 --> 00:21:25,440 Y eso tiene ciertas implicaciones 546 00:21:25,440 --> 00:21:27,180 ¿Vale? Con una aplicación de escritorio 547 00:21:27,180 --> 00:21:28,619 Está nuestra aplicación y ya está 548 00:21:28,619 --> 00:21:31,480 Bueno, por supuesto la máquina virtual, claro, pero es que esa está siempre 549 00:21:31,480 --> 00:21:33,000 Pero una aplicación web 550 00:21:33,000 --> 00:21:35,160 Está nuestra aplicación y el Tomcat 551 00:21:35,160 --> 00:21:37,160 Y las dos son aplicaciones Java ejecutándose 552 00:21:37,160 --> 00:21:39,160 Y ahí hay ciertos conflictos 553 00:21:39,700 --> 00:21:40,880 Vale 554 00:21:40,880 --> 00:21:43,200 A mí me ha puesto 555 00:21:43,200 --> 00:21:45,420 esta 22, pues nada, se lo dejo así 556 00:21:45,420 --> 00:21:46,059 y se acabó 557 00:21:46,059 --> 00:21:49,539 y vamos a quitar 558 00:21:49,539 --> 00:21:51,259 lo rojo del POM 559 00:21:51,259 --> 00:21:52,019 este de aquí 560 00:21:52,019 --> 00:21:54,519 para no angustiarnos 561 00:21:54,519 --> 00:22:00,170 era este, ¿no? yo creo 562 00:22:00,170 --> 00:22:02,650 ya tenemos 563 00:22:02,650 --> 00:22:03,849 quitado lo rojo del POM 564 00:22:03,849 --> 00:22:06,049 vale, pues ahora vamos a construir la aplicación 565 00:22:06,049 --> 00:22:08,589 pues vamos, pues los mismos 566 00:22:08,589 --> 00:22:10,549 paquetes, el de modelo, el de DAO 567 00:22:10,549 --> 00:22:12,329 el de implementación, el de servicio 568 00:22:12,329 --> 00:22:15,049 el de connect, menos el de la aplicación 569 00:22:15,049 --> 00:22:15,569 ese no 570 00:22:15,569 --> 00:22:18,490 Pues venga, en nuestro main java 571 00:22:18,490 --> 00:22:20,750 Vamos a crearlos antes de nada 572 00:22:20,750 --> 00:22:22,230 Y luego ya arrastramos las clases 573 00:22:22,230 --> 00:22:26,569 Yo no arrastro los paquetes directamente 574 00:22:26,569 --> 00:22:28,789 De una a otra porque me cambia la estructura 575 00:22:28,789 --> 00:22:30,009 Y eso desmadre 576 00:22:30,009 --> 00:22:30,509 Pero 577 00:22:30,509 --> 00:22:33,670 Prefiero ir sobre seguro siempre 578 00:22:33,670 --> 00:22:35,569 Pues venga 579 00:22:35,569 --> 00:22:38,470 Este va a ser el paquete para las clases del modelo 580 00:22:38,470 --> 00:22:43,559 Este va a ser 581 00:22:43,559 --> 00:22:45,619 El paquete para las clases 582 00:22:45,619 --> 00:22:46,680 DAO 583 00:22:46,680 --> 00:22:55,140 Este va a ser el paquete 584 00:22:55,140 --> 00:22:56,960 Para las clases 585 00:22:56,960 --> 00:23:00,099 Implementación de DAO 586 00:23:00,099 --> 00:23:07,329 Este va a ser el paquete 587 00:23:07,329 --> 00:23:08,829 Para 588 00:23:08,829 --> 00:23:11,130 Las clases del servicio 589 00:23:11,130 --> 00:23:18,359 Y este va a ser el paquete 590 00:23:18,359 --> 00:23:21,319 Para 591 00:23:21,319 --> 00:23:24,440 Lo relacionado con crear la conexión 592 00:23:24,440 --> 00:23:28,119 Quiero mantener el nombre 593 00:23:28,119 --> 00:23:29,480 De los otros para luego no cambiar 594 00:23:29,480 --> 00:23:33,380 Y estos serán los cinco paquetes 595 00:23:33,380 --> 00:23:34,200 Que nos interesaba 596 00:23:34,200 --> 00:23:34,880 ¿Vale? 597 00:23:36,700 --> 00:23:39,359 Sí, pero ahora después vamos a copiar primero lo de la otra 598 00:23:39,359 --> 00:23:40,759 Y cuando ya tengamos copiado lo de la otra 599 00:23:40,759 --> 00:23:43,279 Ahora ya hacemos nuestro controlador 600 00:23:43,279 --> 00:23:45,180 ¿Vale? 601 00:23:46,440 --> 00:23:47,579 Venga, pues a ver 602 00:23:47,579 --> 00:23:49,500 De la otra 603 00:23:49,500 --> 00:23:50,819 Pues me llevo yo 604 00:23:50,819 --> 00:23:52,400 Pues ya está, del modelo 605 00:23:52,400 --> 00:23:54,220 Venga, se acabó 606 00:23:54,220 --> 00:23:55,400 Pues copy 607 00:23:55,400 --> 00:23:57,859 Las vais copiando todas 608 00:23:57,859 --> 00:24:00,579 Y ya está 609 00:24:00,579 --> 00:24:13,220 Sí, se pega raro 610 00:24:13,220 --> 00:24:13,900 Pero no pasa nada 611 00:24:13,900 --> 00:24:17,490 Conexión 612 00:24:17,490 --> 00:24:22,589 Si miras luego la estructura de carpetas por dentro 613 00:24:22,589 --> 00:24:23,069 Está bien 614 00:24:23,069 --> 00:24:27,500 Pero el Eclipse a veces se raya 615 00:24:27,500 --> 00:24:37,589 Dao 616 00:24:37,589 --> 00:24:45,480 Dao 617 00:24:45,480 --> 00:24:52,339 Dao implementación 618 00:24:52,339 --> 00:25:02,619 Y servicio 619 00:25:02,619 --> 00:25:04,180 Un segundo 620 00:25:04,180 --> 00:25:11,329 Servicio 621 00:25:11,329 --> 00:25:18,319 Bueno, pues estas son las mismas 622 00:25:18,319 --> 00:25:20,920 Me da igual que arquitectura de aplicación tenga 623 00:25:20,920 --> 00:25:23,059 Me da exactamente igual 624 00:25:23,059 --> 00:25:26,940 Sí 625 00:25:26,940 --> 00:25:29,819 Una cosa, por ejemplo, a mí no me saca la clase 626 00:25:29,819 --> 00:25:31,619 Con la arquitectura de web 627 00:25:31,619 --> 00:25:33,640 Y por lo de deployment 628 00:25:33,640 --> 00:25:35,599 De script, de script, no me sale 629 00:25:35,599 --> 00:25:37,059 Me sale solo lo de maven 630 00:25:37,059 --> 00:25:41,339 O sea, tú has creado una aplicación 631 00:25:41,339 --> 00:25:42,819 Esta 632 00:25:42,819 --> 00:25:45,079 Sí, sí, el dynamic web project 633 00:25:45,079 --> 00:25:47,599 Y luego le has convertido a maven project 634 00:25:47,599 --> 00:25:49,339 Sí, pero es que ni con el dynamic web project 635 00:25:49,339 --> 00:25:55,099 Me sale como una clase normal 636 00:25:55,099 --> 00:26:02,210 Bueno 637 00:26:02,210 --> 00:26:03,890 Vamos a tirar 638 00:26:03,890 --> 00:26:05,190 Porque si no, no acabamos 639 00:26:05,190 --> 00:26:07,609 Y luego ya, pues los que hayan 640 00:26:07,609 --> 00:26:09,210 Fallecido en alguno de los 641 00:26:09,210 --> 00:26:11,470 Momentos 642 00:26:11,470 --> 00:26:12,869 Pues ya vemos, ¿vale? 643 00:26:14,210 --> 00:26:15,470 Vale, hasta aquí estamos, ¿no? 644 00:26:16,529 --> 00:26:17,869 Entonces, lógicamente 645 00:26:17,869 --> 00:26:19,049 Tenemos 646 00:26:19,049 --> 00:26:21,029 Ciertos problemas 647 00:26:21,029 --> 00:26:23,730 Aquí, este import 648 00:26:23,730 --> 00:26:25,569 lo vamos abriendo 649 00:26:25,569 --> 00:26:26,690 lógicamente tenemos 650 00:26:26,690 --> 00:26:29,410 el problema de las dependencias 651 00:26:29,410 --> 00:26:31,490 aquí ya nos aparece la de 652 00:26:31,490 --> 00:26:32,250 Icari, ¿verdad? 653 00:26:32,910 --> 00:26:35,589 entonces vamos a copiar el POM, claro, lógicamente 654 00:26:35,589 --> 00:26:37,630 entonces 655 00:26:37,630 --> 00:26:39,430 las mismas dependencias que teníamos 656 00:26:39,430 --> 00:26:39,990 en este 657 00:26:39,990 --> 00:26:43,269 que eran el conector 658 00:26:43,269 --> 00:26:45,609 de MySQL, fundamental 659 00:26:45,609 --> 00:26:47,910 el del pool de conexiones 660 00:26:47,910 --> 00:26:49,390 y esto que 661 00:26:49,390 --> 00:26:50,549 hacía falta para el pool 662 00:26:50,549 --> 00:26:56,450 pues las tres eran nuestras únicas tres 663 00:26:56,450 --> 00:26:58,750 dependencias, las que estábamos usando, nada más 664 00:26:58,750 --> 00:27:00,650 pues estas mismas tres se van 665 00:27:00,650 --> 00:27:08,059 al otro lado, se van aquí 666 00:27:08,059 --> 00:27:08,759 al otro lado 667 00:27:08,759 --> 00:27:13,000 ¿Cómo que tres? ¿Perdón? 668 00:27:14,200 --> 00:27:14,539 ¿Perdón? 669 00:27:15,200 --> 00:27:16,039 La de arriba, ¿cuál es? 670 00:27:17,480 --> 00:27:19,220 La del driver MySQL 671 00:27:19,220 --> 00:27:21,140 y las dos relacionadas con 672 00:27:21,140 --> 00:27:23,079 las tres que teníamos en el otro 673 00:27:23,079 --> 00:27:24,539 proyecto, las he copiado tal cual 674 00:27:24,539 --> 00:27:34,619 vale, pues ya efectivamente 675 00:27:34,619 --> 00:27:36,839 se nos han quitado todos los 676 00:27:36,839 --> 00:27:37,680 errores de 677 00:27:37,680 --> 00:27:40,779 desarrollo, ya se nos han 678 00:27:40,779 --> 00:27:45,500 quitado de compilación 679 00:27:45,500 --> 00:27:50,160 y aquí tenemos todos los paquetitos 680 00:27:50,160 --> 00:27:51,180 con todas sus clases 681 00:27:51,180 --> 00:27:56,759 bueno, pues ahora ya sí que sí 682 00:27:56,759 --> 00:27:59,359 ¿quién va a llamar ahora al servicio? 683 00:28:00,059 --> 00:28:00,920 pues al servicio 684 00:28:00,920 --> 00:28:02,680 lo va a llamar nuestro controlador 685 00:28:02,680 --> 00:28:04,359 cuando sea invocado 686 00:28:04,359 --> 00:28:06,799 desde una HTTP, desde una 687 00:28:06,799 --> 00:28:08,460 petición HTTP, ¿vale? 688 00:28:09,019 --> 00:28:10,359 y eso aplica 689 00:28:10,359 --> 00:28:12,880 a Spring y al mundo entero 690 00:28:12,880 --> 00:28:14,980 una petición HTTP 691 00:28:14,980 --> 00:28:16,920 te va a invocar 692 00:28:16,920 --> 00:28:19,180 a algo que despierta 693 00:28:19,180 --> 00:28:21,140 a un serlet. Ese algo puede 694 00:28:21,140 --> 00:28:23,140 ser una clase de sprint que despierta 695 00:28:23,140 --> 00:28:24,900 al serlet o puede ser el propio serlet. 696 00:28:26,220 --> 00:28:27,079 Bueno, perdón, 697 00:28:27,160 --> 00:28:28,920 no a una clase de sprint, no al serlet de sprint. 698 00:28:29,039 --> 00:28:30,759 Sprint es un serlet, eso es sprint. 699 00:28:31,039 --> 00:28:33,000 Un serlet gordote que se 700 00:28:33,000 --> 00:28:35,039 encarga de reencaminar a otras cosas. 701 00:28:36,259 --> 00:28:37,180 Bueno, pues entonces 702 00:28:37,180 --> 00:28:38,740 vamos a hacer nuestro controlador, 703 00:28:39,059 --> 00:28:40,440 nuestro serlet directamente. 704 00:28:41,220 --> 00:28:42,599 Pues venga, nos vamos a hacer un paquete. 705 00:28:47,849 --> 00:28:48,509 A ver. 706 00:28:49,349 --> 00:28:51,190 Podemos directamente decirle, oye, 707 00:28:51,190 --> 00:28:52,970 que quieres, una clase y poner la 708 00:28:52,970 --> 00:28:53,910 creed de serlet 709 00:28:53,910 --> 00:28:56,950 o hacer un new serlet 710 00:28:56,950 --> 00:28:58,470 porque el eclipse 711 00:28:58,470 --> 00:29:00,130 web developer, pues ya 712 00:29:00,130 --> 00:29:02,950 vale, pues le hacéis un new serlet y ya nos 713 00:29:02,950 --> 00:29:07,170 pero en la hora que creamos 714 00:29:07,170 --> 00:29:07,670 un paquete 715 00:29:07,670 --> 00:29:10,690 ay perdón, que no he creado el paquete todavía, es verdad 716 00:29:10,690 --> 00:29:12,450 si, si, si 717 00:29:12,450 --> 00:29:13,490 vamos a hacer 718 00:29:13,490 --> 00:29:16,970 un paquete pues con 719 00:29:16,970 --> 00:29:18,970 .dam2.controller 720 00:29:18,970 --> 00:29:19,589 por ejemplo 721 00:29:19,589 --> 00:29:22,970 controller, y ahora ya si 722 00:29:22,970 --> 00:29:24,029 Dentro de este paquete 723 00:29:24,029 --> 00:29:26,609 Hacemos un nuevo serlet 724 00:29:26,609 --> 00:29:28,230 Vale 725 00:29:28,230 --> 00:29:31,390 ¿Cómo vamos a llamar al serlet? 726 00:29:32,829 --> 00:29:33,769 Bueno, pues 727 00:29:33,769 --> 00:29:35,029 Como es el serlet 728 00:29:35,029 --> 00:29:37,549 Que va a gestionar las ventas 729 00:29:37,549 --> 00:29:39,809 Pues podríamos llamarlo 730 00:29:39,809 --> 00:29:41,089 Venta serlet, ¿vale? 731 00:29:50,339 --> 00:29:51,339 Espera, lo que pasa es que 732 00:29:51,339 --> 00:29:53,059 Si vais a copiar y pegar 733 00:29:53,059 --> 00:29:55,019 Bueno, no, porque iba a decir 734 00:29:55,019 --> 00:29:56,619 Por llamarlo igual que lo que sé, pero no 735 00:29:56,619 --> 00:29:58,839 Porque si hay cosas que son distintas 736 00:29:58,839 --> 00:30:01,240 Al cambiarlas, lo vamos a entender mejor 737 00:30:01,240 --> 00:30:02,740 Lo vamos a llamar venta a Serlet 738 00:30:02,740 --> 00:30:03,740 Ya está 739 00:30:03,740 --> 00:30:10,009 Aquí ya lo tenemos todo 740 00:30:10,009 --> 00:30:11,849 Los Serlet se heredan 741 00:30:11,849 --> 00:30:13,309 De este, next 742 00:30:13,309 --> 00:30:13,869 Vale 743 00:30:13,869 --> 00:30:17,690 Y ahora, el Serlet 744 00:30:17,690 --> 00:30:19,470 ¿Cómo se lanza? 745 00:30:19,750 --> 00:30:21,710 Se lanza en respuesta a una 746 00:30:21,710 --> 00:30:24,150 URL, a una petición 747 00:30:24,150 --> 00:30:25,250 HTTP 748 00:30:25,250 --> 00:30:27,109 A una URL 749 00:30:27,109 --> 00:30:29,150 Vale, pues aquí te está diciendo 750 00:30:29,150 --> 00:30:31,309 oye, ¿qué URL 751 00:30:31,309 --> 00:30:32,970 quieres que despierte a este 752 00:30:32,970 --> 00:30:34,769 serlet? Esta 753 00:30:34,769 --> 00:30:36,950 URL nos gusta, es decir, la 754 00:30:36,950 --> 00:30:38,869 raíz donde esté desplegado nuestro proyecto 755 00:30:38,869 --> 00:30:41,150 la raíz que sea, yo despliego donde me dé la gana 756 00:30:41,150 --> 00:30:42,910 pues aquí se refiere, donde esté 757 00:30:42,910 --> 00:30:44,809 desplegado tu aplicación 758 00:30:44,809 --> 00:30:46,829 y a continuación ventas serlet 759 00:30:46,829 --> 00:30:49,089 ahí quieres que se despierte, bueno, pues no sé 760 00:30:49,089 --> 00:30:49,670 nos gusta 761 00:30:49,670 --> 00:30:52,809 a mí es que las rutas 762 00:30:52,809 --> 00:30:54,930 con mayúsculas y minúsculas 763 00:30:54,930 --> 00:30:56,990 pues en la URL no me 764 00:30:56,990 --> 00:30:58,390 gustan, porque es una 765 00:30:58,390 --> 00:31:00,069 es indistinguible 766 00:31:00,069 --> 00:31:02,990 para una petición HTTP las mayúsculas y minúsculas 767 00:31:02,990 --> 00:31:04,269 entonces como que crea confusión 768 00:31:04,269 --> 00:31:06,150 entonces yo prefiero 769 00:31:06,150 --> 00:31:07,750 a este le vamos a llamar por ejemplo 770 00:31:07,750 --> 00:31:09,410 ventas, sin más 771 00:31:09,410 --> 00:31:11,809 cuanto más sencillita sea la URL 772 00:31:11,809 --> 00:31:14,490 mejor para todos, y si no tiene mayúsculas y minúsculas 773 00:31:14,490 --> 00:31:16,289 mejor, ventas 774 00:31:16,289 --> 00:31:20,190 vale, pues entonces, este servlet 775 00:31:20,190 --> 00:31:21,390 se va a despertar 776 00:31:21,390 --> 00:31:24,430 cuando la URL sea ventas 777 00:31:24,430 --> 00:31:28,150 que es que 778 00:31:28,150 --> 00:31:31,250 que 779 00:31:31,250 --> 00:31:37,019 Parámetro de iniciación del servlet 780 00:31:37,019 --> 00:31:38,960 No, no nos metemos en historias de esas 781 00:31:38,960 --> 00:31:39,859 Ya está 782 00:31:39,859 --> 00:31:42,039 Next, vale 783 00:31:42,039 --> 00:31:44,579 Esto lo podemos dejar así 784 00:31:44,579 --> 00:31:46,099 Todo por defecto 785 00:31:46,099 --> 00:31:52,380 Vale, pues este es 786 00:31:52,380 --> 00:31:53,279 Mi servlet 787 00:31:53,279 --> 00:31:55,259 Entonces aquí 788 00:31:55,259 --> 00:31:58,019 Hay, cuidado 789 00:31:58,019 --> 00:31:59,599 Pero aquí tenemos que tocar cosas 790 00:31:59,599 --> 00:32:01,819 Recordad que a partir de 791 00:32:01,819 --> 00:32:02,740 Java 792 00:32:02,740 --> 00:32:05,740 Es en Navidad, ¿cuál era? 793 00:32:05,740 --> 00:32:07,079 10, 11, 12, no me acuerdo 794 00:32:07,079 --> 00:32:09,660 cuando JavaX pasó a Yakarta 795 00:32:09,660 --> 00:32:11,359 porque de Oracle pasó a Eclipse 796 00:32:11,359 --> 00:32:13,960 toda la parte de desarrollo empresarial 797 00:32:13,960 --> 00:32:14,480 con Java 798 00:32:14,480 --> 00:32:16,400 pues 799 00:32:16,400 --> 00:32:19,539 él te pone el import este 800 00:32:19,539 --> 00:32:20,579 de JavaX Serlet 801 00:32:20,579 --> 00:32:23,900 pero como tenemos una versión de máquina virtual 802 00:32:23,900 --> 00:32:25,799 posterior, pues no es este 803 00:32:25,799 --> 00:32:27,740 el que queremos, entonces quitar todos estos import 804 00:32:27,740 --> 00:32:29,700 para hacer los import buenos 805 00:32:29,700 --> 00:32:32,019 quitamos todos estos 806 00:32:32,019 --> 00:32:34,140 y ahora vamos a importar 807 00:32:34,140 --> 00:32:36,980 de Yacarta, que es la 808 00:32:36,980 --> 00:32:38,740 que ahora ya sí que sí tiene 809 00:32:38,740 --> 00:32:41,299 coherencia con la versión de Java 810 00:32:41,299 --> 00:32:41,980 en la que estamos. 811 00:32:43,740 --> 00:32:45,140 Importamos de Yacarta 812 00:32:45,140 --> 00:32:47,420 y algo más 813 00:32:47,420 --> 00:32:49,200 hay por ahí. Sí, el response 814 00:32:49,200 --> 00:32:51,319 este de aquí, el request 815 00:32:51,319 --> 00:32:52,200 y el response. 816 00:33:02,720 --> 00:33:04,420 Y sigue faltando algo. 817 00:33:05,180 --> 00:33:07,059 Sí, el serlet exception. 818 00:33:13,069 --> 00:33:14,289 Y ahora ya sí que está todo. 819 00:33:14,730 --> 00:33:16,430 Importado de la librería buena. 820 00:33:17,089 --> 00:33:17,309 ¿Vale? 821 00:33:17,309 --> 00:33:37,079 Vale, como veis, esta anotación es la que le dice al Tomcat, oye, si te llega la URL punto de despliegue de la aplicación, el que sea punto de despliegue barra ventas, este es el que tiene que, pum, despertarse, este es el que tiene que despertarse. 822 00:33:37,079 --> 00:34:03,809 Cuidado porque esa información sobre quién tiene que despertarse a consecuencia de invocar una URL puede llegar por esta anotación o puede llegar también por el web.xml, por este ficherito que está aquí y nos la ha metido en los dos sitios. 823 00:34:03,809 --> 00:34:06,170 Problemón 824 00:34:06,170 --> 00:34:08,809 Cuando ahora lancemos esta aplicación 825 00:34:08,809 --> 00:34:10,449 Nos va a decir 826 00:34:10,449 --> 00:34:12,550 Tomcat 827 00:34:12,550 --> 00:34:15,110 Que tienes dos serles que se llaman igual 828 00:34:15,110 --> 00:34:16,949 No tienes dos serles que se llaman igual 829 00:34:16,949 --> 00:34:18,710 Es que le clisen medio tonto 830 00:34:18,710 --> 00:34:20,289 Y te ha metido 831 00:34:20,289 --> 00:34:22,150 La declaración del serle 832 00:34:22,150 --> 00:34:25,329 Tanto en el web xml como como una anotación 833 00:34:25,329 --> 00:34:27,250 Te quedas con una o te quedas con la otra 834 00:34:27,250 --> 00:34:28,389 Nunca con las dos 835 00:34:28,389 --> 00:34:30,150 Porque si coexisten las dos 836 00:34:30,150 --> 00:34:33,210 Parece que tienes dos serles que responden a la misma clase 837 00:34:33,210 --> 00:34:34,250 Y eso nunca puede ser 838 00:34:34,250 --> 00:34:37,489 ¿Vale? Entonces vamos a quitarla 839 00:34:37,489 --> 00:34:39,030 De aquí, ¿vale? 840 00:34:39,070 --> 00:34:40,469 Para ahorrar tiempo y no eternizarnos 841 00:34:40,469 --> 00:34:42,070 Vamos a hacer caso 842 00:34:42,070 --> 00:34:44,730 Antes de esperar a ver ese error 843 00:34:44,730 --> 00:34:46,309 ¿Tienes dos serles con el mismo nombre? 844 00:34:47,030 --> 00:34:49,170 Pues antes de esperar a eso, vamos a quitarlo de aquí 845 00:34:49,170 --> 00:34:50,550 Y ya está 846 00:34:50,550 --> 00:34:55,369 Lo podríamos quitar de anotaciones 847 00:34:55,369 --> 00:34:56,570 Y quitarlo de aquí 848 00:34:56,570 --> 00:34:57,630 Pero hombre 849 00:34:57,630 --> 00:34:59,929 Es más moderna 850 00:34:59,929 --> 00:35:01,989 La configuración por anotaciones 851 00:35:01,989 --> 00:35:03,889 Que por el web.xml 852 00:35:03,889 --> 00:35:05,489 Entonces vamos a quitarlo de aquí 853 00:35:05,489 --> 00:35:08,570 Entonces de aquí, cuidado, no quitéis lo que no es 854 00:35:08,570 --> 00:35:10,909 Solamente esto, esta parte de aquí 855 00:35:10,909 --> 00:35:12,889 La que describe al serles, solo a esta 856 00:35:12,889 --> 00:35:14,829 Entonces ya la aplicación sí que responde 857 00:35:14,829 --> 00:35:15,710 A la clase 858 00:35:15,710 --> 00:35:18,530 Ahora ya la aplicación cuando reciba 859 00:35:18,530 --> 00:35:20,030 La URL de ventas no va a decir 860 00:35:20,030 --> 00:35:22,670 Oye, que tienes dos serles que responden a ventas 861 00:35:22,670 --> 00:35:24,630 Ahora ya solo va a haber uno 862 00:35:24,630 --> 00:35:25,590 El que está anotado 863 00:35:25,590 --> 00:35:27,289 Dime 864 00:35:27,289 --> 00:35:30,929 El pon es el mismo 865 00:35:30,929 --> 00:35:31,989 Que la otra aplicación 866 00:35:31,989 --> 00:35:33,809 El mismo 867 00:35:33,809 --> 00:35:35,670 O sea, en las dependencias 868 00:35:35,670 --> 00:35:37,949 Tiene el driver y tiene estas dos 869 00:35:37,949 --> 00:35:39,489 Que eran para el pool de conexiones 870 00:35:39,489 --> 00:35:41,030 Dime 871 00:35:41,030 --> 00:35:50,449 Vale 872 00:35:50,449 --> 00:35:52,750 Entonces, ahora 873 00:35:52,750 --> 00:35:55,769 El servlet 874 00:35:55,769 --> 00:35:59,190 Se despertará cuando la URL 875 00:35:59,190 --> 00:36:00,690 Sea ventas, pero claro 876 00:36:00,690 --> 00:36:02,849 Nosotros tenemos 877 00:36:02,849 --> 00:36:04,550 Varias acciones que podemos hacer 878 00:36:04,550 --> 00:36:07,090 Insertar una venta, recuperar venta 879 00:36:07,090 --> 00:36:09,269 Por IDE, recuperar todas y borrar 880 00:36:09,269 --> 00:36:11,070 son las cuatro que hemos elegido nosotros 881 00:36:11,070 --> 00:36:12,690 podían ser más, pero son esas cuatro 882 00:36:12,690 --> 00:36:14,369 entonces 883 00:36:14,369 --> 00:36:16,010 pero solo hay un serlet 884 00:36:16,010 --> 00:36:19,010 ¿cómo hacemos? entonces aquí habría varias 885 00:36:19,010 --> 00:36:20,130 filosofías de diseño 886 00:36:20,130 --> 00:36:23,130 hacer un serlet por cada 887 00:36:23,130 --> 00:36:25,110 operación, un serlet 888 00:36:25,110 --> 00:36:27,409 insertar, serlet 889 00:36:27,409 --> 00:36:29,369 no sé qué, serlet 890 00:36:29,369 --> 00:36:31,250 borrar, y ponerle 891 00:36:31,250 --> 00:36:32,269 a cada uno una ruta 892 00:36:32,269 --> 00:36:35,050 y que la decisión de que 893 00:36:35,050 --> 00:36:37,349 operación CRUD haces sea por URL 894 00:36:37,349 --> 00:36:38,909 hombre, como poder 895 00:36:38,909 --> 00:36:41,130 pues se puede, pero es muy feo 896 00:36:41,130 --> 00:36:42,869 ¿qué es lo más 897 00:36:42,869 --> 00:36:44,809 habitual? en un solo 898 00:36:44,809 --> 00:36:46,670 servlet, hacer 899 00:36:46,670 --> 00:36:48,550 todas las operaciones 900 00:36:48,550 --> 00:36:50,050 insertar, eliminar 901 00:36:50,050 --> 00:36:52,889 ¿cómo distingue ese servlet 902 00:36:52,889 --> 00:36:54,110 qué operación quieres hacer? 903 00:36:54,510 --> 00:36:56,769 pues por un parámetro del formulario y punto pelota 904 00:36:56,769 --> 00:36:58,869 ¿vale? tu formulario que te lleva 905 00:36:58,869 --> 00:37:00,889 a ventas, tú le puedes pasar parámetros 906 00:37:00,889 --> 00:37:03,030 lógicamente los formularios 907 00:37:03,030 --> 00:37:04,869 llevan parámetros, pues que uno 908 00:37:04,869 --> 00:37:06,730 de esos parámetros sea 909 00:37:06,730 --> 00:37:08,090 la operación que quieres hacer 910 00:37:08,090 --> 00:37:10,469 Si quieres hacer, insertar, eliminar 911 00:37:10,469 --> 00:37:12,309 Entonces ahora el servlet aquí dentro 912 00:37:12,309 --> 00:37:15,030 El servlet aquí dentro 913 00:37:15,030 --> 00:37:18,389 Vamos a borrarle 914 00:37:18,389 --> 00:37:20,030 Lo que tiene el doGet y el doPost 915 00:37:20,030 --> 00:37:21,789 Es que esto queda muy feo todo 916 00:37:21,789 --> 00:37:23,909 Vamos a quitárselo para que quede más claro 917 00:37:23,909 --> 00:37:29,460 Ahora 918 00:37:29,460 --> 00:37:31,739 Cuando el 919 00:37:31,739 --> 00:37:34,079 Tomcat llegue aquí 920 00:37:34,079 --> 00:37:36,940 Porque hemos mandado un formulario con el método get 921 00:37:36,940 --> 00:37:38,800 O cuando llegue aquí 922 00:37:38,800 --> 00:37:40,360 Porque le hemos mandado con post 923 00:37:40,360 --> 00:37:41,579 y llega igual porque 924 00:37:41,579 --> 00:37:44,239 pues lo primero que hará será 925 00:37:44,239 --> 00:37:45,619 meterse al request 926 00:37:45,619 --> 00:37:48,300 que es toda la petición que viene por el url 927 00:37:48,300 --> 00:37:50,280 meterse al request y sacar 928 00:37:50,280 --> 00:37:52,219 el parámetro acción, por ejemplo 929 00:37:52,219 --> 00:37:54,219 y de ese parámetro acción decir 930 00:37:54,219 --> 00:37:56,179 oye, si el parámetro acción 931 00:37:56,179 --> 00:37:58,440 es eliminar, hago eliminar, si es insertar 932 00:37:58,440 --> 00:38:00,380 hago insertar, entonces vamos a hacer 933 00:38:00,380 --> 00:38:01,460 el de consulta, dime 934 00:38:01,460 --> 00:38:03,500 si lo de 935 00:38:03,500 --> 00:38:06,119 acción let sale 936 00:38:06,119 --> 00:38:07,559 en 1, 2 937 00:38:07,559 --> 00:38:10,079 claro, es que los 938 00:38:10,079 --> 00:38:11,960 import que te hace son de JavaX 939 00:38:11,960 --> 00:38:14,039 y eso no los queremos 940 00:38:14,039 --> 00:38:15,539 porque nuestro JDK es posterior 941 00:38:15,539 --> 00:38:18,059 entonces los tienes que borrar y hacer los import 942 00:38:18,059 --> 00:38:19,940 nuevos y ya los import nuevos te va a hacer 943 00:38:19,940 --> 00:38:22,039 los tuyos, los de tu verdadera JDK 944 00:38:22,039 --> 00:38:23,639 los de la actualizada 945 00:38:23,639 --> 00:38:25,980 vale, pues entonces, este serle 946 00:38:25,980 --> 00:38:28,099 tendrá que tener algo parecido a 947 00:38:28,099 --> 00:38:28,579 if 948 00:38:28,579 --> 00:38:31,239 request 949 00:38:31,239 --> 00:38:33,719 punto 950 00:38:33,719 --> 00:38:35,440 get parameter 951 00:38:35,440 --> 00:38:38,119 a este parámetro como le queremos llamar 952 00:38:38,119 --> 00:38:39,440 pues action, por ejemplo 953 00:38:39,440 --> 00:38:42,500 si este resulta 954 00:38:42,500 --> 00:38:44,420 que es igual a 955 00:38:44,420 --> 00:38:46,619 consultar 956 00:38:46,619 --> 00:38:50,699 o lo que sea, pues 957 00:38:50,699 --> 00:38:52,639 ahora hago todo lo 958 00:38:52,639 --> 00:38:54,159 relacionado con consultar. 959 00:38:54,699 --> 00:38:56,619 El save, no sé qué, hago 960 00:38:56,619 --> 00:38:58,239 todo lo relacionado con no sé cuántos. 961 00:38:58,800 --> 00:39:00,219 Pues entonces, ahora ya 962 00:39:00,219 --> 00:39:02,639 para no ponernos a escribir 963 00:39:02,639 --> 00:39:04,719 como locos, ahora ya sí que 964 00:39:04,719 --> 00:39:05,320 abrid 965 00:39:05,320 --> 00:39:10,960 Bueno, no abréis 966 00:39:10,960 --> 00:39:12,380 todavía, vais a copiar, vale 967 00:39:12,380 --> 00:39:14,940 entonces vamos a hacer primero nuestro formulario 968 00:39:14,940 --> 00:39:16,260 raíz de la aplicación 969 00:39:16,260 --> 00:39:17,619 nuestro index 970 00:39:17,619 --> 00:39:19,900 nuestro index 971 00:39:19,900 --> 00:39:23,079 es el que se verá cuando se arranque 972 00:39:23,079 --> 00:39:25,039 la aplicación, porque así me lo dice 973 00:39:25,039 --> 00:39:26,739 el web xml, el web xml me dice 974 00:39:26,739 --> 00:39:28,619 si tienes un index, arranca ese, vale 975 00:39:28,619 --> 00:39:30,500 y ahora nuestro index 976 00:39:30,500 --> 00:39:32,280 vamos a hacer un formulario 977 00:39:32,280 --> 00:39:34,760 pues que te lleve al formulario 978 00:39:34,760 --> 00:39:36,960 correspondiente de insertar, de eliminar 979 00:39:36,960 --> 00:39:39,239 de no se que, vale, pues ese index 980 00:39:39,239 --> 00:39:41,039 Para no escribirlo a mano 981 00:39:41,039 --> 00:39:43,039 Yo ahí le pedí 982 00:39:43,039 --> 00:39:44,780 Un estilo bonito 983 00:39:44,780 --> 00:39:46,619 Alcha GPT 984 00:39:46,619 --> 00:39:49,380 Y me dio el estilo del formulario 985 00:39:49,380 --> 00:39:50,960 Que os he puesto ahí en la carpeta 986 00:39:50,960 --> 00:39:52,760 ¿Vale? Entonces copia del index 987 00:39:52,760 --> 00:39:54,139 El index tal cual 988 00:39:54,139 --> 00:39:56,960 Y llevarlo a donde se mete 989 00:39:56,960 --> 00:39:58,599 El contenido web de una aplicación 990 00:39:58,599 --> 00:39:59,980 Directamente a webapp 991 00:39:59,980 --> 00:40:03,280 Directamente colgando de la carpeta webapp 992 00:40:03,280 --> 00:40:05,599 Colga, mete de ese index 993 00:40:05,599 --> 00:40:06,780 ¿Vale? 994 00:40:10,739 --> 00:40:12,420 Vale, entonces yo lo tengo 995 00:40:12,420 --> 00:40:33,760 aquí arriba. Vale, pues 996 00:40:33,760 --> 00:40:36,000 repito, el índex que está en el proyecto 997 00:40:36,000 --> 00:40:37,940 o sea, en el ficherito, en el zip 998 00:40:37,940 --> 00:40:39,420 que os habéis descargado, ese índex 999 00:40:39,420 --> 00:40:40,900 colgarlo aquí de hueva 1000 00:40:40,900 --> 00:40:43,519 y vamos a verlo por dentro que tiene 1001 00:40:43,519 --> 00:40:45,900 aparte 1002 00:40:45,900 --> 00:40:47,900 del estilo, que este sí que es el que me ha dado 1003 00:40:47,900 --> 00:40:48,500 ChagPT 1004 00:40:48,500 --> 00:40:51,300 a ver si os gusta o no os gusta 1005 00:40:51,300 --> 00:40:52,940 pues tiene 1006 00:40:52,940 --> 00:40:55,760 las acciones generales del club 1007 00:40:55,760 --> 00:40:56,460 ¿vale? 1008 00:40:59,519 --> 00:40:59,920 Insertar 1009 00:40:59,920 --> 00:41:02,679 Pues eso, buscar, actualizar, eliminar 1010 00:41:02,679 --> 00:41:04,900 Y listar todos 1011 00:41:04,900 --> 00:41:05,699 Listar todos 1012 00:41:05,699 --> 00:41:08,559 Entonces, este como veis 1013 00:41:08,559 --> 00:41:10,920 Lo he puesto de forma distinta 1014 00:41:10,920 --> 00:41:13,239 Porque para listar todas las ventas 1015 00:41:13,239 --> 00:41:15,420 No tienes tú que meterle 1016 00:41:15,420 --> 00:41:16,340 Ningún parámetro 1017 00:41:16,340 --> 00:41:17,599 No tienes que meterle nada 1018 00:41:17,599 --> 00:41:19,099 Es listar ventas y ya está 1019 00:41:19,099 --> 00:41:21,920 Pues este enlace no hace falta 1020 00:41:21,920 --> 00:41:23,500 Que me lleve a ningún formulario 1021 00:41:23,500 --> 00:41:26,099 Estos sí, estos me llevan a un formulario 1022 00:41:26,099 --> 00:41:27,920 Para que yo meta los datos para insertar 1023 00:41:27,920 --> 00:41:29,820 insertar, para que yo meta el ID para 1024 00:41:29,820 --> 00:41:31,960 buscar, para que meta los datos 1025 00:41:31,960 --> 00:41:33,840 para actualizar y para que meta el ID 1026 00:41:33,840 --> 00:41:35,940 para eliminar. O sea, estos enlaces sí que 1027 00:41:35,940 --> 00:41:38,119 me ayudan a un formulario, porque hay datos adicionales. 1028 00:41:38,579 --> 00:41:39,940 Pero este, que es listar, 1029 00:41:40,719 --> 00:41:41,900 no hay datos adicionales. 1030 00:41:41,980 --> 00:41:43,699 Tú le das a listar y ya que vaya al 1031 00:41:43,699 --> 00:41:45,340 sharelet y se da el find all. 1032 00:41:46,019 --> 00:41:46,760 Claro, que te muestre. 1033 00:41:47,239 --> 00:41:49,880 Por eso este es un enlace que te 1034 00:41:49,880 --> 00:41:51,519 va directamente a la acción listar. 1035 00:41:52,119 --> 00:41:53,860 Esta, vamos a 1036 00:41:53,860 --> 00:41:55,460 cambiarla. ¿Aquí qué habría que poner? 1037 00:41:55,820 --> 00:41:57,820 En lugar de coches. Según lo que acabamos de 1038 00:41:57,820 --> 00:42:02,739 hacer ahora mismo, hace un ratito. Muy bien, ventas. Porque he dicho, el servlet se va 1039 00:42:02,739 --> 00:42:10,400 a despertar con la ruta ventas. Pues esto lo cambiamos a ventas. Y ahora vamos a hacer 1040 00:42:10,400 --> 00:42:20,639 esta acción. Vale, pues cuando el parámetro acción, ¿vale? Sea listar, es decir, cuando 1041 00:42:20,639 --> 00:42:22,260 mi parámetro action sea 1042 00:42:22,260 --> 00:42:23,199 listar 1043 00:42:23,199 --> 00:42:26,880 ahora, habrá que hacer 1044 00:42:26,880 --> 00:42:27,820 ahora ya sí 1045 00:42:27,820 --> 00:42:30,340 instanciar el service 1046 00:42:30,340 --> 00:42:32,159 y hacer las funciones de service 1047 00:42:32,159 --> 00:42:33,659 y ya está 1048 00:42:33,659 --> 00:42:42,900 ¿hace falta parar? 1049 00:42:43,579 --> 00:42:44,039 no, ¿verdad? 1050 00:42:46,739 --> 00:42:47,559 el index 1051 00:42:47,559 --> 00:42:50,639 entonces, ¿no habría que tener una sistema 1052 00:42:50,639 --> 00:42:51,820 por cada formulario? 1053 00:42:52,679 --> 00:42:54,199 porque como hay... 1054 00:42:54,199 --> 00:42:55,880 sí, bueno, claro, pero es que estos cuatro también 1055 00:42:55,880 --> 00:42:58,019 sí, sí, sí, bueno, claro 1056 00:42:58,019 --> 00:42:59,559 Faltarían estos 4 HTML 1057 00:42:59,559 --> 00:43:01,440 Pero estamos yendo por partes, ¿vale? 1058 00:43:02,559 --> 00:43:03,900 Vale, entonces 1059 00:43:03,900 --> 00:43:04,780 Un momentito