1 00:00:00,000 --> 00:00:02,040 he empezado a grabar. ¿Qué decías 2 00:00:02,040 --> 00:00:04,019 Estefano el año pasado? ¿Alguien tiene algo en contra 3 00:00:04,019 --> 00:00:05,980 de que salga su voz en la grabación? 4 00:00:06,559 --> 00:00:06,980 Ah, es verdad. 5 00:00:07,879 --> 00:00:10,039 Que hable ahora o le doy dos hostias. 6 00:00:10,160 --> 00:00:10,859 Eso decía, ¿no? 7 00:00:10,859 --> 00:00:12,720 Pero no tienes que romperme, voy a casa. 8 00:00:13,519 --> 00:00:13,820 Venga. 9 00:00:15,619 --> 00:00:17,600 Pues ya está. Entonces, vamos a hacer primero 10 00:00:17,600 --> 00:00:19,660 el formulario, ¿vale? 11 00:00:21,920 --> 00:00:22,320 Entonces, 12 00:00:23,679 --> 00:00:25,699 a ver, el formulario, vosotros sabéis hacer 13 00:00:25,699 --> 00:00:27,820 un formulario muchísimo mejor que yo. Lo estoy haciendo, 14 00:00:27,820 --> 00:00:29,739 insisto, todo así, a pelo, sin framework 15 00:00:29,739 --> 00:00:30,980 ni nada, entonces 16 00:00:30,980 --> 00:00:32,840 este es 17 00:00:32,840 --> 00:00:35,859 un formulario sencillito 18 00:00:35,859 --> 00:00:37,719 esto lo he ido poniendo 19 00:00:37,719 --> 00:00:39,159 comentarios porque como lo 20 00:00:39,159 --> 00:00:44,869 he ido poniendo comentarios porque como lo voy 21 00:00:44,869 --> 00:00:46,869 a subir pues para que se queden los 22 00:00:46,869 --> 00:00:50,810 vale, que yo he ido 23 00:00:50,810 --> 00:00:52,969 poniendo comentarios porque como este proyecto 24 00:00:52,969 --> 00:00:55,049 cuando esté completo ya sí que lo voy a subir 25 00:00:55,049 --> 00:00:56,750 pues para que tengáis aquí 26 00:00:56,750 --> 00:00:58,649 las cosas que vamos diciendo, algunas porque 27 00:00:58,649 --> 00:01:00,649 otras irán surgiendo, vale 28 00:01:00,649 --> 00:01:02,670 pues entonces, este es un formulario 29 00:01:02,670 --> 00:01:05,090 normalito y corrientito que claro que sabéis hacer 30 00:01:05,090 --> 00:01:07,269 ¿vale? y este formulario 31 00:01:07,269 --> 00:01:07,849 tiene 32 00:01:07,849 --> 00:01:10,069 dos 33 00:01:10,069 --> 00:01:12,629 únicos comandos 34 00:01:12,629 --> 00:01:14,590 etiquetas 35 00:01:14,590 --> 00:01:16,049 de subida de datos 36 00:01:16,049 --> 00:01:17,689 ¿vale? 37 00:01:18,549 --> 00:01:19,349 esta input 38 00:01:19,349 --> 00:01:22,849 para coger un fichero binario 39 00:01:22,849 --> 00:01:24,250 ¿vale? 40 00:01:24,790 --> 00:01:27,269 coger un fichero y meterlo en binario 41 00:01:27,269 --> 00:01:29,090 dentro del cuerpo 42 00:01:29,090 --> 00:01:30,069 de la petición 43 00:01:30,069 --> 00:01:31,489 vale 44 00:01:31,489 --> 00:01:33,950 y este, que es el que 45 00:01:33,950 --> 00:01:36,430 desencadenar ya la acción de subida 46 00:01:36,430 --> 00:01:38,030 lógicamente, vale 47 00:01:38,030 --> 00:01:39,590 los dos 48 00:01:39,590 --> 00:01:42,409 comandos de 49 00:01:42,409 --> 00:01:44,090 entrada 50 00:01:44,090 --> 00:01:46,170 estos dos los conocéis, los dos 51 00:01:46,170 --> 00:01:46,870 símbolos, vale 52 00:01:46,870 --> 00:01:50,290 vale, entonces este formulario 53 00:01:50,290 --> 00:01:52,390 tendría 54 00:01:52,390 --> 00:01:53,129 dos opciones 55 00:01:53,129 --> 00:01:56,030 de envío, get y post, como también 56 00:01:56,030 --> 00:01:58,510 sabéis, pero repito, este formulario 57 00:01:58,510 --> 00:02:00,090 va a llevar dentro metido 58 00:02:00,090 --> 00:02:02,549 un fichero binario, que es el fichero local 59 00:02:02,549 --> 00:02:04,670 que yo voy a seleccionar a través de este comando 60 00:02:04,670 --> 00:02:06,489 entonces el fichero 61 00:02:06,489 --> 00:02:07,750 el método get 62 00:02:07,750 --> 00:02:09,990 ¿cómo envía las cosas? 63 00:02:10,770 --> 00:02:12,469 las envía en la cabecera 64 00:02:12,469 --> 00:02:13,689 de la url, ¿verdad? 65 00:02:14,270 --> 00:02:15,849 en la misma cabecera 66 00:02:15,849 --> 00:02:18,610 entonces un fichero binario tocho en la cabecera 67 00:02:18,610 --> 00:02:20,050 de la url, pues no mola 68 00:02:20,050 --> 00:02:21,750 con lo cual, post 69 00:02:21,750 --> 00:02:24,490 entonces, si el método 70 00:02:24,490 --> 00:02:26,969 la forma de envío del formulario 71 00:02:26,969 --> 00:02:28,469 es post, pues 72 00:02:28,469 --> 00:02:30,969 todo ese fichero binario ahora va en el cuerpo 73 00:02:30,969 --> 00:02:33,030 de la petición, en el cuerpo, no va en la 74 00:02:33,030 --> 00:02:33,550 cabecera 75 00:02:33,550 --> 00:02:37,050 ¿vale? y luego además 76 00:02:37,050 --> 00:02:38,930 para que realmente, para cuando 77 00:02:38,930 --> 00:02:40,889 vamos a subir un fichero, pues 78 00:02:40,889 --> 00:02:41,909 tenemos que poner esto 79 00:02:41,909 --> 00:02:44,830 para indicar que 80 00:02:44,830 --> 00:02:46,509 en el cuerpo van cosas 81 00:02:46,509 --> 00:02:48,669 de diferente 82 00:02:48,669 --> 00:02:50,469 información, que pueden ir 83 00:02:50,469 --> 00:02:52,710 parámetros en la cabecera, pero luego 84 00:02:52,710 --> 00:02:54,990 van a ir binarios en el cuerpo 85 00:02:54,990 --> 00:02:56,590 entonces para decir que es un, que tiene 86 00:02:56,590 --> 00:02:58,210 muchas partes de alguna manera ¿no? 87 00:02:58,469 --> 00:03:14,439 Bueno, entonces, y esta es la URL que se va a invocar en el servidor cuando se haga el submit. 88 00:03:14,439 --> 00:03:16,840 Entonces, ¿verdad que sí? 89 00:03:17,180 --> 00:03:18,860 Esta se supone 90 00:03:18,860 --> 00:03:21,159 Que esta URL 91 00:03:21,159 --> 00:03:23,560 Lógicamente, se supone que esto va 92 00:03:23,560 --> 00:03:25,000 Concatenado 93 00:03:25,000 --> 00:03:26,699 A la URL base 94 00:03:26,699 --> 00:03:29,500 En la que estaba 95 00:03:29,500 --> 00:03:30,580 Este formulario colgado 96 00:03:30,580 --> 00:03:33,080 Este formulario lo hemos invocado en una URL 97 00:03:33,080 --> 00:03:34,539 Se ha servido desde 98 00:03:34,539 --> 00:03:36,379 Este recurso 99 00:03:36,379 --> 00:03:38,699 ¿Verdad? El formulario es un recurso 100 00:03:38,699 --> 00:03:39,360 Del servidor 101 00:03:39,360 --> 00:03:42,979 Y ese recurso se ha invocado desde una URL 102 00:03:42,979 --> 00:03:45,219 barra el recurso 103 00:03:45,219 --> 00:03:45,560 ¿verdad? 104 00:03:46,539 --> 00:03:48,500 Bueno, pues esa URL base 105 00:03:48,500 --> 00:03:50,659 será la que concatenada 106 00:03:50,659 --> 00:03:52,159 a esto que yo he puesto aquí 107 00:03:52,159 --> 00:03:55,300 construya la URL 108 00:03:55,300 --> 00:03:57,039 que el servidor 109 00:03:57,039 --> 00:03:59,340 va a tratar de localizar 110 00:03:59,340 --> 00:04:01,479 para hacer 111 00:04:01,479 --> 00:04:02,120 lo que tenga que hacer 112 00:04:02,120 --> 00:04:05,400 Bueno, pues tenemos ya toda la información en el formulario 113 00:04:05,400 --> 00:04:07,740 lo que vamos a mandar 114 00:04:07,740 --> 00:04:09,800 y la URL 115 00:04:09,800 --> 00:04:11,580 que ese formulario 116 00:04:11,580 --> 00:04:12,560 va a invocar 117 00:04:12,560 --> 00:04:14,159 En el servidor 118 00:04:14,159 --> 00:04:16,600 Y ya veremos como el servidor se las apaña 119 00:04:16,600 --> 00:04:18,160 Para sacar algo de ahí 120 00:04:18,160 --> 00:04:19,680 Bueno 121 00:04:19,680 --> 00:04:24,899 ¿Tenéis el formulario? 122 00:04:31,870 --> 00:04:33,750 No tiene obviamente ni estilo 123 00:04:33,750 --> 00:04:34,430 Ni tiene nada 124 00:04:34,430 --> 00:04:36,670 En el meset estaba puesto get 125 00:04:36,670 --> 00:04:37,829 ¿Qué? 126 00:04:37,829 --> 00:04:39,529 Sí, estaba puesto get 127 00:04:39,529 --> 00:04:40,930 En el meset 128 00:04:40,930 --> 00:04:42,209 ¿Que estaba puesto get? 129 00:04:42,490 --> 00:04:45,029 No, que había dos opciones, o post o get 130 00:04:45,029 --> 00:04:47,670 Sí, claro, las que acabo de decir 131 00:04:47,670 --> 00:04:50,069 Claro, claro 132 00:04:50,069 --> 00:04:53,209 Cuando he dicho que había dos opciones Getty Post 133 00:04:53,209 --> 00:04:55,230 Me refería a que había dos opciones Getty Post 134 00:04:55,230 --> 00:04:58,790 Que nos estamos durmiendo 135 00:04:58,790 --> 00:05:01,110 Vale, pues entonces 136 00:05:01,110 --> 00:05:02,550 Vamos a hacer 137 00:05:02,550 --> 00:05:05,290 A ver, vamos a ejecutar la aplicación 138 00:05:05,290 --> 00:05:06,569 A ver si el formulario 139 00:05:06,569 --> 00:05:07,810 Al menos lo sirve 140 00:05:07,810 --> 00:05:10,850 Que lo servirá porque ya el otro día 141 00:05:10,850 --> 00:05:12,149 La ejecutasteis 142 00:05:12,149 --> 00:05:17,889 Y, ala 143 00:05:17,889 --> 00:05:22,319 Venga, pues efectivamente 144 00:05:22,319 --> 00:05:24,480 Esta es 145 00:05:24,480 --> 00:05:26,259 la URL base 146 00:05:26,259 --> 00:05:29,420 y este es el recurso servido 147 00:05:29,420 --> 00:05:31,459 que se llama index.html 148 00:05:31,459 --> 00:05:33,300 y como en el web.xml 149 00:05:33,300 --> 00:05:35,519 está puesto que este sea el archivo por defecto 150 00:05:35,519 --> 00:05:37,180 pues aquí no hace falta 151 00:05:37,180 --> 00:05:38,500 ponerlo, pero sería lo mismo 152 00:05:38,500 --> 00:05:41,120 bueno, pues entonces, dime 153 00:05:41,120 --> 00:05:44,850 que te pide 154 00:05:44,850 --> 00:05:45,829 contraseña para qué 155 00:05:45,829 --> 00:05:50,920 para ejecutarlo 156 00:05:50,920 --> 00:05:56,259 pero como no voy a parar 157 00:05:56,259 --> 00:06:01,540 Bueno 158 00:06:01,540 --> 00:06:05,439 Entonces duraría 159 00:06:05,439 --> 00:06:07,319 Mil años 160 00:06:07,319 --> 00:06:09,939 Ay, ¿dónde estamos? 161 00:06:10,100 --> 00:06:11,100 Concha, aquí 162 00:06:11,100 --> 00:06:13,839 Vale, pues entonces 163 00:06:13,839 --> 00:06:17,560 Esta URL 164 00:06:17,560 --> 00:06:19,199 El servidor cuando intenta 165 00:06:19,199 --> 00:06:21,560 Localizar un recurso 166 00:06:21,560 --> 00:06:23,560 No lo encuentra por ningún sitio 167 00:06:23,560 --> 00:06:25,360 Ni es una página web 168 00:06:25,360 --> 00:06:26,779 ni es un código Java 169 00:06:26,779 --> 00:06:29,420 bueno, nosotros queremos que sea directamente 170 00:06:29,420 --> 00:06:31,379 la invocación de un código Java 171 00:06:31,379 --> 00:06:32,939 que ese código Java 172 00:06:32,939 --> 00:06:35,620 saque el fichero binario del cuerpo 173 00:06:35,620 --> 00:06:36,959 de la petición 174 00:06:36,959 --> 00:06:39,040 lo convierta a JSON 175 00:06:39,040 --> 00:06:40,920 y lo deje ahí almacenadito 176 00:06:40,920 --> 00:06:43,560 y nos devuelva una URL 177 00:06:43,560 --> 00:06:44,600 de descarga 178 00:06:44,600 --> 00:06:47,240 queremos ya que esto 179 00:06:47,240 --> 00:06:49,019 sea la 180 00:06:49,019 --> 00:06:50,980 llamada a un servidor 181 00:06:50,980 --> 00:06:51,639 ¿vale? 182 00:06:55,360 --> 00:07:02,240 Queremos que esta ruta sea ya la llamada al código Java. 183 00:07:09,420 --> 00:07:11,639 Vale, pues entonces, ¿qué es lo siguiente que tenemos que hacer? 184 00:07:12,100 --> 00:07:14,740 Tenemos que hacer un código, un servlet, 185 00:07:15,000 --> 00:07:18,519 y asociar ese servlet a esta ruta. 186 00:07:19,620 --> 00:07:21,779 ¿Vale? Asociar ese servlet a esta ruta. 187 00:07:23,240 --> 00:07:25,680 Vale, pues... 188 00:07:25,680 --> 00:07:34,100 Como tenemos que hacer dos, el servlet este de subida 189 00:07:34,100 --> 00:07:35,560 Y el serlet de bajada 190 00:07:35,560 --> 00:07:38,300 Este primero lo vamos a hacer directamente a mano 191 00:07:38,300 --> 00:07:39,860 El otro ya que nos lo genere el eclipse 192 00:07:39,860 --> 00:07:41,560 Vale, pues a ver 193 00:07:41,560 --> 00:07:43,079 ¿Dónde vamos a meter el serlet? 194 00:07:43,240 --> 00:07:45,620 Pues el serlet lo metemos ya aquí 195 00:07:45,620 --> 00:07:51,750 Nos vamos a nuestro código 196 00:07:51,750 --> 00:07:54,170 A nuestra base de nuestros 197 00:07:54,170 --> 00:07:55,829 Y vamos a hacernos 198 00:07:55,829 --> 00:07:56,730 Pues un paquete 199 00:07:56,730 --> 00:08:05,709 Este va a tener los serlet 200 00:08:05,709 --> 00:08:06,529 ¿Vale? 201 00:08:08,810 --> 00:08:10,189 Este va a tener los serlet 202 00:08:10,189 --> 00:08:12,670 Y nos vamos a hacer 203 00:08:12,670 --> 00:08:15,209 Así, a lo bestia 204 00:08:15,209 --> 00:08:16,170 Por ser el primero 205 00:08:16,170 --> 00:08:18,329 Un serlet que 206 00:08:18,329 --> 00:08:23,250 Recoger xml 207 00:08:23,250 --> 00:08:25,230 Por ejemplo, recoger 208 00:08:25,230 --> 00:08:27,670 xml, que nombre tan feo 209 00:08:27,670 --> 00:08:29,509 Serlet, pero bueno 210 00:08:29,509 --> 00:08:30,990 Así lo vamos a llamar 211 00:08:30,990 --> 00:08:32,570 Ser 212 00:08:32,570 --> 00:08:35,490 Porque este es el serlet que va a servir para recoger 213 00:08:35,490 --> 00:08:36,230 El xml 214 00:08:36,230 --> 00:08:38,710 Bueno, y pasarlo a json y todo eso 215 00:08:38,710 --> 00:08:40,850 Venga 216 00:08:40,850 --> 00:08:45,019 Este va a ser nuestro serlet 217 00:08:45,019 --> 00:08:47,200 Para que sea un serlet 218 00:08:47,200 --> 00:08:48,299 Tiene que heredar 219 00:08:48,299 --> 00:08:50,419 De la superclase 220 00:08:50,419 --> 00:08:56,220 ¿Qué? 221 00:08:59,360 --> 00:09:04,259 Vale, pues para que sea un serlet 222 00:09:04,259 --> 00:09:06,299 Tiene que heredar de la superclase 223 00:09:06,299 --> 00:09:07,919 ¿Vale? 224 00:09:09,159 --> 00:09:09,720 Entonces 225 00:09:09,720 --> 00:09:12,539 Lo importáis 226 00:09:12,539 --> 00:09:13,940 De Yacarta 227 00:09:13,940 --> 00:09:17,080 Recordad que la otra acción es 228 00:09:17,080 --> 00:09:17,759 JavaX 229 00:09:17,759 --> 00:09:19,539 JavaX 230 00:09:19,539 --> 00:09:21,679 si estuviéramos en versiones 231 00:09:21,679 --> 00:09:24,320 previas a la del paso 232 00:09:24,320 --> 00:09:26,659 de Oracle a Eclipse 233 00:09:26,659 --> 00:09:29,360 es relativamente común 234 00:09:29,360 --> 00:09:32,120 todavía yo creo encontrarse en lugar de 235 00:09:32,120 --> 00:09:33,779 ya carta JavaX 236 00:09:33,779 --> 00:09:35,259 no es tan raro 237 00:09:35,259 --> 00:09:37,379 vale, pues entonces 238 00:09:37,379 --> 00:09:39,919 HTTP Servlet tiene 239 00:09:39,919 --> 00:09:41,779 los dos métodos básicos 240 00:09:41,779 --> 00:09:43,620 el doget y el do post 241 00:09:43,620 --> 00:09:45,500 que son los que 242 00:09:45,500 --> 00:09:46,620 invoca 243 00:09:46,620 --> 00:09:51,080 el formulario cuando va por GET 244 00:09:51,080 --> 00:09:53,840 o cuando va por POST respectivamente 245 00:09:53,840 --> 00:10:06,090 entonces, a ver si me acuerdo exactamente de la cabecera 246 00:10:06,090 --> 00:10:10,169 y si no, la miramos 247 00:10:10,169 --> 00:10:30,750 importamos 248 00:10:30,750 --> 00:10:32,909 HttpRequest 249 00:10:32,909 --> 00:10:43,879 Havanet Http es de aquí 250 00:10:43,879 --> 00:10:48,039 En un momento que me extraña mucho 251 00:10:48,039 --> 00:10:49,080 El paquete que me ofrece 252 00:10:49,080 --> 00:10:51,340 Me está extrañando un poco 253 00:10:51,340 --> 00:10:56,740 Uy, este paquete se me hace a mi un poco raro 254 00:10:56,740 --> 00:11:03,360 Eso es para flojos 255 00:11:03,360 --> 00:11:06,360 Por lo pronto voy a asegurarme 256 00:11:06,360 --> 00:11:07,679 De si he puesto bien la cabecera 257 00:11:07,679 --> 00:11:08,700 Con el override 258 00:11:08,700 --> 00:11:16,799 Vale, la he debido poner bien 259 00:11:16,799 --> 00:11:17,600 Y 260 00:11:17,600 --> 00:11:20,360 Bueno, a ver, vamos a mirarlo 261 00:11:20,360 --> 00:11:21,799 ¿Dónde estará? Por aquí 262 00:11:21,799 --> 00:11:24,399 Voy a 263 00:11:24,399 --> 00:11:27,279 Mirarlo aquí 264 00:11:27,279 --> 00:11:29,120 Claro, porque 265 00:11:29,120 --> 00:11:32,000 Request 266 00:11:32,000 --> 00:11:37,840 Request, es que 267 00:11:37,840 --> 00:11:39,940 Claro, es que me ofrece 268 00:11:39,940 --> 00:11:40,440 De 269 00:11:40,440 --> 00:11:43,980 No me está ofreciendo esta 270 00:11:43,980 --> 00:11:47,000 No me está ofreciendo esta 271 00:11:47,000 --> 00:11:49,480 Bueno, pues si no me ofrece esta 272 00:11:49,480 --> 00:11:51,080 Que no vamos a tener que escribir la mano 273 00:11:51,080 --> 00:12:02,279 Ah, que se me ha olvidado 274 00:12:02,279 --> 00:12:03,519 A ver 275 00:12:03,519 --> 00:12:06,059 Ah, simple request 276 00:12:06,059 --> 00:12:07,580 Ah, vale, vale, vale, vale 277 00:12:07,580 --> 00:12:08,940 Que se me ha olvidado esto 278 00:12:08,940 --> 00:12:11,559 Claro, es que 279 00:12:11,559 --> 00:12:14,139 Esto siempre lo hace uno generándolo 280 00:12:14,139 --> 00:12:14,960 De forma automática 281 00:12:14,960 --> 00:12:16,639 Entonces rara vez lo escribes 282 00:12:16,639 --> 00:12:19,259 Normalmente siempre lo haces generándolo 283 00:12:19,259 --> 00:12:20,360 Como vamos a hacer el siguiente 284 00:12:20,360 --> 00:12:23,440 Entonces cuando te pones a escribirlo 285 00:12:23,440 --> 00:12:24,580 Y tratar de tirar de la memoria 286 00:12:24,580 --> 00:12:26,299 Que está muy bien hacerlo de vez en cuando 287 00:12:26,299 --> 00:12:29,259 Yo intento hacerlo de vez en cuando 288 00:12:29,259 --> 00:12:30,840 Para que la memoria no se 289 00:12:30,840 --> 00:12:35,019 No, obviamente no 290 00:12:35,019 --> 00:12:36,100 No lo tengo en la memoria 291 00:12:36,100 --> 00:12:37,240 Por mucho que lo haya escrito 292 00:12:37,240 --> 00:12:39,039 No lo tengo en la memoria 293 00:12:39,039 --> 00:12:41,220 Pero es que es muy buen ejercicio 294 00:12:41,220 --> 00:12:41,879 De vez en cuando 295 00:12:41,879 --> 00:12:43,820 Tirar solo de la memoria 296 00:12:43,820 --> 00:12:47,440 vale, entonces 297 00:12:47,440 --> 00:12:50,100 intento que lo hagáis vosotros también 298 00:12:50,100 --> 00:12:52,200 vale, pues este es el método 299 00:12:52,200 --> 00:12:53,799 do-get y el do-post 300 00:12:53,799 --> 00:12:54,480 pues será 301 00:12:54,480 --> 00:12:57,740 a ver, no es que haga falta 302 00:12:57,740 --> 00:13:00,240 esas preguntas del año pasado 303 00:13:00,240 --> 00:13:02,399 es recomendable 304 00:13:02,399 --> 00:13:03,620 ¿por qué es recomendable? 305 00:13:04,000 --> 00:13:06,519 porque es una anotación comprobatoria 306 00:13:06,519 --> 00:13:08,159 de que has escrito bien el método 307 00:13:08,159 --> 00:13:10,779 con lo cual estás tirando del de la superclase 308 00:13:10,779 --> 00:13:12,539 porque si yo no pongo 309 00:13:12,539 --> 00:13:13,179 override 310 00:13:13,179 --> 00:13:14,740 Y aquí pongo 311 00:13:14,740 --> 00:13:17,740 Doget 312 00:13:17,740 --> 00:13:20,340 Pues este le parece magnífico 313 00:13:20,340 --> 00:13:20,659 ¿Vale? 314 00:13:21,200 --> 00:13:22,039 Pero si pongo 315 00:13:22,039 --> 00:13:23,740 ¿Vale? 316 00:13:29,120 --> 00:13:29,960 Vale 317 00:13:29,960 --> 00:13:32,460 Y este sería 318 00:13:32,460 --> 00:13:33,419 El doPost 319 00:13:33,419 --> 00:13:43,019 ¡Hala! Entonces 320 00:13:43,019 --> 00:13:45,460 Este sería el equivalente al main 321 00:13:45,460 --> 00:13:46,159 En realidad 322 00:13:46,159 --> 00:13:49,759 Este método es el que queremos 323 00:13:49,759 --> 00:13:51,480 Que sea llamado 324 00:13:51,480 --> 00:13:53,600 cuando el formulario 325 00:13:53,600 --> 00:13:55,620 sea enviado. Luego, de alguna 326 00:13:55,620 --> 00:13:57,799 manera, queremos vincular 327 00:13:57,799 --> 00:13:59,740 este servlet, necesitamos 328 00:13:59,740 --> 00:14:01,700 vincular este servlet 329 00:14:01,700 --> 00:14:03,559 a esta ruta. 330 00:14:04,379 --> 00:14:05,500 ¿Vale? Necesitamos vincular 331 00:14:05,500 --> 00:14:07,379 este servlet a esta ruta de aquí. 332 00:14:08,879 --> 00:14:09,679 Necesitamos vincularlo 333 00:14:09,679 --> 00:14:11,539 de alguna manera, para que 334 00:14:11,539 --> 00:14:13,320 el servidor de aplicaciones sepa 335 00:14:13,320 --> 00:14:14,840 que cuando 336 00:14:14,840 --> 00:14:17,399 tiene que ir a esta ruta, que es la que el 337 00:14:17,399 --> 00:14:19,419 formulario le pide, él tiene que saber 338 00:14:19,419 --> 00:14:20,500 que es aquí a donde va. 339 00:14:21,480 --> 00:14:25,519 Entonces hay dos formas, la vieja y la nueva. 340 00:14:26,179 --> 00:14:31,379 El que dice la vieja, pues dice de hace 5 o 6 años, tampoco creáis que es una cosa. 341 00:14:32,320 --> 00:14:36,840 Pero bueno, vamos a ponerla, vamos a ponerla para que os suene. 342 00:14:37,980 --> 00:14:42,200 ¿Cómo asociamos ahora nosotros este serlet a esa ruta? 343 00:14:43,259 --> 00:14:50,360 Forma vieja, pues en este ficherito tan mono que tenemos aquí, que le teníamos aquí olvidado. 344 00:14:50,360 --> 00:15:00,980 En este fichero tan mono que tenemos aquí olvidado 345 00:15:00,980 --> 00:15:07,220 Este fichero que por ahora solamente tenía 346 00:15:07,220 --> 00:15:09,960 Las páginas por defecto 347 00:15:09,960 --> 00:15:12,240 Pues este fichero, aquí se puede centralizar 348 00:15:12,240 --> 00:15:14,519 Un montón de información sobre la aplicación 349 00:15:14,519 --> 00:15:16,139 Se puede centralizar mucha información 350 00:15:16,139 --> 00:15:19,940 ¿Qué es la tendencia antigua en aplicaciones web? 351 00:15:20,220 --> 00:15:20,899 Centralizarla aquí 352 00:15:20,899 --> 00:15:23,220 Lo que pasa es que luego con la moda 353 00:15:23,220 --> 00:15:25,299 la moda y que tiene su sentido de las anotaciones 354 00:15:25,299 --> 00:15:27,100 ya las 355 00:15:27,100 --> 00:15:29,379 configuraciones se han ido desviando 356 00:15:29,379 --> 00:15:31,360 de ficheros que la centralizaban 357 00:15:31,360 --> 00:15:33,399 a anotaciones en el 358 00:15:33,399 --> 00:15:37,029 código, ventaja 359 00:15:37,029 --> 00:15:39,230 desventaja, a ver, tener las 360 00:15:39,230 --> 00:15:41,269 cosas centralizadas en archivos fuera 361 00:15:41,269 --> 00:15:42,690 realmente está muy bien 362 00:15:42,690 --> 00:15:44,990 sus ventajas son obvias, no tienes que 363 00:15:44,990 --> 00:15:47,070 irte nunca al código para 364 00:15:47,070 --> 00:15:49,250 mirar nada, pero a su vez 365 00:15:49,250 --> 00:15:51,210 tener las cosas configuradas mediante 366 00:15:51,210 --> 00:15:53,269 anotaciones en el código, también hace 367 00:15:53,269 --> 00:15:54,590 cuando tú estás viendo un código 368 00:15:54,590 --> 00:15:57,970 a la vez estás viendo mucha información añadida 369 00:15:57,970 --> 00:16:00,070 en esas anotaciones, ¿vale? 370 00:16:00,090 --> 00:16:01,769 No tienes que irte al fichero de configuración. 371 00:16:02,750 --> 00:16:05,929 Bueno, pues si nosotros queremos configurar ese mapeo 372 00:16:05,929 --> 00:16:09,070 entre URL y servlet en el fichero de configuración, 373 00:16:10,070 --> 00:16:13,389 pues tendríamos que escribir algo como esto, 374 00:16:13,470 --> 00:16:15,190 que esto sí que lo voy a copiar de aquí 375 00:16:15,190 --> 00:16:18,070 porque no me apetece recordarlo entero, que es muy largo. 376 00:16:20,570 --> 00:16:21,909 ¿Dónde lo podemos tener? 377 00:16:23,210 --> 00:16:23,690 Aquí. 378 00:16:31,340 --> 00:16:56,419 Vale, como tengo que cambiar cosas, vale, pues a ver, esto sería, tengo, mi aplicación tiene un serlet, vale, lo voy a declarar aquí, lo voy a registrar aquí, mi aplicación tiene un serlet, lo registro aquí en el web xml, pongo la descripción que me dé la gana, si es que quiero este serlet, vale, pues no sé qué, pongo el nombrecito que le doy al serlet, el que me dé a mí la gana, 379 00:16:56,419 --> 00:17:01,279 pues le voy a llamar 380 00:17:01,279 --> 00:17:04,140 subir xml 381 00:17:04,140 --> 00:17:05,099 por ejemplo 382 00:17:05,099 --> 00:17:07,779 el nombrecito que yo le doy 383 00:17:07,779 --> 00:17:09,660 el servlet no es el nombre de la clase 384 00:17:09,660 --> 00:17:10,740 ¿vale? 385 00:17:11,519 --> 00:17:13,900 el nombrecito con el que la aplicación 386 00:17:13,900 --> 00:17:14,740 lo identifica 387 00:17:14,740 --> 00:17:17,640 y ahora aquí sí que sí 388 00:17:17,640 --> 00:17:20,160 le digo cuál es la clase 389 00:17:20,160 --> 00:17:21,839 en la que está este servlet 390 00:17:21,839 --> 00:17:22,940 que estoy registrando 391 00:17:22,940 --> 00:17:25,940 pues la clase mía se llamaba 392 00:17:25,940 --> 00:17:27,440 recoger xml 393 00:17:27,440 --> 00:17:29,880 serlet y estaba 394 00:17:29,880 --> 00:17:31,140 en el paquete 395 00:17:31,140 --> 00:17:33,880 cam2 com2 serlet 396 00:17:33,880 --> 00:17:35,000 vale, pues entonces 397 00:17:35,000 --> 00:17:37,099 así 398 00:17:37,099 --> 00:17:43,509 así, vale 399 00:17:43,509 --> 00:17:46,690 con esto registro el serlet 400 00:17:46,690 --> 00:17:48,069 lo registro 401 00:17:48,069 --> 00:17:50,509 que se llama, que es decir, oye tú servidor 402 00:17:50,509 --> 00:17:51,670 de aplicaciones Tomcat 403 00:17:51,670 --> 00:17:54,390 cuando te despliegues y despliegues 404 00:17:54,390 --> 00:17:56,269 esta aplicación que te doy 405 00:17:56,269 --> 00:17:58,289 que sepas que tiene un serlet que está 406 00:17:58,289 --> 00:18:00,210 aquí en esta ruta, en este java 407 00:18:00,210 --> 00:18:02,910 vale, pero ahora ya nos falta el mapeo 408 00:18:02,910 --> 00:18:05,150 mapearlo a la url correspondiente 409 00:18:05,150 --> 00:18:07,029 pues el mapeo 410 00:18:07,029 --> 00:18:08,750 a la url correspondiente 411 00:18:08,750 --> 00:18:10,509 ya lo hacemos aquí, decimos 412 00:18:10,509 --> 00:18:12,589 oye, el servlet que yo le he dado 413 00:18:12,589 --> 00:18:13,650 este nombrecito 414 00:18:13,650 --> 00:18:16,289 el servlet que yo le he dado este nombrecito 415 00:18:16,289 --> 00:18:17,910 ¿en qué ruta está? 416 00:18:18,490 --> 00:18:19,630 en esta ruta 417 00:18:19,630 --> 00:18:22,450 cuando el servidor de aplicaciones 418 00:18:22,450 --> 00:18:24,490 reciba la orden 419 00:18:24,490 --> 00:18:26,670 ruta base, la que sea 420 00:18:26,670 --> 00:18:28,589 ruta base, el contexto 421 00:18:28,589 --> 00:18:29,750 de la aplicación 422 00:18:29,750 --> 00:18:33,230 Habloa, que sepas que es este el servlet 423 00:18:33,230 --> 00:18:34,069 Que tienes que ir 424 00:18:34,069 --> 00:18:37,029 ¿Y este cuál es? Pues este, te lo acabo de decir aquí 425 00:18:37,029 --> 00:18:41,609 Pues hala, ya hemos registrado el servlet 426 00:18:41,609 --> 00:18:52,420 Vale, esta forma de registrar el servlet 427 00:18:52,420 --> 00:18:52,980 Repito 428 00:18:52,980 --> 00:18:55,500 Es antigua 429 00:18:55,500 --> 00:18:56,880 Por decirlo de alguna manera 430 00:18:56,880 --> 00:18:59,519 Pero vamos, que cuando hablamos de antiguo en este mundo 431 00:18:59,519 --> 00:19:01,500 Es un antiguo relativo 432 00:19:01,500 --> 00:19:04,200 Porque aparte de que te lo puedes encontrar 433 00:19:04,200 --> 00:19:05,539 Tampoco hablamos de hace tantos años 434 00:19:05,539 --> 00:19:06,859 entonces 435 00:19:06,859 --> 00:19:20,880 esta está más asociada 436 00:19:20,880 --> 00:19:21,680 al código 437 00:19:21,680 --> 00:19:24,160 que llamamos así, ¿verdad? 438 00:19:24,819 --> 00:19:26,059 uno puede trabajar 439 00:19:26,059 --> 00:19:27,720 si es 440 00:19:27,720 --> 00:19:30,099 relativamente habitual 441 00:19:30,099 --> 00:19:32,380 que uno trabaje con código 442 00:19:32,380 --> 00:19:34,700 que viene de aplicaciones más antiguas 443 00:19:34,700 --> 00:19:36,720 porque tú no tiras las aplicaciones a la basura 444 00:19:36,720 --> 00:19:38,599 cuando quieres cambiar algo y la haces 445 00:19:38,599 --> 00:19:40,299 entera desde cero, es imposible 446 00:19:40,299 --> 00:19:41,559 entonces 447 00:19:41,559 --> 00:19:44,940 en las aplicaciones heredas mucho código 448 00:19:44,940 --> 00:19:47,000 de sus primeras versiones 449 00:19:47,000 --> 00:19:49,119 ¿vale? y este es el código 450 00:19:49,119 --> 00:19:51,480 legacy que se llama, el código que esa aplicación 451 00:19:51,480 --> 00:19:53,200 tiene de sus primeras versiones 452 00:19:53,200 --> 00:19:55,480 que todavía no has cambiado 453 00:19:55,480 --> 00:19:57,140 pero con el que tienes que convivir 454 00:19:57,140 --> 00:19:59,500 ¿vale? es un código 455 00:19:59,500 --> 00:20:01,099 con el que tenemos que convivir muy a menudo 456 00:20:01,099 --> 00:20:02,519 dentro de una aplicación Word 457 00:20:02,519 --> 00:20:05,460 bueno pues, esto entraría 458 00:20:05,460 --> 00:20:06,960 dentro de ese concepto 459 00:20:06,960 --> 00:20:09,740 de partes que no hemos cambiado de la aplicación 460 00:20:09,740 --> 00:20:11,180 para adaptarlo a la forma 461 00:20:11,180 --> 00:20:13,339 nueva de registrar 462 00:20:13,339 --> 00:20:15,039 el SERLET, que en el siguiente SERLET 463 00:20:15,039 --> 00:20:16,660 pues lo registramos así. 464 00:20:18,160 --> 00:20:18,480 Vale. 465 00:20:19,480 --> 00:20:21,660 Ahora, vamos a comprobar 466 00:20:21,660 --> 00:20:22,859 a ver si realmente 467 00:20:22,859 --> 00:20:25,359 lo hemos registrado bien y ahora ya sí 468 00:20:25,359 --> 00:20:26,500 cuando 469 00:20:26,500 --> 00:20:29,119 llamemos al SERLET, 470 00:20:29,539 --> 00:20:31,559 el SERLET va a ser llamado. 471 00:20:32,420 --> 00:20:33,460 Entonces, vamos a hacer que 472 00:20:33,460 --> 00:20:35,420 haga algo. Como lo llamamos 473 00:20:35,420 --> 00:20:37,539 por POST, pues que nos devuelva 474 00:20:37,539 --> 00:20:38,140 una 475 00:20:38,140 --> 00:20:41,000 página web sin más. 476 00:20:41,000 --> 00:20:42,099 Que diga 477 00:20:42,099 --> 00:20:44,940 Has invocado al serle correctamente 478 00:20:44,940 --> 00:21:08,220 Así todo a lo bruto 479 00:21:08,220 --> 00:21:18,349 H1 es la grandota 480 00:21:18,349 --> 00:21:21,269 Me llamaste 481 00:21:21,269 --> 00:21:23,309 Pero no sé hacer nada 482 00:21:23,309 --> 00:21:38,690 Todavía no sé hacer nada 483 00:21:38,690 --> 00:21:39,690 Pero dentro de nada 484 00:21:39,690 --> 00:21:41,109 Verás 485 00:21:41,109 --> 00:21:46,089 Que tengo que cerrar 486 00:21:46,089 --> 00:21:48,210 Ah, perdón 487 00:21:48,210 --> 00:21:53,730 Vale, pues entonces 488 00:21:53,730 --> 00:21:58,049 A ver, que he escrito mal 489 00:21:58,049 --> 00:22:00,630 Ah, la excepción 490 00:22:00,630 --> 00:22:07,119 Así se queda 491 00:22:07,119 --> 00:22:09,380 Vale, pues entonces 492 00:22:09,380 --> 00:22:11,319 Estos métodos 493 00:22:11,319 --> 00:22:13,680 Como son los métodos que se invocan 494 00:22:13,680 --> 00:22:15,759 A raíz de la llegada de un formulario 495 00:22:15,759 --> 00:22:17,880 Tienen estos dos parámetros 496 00:22:17,880 --> 00:22:19,819 Implícitos de los que todavía no hemos hablado 497 00:22:19,819 --> 00:22:20,380 Pero bueno 498 00:22:20,380 --> 00:22:23,400 Cuando el método get o el post 499 00:22:23,400 --> 00:22:24,960 Me da igual, se ha invocado 500 00:22:24,960 --> 00:22:25,559 Es porque 501 00:22:25,559 --> 00:22:28,900 un formulario lo ha invocado 502 00:22:28,900 --> 00:22:29,960 con nuestra petición 503 00:22:29,960 --> 00:22:32,460 y ha llegado una petición HTTP 504 00:22:32,460 --> 00:22:33,960 entonces 505 00:22:33,960 --> 00:22:36,200 a través de este objeto request 506 00:22:36,200 --> 00:22:38,519 podemos sacar todo lo que va 507 00:22:38,519 --> 00:22:39,940 en esa petición HTTP 508 00:22:39,940 --> 00:22:42,140 todo lo que lleva 509 00:22:42,140 --> 00:22:43,880 desde lo que va en la cabecera 510 00:22:43,880 --> 00:22:46,440 hasta lo que va en el cuerpo, por ejemplo el fichero 511 00:22:46,440 --> 00:22:48,400 todo, cualquier cosa la podemos sacar de aquí 512 00:22:48,400 --> 00:22:49,579 ¿vale? 513 00:22:50,519 --> 00:22:52,480 nosotros en particular queremos sacar de aquí 514 00:22:52,480 --> 00:22:54,420 el fichero, el fichero que va en el cuerpo 515 00:22:54,420 --> 00:22:55,019 queremos sacar 516 00:22:55,019 --> 00:23:01,400 Y este objeto response es el objeto que el servlet va a enviar como respuesta 517 00:23:01,400 --> 00:23:06,960 Y nosotros lo tendremos que rellenar con lo que queramos que se envíe como respuesta 518 00:23:06,960 --> 00:23:12,460 Ahora mismo lo hemos rellenado con una página web simplemente 519 00:23:12,460 --> 00:23:18,480 Pero podríamos meterle un fichero de descarga 520 00:23:18,480 --> 00:23:21,779 Podemos meterle más cosas al response 521 00:23:21,779 --> 00:23:23,400 bueno, pues vamos a ver 522 00:23:23,400 --> 00:23:25,559 si realmente llegamos a este servlet 523 00:23:25,559 --> 00:23:27,319 ahora invocando la aplicación 524 00:23:27,319 --> 00:23:28,779 entonces esto 525 00:23:28,779 --> 00:23:31,819 se supone que esto cada cierto 526 00:23:31,819 --> 00:23:32,339 tiempo 527 00:23:32,339 --> 00:23:35,559 que dice, se recargó 528 00:23:35,559 --> 00:23:37,740 se hizo la recarga del contexto, se hizo no sé qué 529 00:23:37,740 --> 00:23:39,740 con lo cual no hay que reiniciar el servidor 530 00:23:39,740 --> 00:23:40,960 y la aplicación todo el rato 531 00:23:40,960 --> 00:23:43,779 pero, no perdemos 532 00:23:43,779 --> 00:23:45,579 como aquí no me ha parecido nada de que 533 00:23:45,579 --> 00:23:46,480 se haya reiniciado 534 00:23:46,480 --> 00:23:49,460 lo voy a forzar que se reinicie 535 00:23:49,460 --> 00:23:51,759 y así ya me aseguro de ejecutar 536 00:23:51,759 --> 00:23:52,480 La versión buena 537 00:23:52,480 --> 00:23:54,900 Venga 538 00:23:54,900 --> 00:23:59,029 Vamos a volver a ejecutar 539 00:23:59,029 --> 00:23:59,950 La aplicación 540 00:23:59,950 --> 00:24:02,789 Reinicia el servidor 541 00:24:02,789 --> 00:24:04,730 Así me aseguro de que lo inicia todo 542 00:24:04,730 --> 00:24:07,089 Vale, venga, vamos a ver 543 00:24:07,089 --> 00:24:09,250 Si me llama 544 00:24:09,250 --> 00:24:10,150 Ese servidor 545 00:24:10,150 --> 00:24:13,670 Vale 546 00:24:13,670 --> 00:24:16,430 Bueno, pues hasta ahí, bien 547 00:24:16,430 --> 00:24:18,789 Que bien, nos está saliendo todo 548 00:24:18,789 --> 00:24:19,809 Pero no sao 549 00:24:19,809 --> 00:24:23,369 Pero no sao hacer nada, corazao 550 00:24:23,369 --> 00:24:25,470 Venga, vamos a 551 00:24:25,470 --> 00:24:30,990 Ponerlo bien, que no nos gustan tantas faltas de ortografía. 552 00:24:33,210 --> 00:24:34,869 ¿Cómo era esto? 553 00:24:37,599 --> 00:24:37,960 ¿Así? 554 00:24:42,180 --> 00:24:42,940 ¿Así sí? 555 00:24:46,500 --> 00:24:47,119 A ver. 556 00:24:57,839 --> 00:25:01,099 Sí, vale, lo he escrito bien. 557 00:25:01,960 --> 00:25:06,079 ¿Veis? Aunque cambiéis el contenido a HTML, no hace falta que reiniciéis la aplicación. 558 00:25:06,759 --> 00:25:07,000 ¿Vale? 559 00:25:07,759 --> 00:25:18,599 Dime, el web XML, ¿vale? 560 00:25:18,960 --> 00:25:23,480 Esta tiene que ser la clase, donde está tu server, 561 00:25:24,099 --> 00:25:25,240 y esta la ruta. 562 00:25:28,619 --> 00:25:30,920 Ahí tiene que haber lo mismo que hay en el formulario. 563 00:25:31,619 --> 00:25:33,500 Lo que pasa es que en el formulario va sin barra y aquí 564 00:25:33,500 --> 00:25:34,119 va con barra. 565 00:25:37,819 --> 00:25:38,220 ¿Vale? 566 00:25:38,220 --> 00:25:40,400 O sea, en el formulario no lleva la barrita, 567 00:25:40,400 --> 00:25:45,849 Pero aquí si tiene que llevarla 568 00:25:45,849 --> 00:25:47,230 Para que interprete 569 00:25:47,230 --> 00:25:48,609 Que concatena con la base 570 00:25:48,609 --> 00:25:49,569 ¿Vale? 571 00:25:59,380 --> 00:26:00,559 Pero que te dice 572 00:26:00,559 --> 00:26:01,559 Algo te dirá 573 00:26:01,559 --> 00:26:05,849 Bueno 574 00:26:05,849 --> 00:26:08,130 Pues ahora 575 00:26:08,130 --> 00:26:14,920 Ahora ya si que podemos 576 00:26:14,920 --> 00:26:18,619 Aquí 577 00:26:18,619 --> 00:26:20,119 Modificar este 578 00:26:20,119 --> 00:26:23,039 Para en lugar de pedir la página web sin más 579 00:26:23,039 --> 00:26:25,960 O sea de servir la página web sin más 580 00:26:25,960 --> 00:26:28,000 saque el fichero 581 00:26:28,000 --> 00:26:29,519 del body 582 00:26:29,519 --> 00:26:31,140 del cuerpo de la petición 583 00:26:31,140 --> 00:26:33,940 lo convierta 584 00:26:33,940 --> 00:26:34,519 a Jason 585 00:26:34,519 --> 00:26:36,900 y te lo 586 00:26:36,900 --> 00:26:39,700 y te devuelva 587 00:26:39,700 --> 00:26:42,160 ahora ya sí, un formulario de descarga 588 00:26:42,160 --> 00:26:43,779 vale, pues esto sí que 589 00:26:43,779 --> 00:26:46,200 no voy a tirar de memoria 590 00:26:46,200 --> 00:26:47,480 lo vamos a ir cogiendo poco a poco 591 00:26:47,480 --> 00:26:49,160 vale, donde 592 00:26:49,160 --> 00:26:59,900 vale 593 00:26:59,900 --> 00:27:42,220 Vamos primero a hacer esta primera parte, primero del request sacamos la parte que se llama file, del request sacamos lo que se llama file. 594 00:27:42,579 --> 00:27:55,289 Aquí pone file no porque sea un fichero, sino porque en nuestro formulario lo hemos llamado file a este, ¿vale? 595 00:27:55,470 --> 00:28:00,309 vale, entonces 596 00:28:00,309 --> 00:28:01,630 como lo hemos llamado file 597 00:28:01,630 --> 00:28:04,490 a esta parte, recordad que esto es multiparte 598 00:28:04,490 --> 00:28:06,329 o sea, tiene la cabecera, tiene el cuerpo 599 00:28:06,329 --> 00:28:08,309 bueno, pues de las partes 600 00:28:08,309 --> 00:28:10,150 de las partes 601 00:28:10,150 --> 00:28:12,529 nos sacamos la parte que se llama 602 00:28:12,529 --> 00:28:14,329 file, ¿qué parte se llama file? 603 00:28:14,589 --> 00:28:15,869 el propio fichero 604 00:28:15,869 --> 00:28:18,250 el propio fichero, ¿vale? 605 00:28:19,089 --> 00:28:19,549 lo llama 606 00:28:19,549 --> 00:28:22,589 te lo coge por el nombre 607 00:28:22,589 --> 00:28:24,549 por el nombre, no por el id 608 00:28:24,549 --> 00:28:26,410 Es que eso nunca jamás me acuerdo 609 00:28:26,410 --> 00:28:27,609 Si lo coge por nombre o por ID 610 00:28:27,609 --> 00:28:28,490 Creo que es por nombre 611 00:28:28,490 --> 00:28:30,890 ¿No lo recordáis del año pasado? 612 00:28:31,410 --> 00:28:32,509 Es por nombre 613 00:28:32,509 --> 00:28:36,450 El ID es para identificarlo 614 00:28:36,450 --> 00:28:37,430 En el otro contexto 615 00:28:37,430 --> 00:28:40,450 Pero en el request se lo coge por nombre 616 00:28:40,450 --> 00:28:40,890 Vale 617 00:28:40,890 --> 00:28:43,789 Entonces, dime 618 00:28:43,789 --> 00:28:48,369 Aquí, sí, sí, sí 619 00:28:48,369 --> 00:28:50,630 Sí, sí, me voy a quedar un rato 620 00:28:50,630 --> 00:28:51,009 Aquí 621 00:28:51,009 --> 00:28:52,470 Vale 622 00:28:52,470 --> 00:28:55,930 Cogemos la parte de toda la request 623 00:28:55,930 --> 00:28:57,930 es http que se llama fichero 624 00:28:57,930 --> 00:28:58,990 se llama file 625 00:28:58,990 --> 00:29:01,670 entonces esa parte 626 00:29:01,670 --> 00:29:03,769 es un fichero, pero un fichero que también lleva 627 00:29:03,769 --> 00:29:05,630 su nombre, lleva muchas cosas 628 00:29:05,630 --> 00:29:06,470 no solo el fichero 629 00:29:06,470 --> 00:29:09,609 entonces vamos a sacar de esa parte 630 00:29:09,609 --> 00:29:11,670 que es una parte, vamos a sacar dos cosas 631 00:29:11,670 --> 00:29:13,170 primero 632 00:29:13,170 --> 00:29:15,289 el flujo de bytes 633 00:29:15,289 --> 00:29:17,849 para tirar de él, para leerlo 634 00:29:17,849 --> 00:29:19,769 aquí ligamos 635 00:29:19,769 --> 00:29:20,930 con java.io directamente 636 00:29:20,930 --> 00:29:23,069 saber de java.io también era importante 637 00:29:23,069 --> 00:29:25,309 vale, o sea de esta parte 638 00:29:25,309 --> 00:29:28,769 de esta parte, sacamos primero el flujo binario 639 00:29:28,769 --> 00:29:31,130 el flujo binario para leer de él 640 00:29:31,130 --> 00:29:38,049 y luego vamos a sacar también el nombre del fichero 641 00:29:38,049 --> 00:29:40,450 el nombre, porque en esta parte 642 00:29:40,450 --> 00:29:43,670 en la parte venía nombre del fichero 643 00:29:43,670 --> 00:29:46,410 igual a todo el flujo binario, venía ahí la parte 644 00:29:46,410 --> 00:29:49,230 todo metido a mogollón, pues de la parte sacamos 645 00:29:49,230 --> 00:29:51,809 el flujo binario con los datos de aquí 646 00:29:51,809 --> 00:29:55,950 y de aquí el nombre del fichero, esto con un método auxiliar que ahora ponemos 647 00:29:55,950 --> 00:29:59,250 Luego tenemos ya dos datos aquí 648 00:29:59,250 --> 00:30:03,869 El flujo con la información binaria del fichero y su nombre 649 00:30:03,869 --> 00:30:10,069 Vale, ¿tenéis copiadas estas tres cosas? 650 00:30:12,200 --> 00:30:13,920 Para que vayamos a hacer este método 651 00:30:13,920 --> 00:30:32,730 ¿Ya las tenéis copiadas? 652 00:30:33,829 --> 00:30:34,230 No 653 00:30:34,230 --> 00:30:39,779 ¿Perdón? 654 00:30:39,779 --> 00:30:49,859 no, no, no, es que este es un método auxiliar 655 00:30:49,859 --> 00:30:52,200 que vamos a mirar ahora, por eso me aparece en rojo 656 00:30:52,200 --> 00:30:54,380 por eso este es un método auxiliar 657 00:30:54,380 --> 00:30:56,579 para sacarlo, no es un método 658 00:30:56,579 --> 00:30:57,259 de par 659 00:30:57,259 --> 00:31:03,150 vale, ¿ya? ¿no tenéis copia? 660 00:31:16,750 --> 00:31:18,329 vale, pues vamos a sacar 661 00:31:18,329 --> 00:31:20,069 vamos a 662 00:31:20,069 --> 00:31:21,809 hacer este método auxiliar 663 00:31:21,809 --> 00:31:23,829 este método auxiliar lo vamos a hacer 664 00:31:23,829 --> 00:31:25,910 aquí abajo, para sacar 665 00:31:25,910 --> 00:31:27,750 el nombre de esta parte de aquí, 666 00:31:27,890 --> 00:31:30,049 para sacar el nombre. ¿Para qué queremos el nombre? 667 00:31:30,390 --> 00:31:32,009 Para luego guardar el JSON con el mismo 668 00:31:32,009 --> 00:31:32,769 nombre, simplemente. 669 00:31:34,210 --> 00:31:35,190 Vale, pues entonces, 670 00:31:35,809 --> 00:31:50,000 este es el método auxiliar. 671 00:31:50,960 --> 00:31:51,220 ¿Vale? 672 00:31:55,119 --> 00:31:59,910 Que se me ha 673 00:31:59,910 --> 00:32:00,690 destabulado. 674 00:32:04,400 --> 00:32:05,380 ¿Cómo era el 675 00:32:05,380 --> 00:32:06,279 formato automático? 676 00:32:07,500 --> 00:32:08,880 Control-Shift-F, ¿verdad? 677 00:32:10,119 --> 00:32:10,480 Vale. 678 00:32:10,480 --> 00:32:12,660 Vale, pues 679 00:32:12,660 --> 00:32:15,500 este es el método. 680 00:32:15,619 --> 00:32:18,859 el que saca de la parte el nombre 681 00:32:18,859 --> 00:32:20,940 copiadlo y ahora lo 682 00:32:20,940 --> 00:32:23,279 lo explicamos 683 00:32:23,279 --> 00:32:33,900 pero vamos, esto no es ni algo 684 00:32:33,900 --> 00:32:35,740 que haya que prenderse en memoria por supuesto 685 00:32:35,740 --> 00:32:37,619 ni nada, sino entender la arquitectura 686 00:32:37,619 --> 00:32:39,720 de esta aplicación hecha de cero 687 00:32:39,720 --> 00:32:41,779 entenderla y que ya sepamos 688 00:32:41,779 --> 00:32:43,539 que tienen las aplicaciones por debajo 689 00:32:43,539 --> 00:32:45,680 aunque luego se hagan con un framework, se hagan como sea 690 00:32:45,680 --> 00:33:23,500 vale, pues a ver 691 00:33:23,500 --> 00:33:39,200 Esto es para de la parte, recordad que esa parte file tiene información sobre el fichero en general y los propios datos binarios, ¿vale? Pues de este método es para de esa parte sacar el nombre simplemente y guardarlo ahí. 692 00:33:39,200 --> 00:34:00,660 Entonces, esto, lógicamente, uno, o se mira bien la documentación de Yakarta o de JavaX para ver qué métodos tiene PARP, cómo encapsula para sacar todo eso, eso, si lo hacía hace unos años, o se lo pide a HGPT, lógicamente. 693 00:34:00,660 --> 00:34:03,859 esto está hecho según el primer método 694 00:34:03,859 --> 00:34:05,980 porque la primera vez que lo hice 695 00:34:05,980 --> 00:34:07,859 pues no existía 696 00:34:07,859 --> 00:34:10,159 charGPT, pero si le pedimos a charGPT 697 00:34:10,159 --> 00:34:12,000 cómo sacar, pues no lo he hecho por curiosidad 698 00:34:12,000 --> 00:34:13,980 cómo sacar el nombre de la parte 699 00:34:13,980 --> 00:34:15,960 pues no sé si te lo sacará exactamente 700 00:34:15,960 --> 00:34:16,940 así o no, pero bueno 701 00:34:16,940 --> 00:34:19,679 vale, pues aquí de la parte 702 00:34:19,679 --> 00:34:23,880 tiene una cabecera 703 00:34:23,880 --> 00:34:26,260 que separados por punto y coma 704 00:34:26,260 --> 00:34:27,659 tiene información sobre el fichero 705 00:34:27,659 --> 00:34:29,880 o sea, la parte esa tiene 706 00:34:29,880 --> 00:34:34,079 una cabecera separada por punto y coma con información sobre el fichero 707 00:34:34,079 --> 00:34:37,039 y luego ya tiene el fichero, pues entonces vamos 708 00:34:37,039 --> 00:34:41,300 de toda esa información que tiene separadas por punto y coma de la cabecera 709 00:34:41,300 --> 00:34:45,559 vamos hasta que lleguemos a la que se llama nombre del fichero 710 00:34:45,559 --> 00:34:49,699 y sacamos, quitamos el igual 711 00:34:49,699 --> 00:34:55,739 porque será filename igual a nombre del fichero y con esto 712 00:34:55,739 --> 00:34:59,019 ya sacamos el nombre del fichero, quitando la barrita 713 00:34:59,019 --> 00:35:01,519 si es que tiene barras 714 00:35:01,519 --> 00:35:03,119 porque antes o al final 715 00:35:03,119 --> 00:35:04,940 por la concatenación con la 716 00:35:04,940 --> 00:35:06,900 ya está 717 00:35:06,900 --> 00:35:09,079 es decir, la cabecera 718 00:35:09,079 --> 00:35:11,300 una parte de la cabecera de la parte es 719 00:35:11,300 --> 00:35:13,619 filename igual al nombre 720 00:35:13,619 --> 00:35:14,239 de fichero 721 00:35:14,239 --> 00:35:17,579 pues es sacar esa parte 722 00:35:17,579 --> 00:35:19,980 lo que empiece por filename, le quito el igual 723 00:35:19,980 --> 00:35:21,420 y le quito la barra 724 00:35:21,420 --> 00:35:23,760 ya está, y ya tengo el nombre del fichero 725 00:35:23,760 --> 00:35:27,099 y en esa cabecera hay más cosas 726 00:35:27,099 --> 00:35:28,559 separadas por puntos y comas. 727 00:35:28,659 --> 00:35:29,440 Por eso es un equipo. 728 00:35:29,960 --> 00:35:31,920 Me quedo solo con la que empieza por file name. 729 00:35:37,500 --> 00:35:38,719 Vale, pues entonces, 730 00:35:39,159 --> 00:35:41,539 tenemos este método, ¿no? 731 00:35:41,820 --> 00:35:42,539 Pues ya está. 732 00:35:42,739 --> 00:35:44,599 Ya tenemos las dos informaciones. 733 00:35:45,219 --> 00:35:47,559 El flujo binario y el nombrecito. 734 00:35:48,739 --> 00:35:51,900 Y aquí, 735 00:35:53,900 --> 00:35:54,300 throws. 736 00:35:54,679 --> 00:36:00,869 Lo lanzamos todo para no tener problemas. 737 00:36:01,670 --> 00:36:01,889 Vale. 738 00:36:02,469 --> 00:36:25,030 Y ahora ya nos viene el problema de que tenemos que, claro, convertir un, ahora ya nos viene la parte Java, que es convertir este fichero, ya lo podemos leer, pasar a un objeto file y ya con ese objeto file trabajar ya con Java como esto hasta ahora, olvidarnos a partir de aquí. 739 00:36:25,030 --> 00:36:27,829 entonces, pasar un XML a JSON 740 00:36:27,829 --> 00:36:29,730 claro, si el XML 741 00:36:29,730 --> 00:36:31,750 puede tener cualquier estructura del mundo 742 00:36:31,750 --> 00:36:33,610 no es tan sencillo 743 00:36:33,610 --> 00:36:35,210 se podría hacer 744 00:36:35,210 --> 00:36:37,489 lógicamente, en este caso 745 00:36:37,489 --> 00:36:39,849 ¿cómo se haría? como yo desconozco 746 00:36:39,849 --> 00:36:41,949 las etiquetas, desconozco las clases 747 00:36:41,949 --> 00:36:43,590 y todo, no puedo hacerme clases de XB 748 00:36:43,590 --> 00:36:44,869 es imposible, no puedo hacerlas 749 00:36:44,869 --> 00:36:47,530 entonces tendríamos que leerlo con DOM, eso para empezar 750 00:36:47,530 --> 00:36:49,329 para continuar 751 00:36:49,329 --> 00:36:51,570 de forma recursiva, porque no sé hasta 752 00:36:51,570 --> 00:36:52,989 cuándo me acaban los nodos 753 00:36:52,989 --> 00:36:55,789 Tendríamos que ir leyendo el árbol de forma recursiva 754 00:36:55,789 --> 00:36:57,409 Ler nodo, ler nodo 755 00:36:57,409 --> 00:36:58,769 Que también podríamos hacerlo 756 00:36:58,769 --> 00:37:01,110 De hecho, lo tengo hecho 757 00:37:01,110 --> 00:37:03,730 Que no lo he sacado para que no os angustiarais 758 00:37:03,730 --> 00:37:05,989 Y según vas 759 00:37:05,989 --> 00:37:07,510 Leyendo los nodos 760 00:37:07,510 --> 00:37:09,349 Te vas haciendo objetos 761 00:37:09,349 --> 00:37:11,010 Y luego 762 00:37:11,010 --> 00:37:13,090 Te vas haciendo JSON nodes, perdón 763 00:37:13,090 --> 00:37:14,389 Objetos no, porque no tienes clases 764 00:37:14,389 --> 00:37:17,309 Y luego ya esos JSON nodes los vas pasando al JSON 765 00:37:17,309 --> 00:37:20,230 Es decir, para un XML genérico 766 00:37:20,230 --> 00:37:21,630 Se podría hacer el método 767 00:37:21,630 --> 00:37:24,909 que pasa de XML a JSON, pero no sería una tontería 768 00:37:24,909 --> 00:37:27,590 en absoluto, sería un método bueno, que habría que 769 00:37:27,590 --> 00:37:30,250 trabajárselo, entonces vamos a hacer una versión más sencilla, que es 770 00:37:30,250 --> 00:37:33,349 que esta aplicación sirva para pasar 771 00:37:33,349 --> 00:37:36,929 XML a JSON de esquemas de ficheros 772 00:37:36,929 --> 00:37:39,369 que ya conocemos, por ejemplo, como teníamos las clases de 773 00:37:39,369 --> 00:37:42,750 AXB del recetario famoso, pues para pasar 774 00:37:42,750 --> 00:37:45,309 yo tengo un XML de recetas, pasarlo a JSON 775 00:37:45,309 --> 00:37:48,809 ¿vale? Entonces, así va a ser 776 00:37:48,809 --> 00:37:51,130 mucho más fácil, porque lo leemos con AXB 777 00:37:51,130 --> 00:37:52,710 con las clases de recetas 778 00:37:52,710 --> 00:37:55,150 y luego pasamos el objeto a Jason y se acabó. 779 00:37:55,769 --> 00:37:57,030 Pero claro, necesitamos las clases 780 00:37:57,030 --> 00:37:59,070 de Axbay. Pues venga, vamos 781 00:37:59,070 --> 00:38:00,630 a hacernos aquí en nuestra aplicación 782 00:38:00,630 --> 00:38:03,010 un paquete 783 00:38:03,010 --> 00:38:07,440 con el modelo de las clases. 784 00:38:15,710 --> 00:38:16,190 Vale. 785 00:38:16,789 --> 00:38:18,909 Aquí van a ir las clases de Axbay para 786 00:38:18,909 --> 00:38:19,989 poder yo leer 787 00:38:19,989 --> 00:38:22,889 ese XML y 788 00:38:22,889 --> 00:38:25,030 convertirlo a objeto. Y luego de ahí pasarlo 789 00:38:25,030 --> 00:38:26,869 a Jason, como vimos el otro día, que es 790 00:38:26,869 --> 00:38:28,969 inmediato. Bueno, 791 00:38:28,969 --> 00:38:31,269 Pues ahora ya sí que sí tendréis que copiaros 792 00:38:31,269 --> 00:38:32,349 Las clases de AXB 793 00:38:32,349 --> 00:38:33,829 De 794 00:38:33,829 --> 00:38:37,289 Bueno, del XML con el que queráis hacer pruebas 795 00:38:37,289 --> 00:38:38,789 Yo como las tengo aquí 796 00:38:38,789 --> 00:38:40,929 Estás a mano, pues lo voy a hacer 797 00:38:40,929 --> 00:38:42,230 Del que hicimos de recetas 798 00:38:42,230 --> 00:39:01,599 Vale, pues os hacéis 799 00:39:01,599 --> 00:39:03,239 Un paquete modelo con las clases 800 00:39:03,239 --> 00:39:12,619 Lógicamente 801 00:39:12,619 --> 00:39:14,659 Nos sale rojito porque 802 00:39:14,659 --> 00:39:16,079 Nos falta 803 00:39:16,079 --> 00:39:18,840 Nos falta 804 00:39:18,840 --> 00:39:20,059 La dependencia de AXB 805 00:39:20,059 --> 00:39:22,739 Hasta ahora 806 00:39:22,739 --> 00:39:24,000 Nuestro Pong 807 00:39:24,000 --> 00:39:25,719 Estaba vacío 808 00:39:25,719 --> 00:39:27,480 Sin dependencias 809 00:39:27,480 --> 00:39:29,619 Porque no hemos necesitado nada 810 00:39:29,619 --> 00:39:32,099 Porque todo lo de HTTP server request 811 00:39:32,099 --> 00:39:34,380 Todo eso está en la librería del Tomcat 812 00:39:34,380 --> 00:39:36,539 Pero ahora ya sí 813 00:39:36,539 --> 00:39:38,320 Ahora ya sí que vamos a tener que meter ahí 814 00:39:38,320 --> 00:39:39,619 Las dependencias de JaxB 815 00:39:39,619 --> 00:39:42,260 Bueno, como ya las hemos hecho a veces 816 00:39:42,260 --> 00:39:44,880 Ahora ya sí que viene nuestro copia y pega 817 00:39:44,880 --> 00:39:47,599 Nuestro copia y pega 818 00:39:47,599 --> 00:39:49,760 Las de JaxB 819 00:39:49,760 --> 00:39:50,719 Eran 820 00:39:50,719 --> 00:39:52,119 Estas 821 00:39:52,119 --> 00:39:57,949 La API y la Runtime 822 00:39:57,949 --> 00:40:01,969 La API y la Runtime 823 00:40:01,969 --> 00:40:03,869 Las copiáis 824 00:40:03,869 --> 00:40:18,829 Las copiáis de 825 00:40:18,829 --> 00:40:20,789 Cualquier aplicación que tengáis 826 00:40:20,789 --> 00:40:22,590 Y ya os veis nuestras dos dependencias 827 00:40:22,590 --> 00:40:27,239 Y efectivamente 828 00:40:27,239 --> 00:40:28,340 Habrán aparecido 829 00:40:28,340 --> 00:40:30,119 Aquí 830 00:40:30,119 --> 00:40:32,780 Habrán aparecido aquí 831 00:40:32,780 --> 00:40:38,789 Y ya se nos han 832 00:40:38,789 --> 00:40:40,710 Quitado los rojitos 833 00:40:40,710 --> 00:40:45,369 Si 834 00:40:45,369 --> 00:40:50,829 Tiene las dos 835 00:40:50,829 --> 00:40:52,829 de jazz, las dos que usábamos 836 00:40:52,829 --> 00:40:54,010 la API y la runtime 837 00:40:54,010 --> 00:41:01,769 bueno, pues ahora ya sí que sí 838 00:41:01,769 --> 00:41:03,849 podemos volver a nuestro servlet 839 00:41:03,849 --> 00:41:05,449 y ya 840 00:41:05,449 --> 00:41:11,619 vale, vamos a 841 00:41:11,619 --> 00:41:12,719 guardar 842 00:41:12,719 --> 00:41:15,340 de este input string 843 00:41:15,340 --> 00:41:17,599 vamos a guardarlo, vamos a leer 844 00:41:17,599 --> 00:41:19,019 para guardarlo en un fichero 845 00:41:19,019 --> 00:41:21,579 esto lo sabemos hacer con java.io 846 00:41:21,579 --> 00:41:23,760 perfectamente, entonces voy a 847 00:41:23,760 --> 00:41:26,650 dime 848 00:41:26,650 --> 00:41:28,610 en 849 00:41:28,610 --> 00:41:30,230 aquí 850 00:41:30,230 --> 00:41:32,570 No tiene nada 851 00:41:32,570 --> 00:41:37,719 Vale, entonces 852 00:41:37,719 --> 00:41:39,719 Vamos a esto de aquí 853 00:41:39,719 --> 00:41:40,280 Vale 854 00:41:40,280 --> 00:41:49,679 A ver 855 00:41:49,679 --> 00:41:53,360 Vamos a hacer esta parte 856 00:41:53,360 --> 00:41:54,400 Ahora 857 00:41:54,400 --> 00:41:59,619 Vale, pues vamos a hacer la parte 858 00:41:59,619 --> 00:42:01,860 ahora de ir leyendo 859 00:42:01,860 --> 00:42:02,800 del input string 860 00:42:02,800 --> 00:42:05,260 para que se quede en un fichero local 861 00:42:05,260 --> 00:42:06,440 vale 862 00:42:06,440 --> 00:42:11,409 entonces estamos aquí 863 00:42:11,409 --> 00:42:12,349 vale 864 00:42:12,349 --> 00:42:15,630 esta primera cosa que he hecho 865 00:42:15,630 --> 00:42:22,789 esto es porque 866 00:42:22,789 --> 00:42:25,010 bueno 867 00:42:25,010 --> 00:42:25,630 a ver 868 00:42:25,630 --> 00:42:26,889 porque no 869 00:42:26,889 --> 00:42:33,449 vale pues 870 00:42:33,449 --> 00:42:36,369 esto de aquí es lo nuevo que he escrito 871 00:42:36,369 --> 00:42:38,469 vale, este código 872 00:42:38,469 --> 00:42:39,369 y este 873 00:42:39,369 --> 00:42:45,239 Escribirlo y ahora lo 874 00:42:45,239 --> 00:42:47,039 Comentamos 875 00:42:47,039 --> 00:42:55,599 A ver, este proyecto lo voy a subir luego 876 00:42:55,599 --> 00:42:57,440 Pero es que os quería hacer escribir un poco 877 00:42:57,440 --> 00:43:05,329 Esto sigue, estamos siguiendo con el serle 878 00:43:05,329 --> 00:43:07,710 Estamos siguiendo con el serle 879 00:43:07,710 --> 00:43:10,510 Sí, por eso he dicho, escribidlo 880 00:43:10,510 --> 00:43:13,170 Y ahora lo comentamos 881 00:43:13,170 --> 00:43:14,889 Pero vamos, que esto 882 00:43:14,889 --> 00:43:17,349 Es leer del flujo 883 00:43:17,349 --> 00:43:19,610 Vale, a ver 884 00:43:19,610 --> 00:43:21,630 Esto simplemente porque 885 00:43:21,630 --> 00:43:24,469 Esto está a continuación de lo que hemos hecho 886 00:43:24,469 --> 00:43:26,590 Sacar el nombre del fichero y el flujo de entrada 887 00:43:26,590 --> 00:43:28,090 Está justo a continuación 888 00:43:28,090 --> 00:43:28,349 Vale 889 00:43:28,349 --> 00:43:32,389 Entonces, el file name 890 00:43:32,389 --> 00:43:34,449 Es el nombre del fichero 891 00:43:34,449 --> 00:43:36,190 Recordad que me ha sacado de la parte 892 00:43:36,190 --> 00:43:37,610 Esa que ha subido, el nombre del fichero 893 00:43:37,610 --> 00:43:40,170 Pero es que hay una diferencia 894 00:43:40,170 --> 00:43:42,469 Cuando haces las pruebas 895 00:43:42,469 --> 00:43:44,210 En el Tomcat integrado en Eclipse 896 00:43:44,210 --> 00:43:46,750 Que cuando lo haces desplegado 897 00:43:46,750 --> 00:43:48,849 En un Tomcat aparte 898 00:43:48,849 --> 00:43:50,369 Con un guard que lo has desplegado 899 00:43:50,369 --> 00:43:51,289 Bueno 900 00:43:51,289 --> 00:43:54,269 Entonces, hay una diferencia 901 00:43:54,269 --> 00:43:56,469 El filename cuando haces las pruebas 902 00:43:56,469 --> 00:43:57,550 Integrados en Eclipse 903 00:43:57,550 --> 00:44:01,090 Trae toda la ruta de tu sistema de archivos 904 00:44:01,090 --> 00:44:04,630 Queremos quitarlo 905 00:44:04,630 --> 00:44:06,409 Queremos quitar la ruta 906 00:44:06,409 --> 00:44:08,610 Entonces, este código es un código que he hecho 907 00:44:08,610 --> 00:44:10,210 Simplemente 908 00:44:10,210 --> 00:44:12,670 Para que en el caso de que el filename 909 00:44:12,670 --> 00:44:15,349 En el caso de que el filename 910 00:44:15,349 --> 00:44:17,050 Traiga toda la ruta 911 00:44:17,050 --> 00:44:18,409 Archivos 912 00:44:18,409 --> 00:44:30,909 archivos, no sé qué, mi archivo XML. Bueno, pues en las pruebas que haces en local con 913 00:44:30,909 --> 00:44:37,510 el Eclipse, el file name te puede traer toda la ruta de tu sistema de archivos local, porque 914 00:44:37,510 --> 00:44:43,829 estás en local. Entonces, para él, el file name es todo, porque estás en local en tu 915 00:44:43,829 --> 00:44:47,829 propio ordenador. Entonces, mi nombre de archivo yo no quiero todo esto, solo quiero 916 00:44:47,829 --> 00:44:51,300 esto, entonces esto es un pequeño 917 00:44:51,300 --> 00:44:53,019 código que he hecho solamente 918 00:44:53,019 --> 00:44:55,219 para quedarse 919 00:44:55,219 --> 00:44:56,920 con esto hacia acá 920 00:44:56,920 --> 00:44:58,659 eliminar todo de aquí hacia arriba 921 00:44:58,659 --> 00:45:01,039 ¿verdad? me quedo 922 00:45:01,039 --> 00:45:03,079 con file separator es 923 00:45:03,079 --> 00:45:05,239 el separador que usa mi sistema 924 00:45:05,239 --> 00:45:07,380 de archivos, que sea 925 00:45:07,380 --> 00:45:09,239 esto es para hacerlo independiente 926 00:45:09,239 --> 00:45:10,880 de Linux, Windows, lo que sea 927 00:45:10,880 --> 00:45:12,599 entonces me quedo 928 00:45:12,599 --> 00:45:14,920 con la última aparición 929 00:45:14,920 --> 00:45:16,980 de ese separador, con la última aparición 930 00:45:16,980 --> 00:45:18,940 y me quedo con el substring 931 00:45:18,940 --> 00:45:19,880 de él hacia Landry 932 00:45:19,880 --> 00:45:21,300 ¿vale? 933 00:45:22,079 --> 00:45:25,019 luego esto, en realidad en la aplicación 934 00:45:25,019 --> 00:45:26,860 real ya desplegada, esto no haría 935 00:45:26,860 --> 00:45:27,659 ninguna falta 936 00:45:27,659 --> 00:45:31,039 ¿vale? porque el nombre no va a contener 937 00:45:31,039 --> 00:45:33,099 el separador del sistema de archivos local 938 00:45:33,099 --> 00:45:34,659 o sea, si esto realmente 939 00:45:34,659 --> 00:45:35,920 se hace en un entorno real 940 00:45:35,920 --> 00:45:38,900 tú haces tu formulario, lo subes 941 00:45:38,900 --> 00:45:41,019 el fichero a través de la aplicación web 942 00:45:41,019 --> 00:45:42,860 ese fichero, su nombre 943 00:45:42,860 --> 00:45:44,980 no llega con la ruta local de tu sistema 944 00:45:44,980 --> 00:45:46,659 de archivos, llega con su nombre 945 00:45:46,659 --> 00:45:48,579 punto pelota, con lo cual 946 00:45:48,579 --> 00:45:50,559 Este contain siempre sería falso 947 00:45:50,559 --> 00:45:51,780 Nunca se ejecutaría 948 00:45:51,780 --> 00:45:54,019 Pero en las pruebas locales 949 00:45:54,019 --> 00:45:56,719 El filename sí que te puede llegar 950 00:45:56,719 --> 00:45:58,340 Con toda la ruta de tu 951 00:45:58,340 --> 00:46:00,179 Sistema de archivos local 952 00:46:00,179 --> 00:46:02,039 Entonces no la queremos 953 00:46:02,039 --> 00:46:03,860 Pues por eso hago este código 954 00:46:03,860 --> 00:46:05,079 Solamente para eso, ¿vale? 955 00:46:06,179 --> 00:46:06,880 Ya está 956 00:46:06,880 --> 00:46:09,500 Vale, ¿y ahora ya qué hacemos? 957 00:46:10,400 --> 00:46:11,699 Bueno, pues el servidor 958 00:46:11,699 --> 00:46:13,440 Tendrá que tener algún sitio 959 00:46:13,440 --> 00:46:14,480 Para 960 00:46:14,480 --> 00:46:18,199 Guardar los archivos que le estamos subiendo 961 00:46:18,199 --> 00:46:19,340 algún sitio para guardarlo 962 00:46:19,340 --> 00:46:21,719 bueno, yo he puesto en esta ruta 963 00:46:21,719 --> 00:46:22,920 vosotros poned la que queráis 964 00:46:22,920 --> 00:46:25,099 este es mi servidor 965 00:46:25,099 --> 00:46:27,940 y esta es la ruta de mi servidor 966 00:46:27,940 --> 00:46:29,159 donde voy a guardar los archivos 967 00:46:29,159 --> 00:46:31,679 los archivos subidos 968 00:46:31,679 --> 00:46:32,960 estoy en el servidor ahora 969 00:46:32,960 --> 00:46:36,460 entonces ya me crea un nuevo file 970 00:46:36,460 --> 00:46:38,460 en esta ruta 971 00:46:38,460 --> 00:46:40,039 con el nombre que acabo de 972 00:46:40,039 --> 00:46:41,840 leer 973 00:46:41,840 --> 00:46:54,429 entonces, sí 974 00:46:54,429 --> 00:46:56,630 entonces este es el objeto 975 00:46:56,630 --> 00:46:58,610 file, el objeto file 976 00:46:58,610 --> 00:47:00,010 que yo creo en el servidor 977 00:47:00,010 --> 00:47:02,630 le asocio un file output 978 00:47:02,630 --> 00:47:04,829 stream, y ahora me hago el bucle de toda la vida 979 00:47:04,829 --> 00:47:06,949 voy leyendo del input stream 980 00:47:06,949 --> 00:47:08,949 del fichero que he subido 981 00:47:08,949 --> 00:47:10,750 de la parte que he subido y voy escribiendo 982 00:47:10,750 --> 00:47:12,829 leo, escribo, leo, escribo 983 00:47:12,829 --> 00:47:20,909 creo que 984 00:47:20,909 --> 00:47:22,949 a partir de la versión 9, pero eso 985 00:47:22,949 --> 00:47:24,690 creo que lo tengo en el otro servlet 986 00:47:24,690 --> 00:47:26,690 no hace falta 987 00:47:26,690 --> 00:47:29,110 leer byte, escribir byte, leer byte, escribir byte 988 00:47:29,110 --> 00:47:30,570 hay un método que pum 989 00:47:30,570 --> 00:47:32,849 te conecta un flujo con otro y te lo hace 990 00:47:32,849 --> 00:47:33,829 toda la bestia 991 00:47:33,829 --> 00:47:40,179 vale, pues llegados a este 992 00:47:40,179 --> 00:47:41,059 punto del servlet 993 00:47:41,059 --> 00:47:43,920 todo lo que ha hecho mi servlet 994 00:47:43,920 --> 00:47:45,980 ahora lo recopilamos desde arriba es 995 00:47:45,980 --> 00:47:48,300 coger la parte que se llama 996 00:47:48,300 --> 00:47:50,179 file, que el formulario 997 00:47:50,179 --> 00:47:51,840 ha llamado file, es decir, coger el fichero 998 00:47:51,840 --> 00:47:53,900 sacar de esa parte 999 00:47:53,900 --> 00:47:56,280 el flujo binario, el output stream 1000 00:47:56,280 --> 00:48:00,690 y el nombre. Crear un 1001 00:48:00,690 --> 00:48:02,789 objeto file asociado a una 1002 00:48:02,789 --> 00:48:04,570 ruta del servidor para guardar ese 1003 00:48:04,570 --> 00:48:06,769 fichero. Y ahora 1004 00:48:06,769 --> 00:48:08,269 ya, mi input 1005 00:48:08,269 --> 00:48:10,630 stream 1006 00:48:10,630 --> 00:48:12,690 donde viene el fichero, voy escribiendo 1007 00:48:12,690 --> 00:48:14,690 en ese otro. Output stream de aquí. 1008 00:48:16,610 --> 00:48:18,730 ¿Verdad? Vamos a recopilarlo desde el principio. 1009 00:48:20,010 --> 00:48:20,349 Tengo 1010 00:48:20,349 --> 00:48:22,289 saco 1011 00:48:22,289 --> 00:48:23,769 el file 1012 00:48:23,769 --> 00:48:25,550 que era este 1013 00:48:25,550 --> 00:48:28,809 el file que he mandado por post 1014 00:48:28,809 --> 00:48:30,750 lo saco de la parte 1015 00:48:30,750 --> 00:48:32,949 saco un input stream 1016 00:48:32,949 --> 00:48:34,869 asociado a sus 1017 00:48:34,869 --> 00:48:36,650 datos binarios de ese fichero 1018 00:48:36,650 --> 00:48:38,309 saco el nombre 1019 00:48:38,309 --> 00:48:40,730 a través de su cabecera con este 1020 00:48:40,730 --> 00:48:42,690 método auxiliar, saco el nombre 1021 00:48:42,690 --> 00:48:43,329 del fichero 1022 00:48:43,329 --> 00:48:46,750 me creo un fichero en el servidor 1023 00:48:46,750 --> 00:48:48,269 en la ruta que a mí me dé la gana 1024 00:48:48,269 --> 00:48:50,269 un fichero en el servidor con ese mismo nombre 1025 00:48:50,269 --> 00:48:52,530 ¿vale? 1026 00:48:53,130 --> 00:48:54,309 y ahora ya 1027 00:48:54,309 --> 00:48:56,449 del input stream 1028 00:48:56,449 --> 00:48:58,309 del fichero binario que me ha llegado en la 1029 00:48:58,309 --> 00:48:58,789 request 1030 00:48:58,789 --> 00:49:01,969 voy sacando para escribir 1031 00:49:01,969 --> 00:49:04,010 en este fichero file output stream 1032 00:49:04,010 --> 00:49:07,840 vale, pues vamos a ejecutarlo hasta aquí 1033 00:49:07,840 --> 00:49:11,349 cread esta carpeta 1034 00:49:11,349 --> 00:49:12,610 la que hayáis puesto vosotros 1035 00:49:12,610 --> 00:49:15,769 y vamos a ver si realmente 1036 00:49:15,769 --> 00:49:17,329 se sube ahí el archivo 1037 00:49:17,329 --> 00:49:19,309 entonces yo 1038 00:49:19,309 --> 00:49:20,210 lo tengo 1039 00:49:20,210 --> 00:49:23,349 archivos de servidor, voy a quitar 1040 00:49:23,349 --> 00:49:25,630 lo que tuviera aquí de las pruebas 1041 00:49:25,630 --> 00:49:27,489 vale, esta es mi carpeta 1042 00:49:27,489 --> 00:49:29,710 archivos de servidor que está completamente 1043 00:49:29,710 --> 00:49:31,849 vacía, que es la carpeta 1044 00:49:31,849 --> 00:49:33,750 local del servidor a donde van a ir a 1045 00:49:33,750 --> 00:49:35,929 parar los archivos que yo suba desde la aplicación 1046 00:49:35,929 --> 00:49:36,230 web 1047 00:49:36,230 --> 00:49:38,150 venga 1048 00:49:38,150 --> 00:49:42,650 error de compilación 1049 00:49:42,650 --> 00:49:45,110 entonces, déjame ejecutarlo 1050 00:49:45,110 --> 00:49:46,110 por si he escrito algo mal 1051 00:49:46,110 --> 00:49:49,409 y entonces voy a ejecutar la aplicación 1052 00:49:49,409 --> 00:49:50,829 que 1053 00:49:50,829 --> 00:49:51,989 estamos 1054 00:49:51,989 --> 00:49:55,150 aquí, xml to json 1055 00:49:55,150 --> 00:50:08,449 vale, esta es mi 1056 00:50:08,449 --> 00:50:09,130 aplicación 1057 00:50:09,130 --> 00:50:11,889 ¿qué archivo XML quiero subir? 1058 00:50:12,090 --> 00:50:12,429 Este. 1059 00:50:14,630 --> 00:50:15,150 Subir. 1060 00:50:19,769 --> 00:50:22,010 Imposible procesar debido a que se ha prohibido 1061 00:50:22,010 --> 00:50:23,070 no multipartes. 1062 00:50:23,170 --> 00:50:23,369 ¡Ah! 1063 00:50:24,349 --> 00:50:26,489 Maravilloso que nos haya salido este error. 1064 00:50:26,849 --> 00:50:28,789 Vale, entonces, ¿a uno un error típico? 1065 00:50:29,969 --> 00:50:31,590 Claro, un error típico. 1066 00:50:33,070 --> 00:50:33,630 ¿Vale? 1067 00:50:33,809 --> 00:50:35,130 Ya hemos mencionado, 1068 00:50:37,130 --> 00:50:38,230 o sea, uno ve este error 1069 00:50:38,230 --> 00:50:41,650 y pues lo busca o hasta que lo encuentra. 1070 00:50:41,650 --> 00:50:57,889 ¿Qué significa? A ver, nosotros en el formulario le hemos dicho que el formulario tiene que ser multipartes porque lleva un fichero, ¿verdad? Lleva un fichero. Vale, pues al SERLET hay que avisarle de que es multiparte. Al SERLET hay que avisarle. 1071 00:50:57,889 --> 00:51:22,929 ¿Y cómo se le avisa? Con una anotación. Entonces, me voy al Serlet y al Serlet hay que avisarle con una anotación. Voy a ver si es esta o si no la miro. Porque si no me deja importar esta es que no es esta. Multipart config. 1072 00:51:22,929 --> 00:51:26,789 esta, es, vale 1073 00:51:26,789 --> 00:51:28,489 vale 1074 00:51:28,489 --> 00:51:32,489 esto ha sido un olvido, vale 1075 00:51:32,489 --> 00:51:34,949 pero 1076 00:51:34,949 --> 00:51:37,389 bienvenidos esos olvidos 1077 00:51:37,389 --> 00:51:39,369 porque nos hacen que nos salgan 1078 00:51:39,369 --> 00:51:39,909 errores 1079 00:51:39,909 --> 00:51:42,329 típicos 1080 00:51:42,329 --> 00:51:45,010 vale, pues este serlet 1081 00:51:45,010 --> 00:51:47,309 tiene que poder trabajar con multipartes 1082 00:51:47,309 --> 00:51:49,449 pues lo tengo que avisar con una anotación 1083 00:51:49,449 --> 00:51:52,570 ¿a dónde? 1084 00:51:52,929 --> 00:52:13,050 Vale, pues entonces 1085 00:52:13,050 --> 00:52:14,550 Vamos a volver a ejecutarlo 1086 00:52:14,550 --> 00:52:26,869 Ya, pero lo que importa es si nos ha subido el archivo 1087 00:52:26,869 --> 00:52:28,690 Eso es lo que tenemos que mirar 1088 00:52:28,690 --> 00:52:29,809 Claro 1089 00:52:29,809 --> 00:52:31,769 Vale, a ver 1090 00:52:31,769 --> 00:52:34,809 Pues aquí lo tenemos 1091 00:52:34,809 --> 00:52:36,789 Elegimos un archivo cualquiera 1092 00:52:36,789 --> 00:52:38,989 Este, subir archivo 1093 00:52:38,989 --> 00:52:40,789 Vamos a ver 1094 00:52:40,789 --> 00:52:42,369 Si en archivos de servidor está 1095 00:52:42,369 --> 00:52:45,309 Efectivamente ha aparecido 1096 00:52:45,309 --> 00:52:47,110 Lo ha subido al servidor 1097 00:52:47,110 --> 00:52:50,070 Luego el archivo ya está en el servidor 1098 00:52:50,070 --> 00:52:52,630 Ahora ya sí que viene la parte Java 1099 00:52:52,630 --> 00:52:53,949 Ya está 1100 00:52:53,949 --> 00:52:55,630 ¿Vale? 1101 00:52:57,630 --> 00:52:58,969 Creo que no sabría 1102 00:52:58,969 --> 00:53:03,349 Si sabrías 1103 00:53:03,349 --> 00:53:04,190 Porque a ver 1104 00:53:04,190 --> 00:53:11,630 Pues nos falta un poco 1105 00:53:11,630 --> 00:53:14,630 luego hacemos la revisión global de todo 1106 00:53:14,630 --> 00:53:17,090 a ver, he hecho una página web 1107 00:53:17,090 --> 00:53:18,130 que invoca un serlet 1108 00:53:18,130 --> 00:53:20,050 y el serlet hace cosas 1109 00:53:20,050 --> 00:53:22,969 ¿vale? pero luego lo revisamos 1110 00:53:22,969 --> 00:53:23,789 todo desde el principio 1111 00:53:23,789 --> 00:53:32,230 luego lo revisamos todo desde el principio 1112 00:53:32,230 --> 00:53:34,829 a ver, si es el primer 1113 00:53:34,829 --> 00:53:37,050 contacto con un serlet o con un formulario 1114 00:53:37,050 --> 00:53:39,110 todo junto, pues uno se lía 1115 00:53:39,110 --> 00:53:40,969 pero una vez que ya uno ha hecho 1116 00:53:40,969 --> 00:53:42,909 su primer formulario con un 1117 00:53:42,909 --> 00:53:44,489 serlet y lo revisa al completo 1118 00:53:44,489 --> 00:53:46,190 ya se le queda la idea 1119 00:53:46,190 --> 00:53:48,750 y ya está, y a partir de ahí 1120 00:53:48,750 --> 00:53:50,750 pues ya puedes, pero claro 1121 00:53:50,750 --> 00:53:52,329 si es el primer contacto con 1122 00:53:52,329 --> 00:53:53,610 esto 1123 00:53:53,610 --> 00:54:00,920 a ver, subir 1124 00:54:00,920 --> 00:54:05,960 la anotación del serlet es esta 1125 00:54:05,960 --> 00:54:07,880 está en la clase 1126 00:54:07,880 --> 00:54:08,940 multipart config 1127 00:54:08,940 --> 00:54:10,000 vale 1128 00:54:10,000 --> 00:54:21,320 vale, pues ahora 1129 00:54:21,320 --> 00:54:23,280 Llamamos a la parte Java, que esta ya 1130 00:54:23,280 --> 00:54:24,760 Si que no nos queda ninguna duda 1131 00:54:24,760 --> 00:54:26,340 A ver 1132 00:54:26,340 --> 00:54:31,119 Voy a cerrar aquí cosas 1133 00:54:31,119 --> 00:54:32,920 Que tengo un lío, vale 1134 00:54:32,920 --> 00:54:34,639 Vamos al serlet que está aquí 1135 00:54:34,639 --> 00:54:37,059 Bueno, pues llegados 1136 00:54:37,059 --> 00:54:38,420 A este punto del serlet 1137 00:54:38,420 --> 00:54:40,159 Ya tenemos 1138 00:54:40,159 --> 00:54:42,199 Nuestro 1139 00:54:42,199 --> 00:54:45,820 Objeto file aquí 1140 00:54:45,820 --> 00:54:48,420 Nuestro objeto file 1141 00:54:48,420 --> 00:54:48,900 Este 1142 00:54:48,900 --> 00:54:52,239 Con el xml subido 1143 00:54:52,239 --> 00:54:54,300 Pues vamos a hacerlo a través de un método 1144 00:54:54,300 --> 00:55:13,510 auxiliar, claro, que me devuelva aquí el file json, por ejemplo, xml to json, al que 1145 00:55:13,510 --> 00:55:21,090 le paso f, que es el fichero, ¿vale? Entonces ahora vamos a hacer ya este método, que te 1146 00:55:21,090 --> 00:55:22,650 pasa este fichero f 1147 00:55:22,650 --> 00:55:25,230 a un 1148 00:55:25,230 --> 00:55:27,210 json y te devuelve 1149 00:55:27,210 --> 00:55:29,170 la referencia a ese json 1150 00:55:29,170 --> 00:55:33,090 pues venga, vamos a hacernos 1151 00:55:33,090 --> 00:55:34,650 la clase utilidades 1152 00:55:34,650 --> 00:55:38,730 vale, vamos a hacer este método y ahora 1153 00:55:38,730 --> 00:55:41,030 a partir de aquí, ahora ya si que 1154 00:55:41,030 --> 00:55:42,829 este response 1155 00:55:42,829 --> 00:55:44,030 perdón, que tengo yo aquí 1156 00:55:44,030 --> 00:55:46,250 que lo llevo ahí arrastrando 1157 00:55:46,250 --> 00:55:48,750 pues ahora ya si que en lugar de que me 1158 00:55:48,750 --> 00:55:50,849 de este mensaje, que me de una página web 1159 00:55:50,849 --> 00:55:52,829 con un enlace de descarga o con un 1160 00:55:52,829 --> 00:55:55,150 formulario de descarga, pero por lo pronto 1161 00:55:55,150 --> 00:55:56,449 vamos a hacer esta parte y ya está 1162 00:55:56,449 --> 00:55:58,969 vale, pues nos vamos a hacer 1163 00:55:58,969 --> 00:56:00,650 el 1164 00:56:00,650 --> 00:56:03,190 otro paquete con la lógica 1165 00:56:03,190 --> 00:56:08,969 nos hacemos 1166 00:56:08,969 --> 00:56:10,429 un paquete 1167 00:56:10,429 --> 00:56:21,400 ay, que 1168 00:56:21,400 --> 00:56:23,159 sos feliz 1169 00:56:23,159 --> 00:56:24,500 pero 1170 00:56:24,500 --> 00:56:27,760 a ver, he puesto ya esto 1171 00:56:27,760 --> 00:56:36,400 ah, vale, vale 1172 00:56:36,400 --> 00:56:38,460 con punto 1173 00:56:38,460 --> 00:56:39,659 dan dos, punto 1174 00:56:39,659 --> 00:56:41,659 lógica, por ejemplo 1175 00:56:41,659 --> 00:56:43,980 Venga, ya está 1176 00:56:43,980 --> 00:56:47,860 Vale, y aquí nos vamos a hacer la clase utilidades 1177 00:56:47,860 --> 00:56:49,199 Con ese método estático 1178 00:56:49,199 --> 00:56:59,349 Y ahora este va a tener un método estático 1179 00:56:59,349 --> 00:57:01,230 Public static 1180 00:57:01,230 --> 00:57:03,130 Que devuelve un file 1181 00:57:03,130 --> 00:57:04,590 X 1182 00:57:04,590 --> 00:57:06,889 ML 1183 00:57:06,889 --> 00:57:07,449 To 1184 00:57:07,449 --> 00:57:09,329 JSON 1185 00:57:09,329 --> 00:57:12,530 Al que se le pasa un file 1186 00:57:12,530 --> 00:57:14,590 File xml 1187 00:57:14,590 --> 00:57:26,059 Vamos a ponerle un return null 1188 00:57:26,059 --> 00:57:27,260 Ahí para que se calle 1189 00:57:27,260 --> 00:57:30,179 Y ahora ya está 1190 00:57:30,179 --> 00:57:33,170 Ahora ya 1191 00:57:33,170 --> 00:57:35,329 Vamos a 1192 00:57:35,329 --> 00:57:37,849 Copiar y pegar 1193 00:57:37,849 --> 00:57:39,710 Como se leía 1194 00:57:39,710 --> 00:57:41,869 Un xml, el jacksb context 1195 00:57:41,869 --> 00:57:42,849 Bla bla bla 1196 00:57:42,849 --> 00:57:45,670 Pues venga, esto ya es copiar 1197 00:57:45,670 --> 00:57:47,750 Y pegar de cualquier 1198 00:57:47,750 --> 00:57:49,349 Del método de leer 1199 00:57:49,349 --> 00:57:51,710 Un jacksb 1200 00:57:52,510 --> 00:57:53,730 Que yo 1201 00:57:53,730 --> 00:57:55,409 Lo tengo aquí 1202 00:57:55,409 --> 00:58:05,780 Vale, aquí 1203 00:58:05,780 --> 00:58:07,900 Esto ya era 1204 00:58:07,900 --> 00:58:09,340 Pues hacer el context 1205 00:58:09,340 --> 00:58:11,840 Hacer una nueva instancia 1206 00:58:11,840 --> 00:58:15,769 De la clase que sea 1207 00:58:15,769 --> 00:58:17,090 Que era recetario 1208 00:58:17,090 --> 00:58:28,210 Esto 1209 00:58:28,210 --> 00:58:34,019 A ver, recetario 1210 00:58:34,019 --> 00:58:35,260 Vamos a poner aquí la 1211 00:58:35,260 --> 00:59:01,039 Ah, vale, vale 1212 00:59:01,039 --> 00:59:07,780 Vale 1213 00:59:07,780 --> 00:59:10,659 Este no es 1214 00:59:10,659 --> 00:59:12,199 File, sino file 1215 00:59:12,199 --> 00:59:13,079 XML 1216 00:59:13,079 --> 00:59:23,760 Bueno, pues esto es la parte de JaxB 1217 00:59:23,760 --> 00:59:25,219 Que ya conocemos, que es 1218 00:59:25,219 --> 00:59:27,239 Pasar del fichero 1219 00:59:27,239 --> 00:59:28,360 Al objeto 1220 00:59:28,360 --> 00:59:31,239 Si las clases están bien, que lo estarán 1221 00:59:31,239 --> 00:59:32,420 Porque las hemos usado ya 1222 00:59:32,420 --> 00:59:34,340 Ya tengo el objeto 1223 00:59:34,340 --> 00:59:39,210 Y ahora ya recordad que 1224 00:59:39,210 --> 00:59:41,010 Escribir en un JSON 1225 00:59:41,010 --> 00:59:43,590 Si yo no quiero cambiar 1226 00:59:43,590 --> 00:59:45,389 Los nombres de los campos, ni de nada 1227 00:59:45,389 --> 00:59:47,809 Con un solo método, le envío el objeto 1228 00:59:47,809 --> 00:59:48,909 Y lo escribía 1229 00:59:48,909 --> 00:59:51,590 Y ya está, pero vamos a crear 1230 00:59:51,590 --> 00:59:58,510 El fichero, el fichero que se llame igual que este, pero con extensión .json. 1231 00:59:58,789 --> 01:00:02,510 Entonces, vamos a crear el fichero .json. 1232 01:00:04,780 --> 01:00:12,260 Este file .json que vamos a crear, ¿qué nombre le tenemos que dar? 1233 01:00:12,579 --> 01:00:16,340 El nombre del de arriba, pero cambiando la extensión .xml por .json. 1234 01:00:16,340 --> 01:00:28,280 Con lo cual, vamos a ver, el nombre del de arriba sería el file xml.getName, ¿verdad? 1235 01:00:28,539 --> 01:00:30,500 Este es el nombre del fichero de arriba. 1236 01:00:31,420 --> 01:00:40,619 Pero nos vamos a quedar con el substring que va desde cero hasta la aparición del punto. 1237 01:00:40,619 --> 01:00:44,429 pero 1238 01:00:44,429 --> 01:00:48,039 vamos a ver 1239 01:00:48,039 --> 01:00:48,739 get name 1240 01:00:48,739 --> 01:00:55,179 punto last index 1241 01:00:55,179 --> 01:00:57,400 of el punto 1242 01:00:57,400 --> 01:00:59,539 vale 1243 01:00:59,539 --> 01:01:01,559 y ahora 1244 01:01:01,559 --> 01:01:03,960 a esto le concateno 1245 01:01:03,960 --> 01:01:05,400 con 1246 01:01:05,400 --> 01:01:06,780 punto jason 1247 01:01:06,780 --> 01:01:12,579 ya tengo el nuevo nombre del fichero 1248 01:01:12,579 --> 01:01:13,139 jason 1249 01:01:13,139 --> 01:01:16,260 para si mi fichero se llama 1250 01:01:16,260 --> 01:01:18,159 pepito.xml que ahora se llama 1251 01:01:18,159 --> 01:01:19,119 pepito.json 1252 01:01:19,119 --> 01:01:20,239 para eso 1253 01:01:20,239 --> 01:01:23,719 a su nombre me quedo con el substring 1254 01:01:23,719 --> 01:01:24,739 que va desde cero 1255 01:01:24,739 --> 01:01:27,420 hasta la posición anterior a la del punto 1256 01:01:27,420 --> 01:01:29,519 y le concateno con JSON 1257 01:01:29,519 --> 01:01:31,539 bueno me podría quedar 1258 01:01:31,539 --> 01:01:35,519 bueno te elimina 1259 01:01:35,519 --> 01:01:36,880 la que tenía y te pone otra 1260 01:01:36,880 --> 01:01:39,599 vale pues ahora ya 1261 01:01:39,599 --> 01:01:41,000 creamos un fichero 1262 01:01:41,000 --> 01:01:42,780 con este nombre 1263 01:01:42,780 --> 01:01:45,960 pero lo creamos 1264 01:01:45,960 --> 01:01:47,239 en esa ruta 1265 01:01:47,239 --> 01:01:48,800 en la ruta 1266 01:01:48,800 --> 01:01:51,860 Donde está todo eso de aquí 1267 01:01:51,860 --> 01:01:52,820 Vale 1268 01:01:52,820 --> 01:01:54,880 Vale, entonces para 1269 01:01:54,880 --> 01:01:56,699 Puedo concatenar la ruta 1270 01:01:56,699 --> 01:01:59,380 Es decir, podéis concatenar aquí la ruta 1271 01:01:59,380 --> 01:02:01,260 C, no sé qué, archivos de servidor 1272 01:02:01,260 --> 01:02:02,320 Barra 1273 01:02:02,320 --> 01:02:04,579 Y concatenarle name json 1274 01:02:04,579 --> 01:02:05,860 O 1275 01:02:05,860 --> 01:02:10,119 Esto lo podemos hacer también 1276 01:02:10,119 --> 01:02:10,780 Como 1277 01:02:10,780 --> 01:02:13,280 Con otra versión del constructor 1278 01:02:13,280 --> 01:02:17,159 Como se llama el fichero xml 1279 01:02:17,159 --> 01:02:18,500 File xml 1280 01:02:18,500 --> 01:02:20,699 .getParent 1281 01:02:20,699 --> 01:02:21,539 y ahora 1282 01:02:21,539 --> 01:02:23,380 name 1283 01:02:23,380 --> 01:02:25,159 JSON 1284 01:02:25,159 --> 01:02:30,159 este es otro constructor del objeto file 1285 01:02:30,159 --> 01:02:32,619 el objeto file le puedes dar 1286 01:02:32,619 --> 01:02:34,519 tú toda una ruta 1287 01:02:34,519 --> 01:02:36,480 enterita, que se la podríamos 1288 01:02:36,480 --> 01:02:38,099 dar, que sería concatenar el p 1289 01:02:38,099 --> 01:02:39,860 archivos de servidor, vuestra ruta 1290 01:02:39,860 --> 01:02:42,019 concatenarlo a name JSON directamente 1291 01:02:42,019 --> 01:02:44,820 o le podemos dar un directorio 1292 01:02:44,820 --> 01:02:46,119 y un nombre 1293 01:02:46,119 --> 01:02:47,980 y te asocia 1294 01:02:47,980 --> 01:02:49,480 un objeto file 1295 01:02:49,480 --> 01:02:52,079 de un fichero de ese directorio 1296 01:02:52,079 --> 01:02:52,780 con ese nombre 1297 01:02:52,780 --> 01:02:56,079 a el objeto. Entonces, ¿qué directorio 1298 01:02:56,079 --> 01:02:57,900 he cogido? El directorio padre 1299 01:02:57,900 --> 01:02:59,199 del fichero que lo he enllogado. 1300 01:03:05,639 --> 01:03:13,030 Vale, entonces ya tengo 1301 01:03:13,030 --> 01:03:14,670 el objeto file creado. 1302 01:03:15,090 --> 01:03:16,949 El objeto creado, el fichero no, 1303 01:03:17,070 --> 01:03:18,610 lógicamente, el objeto file creado. 1304 01:03:19,329 --> 01:03:20,309 Ahora ya lo paso 1305 01:03:20,309 --> 01:03:22,369 a JSON ese objeto. 1306 01:03:23,170 --> 01:03:24,690 Recordad que pasar a JSON 1307 01:03:24,690 --> 01:03:26,929 era con el object mapper 1308 01:03:26,929 --> 01:03:28,829 que era el que lo hacía todo en la librería 1309 01:03:28,829 --> 01:03:32,860 Jackson, vale, la librería 1310 01:03:32,860 --> 01:03:33,280 Jackson 1311 01:03:33,280 --> 01:03:36,719 hacía un montón de cosas, pero todas las 1312 01:03:36,719 --> 01:03:38,659 hacía el object mapper que creaba los JSON 1313 01:03:38,659 --> 01:03:40,420 node, etcétera, pues de nuevo 1314 01:03:40,420 --> 01:03:42,980 el object mapper necesito la dependencia 1315 01:03:42,980 --> 01:03:43,559 de Jackson 1316 01:03:43,559 --> 01:03:48,289 pues otra vez al POM, a copiar y pegar 1317 01:03:48,289 --> 01:03:50,389 la dependencia de Jackson, que afortunadamente 1318 01:03:50,389 --> 01:03:51,670 la tenemos estable 1319 01:03:51,670 --> 01:03:54,269 porque ya nos ha funcionado 1320 01:03:54,269 --> 01:03:54,849 en otro 1321 01:03:54,849 --> 01:03:59,590 la dependencia del Jackson 1322 01:03:59,590 --> 01:04:00,349 que era 1323 01:04:00,349 --> 01:04:15,130 esta, que era 1324 01:04:15,130 --> 01:04:17,530 esta 1325 01:04:17,530 --> 01:04:23,519 esta era la dependencia 1326 01:04:23,519 --> 01:04:32,989 bueno 1327 01:04:32,989 --> 01:04:34,670 parte de mi objetivo 1328 01:04:34,670 --> 01:04:36,030 era que sufrieran 1329 01:04:36,030 --> 01:04:42,650 que os sintierais desconcertados 1330 01:04:42,650 --> 01:04:45,030 que copiarais y no supierais lo que estáis copiando 1331 01:04:45,030 --> 01:04:47,289 que os sintierais 1332 01:04:47,289 --> 01:04:49,050 fuera de vuestra zona de confort 1333 01:04:49,050 --> 01:04:50,690 con la programación y el desarrollo 1334 01:04:50,690 --> 01:04:55,090 Vale 1335 01:04:55,090 --> 01:04:59,250 ¿Cómo que no tienes ni el POM? 1336 01:05:03,909 --> 01:05:06,150 A ver, he entrado al POM a copiar esto 1337 01:05:06,150 --> 01:05:09,389 ¿El Jacksby ya lo tenéis? 1338 01:05:15,170 --> 01:05:16,130 Era bastante 1339 01:05:16,130 --> 01:05:21,829 No, sí, sí, sí, vais a volver enseguida 1340 01:05:21,829 --> 01:05:23,849 en cuanto reconstruyáis 1341 01:05:23,849 --> 01:05:25,409 la aplicación, a ver, que yo ahora mismo 1342 01:05:25,409 --> 01:05:27,590 esta aplicación la voy a subir para que la tengáis completa 1343 01:05:27,590 --> 01:05:29,170 antes de subirla 1344 01:05:29,170 --> 01:05:31,829 vamos a revisar todo lo que hemos hecho 1345 01:05:31,829 --> 01:05:36,349 No, no estáis perdidos 1346 01:05:36,349 --> 01:05:38,449 Vale, dependencia 1347 01:05:38,449 --> 01:05:41,389 La dependencia 1348 01:05:41,389 --> 01:05:43,210 Vale, pues 1349 01:05:43,210 --> 01:05:45,909 es que esa va a ser vuestra vida 1350 01:05:45,909 --> 01:05:47,630 Si desarrolláis, claro 1351 01:05:47,630 --> 01:05:48,550 A lo mejor hacéis otra cosa 1352 01:05:48,550 --> 01:05:52,090 ¿La dependencia de Jackson la habéis puesto? 1353 01:05:57,510 --> 01:05:58,550 A eso sí 1354 01:05:58,550 --> 01:06:08,250 Vale, pues si hemos puesto 1355 01:06:08,250 --> 01:06:09,530 La dependencia de Jackson 1356 01:06:09,530 --> 01:06:11,170 El object mapper este 1357 01:06:11,170 --> 01:06:13,630 Ya me lo deja importar, menos mal 1358 01:06:13,630 --> 01:06:16,329 Y ahora ya 1359 01:06:16,329 --> 01:06:17,590 Pasar al JSON 1360 01:06:17,590 --> 01:06:19,829 Si yo no quiero cambiar nombres de campos 1361 01:06:19,829 --> 01:06:20,349 Ni de nada 1362 01:06:20,349 --> 01:06:21,969 Era el object mapper 1363 01:06:21,969 --> 01:06:23,230 Que 1364 01:06:23,230 --> 01:06:31,010 Para 1365 01:06:31,010 --> 01:06:32,389 Un momento para no 1366 01:06:32,389 --> 01:06:41,320 Vale 1367 01:06:41,320 --> 01:06:46,780 Y esto el mapper 1368 01:06:46,780 --> 01:06:47,539 Tenía 1369 01:06:47,539 --> 01:06:48,940 Vamos a sacar 1370 01:06:48,940 --> 01:06:50,760 era esto, el writer with 1371 01:06:50,760 --> 01:06:53,139 default pretty printer este 1372 01:06:53,139 --> 01:06:55,059 sacábamos el writer que te imprimía 1373 01:06:55,059 --> 01:06:55,579 bonito 1374 01:06:55,579 --> 01:06:58,980 y aquí ahora este tenía 1375 01:06:58,980 --> 01:07:00,800 un write 1376 01:07:00,800 --> 01:07:04,539 un writer, ¿sabéis lo que? 1377 01:07:05,800 --> 01:07:07,480 y aquí ya escribíamos 1378 01:07:07,480 --> 01:07:09,519 nuestro 1379 01:07:09,519 --> 01:07:12,599 objeto que era 1380 01:07:12,599 --> 01:07:13,539 al recetario 1381 01:07:13,539 --> 01:07:16,329 ¿a dónde? 1382 01:07:16,329 --> 01:07:17,030 al 1383 01:07:17,030 --> 01:07:22,820 al fichero F 1384 01:07:22,820 --> 01:07:24,880 que era file json 1385 01:07:24,880 --> 01:07:27,039 ¿lo he puesto al revés? 1386 01:07:28,079 --> 01:07:28,920 lo sabía 1387 01:07:28,920 --> 01:07:30,559 según lo escribía me parecía 1388 01:07:30,559 --> 01:07:32,599 algo me 1389 01:07:32,599 --> 01:07:33,659 angustia por aquí 1390 01:07:33,659 --> 01:07:34,940 vale 1391 01:07:34,940 --> 01:07:39,969 ¡hala! ¿ya está? 1392 01:07:40,989 --> 01:07:42,809 ya está, solo nos falta 1393 01:07:42,809 --> 01:07:45,329 generar un formulario de descarga del json 1394 01:07:45,329 --> 01:07:46,349 y ya hemos terminado 1395 01:07:46,349 --> 01:07:48,369 y podemos empezar desde el principio 1396 01:07:48,369 --> 01:07:49,909 dime 1397 01:07:49,909 --> 01:08:02,349 esto de aquí 1398 01:08:02,349 --> 01:08:06,179 a eso te refieres 1399 01:08:06,179 --> 01:08:07,300 que qué es esto 1400 01:08:07,300 --> 01:08:12,800 claro, crea el objeto file 1401 01:08:12,800 --> 01:08:14,659 con un nombre que es el mismo 1402 01:08:14,659 --> 01:08:15,860 que tiene este 1403 01:08:15,860 --> 01:08:18,739 pero cambiando la extensión .xml 1404 01:08:18,739 --> 01:08:19,279 por .js 1405 01:08:19,279 --> 01:08:20,659 ¿vale? 1406 01:08:21,420 --> 01:08:24,840 Y ahora ya el mapper es lo que vimos el otro día, 1407 01:08:25,000 --> 01:08:27,640 que te escribe el objeto como JSON. 1408 01:08:28,640 --> 01:08:31,659 El objeto es de Recep, que yo he leído del XML, 1409 01:08:32,479 --> 01:08:33,579 me lo escribe como JSON. 1410 01:08:34,000 --> 01:08:34,319 Ya está. 1411 01:08:35,039 --> 01:08:35,260 ¿Vale? 1412 01:08:35,659 --> 01:08:36,720 Vale, pues vamos a probarlo. 1413 01:08:36,720 --> 01:08:39,119 No me va a ofrecer el formulario de descarga todavía, 1414 01:08:39,439 --> 01:08:42,779 pero vamos a ver si en la carpeta archivos del servidor 1415 01:08:42,779 --> 01:08:44,840 me ha hecho el JSON, que es lo que importa. 1416 01:08:45,420 --> 01:08:47,399 Luego ya que me ofrezca el formulario de descarga, 1417 01:08:48,260 --> 01:08:48,880 ya es lo de menos. 1418 01:08:51,420 --> 01:08:55,819 vale, entonces 1419 01:08:55,819 --> 01:08:57,880 aquí vamos a 1420 01:08:57,880 --> 01:08:58,500 import 1421 01:08:58,500 --> 01:09:01,939 vale, pues mi json, mi serlet 1422 01:09:01,939 --> 01:09:03,760 al que acabo de volver, mi serlet 1423 01:09:03,760 --> 01:09:06,260 ahora ya va a convertir 1424 01:09:06,260 --> 01:09:07,260 a json 1425 01:09:07,260 --> 01:09:09,180 este fichero f 1426 01:09:09,180 --> 01:09:12,300 que es el fichero 1427 01:09:12,300 --> 01:09:14,460 que yo he leído 1428 01:09:14,460 --> 01:09:15,939 del 1429 01:09:15,939 --> 01:09:17,539 request 1430 01:09:17,539 --> 01:09:22,460 uy, no mandé 1431 01:09:22,460 --> 01:09:25,840 Perdón, sí, no lo he devuelto 1432 01:09:25,840 --> 01:09:29,119 Lo va a haber creado, pero no lo va a haber devuelto 1433 01:09:29,119 --> 01:09:31,640 Vale, return file.json 1434 01:09:31,640 --> 01:09:43,930 Venga, vamos a ejecutar ahora nuestra aplicación otra vez 1435 01:09:43,930 --> 01:09:47,670 Voy a vaciarle archivos de servidor 1436 01:09:47,670 --> 01:09:50,510 Está todo limpio, vacío 1437 01:09:50,510 --> 01:09:54,789 Ejecutamos la aplicación 1438 01:09:54,789 --> 01:09:56,409 XML to JSON 1439 01:09:56,409 --> 01:10:05,149 Venga 1440 01:10:05,149 --> 01:10:09,590 ¿Qué fichero quieres subir? 1441 01:10:10,149 --> 01:10:12,350 Tiene que ser uno con esa arquitectura 1442 01:10:12,350 --> 01:10:14,109 Jaxb, porque si no, lógicamente 1443 01:10:14,109 --> 01:10:16,109 El Jaxb context va a fallar 1444 01:10:16,109 --> 01:10:18,149 Ese, vale 1445 01:10:18,149 --> 01:10:21,600 Súbelo, me llamaste 1446 01:10:21,600 --> 01:10:23,119 Pero no sé hacer nada, mientes 1447 01:10:23,119 --> 01:10:25,779 Seguro que en archivos de servidor me has creado 1448 01:10:25,779 --> 01:10:27,819 El JSON, míralo, aquí está 1449 01:10:27,819 --> 01:10:29,880 Este Serlen maravilloso 1450 01:10:29,880 --> 01:10:31,539 Nos ha convertido 1451 01:10:31,539 --> 01:10:32,800 Este recetario XML 1452 01:10:32,800 --> 01:10:35,039 Tan feo de JSON 1453 01:10:35,039 --> 01:10:37,239 de XML 1454 01:10:37,239 --> 01:10:38,819 nos lo ha convertido 1455 01:10:38,819 --> 01:10:40,159 en JSON. 1456 01:10:45,010 --> 01:10:46,350 Hombre, lo puedes hacer con DOM, 1457 01:10:46,590 --> 01:10:48,390 pero es un rollo, mucho más fácil con JaxB. 1458 01:10:53,590 --> 01:10:54,250 Sí, bueno, 1459 01:10:54,329 --> 01:10:54,949 clic derecho no, 1460 01:10:55,069 --> 01:10:56,369 generate JaxB classes. 1461 01:10:57,010 --> 01:10:58,569 Pero cuidado porque esas 1462 01:10:58,569 --> 01:11:00,569 luego te las genera como internas, 1463 01:11:00,590 --> 01:11:01,850 además. Dime. 1464 01:11:02,270 --> 01:11:03,750 ¿El secretario XCPL 1465 01:11:03,750 --> 01:11:05,329 dónde lo ha inscribido? 1466 01:11:05,329 --> 01:11:08,850 donde yo le he dicho 1467 01:11:08,850 --> 01:11:10,689 que me lo suba el Sherlet 1468 01:11:10,689 --> 01:11:17,710 bueno, es con el que estuvimos haciendo este ejemplo 1469 01:11:17,710 --> 01:11:19,430 lo tenéis que tener en el archivo 1470 01:11:19,430 --> 01:11:24,130 pues bueno, en su momento es que lo hicimos 1471 01:11:24,130 --> 01:11:25,430 pero vamos 1472 01:11:25,430 --> 01:11:34,949 repetición rápida 1473 01:11:34,949 --> 01:11:37,609 que sí, que le he dado 1474 01:11:37,609 --> 01:11:39,229 hombre, no le he dado, no le he dado 1475 01:11:39,229 --> 01:11:40,489 así que te voy a dar 1476 01:11:40,489 --> 01:11:42,909 venga 1477 01:11:42,909 --> 01:11:45,609 vale, mi aplicación es esta 1478 01:11:45,609 --> 01:11:48,130 repito 1479 01:11:48,130 --> 01:11:50,109 mi aplicación es esta 1480 01:11:50,109 --> 01:11:52,850 cuando el Tomcat 1481 01:11:52,850 --> 01:11:54,289 detecta esta URL 1482 01:11:54,289 --> 01:11:57,069 se va a buscar el index 1483 01:11:57,069 --> 01:11:58,250 lo que sea, lo que el web 1484 01:11:58,250 --> 01:11:59,850 XML le ha dicho 1485 01:11:59,850 --> 01:12:02,489 bueno, pues mi index, que es el que se va a buscar 1486 01:12:02,489 --> 01:12:04,829 era este, este index 1487 01:12:04,829 --> 01:12:20,810 Es un formulario que sube un fichero de nombre file, el que a mí me ha dado la gana ponerlo ahí, y lo sube en una petición tipo post y además una petición multiparte, porque tiene un fichero y luego es multiparte, una petición tipo post. 1488 01:12:20,810 --> 01:12:34,569 Y además, cuando ese request llegue con este fichero file metido dentro a través del método post, va a invocar a la ruta a Bloat, va a invocar a esa ruta, ¿vale? 1489 01:12:34,789 --> 01:12:36,590 Entonces, todo esto llega al servidor. 1490 01:12:37,609 --> 01:12:45,470 Ese multiparte con el file dentro diciéndole, oye, que el que va a procesar este multiparte, el que lo va a procesar, es esta URL. 1491 01:12:46,069 --> 01:12:48,510 El Tomcat dice, ¿y esa URL a dónde va? 1492 01:12:48,510 --> 01:12:51,069 bueno, pues en el web xml 1493 01:12:51,069 --> 01:12:52,930 tenemos la información 1494 01:12:52,930 --> 01:12:54,930 de a dónde va esa url 1495 01:12:54,930 --> 01:12:56,409 entonces el Tomcat 1496 01:12:56,409 --> 01:12:58,909 a falta de otra forma de decírselo 1497 01:12:58,909 --> 01:13:00,090 busca aquí 1498 01:13:00,090 --> 01:13:02,010 busca aquí y dice 1499 01:13:02,010 --> 01:13:03,810 ah, espérate que la ruta 1500 01:13:03,810 --> 01:13:06,229 a Bloat tiene un destino 1501 01:13:06,229 --> 01:13:07,409 que es el destino 1502 01:13:07,409 --> 01:13:10,050 este, vale, genial 1503 01:13:10,050 --> 01:13:11,369 pues me voy a este destino 1504 01:13:11,369 --> 01:13:12,710 para procesar 1505 01:13:12,710 --> 01:13:14,869 esa petición 1506 01:13:14,869 --> 01:13:18,149 para procesar esa request que lleva el fichero 1507 01:13:18,149 --> 01:13:21,010 se va a este destino 1508 01:13:21,010 --> 01:13:23,470 que está aquí 1509 01:13:23,470 --> 01:13:27,949 en el request 1510 01:13:27,949 --> 01:13:29,409 va el fichero 1511 01:13:29,409 --> 01:13:32,210 y él construirá ya el response 1512 01:13:32,210 --> 01:13:33,909 bueno, pues vamos a sacar 1513 01:13:33,909 --> 01:13:35,229 el fichero del request 1514 01:13:35,229 --> 01:13:39,409 el fichero es una parte enterita 1515 01:13:39,409 --> 01:13:41,590 que tiene información como nombre 1516 01:13:41,590 --> 01:13:42,409 etcétera, etcétera 1517 01:13:42,409 --> 01:13:43,989 y los datos binarios 1518 01:13:43,989 --> 01:13:47,149 pues primero nos generamos 1519 01:13:47,149 --> 01:13:49,770 un flujo de datos binarios 1520 01:13:49,770 --> 01:13:51,289 asociadas a la parte 1521 01:13:51,289 --> 01:13:52,770 lo que es los datos binarios del archivo. 1522 01:13:53,810 --> 01:13:55,869 Y luego sacamos el nombre del archivo, 1523 01:13:56,310 --> 01:13:58,449 que también lo sacamos de la parte enterita. 1524 01:13:58,970 --> 01:13:59,789 Nos sacamos el nombre. 1525 01:14:00,289 --> 01:14:02,170 El nombre lo sacamos con este método 1526 01:14:02,170 --> 01:14:04,369 que se metía en la cabecera. 1527 01:14:05,109 --> 01:14:08,329 De la cabecera encuentra la información file name 1528 01:14:08,329 --> 01:14:10,630 igual a lo que sea 1529 01:14:10,630 --> 01:14:12,430 y se saca el nombre de ahí. 1530 01:14:13,449 --> 01:14:15,170 Pues con este método auxiliar 1531 01:14:15,170 --> 01:14:17,029 sacamos el nombre del fichero. 1532 01:14:17,510 --> 01:14:20,149 Luego tenemos request con un input string. 1533 01:14:21,289 --> 01:14:22,449 Ahora, ¿qué hacemos? 1534 01:14:23,149 --> 01:14:29,090 Creamos un fichero con el nombre del fichero subido. 1535 01:14:29,649 --> 01:14:30,810 Creamos un fichero local. 1536 01:14:32,170 --> 01:14:35,189 Si ese nombre tuviera separadores, los quitamos. 1537 01:14:35,649 --> 01:14:37,350 No queremos la ruta, queremos solo el nombre. 1538 01:14:38,149 --> 01:14:41,229 Luego tenemos ahora ya, request con el input string, 1539 01:14:41,470 --> 01:14:43,729 con los datos binarios y un fichero local, 1540 01:14:44,689 --> 01:14:46,609 con un output string asociado. 1541 01:14:47,329 --> 01:14:49,090 Pues del input string del request, 1542 01:14:49,090 --> 01:14:51,630 escribimos en el output string del fichero local 1543 01:14:51,630 --> 01:14:53,149 vamos sacando byte 1544 01:14:53,149 --> 01:14:55,029 del request y los vamos 1545 01:14:55,029 --> 01:14:56,869 escribiendo en el fichero local 1546 01:14:56,869 --> 01:14:59,670 ya está, cuando ya hemos terminado 1547 01:14:59,670 --> 01:15:01,470 ya tenemos en mi 1548 01:15:01,470 --> 01:15:02,229 objeto file 1549 01:15:02,229 --> 01:15:05,470 tengo el fichero que venía en el request guardado 1550 01:15:05,470 --> 01:15:07,689 local, convertimos 1551 01:15:07,689 --> 01:15:09,529 ese objeto file 1552 01:15:09,529 --> 01:15:11,369 que está ahí ya local, guardado 1553 01:15:11,369 --> 01:15:13,550 en local, con los datos 1554 01:15:13,550 --> 01:15:15,390 del request, lo convertimos a 1555 01:15:15,390 --> 01:15:17,350 JSON, con este 1556 01:15:17,350 --> 01:15:19,529 método, que este método ya 1557 01:15:19,529 --> 01:15:21,529 pues no tiene nada de aplicaciones web 1558 01:15:21,529 --> 01:15:23,529 es lo que hemos visto, leemos 1559 01:15:23,529 --> 01:15:25,470 el objeto JaxB y lo 1560 01:15:25,470 --> 01:15:26,430 mandamos a JSON 1561 01:15:26,430 --> 01:15:31,069 y ya se ha acabado, ya lo tenemos 1562 01:15:31,069 --> 01:15:33,050 en un fichero JSON 1563 01:15:33,050 --> 01:15:33,670 guardado 1564 01:15:33,670 --> 01:15:36,449 y aquí lo que nos falta es 1565 01:15:36,449 --> 01:15:38,850 que la respuesta sea un formulario que me 1566 01:15:38,850 --> 01:15:40,630 permita descargar este archivo 1567 01:15:40,630 --> 01:15:43,050 porque ahora mismo se ha quedado local 1568 01:15:43,050 --> 01:15:44,850 en el servidor Tomcat, se ha quedado 1569 01:15:44,850 --> 01:15:46,250 local y ha convertido, ¿vale? 1570 01:15:47,590 --> 01:15:48,470 ¡Hala! Ya está 1571 01:15:48,470 --> 01:15:50,750 Ahora, dudas.