0% encontró este documento útil (0 votos)
351 vistas195 páginas

Desarrollo Web Con Java Desde Cero

un regalo

Cargado por

Ezzio Samillan
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
351 vistas195 páginas

Desarrollo Web Con Java Desde Cero

un regalo

Cargado por

Ezzio Samillan
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF o lee en línea desde Scribd
binonep es) ~+-Il~¥ MADISON) ~— | i » Om ] ppCeruy a GRATIS Desarrollo web con Java desde cero Programacion web+ Uso de Servlets + JavaServer Pages + Utilizacion de Struts y ActionForms Programacion de vistas+ Validacion de una web DESARROLLO WEB CON JAVA DESDE CERO RedUSERS TITULO: Desarrollo web con Java desde cero COLECCION: Desde Cero FORMATO: 19x 1S5em PAGINAS: 192 Copyright © MMEXIV. Es wun publicacn de Fox Andina en coediciia coa DALAGA S.A. Hecho el epésito que ‘mara a ley 11723. Todos fos derechos reservados. Esta publicacia no puede ser serodocda ni en todo -nien parte, por ningin medio aca o futuro sin el pesmiso previo y por eserito de Fox Andina S.A. Sa ufiae- cin esté pennda por las leyes 11723 y 25446. La editorial no sume responsabilidad alguna por cualquier consectoneia derivadn do a fabricaeién,fcionamiento y/o utitzncié do los serviviosy productos quo se dosonben yo nalizen. Todas Ins marcas mencionadas en este iro son propiedad exclusiva de sus respec- tivos duis. Impreso en Argentina, Libro de edicién argentina. Primera imprestonrealizada en Sevagraf, Costa Rica 5226, Grand Bourg, Malvinas Argentines, Pia. de Buenos Aires en IX, MMXIV. ISBN 978-987-1949-74-8 ‘Martinez Quijano, Andrés Desarrollo web con Tava deste cero / Andrés Martinez Quijano ; coordinado por Gustavo Carballsio. [Link].- Cindad Autonoma de Buenos Aires : Fox Andina; Buenos Aires: Dalaga, 2014. 192 p.: 19x15 em, « Desde cero: 39) ISBN 978-987-1949-74-8 1 Informética. 2. Disefio de Aplicaciones. I. Carballeiro, Gustavo, coord. Il Titulo DD 005.3 >> [Link] users com DESARROLLO WEB CON JAVA DESDE CERO [sexs] RR Prologo al contenido A fines de 1994, la web dio un gran salto de la mano de Netscape 0.8: con este browser se podia acceder a fascinantes sitios con fondo gris y algunas imagenes. Recien a mediados del ailo siguiente aparecia la aplicacion web interactiva TeleGarden, que estaba armada con una ci- mara de video y un brazo robot que podia ser controlado desde la Web para hacer tareas baisicas de jardineria. Nada nds impresionante que eso. Intemet ya no genera tanta sorpresa, si se tienen en cuen- ta las experiencias con CGI, las soluciones mids elegantes de ASP. PHP 0 JSP. Hoy en dia, parece natural asumir —erroneamente~ que cualquier persona que posea cierto conocimiento de algin Jengnaje puede constmir algo que funcione en la Web. (El resultado? Aplicaciones que agonizan cuando ingresan mas de dos usuarios, reportes que tardan en aparecer y mega-objetos serializados que se transmiten en cada request. La connnidad de desarrolladores contintia en expansion. Las nuevas caras que hoy empiezan a deseubrir Java necesitan de un buen punto de partida para entender el paradigma web. Este libro se propone ejercer un rol de maestre al evitar es- pecificaciones rigidas, estableciendo una linea muy clara con ejemplos sencillos y concretos. Explota el potencial de Java sin dejar de lado las buenas pricticas, incluso para quienes ya vienen programando, Que lo disfiuten mucho. wunired users com <«€ 4 oa E] libro de un vistazo PRELIMINARES Alo largo del presente libro veremos todas las herramientas necesarias para convertinnos en verdaderos expertos en el desarrollo de aplicaciones web con Java. En cada capitulo, veremos un ejemplo integrador. real y conereto. desarro- lado con las herramientas open source we’ En este capitulo, que tiene un cardcter introductorio, veremos qué ¢s la programacién web y algunas de sus > wuwred users .com Eclipse y Tomeat. a a4 Si utilizamos solo servlets ISP tendremos complicaciones cn los desarrollos complejos. Por eso, en este capitulo haremos ‘una introduccién a Struts, una potente herramienta de desarrollo web * ved En este capitulo conoceremos los ActionForms: qué son. c6mo programarlos y cual es su importancia en el desarsollo de aplicaciones ‘Luego del enfoque tradicional, contemplaremos otras alternati * “vee En este capitulo veremos los Action en Struts: para qué sirven, DESARROLLO WEB CON JAVA DESDE CERO 5 ‘s6mo programarlos, sus diversas el envio duplicado. Ademas, como altemativas y c6mo inferactian con la enviar mensajes y errores desde la ‘vista usando tags propios de Struts ‘accion para validaciones complejas. * “ve Es momento de programar la vista. Es por eso que, en este capitulo. ‘Conoceremos cdmo erear una pagina ‘eremos como generar piginas JSP de ingreso de usuarios y eusles son las ‘con tags de Struts y sus utilidades. combinaciones de datos a ingresar, * ovuy vue * ovwy YL ‘Veremos uun componente que valida En esta secci6n online, complementaria ‘utomaticamente nuestros formularios. al capitulo 6, aprenderemos a ‘Conoceremos sus validaciones basieas prevenir un problema recurrente: Yy erearemos nuevas. Z) INFORMACION COMPLEMENTARIA A lo largo de este manual, podré encontrar una scric de recuadros que Ie brindaran informacién complementaria: curiosidades, trucos, ideas y consejos sobre los temas tratndos. Para que pueda distinguislos en forma mas sencilla, cada recuadto esta identificado con diferentes iconos: CURIOSIDADES ATENCION DATOS UTILES sitios E IDEAS ‘YY NOVEDADES, WEB users com «€ www, 6 PRELIMINARES, Contenido del libro Prologo al contenido. HttpServletResponse.. EI libro de un vistazo. aed Informacion complementaria... Tatroduccion ee La programacion web JavaServer Pages Intemet, Sitios web con paginas dinamicas, Programacién web vs. tradicional. Resumen, Actividades Un ejemplo integrador. 6s a Vs Variables implieitas 6 Servlets Directivas de pagina. os Qué son los servlets’ Un cjemplo: Hola mundo... HittpServletRequest... Apache Tomcat 6.12 >> wwuired users com ISP y JavaBeans. Inclusin de paginas. DESARROLLO WEB CON JAVA DESDE CERO Struts Introduccion a Struts. Elmodele.. Lavista El controlador Struts Hola Struts 91 Desarrollando aplicaciones ean Stouts... 103 ‘Model 2X Resumen 105 106 Actividades abesitter > ActionForms Interaetuando con el usuario. 108 ‘ActionFoms. Configurar un ActionForm Alternativas, 126 DynaActionForm: D6 LazyValidatosForm. 128 Resamea 133 Actividades 134 Capit. 2 = © Nombre: Apellido Edad: (28 Lenguaje preferido: Me gusta el: ODiseto © Programacion OModelado OGerencia de proyectos Enviar a Actions en Struts Programas el controlador. 136 Configurar un Action. 137 ActionForward 40 Actions para tod 11 Resumen .. 151 Actividades ... sw 182 PRELIMINARES Vista “Hasta la vista, baby. 154 154 15s 167 171 191 192 Envios duplicados Envios duplicade Cancelaciéa de Ia acciéa, Enrores y mensaje Actividades >> [Link] users com jemplo integrador del capitulo 7 Un ejemplo integrador . Resumen, Actividades Struts Validator ‘Validar los formularios Definir un validador. 5 ‘Validaciones esténdar. 7 ‘Validacion en el cliente Un validador propio, Validaciones multi-pégina . Mostrar errores con estilo 3 El ejemplo completo, 3s Resumen 4 Actividades (0) hetpfflocahost:en80)Strutsiente,.do Nomb: Eat Envier | [ Cancelar rere ean enone ed ENNUESTROSITIO PODRA ACCEDER A UNA PREVIEWDIGITAL DE CADA LIBRO ¥ T: OBTENER. DEMANERA GRATUITA. UNCAPITULO ENVERSIONPDF. EL SUMARIO COMPLE] E IMAGENES AMPLIADASDE TAPA Y CONTRATAPA. RedUSERS @[Link] NESTS SCE tS yest FO Mote etree Ce ehMac Pern M ccna nt cae onccent herr ecnnn Prveinctiratroncre) SOLO VALIDO EN LA REPUBLICA ARGENTINA If ** VALIDO EN ® [Link] ters .com 10 ESS PRELIMINARES Introduccion El primer contacto con la programacién web puede ser a ve~ ces dificil de implementar, si no es el Ambito habitual de nues- tos desarrollos. Con el tiempo, practicando e investigando, haciendo algunos proyectos de sitios web dinémicos y. sobre todo, equivocdndonos en el proceso -1o que conduce al aprendi- zaje-. podemos comenzar a entender de qué trata el desarrollo web. Con el recuerdo de cnales son las complicaciones que nos podemos encontrar y las dudas que se nos pueden presentar en los primeros pasos del desarrollo, este libro esta planteado en un orden cuasi-cronolégico que sigue, de alguna forma, la evo- lucion que suftie el desarrollo web con Java. Empezaremos con simples servlets ~esa promesa salvadora que inteuto pero no pudo ser ISP y con [a inclusion del paradigma MVC en la Web. Pensado para el programador que no tiene experiencia en de- sarrollo de aplicaciones web, este libro lo introducira en un mundo donde es necesario un cambio en Ia forma de pensar las aplicaciones. Un mundo en donde la interaccién con el usta- rio se asemeja bastante a dar indicaciones a un albaail acerca de como queremos una pared, mediante cartas que él se digna- ré a responder cuando quiera (si es que quiere). El libro inten= ta recapitular las dificultades que existen en cada paso, a fin de evitar que el lector tenga que tropezar varias veces con la mis- ma piedra Al final de cada capitulo se presentaran interrogantes y pro- blemas a resolver relacionados con Ia temética vista. Habra pre~ ‘guntas que no son de facil respuesta: debemos advertir que es muy probable uo encontrarla al releer el capitulo. Tendremos «que pensar, buscar informacion, hacer programas y probar para haallar la respuesta. Esa es la idea del libro, La programacion web La programacién de aplicaciones web impone una mieva forma de pensar y programar aplicaciones. En este capitulo veremos qué es la programacién web y algunas de sus caracteristicas clave. vintroduecién al mundo web... Resumen... Intemet Sitios web Actividades... con paginas dindmicas.... Programacién web vs. tradicional... aaa 2 ce 1. LA PROGRAMACION WEB Introduccion al mundo web En Jos tiltimos aitos, internet _dej6 de ser un mero divertimento para pasar a ser tn medio fundamental de desarrollo de negocios. Hoy en dia, mediante intemet podemos hacer mucho amas que visitar paginas web y chatear; estamos acostumbrados a realizar muchas de muestras tareas cotidianas: pagar las cuentas, alquilar una pelicula en el videoclub, revisar nuestros e-tnails, reservar uu hotel y pasajes para nuestras proximas va- caciones, y muchas cosas mas. Todo esto, independientemente del lugar donde estemos y del horario. En este contexto, estar en intemet es condi- cién indispensable para cualquier empresa. En un principio, pareceria suficiente con tener una mera pégina con in- formacion de contacto en Ja que se muestren productos y servicios, pero ceuseguida se vuelve imprescindible proveer nuevos servicios a los poten- ciales clientes a través de la red de redes, para no perder competitividad en el mercado. Un banco ya no puede dejar de oftecer home banking una linea aérea que no tenga pagina en internet donde se puedan consultar los vuelos actualizados y reservar 0 comprar pasajes pierde gran parte de su mercado. ‘Y asi con cualquier érea de negocio en que pensemos. Programar este tipo de servicios puede parecer muy complicado y. si bien hay algunas aplicaciones ctiticas, como, por ejemplo, las bancarias -en donde la transferencia de efec~ tivo no puede dar lugar a errores de sistemas y se requiere mucha inversion al once otnent Para obtener material adicional gratuito, ingrese ala seccién __—_-Publicaciones/Libros dentro de _bttpy/[Link] Alli podra ver todos mestros titulos y acceder a contenido extra de cada uno, como los ejemplos utilizados por el autor, apéndives y archivos editables o de cédigo fuente. Todo esto ayudard a comprender mejor los conceptos desarrollados en la obra. >> wonwred users .com DESARROLLO WEB CON JAVA DESDE CERO aS 13 en materia de seguridad, veremos que normalmente desarrollar una aplica- cién web segura no es més complicado que progtamar cualquier aplicacion stand-alone. De hecho, dados los reducidos requerimientos y limitaciones de este tipo de desarrollos y la gran cantidad de software open souree que hay disponible para ser usado gratuitamente, en muchos casos suele ser mis sim ple hacer una aplicacion web que una de escritorio. Internet Para poder metemos de Ileno en la programacién web, es fundamental entender cémo funciona, a grandes rasgos, internet. Cuando abrimos un navegadlor y lo apuntamos hacia una pagina web, porejemplo, [Link] —_,en el fondo se est generando una comu- nicacién entre dos programas: un cliente yun servidor Pedide ) Tespuesta Figura |, Al navegar por intemet, basicamente estamos realizando una comunicacién entre dos programas. El cliente es nuestro navegador (Internet Explorer, Firefox, eteétera), que se comunica con el servidor. En este caso, el servidor es un progra- sma que esta coustantemente escuchando peticiones de clientes y que devuelve, para cada pedido, una respuesta —_acorde. La respuesta es tomada por nuestro navegador y se muestra en pan- talla, y de esta forma navegamos, de pedido en pedido, respuesta tras respuesta, continuamente. u ass 1. LA PROGRAMACION WEB Sobre HTML En este libro asumiremos que las paginas que devuelve el servidor son siempre paginas HTML. Si bien esto ocurre en la mayoria de los casos en os sitios de internet, también hay muchos sitios que trabajan con otras tecnologias, entre las cuales la més comin es Flash. HTML significa Hypertext Markup Language . Silo traducimos al cas- tellano: Lenguaje de Marcado de Hipertexto Nos alcanza con saber que HTML es un lenguaje que le especitica ciertos atribmtos a su conte- nido, y los navegadores web saben nmy bien cémo mostrar este conte- nido formateado segiin esos atributos. Por ejemplo, tm documento HTML (0 pagina HTML) puede especificar que en cierto lugar del documento haya que insertar una imagen, © que cierto texto dentro de su contenido vaya en negrita o con determinada tipografia. © sea, no difiere mncho de lo que podemos hacer con un documento Word; de hecho, cualquier procesador de texto permite exportar documentos como archivos de tipo HTML. La diferencia entre ambos documentos radica en el contexto en que van a utilizarse, y en que HTML es un documento escrito enteramente en texto plano. Esto significa que podemos erear documentos HTML en cualquier editor de texto sencillo. Ahora que sabemos qué es HTML, vamos a desglosar su significado: wee Existe bastante controversia sobre las cookies. Hay gente que las defiende y gente ‘que dice que son una invasién a Ia privacidad, dado que el servidor esta enardando informacién en nuestra PC y la puede usar para recabar informacién sin nuestro consentimiento. Por eso, la mayoria de los navegadores permite definir si queremos aceptar cookies 0 no y configurar varias opeiones mas sobre ellas. > wow DESARROLLO WEB CON JAVA DESDE CERO [Users] 1s © Hypertext: se dice que un documento HTML contiene hipertexto en l sentido de que este documento puede referenciar a otro documento HTML. Cada vez que un documento HTML referencia a otro, se dice que esti conectado a ese otro documento mediante un enlace (0 link ). © Markup — : un documento HTML define sus secciones mediante mareas _(etiquetas o tags) en su contenido. © Language: HTML es un lenguaje! Los navegadores saben hablar este Ienguaje: cuando un servidor les provee una HTML, saben como mostrarla en pantalla. Paginas estaticas En muchos casos, el servidor es un programa que simplemente toma un pedido y devuelve una pagina (compuesta por uno 0 mas archivos HTML, imagenes, eteétera) que esta guarcada en algiin hgar del disco. En estos casos, decimos que son paginas cstaticas A no ser que el administrador del sitio actualice su contenido. al ingresar en la pagina web siempre obtendremos el mismno resultado, no importa cuando ingresemos ni desde donde. Para la gran mayoria de sistemas de nego- cios, este tipo de servicio no es muy itil, ya que se suele necesitar que se devuelva una pagina con contenido dinamico —. que cambie segtin quién pidié la pagina, seatin la fecha, etcétera Pedido imagen gif Figura 2. El servidor de paginas estéticas siempre devuelve el mismo recurso para el mismo pedido. wwwiredusers com €€ 16 os 1. LAPROGRAMACION WEB Sitios web con paginas dindmicas Pensemos, por ejemplo. en el sistema de un banco. Si ingreso en el sitio del banco y quiero consultar mi saldo, deberia devolverme mi sal- do actual al momento exacto de peditlo. Si el sitio web solo provee con- tenido estatico, entonces deberian tener una pagina guardada en el dis- co para cada saldo posible, Esto, obviamente, es impracticable. Y tam- poco es viable que haya una persona que esté actualizando las piginas de saldos de todos los usuarios a medida que van realizando operacio- nes sobre sus cuentas. En esos casos, el servidor efectita operaciones (ir a busear datos a una base de datos, consultar con otro servidor 0 acceder a otro tipo de servicios de negocios) y devnelve una pagina dindmica — ; esto es, una péigina que no esta guardada en ningun lugar dentro del servidor. sino que fire ereada en el momento para quien la pidié. El servidor accede a los datos variables (en este caso, el saldo del usuario), luego construye, en su memoria, la pagina con este dato y se la devuelve al cliente, qne la mnestra en pantalla. Pedido Figura 3. El servidor web dinamico construye una respuesta distinta para cada pedido. La programacién web, entonces, consiste en escribir programas que, dada una peticién web realizada por un cliente (un navegador), procesen el pedido y generen y devuelvan un resultado. Como en todo proceso de desarrollo de software, hay mucho de reu- tilizacin. Podremos ver que, por ejemplo, la parte de recibir el pedido y >> wow red users .com DESARROLLO WEB CON JAVA DESDE CERO wea 7 enviar la respuesta por lo general no cambia, solamente cambia la logica de negocios de cada pedido y el contenido de la respuesta generada. En este libro utilizaremos heramientas ya desarrolladas y de eédigo abierto “open souree— que nos ayudaran en la ereacion de aplicaciones web. Programacion web vs. tradicional La programacién web es considerada un nuevo paradigma, dado que impone ciertas restrieciones que pueden resultar confisas en un princi« pio, Estas restricciones se basan en que intemet ~al menos hasta ahore— ttabaja sobre el protocolo HTTP (HyperText Transfer Protocol) Cada vez que escribimos en un navegador http: //direccion web. com. , estamos indicandole explicitamente que se conecte usando dicho protocolo. Si no lo eseribimos, por lo general el navegador se encarga de rellenarlo automeéticamente, aunque los navegadores a menndo también implementan otros tipos de comunicaciones entre ellos y un servidor. Por ejemplo, Internet Explorer y Firefox soportan comunicaciones de tipo FTP (File Transfer Protocol), que es un protocolo para la transferen~ cia de archivos, Para acceder a un determinado recurso mediante ese otro protocolo, basta con escribir la direccién en el navegador (por ejem- plo, fip/fipubaar _Ly este sabra, autométicamente, que debe estable- ‘cer una conexién con el servidor mediante el protocolo FTP. 6) eat El primer sistema de paginas dinimicas fie desarrollado en 1993 y se llamé CGI(Common wwe Gateway Interface), Estaba muy ligado al servidor de paginas web y se encontraba escrito en lenguaje C Si bien se trataba de un sistema muy complejo, este tipo de programacién fee incluso todavia es —usado por muchos programadores por su rapidez y seguridad. 18 ce 1. LA PROGRAMACION WEB HTTP Elprotocolo HTTP , como su nombre lo indica, fite diseitado para transferir documentos de hipertexto (documentos HTML). En sus origenes, cuando intemet era. ARPANET _y era muchisimo mas pequefla de lo que es ahora, y cuando la velocidad de conexién era enomemente inferior, texto plano era lo tinico que se transferia por ella. A nadie se le ocurria siquiera publicar un documento con imagenes o sonidos. A medida que avanz6 el tiempo y la red se volvié mas veloz, estas necesidades se hicieron evidentes y el protocolo fie mejorado para poder transferir cualquier tipo de datos, incluyendo voz, imagenes, video, etcétera. HTTP tiene varias caracteristicas, pero la que mas nos va a interesar es que es un protocolo que no guarda el estado ( stateless), Esto significa que no se inantiene coustantemente una conexion entre el cliente y el ser- vidor. sino que el cliente manda el pedido y corta la conexién, sin guardar informacién sobre pedidos anteriores. De esta forma, el servidor trata cada pedido en forma independiente del anterior, simplemente porque no puede saber si el pedido proviene del mismo cliente, aunque hayan ocusrido muy cerca en el tiempo. Esto puede sonar muy confiso. Una analogia que aclara bastante las cosas es la siguiente: el servidor es na persona sentada detras de una puerta, Esta persona recibe papelitos con preguntas por debajo de la pnerta, los mira, eseribe en ellos una respuesta y los envia de vuelta, y esa ¢s toda la comunicacion que tiene con el mundo exterior. Esta persona no “ue La actual version del protocolo HTTP es la 1.1. En [Link]/Protosols! #f:2616/s#2616htm! se encuentra la especificacién completa. El World Wide Web Consortium considera que la versién 1.1 supera todas las deficiencias de la version. 1.0. por lo tanto, no esta trabajando en futuras versiones. Si estin trabajando en ‘un protocolo relacionado que busca integrar HTTP con otro lamado «XML Protocol. DESARROLLO WEB CON JAVA DESDE CERO [users] 19 sabe quién manda cada papelito, solo los EL PROTOCOLO recibe y responce, Quiza del otro lado de . la puerta hay una sola persona que es la HTTP FUE DISENADO misma siempre y manda diferentes preguntas, PARA TRANSFERIR co hay cientos de personas, cada una con sus inquietudes que esperan ser respondidas; DOCUMENTOS DE peto este humilde servidor no lo sabe. ni pue- HIPERTEXTO de saberlo. Esto hace complicado mantener un hilo de conversacién entre los clientes (quienes mandan los papelitos) y el servidor (quien los recibe y responde). Por ejemplo, si una persona hace una pregunta y, al obtener la respuesta, quiere hacer otra pregunta relacionada, tiene que fornmlar la pregunta sabiendo que quien sesponde la tomara como si fuera una pregunta totalmente neva. Esta problemética tambien hace imposible saber si alguien que acaba de mandar un papelito sigue estando tras la puerta o se fue hace rato Un sitio web que se comunique con el cliente tinicamente mediante documentos HTML a través del protocolo HTTP no tiene forma de saber (sin acudir a otras técnicas de programacién, como applets, Flash, com- ponentes ActiveX, etcétera) si el usuario sigue navegando en su sitio 0 si se fue a otra pagina o cer el navegador. Sesiones Esta restriceién del protocolo HTTP es un impedimento muy grande. Précticamente toda aplicacion necesita superar este inconveniente y po- der mantener un registro de la conversacion mantenida entre el usuario y el servidor. Para ello, se define el concepto de sesion , que se maneja de la siguiente forma: * Eleliente realiza un pedido al servidor. * Elservidor responde el pedido y, a su vez, le devuelve un identifica dor al cliente. [Link] users com 20 1. LAPROGRAMACION WEB * Eleliente debera, en los sucesivos pedidos, incluir este identificador ent cada pedido que realice al servidor. * El servidor, al reconocer el identifieador, puede mantener un estado de pedidos de un mismo cliente. De esta forma, se soluciona el problema que acarrea la naturaleza sin estado del protocolo HTTP. Hay dos formas de lograr que el navegador incluya este identificador de sesi6n en cada pedido al servidor. La primera es el uso de cookies Las cookies (;galletitas!) son pequeiios archivos con informacion que el servidor envia al navegador para que este guarde, y que el navegador vuelve a enviar en cada pedido que realiza al servidor. De este modo. el navegador puede euardar informacién especifica sobre el sitio que se estd visitando, como el identificador de sesidn o las preferencias del nsua- rio (por ejemplo, el idioma o el color con que pretiere visualizar la pagina). La segunda forma, llamada URL rewriting nce que el navegador sobrescriba todos los enlaces que vuelven al servidor, agregandoles como pardmetro el identificador de sesion, Esto es: cada accion que el usuario pueda hacer desde el navegador que vnelva al servidor (y que no sea un enlace extemo a otro sitio). va a tener agregado un parimetzo cou el identificador. De esta forma, al hacer clic sobre cualquiera de los links que tenga la pagina. estara pasando su vez el identificador de sesion, y asi el LAS COOKIES SON servidor podra identificarlo. Es importante destacar que todo tipo de : informacion de estado se guarda en el serv INFORMACION QUE dor. Es este quien mantiene los datos asocia- NAVEGADOR GUARDA ‘os con la sesién del usuario, Por ejemplo: en el clasico sistema de compra online, don- YVUELVE AENVIAR | ge hay un carrito de compras virtual, cada ‘vez que un usuario agrega un producto, se e R agrega a la lista que ya contiene el carrito del usuario, pero este carrito y su informacion ARCHIVOS CON >> wwuired users com DESARROLLO WEB CON JAVA DESDE CERO a reside en el servidor, asociado con el identificador de sesién del clien- te. El cliente simplemente manda pedidos y se le muestran resultados, sin saber lo que ocurre del otro lado. Pedidos HTTP Hemos visto que los clientes realizan pedidos mediante el protocolo HTTP a servidores web. Lo que no vimos hasta ahora es que los pedidos HTTP pueden ser de varios tipos (también son Hamados “métodos”) La Tabla 1 mmestra los diferentes tipos de pedidos que existen actual mente para el protocolo HTTP, version 1.1 site) Bereh coon) Baro eton} OPTIONS Se usa para preguntarle al servidor las diferentes formas de comumicacion que soporta GET ide un recurso al servidor HEAD Igual que GET, pero el servidor solo devuelve el encabezado de lo pedido. POST ‘Método que se usa para enviar informaci6n al servidor PUT Usado para enviar reoursos al servider. DELETE Boma recursos del servidor. TRACE Se usa para pedir un rastzeo del pedido. CONNECT Metodo reservado. Tabla 1. Los diferentes métodos que define el protocolo HTTP. con « EES 1, LA PROGRAMACION WEB Estos ocho métodos definidos en la especificacién del protacolo permi- ten establecer conexiones muy avanzadas entre clientes y servidores, pero que no son usadas, por lo general, por las aplicaciones web estandar. Elmétodo TRACE, por ejemplo, se usa para testear que el servidor esté recibiendo los datos correctamente y para depurar las conexiones. La ma- yoria de los servidores en produccién directamente tienen deshabilitados nnchos de estos métodos o estan asociados con algiin tipo de directiva de seguridad que impide que cnalqnier usuario los ejecute. Caso con- trario, cualquier usuario desde algiin Ingar remoto del planeta podria gjecutar un DELETE en una pagina y la borraria del servidor. En este libro vamos a referimos tinicamente a pedidos de los tipos POST y GET. Si bien apriori POST y GET parecen totalmente distintos entre si, vamos a ver que pueden usarse con los mismos propasitos, aunque hay casos en los qne se evidencia que uno es mas idéneo que el otro. La especificaci6n reco- mienda distintos usos para cada uno de ellos: dice que el método GET deberia usarse solamente para obtener datos del servidor. y POST. para enviar informacién al servidor, como ser una orden de compra o una ac- tmalizacién de un dato. Asi y todo, podemos sar GET para enviar informa- cién al servidor (con ciertas limitaciones) y POST para obtenerla. Algo sobre seguridad La seguridad en aplicaciones web excede ampliamente los aleances y con- tenidos de este libro. Es un tema muy tratado y se ha escrito mucho acerca de ello. Pero vamos a dar un pequeiio pantallazo del tema, su problemitica y algunas formas de mantenerlo bajo control. Los sistemas web implementan mumerosos procesos en los que deben ofrecer seguridad. ‘Mas adelante veremos una aplicacién simple pero poderosa que se utiliza para brindar seguridad en lo referido a antenticaciones y autorizaciones © Autenticacion —_es el proceso que se encarga de verificar que un usta- rio es realmente quien dice que es. Es comim en muchos sitios web; cada vez que nos piden que ingresemos nuestro nombre de usuario >> wowired users .com DESARROLLO WEB CON JAVA DESDE CERO oe 23 y contrasefla, basicamente estan pidienclo que demostremos que somos el usnario duefto de la contraseita, y por eso la ingresamos. * Autorizacion —_consiste en verificar que un usuario dado (que, supo- nemos, ya se ha autenticado) tenga permisos para efectuar determi- nada operacion. Por ejemplo, en determinado sistema, solo el usuia- rio administrador puede borrar informacion; de manera que, cuando el servidor identifique que se esta pidiendo borrar algo, primero debera verificar que el usuario que esta pidiendo el borrado sea un usuario de tipo administrador. y, en ese caso, autorizara la accién. Sin embargo, el principal problema de seguridad que plantean las aplica- ciones web (al igual que toda aplicacion distribuida) es el transporte de da- tos. El protocolo HTTP transporta informacion entre computadoras a través de muchos nodos hasta llegar al servidor al cual se dirige. Esto trae muchos problemas de seguridad, ya que alguien puede tener acceso a la comnmnica- cin que se establece entre cliente y servidor y leer los datos que se transmi- ten, y estos datos pueden incluir nimeros de tarjetas de crédito, claves, etc. La solucion que se usa hoy en dia (aunque, en materia de seguridad infor- iniitica, nada es ciento por ciento seguro) es un protocolo Ilamado HTTPS . Este protocolo especifica que las comunicaciones se siguen haciendo igual que con HTTP, con la diferencia de que, antes de enviar la informacion el cliente. la encripta El [Link] —desencripta.__y luego la procesa. Asi, si alguien logra interceptar la conmunicacién, es casi imposible que pueda descifiar su contenido. @ RESUMEN Hemoos visto los servicios de valor que brindan los sitios web dinimicos. Describimos tam- wee bign sus limitaciones y cémo subsanarlas analizando la programacién web independien- temente del lenguaje de programacién utilizado para implementar nuestras aplicaciones. wwwredusers com <€ mo 1. LAPROGRAMACION WEB Actividades TEST DE AUTOEVALUACION 1 ¢Cuales son los dos actores fimdamentales en la navegaci6n por intemet? 2 Enqué se diferencia un servidor de paginas estaticas de uno de paginas dintmicas? {Qué caracteristica del protocolo HTTP es la que nds limita la programacion web? Qué solucién se aplica a este problema? {De qué formas el navegador puede enviar al servidor el identificador de sesion? Aue w Usando telnet y simulando ser un navegador web, ingrese a su diario online favorito y obtenga la pagina principal. x {Qué es una cookie? 8 — Por qué la mayoria de los servidores web tienen deshabilitado el método HTTPDELETE? 9 (Cull es la diferencia entre antenticacion y autorizacion? 10 Porque es necesario encriptar la informacion confidencial cuando es enviada a través de internet? Sittiene alguna consulta tScniea relacionada con el contenido, puede contactarse ‘con nuestros expertos: profesor @[Link] a Servlets En este capitulo veremos como es en Ia practica una aplicacion web Java, Aprenderemos qué es um servlet, configuraremos un servidor ‘Tomeat para realizar pruebas y. finalmente, nos introduciremos en la codificacién de algunos ejemplos. -¥éQué son los servlets?.. Un ejemplo: Hola mundo HitpServletRequest 33 wActividadeS. cones HitpServletResponse .. 35 Utilizar servlets. 37 Resumen... 1 AAA 26 cas 2. SERVLETS {Qué son los servlets? Segtin vimos en el primer capitulo, para crear una aplicacién web basta con desarrollar un servicor que escuche pedidos y devuelva recursos. Pero es claro que el desarrollo web no consiste tinicamente en €s0, Sun cred (dentro del contexto del Java Community Process, que permite a cualquier persona del mundo participar en la toma de decisiones) la Java Servlet Technology «na especificacion que define una serie de clases, paquetes y procedimientos que se utilizan para la creacién de servlets. la base fiindamental del desarrollo web con Tava. Algo a destacar acerca de los servlets es que la Java Servlet Techno- logy esuna —_especifieacidu —_—_—. Es decir, que la tecnologia consta solamen- te de un documento, muy detallado, donde indica la funcionalidad que se provee y como debera ser el software que la implemente, pero no proporciona ningiu tipo de software en concreto. Si bien Sun desarrollé su propia implementacion, Ia especificacién nos permite trabajar con cualquier implementacién que queramos, en tanto y en cuanto se aten- gaa la especificacion, Podemos decir que esta tiltima define ua estan dar que ha de cumplirse por los implementadores. El hecho de trabajar en base a una especificacién tiene muchas ven- tajas, pero también un problema: la especificacién solo define como debe comportarse el software, pero no limita sus capacidades. Por lo tanto, algunos implementadores le agregan muchas funcioualidades wee SERVLETS Y VERSIONES DE ESPECIFIC. Es muy probable que en un futuro salgan nuevas versiones, con més funcionalidades. En este libro utilizaremos una de sus miltiples versiones. Recomendamos visitar la pagina [Link] com/technetwork java javace/servletindex him op ara estar al tanto de los cambios de version. >> wummired users .com DESARROLLO WEB CON JAVA DESDE CERO wea 7 aa implementacién que desarrollan, de forma tal de cumplir con la cespecificacion, pero, ademis, soportar sus propios requerimientos. Esto conlleva el riesgo de que, si usamos funcionalidades extra de una implementaci6n especifica, después sera mas dificil migrar a evalgnier otra implementacion. Un servlet es. entonces, un componente de software Java que se encar- ga de generar contenido dinamico en respuesta a pedidos HTTP. Todo ser- viet reside dentro de un servlet container que es una parte del servidor web. El servidor web recibe los pedidos, revisa su sintaxis y los deriva al servlet container, que, a su vez, determina qué servlet debe invocarse, construye los objetos correspondientes que recibira el servlet, le envia el pedido y el servlet devuelve la respuesta generada, El servlet container sun componente dentro del servidor. Componentes pedidas respuestas Figural. Elserviet container —_es un componente mas dentro del servidor. wee SERVLET EN ENTORNOS DE DESARROLLO. ‘Veremos que algunos de los métocos de los servlets no son utilizados en Ia programacién web, sino que sirven para brindar informacién al desarrollador. principalmente cuando se trabaja con un entomno de desarrollo muy potente. De esta forma, en caso de tener muchos servlets, el entomo de desarrollo nos mostraré informacién extra para su mejor manipulacién. 28 2. SERVLETS La especitficaci6n define una interfaz servlet que puntualiza los miétodos que se describen a continuacién: void init(ServletConfig config): /* Cuando el contenedor crea el servlet (ya sea por un pedido o por inicializacién del servidor), llama a este método para que el servlet pueda inicializar los recursos necesarios durante su vida */ void destroy(): /* Método llamado cuando el contenedor decide destruir el servlet, El servlet deberd liberar los recursos que tomé y ejecutar acciones sabiendo que seré destruido ——*/ ServletConfig getServletConfig: /* Devuelve el objeto de configuracién del servlet */ void service(ServletRequest req, ServletResponse res): /* Método de ejecucion del servlet. Dado un pedido (encapsulado por un ServletRequest) y un objeto de respuesta (el objeto ServletResponse), el servlet ejecuta su légica en este método */ String getServletinfoQ): /* Devuelve una cadena con informacion sobre este servlet */ Luego nos dedicaremos a los detalles, pero, basicamente, podemos ver que un servlet se inicializa, se le efectitan pedidos y finalmente se destruye. La especificacién es lo suficientemente amplia como para soportar servlets que respondan a cualquier tipo de pedido. Nosotros vimos que, pata intemet, las comunicaciones se realizan mediante el protocolo HTTP. Por lo tanto, es obvio que existen clases especificas para servlets que res- ponden a pedidos HTTP, ya que son los mas comes hoy en dia. >> www red users com DESARROLLO WEB CON JAVA DESDE CERO a 2 Dingrama de clases_1 Figura 2. Diagrama de clases de servlets. Laclase abstracta —-HitpServiet define los siguientes métodos: protected void doDelete(HttpServletRequest, HttpServletResponse); protected void doGet(HitpServletRequest. HtpServletResponse): protected void doHead(HttpServietRequest, HttpServletResponse): protected void doOptions(HtpServletRequest, HittpServletResponse): protected void doPost(HtpServletRequest, HitpServletResponse): protected void doPut(HtpServletRequest, HttpServletResponse); protected void doTrace(HttpServletRequest, HttpServletResponse): protected void service(HttpServletRequest, HttpServletResponse); void service(ServletRequest req, ServletResponse res); protected long getLastModified(HitpServietRequest): ‘Veamos cémo funciona un servlet: en particular, un HttpServlet [Link] users com 30 cas 2. SERVLETS © Unpedido HTTP Ilega al servidor. * El servidor interpreta el pedido y lo reenvia al servlet container + Elsservlet container parsea el pedido, crea los objetos correspondientes y crea o llama a la instancia del servlet que ha de manejarto. + Elserviet asignado para mangjar ese pedido es, asumamos, un HitpServlet . © Elserviet container invoca el método Service con los objetos HitpServletRequest y HitpServletResponse que creé como parametros. * El servlet inspecciona los objetos recibidos como parémettos e invoca el método correspondiente, segitn el tipo de pedido recibido + El método se ejecuta y la respuesta es generada + Elservlet container envia la respuesta al cliente que origins el pedido. Ciclo de vida de un Servigt ing service(ServletRequest req, ServletResponse res) © Figura 3. Ciclo de vida de un servlet. El tipo de pedido es uno de los que vimos en el Capitulo 1. Como ve- mos, hay métodos definidos para manejar cualquier tipo de pedido. >> wowired users com DESARROLLO WEB CON JAVA DESDE CERO oa 31 Un ejemplo: Hola mundo ‘Veamos un ejemplo de servlet, el clasico “Hola mundo!” package capitulo2; import [Link]. JOException; import [Link] PrintWriter: import [Link]: import javax. servlet http. HtpServlet: import [Link]; ‘import javax servlet http HitpServletResponse: fe * Extendemos la clase HitpServlet para definir * muestra propia funcionalidad cuando el * servlet sea invocado + public class HolaMundoServlet extends HttpServlet { protected void doGet(HtpServletRequest req. HttpServletResponse res) throws ServletException, IOException { /* Llamamos al método doPost. Este servlet responde de la misma manera tanto a pedidos GET como POST */ doPost(req, res); protected void doPost(HttpServletRequest req, HttpServletRespouse res) throws ServletException, IOException { [Link] users com <«€ 32 ESS 2. SERVLETS /* Obtenemos el abjeto que envia texto al cliente */ PrintWriter out = [Link](): La respuesta ‘[Link](“Hola mundo!”): 1/ Cerramos el stream [Link]: [Link](): E] servlet es invocado por el contenedlor de servlets del servidor, y, si el pedido es de tipo POST 0 GET, el servlet responde con una pagina HTML (aunque no tenga ningun tipo de marca HTML, no deja de ser un documento HTML) que dice “Hola mundo!”. Este servlet no es muy util que digamos, ya que entrega siempre la misma cadena de texto. Anngue es ejecutado como un servicio de contenido dinamico, esta devolviendo contenido estitico. wee CONTENT-TYPE Los servlets pueden especificar qué tipo de contenido estén devolviendo (el content= type ). para que el navegador lo pueda manejar. De esta forma, si un servlet entrega un contenido que no sea HTML, el navegador puede utilizar algtin plugin o abrir otra aplicacion, dependiendo del tipo de contenido que esté recibiendo (que podria ser un documento Word, un PDF o cualquier otro tipo que sea necesario).. >> wow red users com DESARROLLO WEB CON JAVA DESDE CERO losers] 33 Antes de pasar a otro ejemplo, veamos en qué consisten las clases, HpServletRequest_ y HitpServletResponse HttpServletRequest Esta clase encapsula La informacion que contiene el pedido del cliente. La clase se extiende a partir de ServletRequest . una clase que contiene op- ciones de pedidos genéricos, y la extiende con informacién especifica del protocolo HTTP. Un servlet accede a esta clase para saber qué contenido devolver. Aunque es tedricamente posible implementar toda la funcionali- dad de un sitio web en un solo servlet basandose en parametros del pedi- do, seria a costa de un cédigo inmanejable, confuso y dificil de mantener. Para evitarlo, esta clase provee métodos para acceder a pardmetros, enca- bezados. cookies y opciones de seguridad. Veamos algunos de los meto- dos (tanto de la clase HitpServletRequest como de su clase padre. ServletRequest . que usaremos mas seguido: Object getAttribute(String name) Enumeration getAttributeNames() void removeAttribute(String name) void setAttribute(String name, Object 0) Locale getLocale() Enumeration getLocales) Map getParameterMap() Enumeration getParameterNames() String[] getParameterValues(String name) Cookie[] getCookies() HitpSession getSession) HitpSession getSession(boolean create) String getRequestedSessionldQ [Link] users com <€ a cass 2. SERVLETS Un pedido puede tener asociados objetos, Ilamados atributos —. Estos objetos no son asociados al pedido por el navegador web. sino por compo- nentes en el servidor. Mas adelante veremos ewes son los usos de estos atributos. Los métodos _—_getAttribute, getArtributeNames , removeAttribute _y setAttribute manipulan dichos atributos asociados. Los navegadores mis recientes permiten al usuario definir el idioma en que prefiere navegar en la Web. Esto se traduce en un encabezado Lla- mado Accept-Language que define el o los idiomas preferidos. Si progra- amos mestras aplicaciones para que tomen en cuenta esta informacion, podremos mostrar al usuario paginas en su idioma, sin interaccién por partede él. Los métodos _—getL.ocale_y getLocales devuelven elo los idiomas preferidos por el usuario, segtin el pardanetro enviado por el navegador. Los métodos —getParameterMap . getParameterNames —_y_getParameterValues nos permiten interactuar con los parametros enviados por el navega- dor. Estos paramettos, a diferencia de los atzibutos, si son asignados por el navegador cuando el usuario interactia con la pagina, pulsando un enlace o enviando un formulario web. El metodo getCookies nos per- nite obtener las cookies que este cliente tiene alojadas. Y por illtimo, los métodos getSession Y getRequestedSessionld nos sirven para tener acceso a la sesion a la cual pertenece este pedido. Notemos que getRequestedSessionld es el indicador de sesién del qe hablabamos en el Capitulo 1. ¥ getSession nos devuelve un objeto ‘HitpSession que contiene toda la informacion de sesion en el servidor. whe LENGUAJES Y NAVEGADORES Aligual que con otras funcionalidades, no podemos depencer de que el navegador que utilice el usuario nos envie el encabezado —Aceept-Language _. ya que puede suce- der que ese navegador si soporte esta fimcionalidad pero que el usuario no la haya definido 0 no sepa cémo tiene que hacerlo. >> [Link] users com DESARROLLO WEB CON JAVA DESDE CERO E 35 HttpServletResponse Esta interfaz define datos y métodos para manipular la informacion que sera devuelta al cliente, Un servlet recibe de parémetro una ins- tancia de este tipo de objeto y es su tarea modificar el objeto segiin su funcionalidad para que luego la respuesta le sea enviada al cliente, ‘Veamios algunos de los metodos que usaremos de esta interfaz y de su superinterfaz, —_ServletResponse ServletOntputStream getOurputStream() PrintWriter getWriter() void addCookie(Cookie cookie) void addHeader(String name, String value) void setHeader(String name. String value) boolean containsHeader(String name) void sendRedirect(String location) Los métodos getOutputStream()_y getWriter() nos devuelven objetos en los que podemos escribir el contenido de la respuesta, En el primer easo, un OutputStream , util para devolver contenido binario, y en el segundo caso, un Print Writer, apto para devolver texto al cliente, wee COOKIES QUE VENCEN, Las cookies tienen una fecha de expiracion, Esta caracteristica puede resultar muy ttil si queremos guardar un dato sélo por determtinado periodo de tiempo, por ejemplo, para recordar a un usuario durante una semana, Fl navegador es el encarzado de liminar las cookies que estan vencidas. wuwured users com <« 36 ces 2. SERVLETS Con addCookie(Cookie c) —_podemos enviar una cookie al cliente, que Imego ser seenviada en cada pedido y Ia podremos inspeccionar. Es importante notar que el usuario podria asignar la opeién de no recibir cookies en su navegador, de manera que debemos prever esta situacion y no escribir aplicaciones que dependan del uso de ellas. Los métodos addFieader(String uame, String value) —_y_ setHeader(String name, String value) escriben contenido en el encabezado de la respuesta. La diferencia en tre estos métodos consiste en que setHeader _escribe el valor en el enca- bezado, pisando (si hubiera) un valor existente. En cambio, addFleader nos permite asignar mmiltiples valores a una misma entrada, Para evitar pisar valores, el método containsHeader(String name) —_nos permite saber si ya existe un valor asignado como eneabezado para un nombre dado. Por ultimo, — sendRedireet(String location) _se utiliza para indicar al navega- dor que debe redirigirse a otra pagina. (aa Hosing Sever Figura 4. Grafico que esquematiza la estructura de HitpServlet. >> [Link] users com DESARROLLO WEB CON IAVA DESDE CERO aS 37 Utilizar servlets Hemos visto algunos ejemplos de servlets, pero ahora llegé el momento de verlos en accién. Vamos a configurar un servidor web y a realizar un, pedido a los servlets para verlos ejecutindose. Para los ejemplos de este libro, vamos a utilizar las siguientes tecnologias: * Eclipse entomo de desarollo. Si bien no es necesario, todo tipo de desarrollo se simplifica enormemente gracias a este framework. Eclipse poco a poco se va convirtiendo en la herramienta de desa- rollo grifico de facto, Basada en el viejo Visnal Age de IBM, ahora de cédigo abierto, es un sofware que emplea plugins en los que se puede agregar funcionalidades y soporte para muchisimas tareas con poco esfiter70. De hecho, mediante el uso de plngins se puede utilizar Eclipse para desarrollo no solo de Java, sino también de PHP y otros lenguajes. * Tomcat : servidor web y servlet container. Tomcat es un proyecto open source de muchisima calidad desarollado por Apache, que aetualmen- te es utilizado en entomos de produccién por numerosas empresas. Usaremos la version § que, al momento de redacci6n del libro, es la alti- ma versi6n estable y soporta la especitficacién de servlets 24 (que es la que seguimos en este libro). Debemos notar que Tomeat necesita un JDK. para fneionar. Tomeat es, sin dndas, el servidor de codi= UN SERVLET i ia. U' go abierto més maduro hoy en dia, Usado GENERA CONTENIDO por una enorme cantidad de usuarios y empresas de todo el mundo, con muchisi- DINAMICO EN mo soporte, tanto de la comunidad como RESPUESTA A del Ambito empresarial, tiene tanto pres- tigio que fue el servidor elegido por Sun. PETICIONES HTTP para ser la implementacion de referencia de las nevas especificaciones de servlets 5 y y JSP que va desarrollando. wowwired users com &€ 38 ca 2. SERVLETS * Apache Struts: framework de desarrollo web creaclo por Apache. Es préeticamente un esténdar en la industria, y. si bien hay varias altema- tivas para hacer desarrollos web, es un framework completo, con miles de usuarios, mucho soporte y documentacion, Eclipse Eclipse se puede bajar de [Link]/downloads No ahonda- remos mucho sobre las caracteristicas de Eclipse en si, que son muchi- simas, sino que simplemente explicaremos los conceptos de desarrollo web mediante su uso. Una vez descargado Eclipse (hay versiones para Windows y Linux), se instala y queda creada una carpeta donde se encuentra el ejecutable. Eelipse no genera entradas en el registro de Windows ni crea archivos en otro lugar que no sea la carpeta de instalacién. Existen diferentes versiones de Eclipse que podremos descargar desde su pagina. Nosotros descargaremos Eclipse IDE for Java EE Developers y obtendremos una carpeta con todo lo necesario para el desarrollo web. Instalar Tomcat ‘Vamos a usar Tomcat como servidor web y servlet container. La instalacién de Tomcat es sencilla, y vamos a integrarlo con Eclipse. aaa Eclipse es un producto gratuito desarrollaclo por Eclipse Foundation, una fundacién sin fines de Incro que. en la actualidad, cuenta con el fuerte apoyo de mas de 80 ‘empresas, entre ellas IBM, Nokia, Intel, BEA, Sybase y Hewlett Packard. Fie fundado en el aito 2004 por el Consorcio Eclipse. >> wwwired users com DESARROLLO WEB CON JAVA DESDE CERO 39 0 Para comenzar, descargue Tomcat desde _ [Link] tomcat . Si el enlace no funciona, busque algiin otro servidor activo ena pagina de descargas de Tomcat: ittp:/tomeatapacheorg ) Descomprima el contenido del archivo y elija donde alojarlo. A modo de ejemplo, lo puede descomprimir en C:\tomeat-version Para poder ‘usar Tomcat con Eclipse, debe instalarle un plugin a este tltimo, disponible en www. [Link]/tomeatPIugin htm! [Link] 40 mea >. SERVLETS Este archivo esun .ZIP_ que contiene una carpeta llamada com sysdeo. eclipse.tomeat_version . Esta carpeta es el plugin de Eclipse y, para instalarla, solo basta con copiarla (0 moverla) dentro de la carpeta plugins de Eclipse. Por ejemplo: si descomprimimos Eclipse en C:\eclipse, entonces debemos copiar (o mover) la carpeta descomprimida a C\eclipse\plugins\ de forma tal que nos quede la carpeta_—_C:\eclipse\plugins\[Link].tomeat_version Una vez instalado el plugin Sysdeo _, solo basta con iniciar (0 reini- ciar) Eclipse para que los cambios hagan efecto (eles: Ces (e dN): 0 Para comenzar, acceda al panel de control de Eclipse desde Window/Preferences Cv 33 vse. 6 van ss omathone [alah | >> [Link] mers com DESARROLLO WEB CON JAVA DESDE CERO 41 > a) Seleccione la opcién Tomcat en el érbol para ver las opciones del plugin. Debe seleccionar Versionx.x como version de Tomeat e ingresar la carpeta de instalacion de Tomeat, por ejemplo: C:\tomeat-version es Apache Jakarta Project aura seong tg ae treet, rans youve an Test eee ‘Songnsen Ayeuraton geyser tt oct on Ket oRTALIIA. en /uebarpe/ ROOT snd. Sanaa aaa aie OTE pan sci tn orc cece 8 NOTE Fr sere nrn args begs rnd at mt "Seeman eco ages SRG SMALE Sane same pons 2 foxeres} 2. SERVLETS Una vez ejecutado el servidor. por defecto estar configurado para ‘escuchar pedidos en el puerto 8080. Bastard con abrir un navegador y http:/Mlocalhost:8080 para hacer correr Tomcat. Ahora que tenemos un servlet container funcionando, vamos a ver como hacer para comer servlets. ‘Crearemos un nuevo proyecto en Eclipse. del tipo Tomeat Project . alquellamaremos Servlets. Paraesto, iremosa _—_—File/New/Project _y elegi- escribir la direcei¢ vemosel wizard Tomcat Project (ver Figura). Alsesto de las opciones las dejamos como vienen por defecto. © New Project Select a wizard Croat a Jaya project weh aWAR structure Ward BZ werent dara Propet rom Baty Ant Balle Se Pogin Propet ae cs Figura 5. El proyecto de tipo Tomcat Project tae preconfigurada una estructura de directorios para poder desplegar los servlets y configuraciones. Como resultado final, al ejecutar Eclipse, podremos ver la interfaz gréfica del IDE de la siguiente forma: >> [Link] mers com DESARROLLO WEB CON JAVA DESDE CERO 43 0 ] TOMCAT botones para arrancar, detener y reiniciar Tomcat. Estos botones son provistos por el plugin SYSDEO. 0 2 EJECUCION: botones para correr aplicaciones, depurarlas y ejecutar aplicaciones extemas. 03 ‘VISTAS: estos botones permiten intercambiar las dlstintas vistas posibles. La vista Java es la mas apropiada para el desarrollo de cédigo. 0. 4. CODIGO vista del cédigo fuente, usando un editor que resalta la sintaxis propia de Java. 0 PANEL: el panel inferior suele ser usado para mostrar mensajes de la aplicacién. En este caso, vemos la consola de salida de Tomcat. 0 PANEL: los paneles son configurables y podemos agregar y quitar cuantas ‘ventanas queramos. En este caso, tenemos una vista de la aplicacién actual “4 oss 2. SERVLETS Contextos Un servidor web puede tener corriendo varias aplicaciones web 0 contextos . Cada contexto puede ser tanto un sitio web completo como un modulo de una aplicacion. Por ejemplo, muchos servidores comparti- dos corren una tnica instancia de Tomcat y tienen varios contexts que sirven a diferentes direcciones web. Cuando creamos el proyecto Tomcat en Eclipse, también definimos un contexto del mismo nombre en el Tom- cat. Si pulsamos el botén derecho del mouse sobre el icono del proyecto y elegimos la opcién Tomcat project , veremos que se presentan algunas. opeiones sobre el contexto que el proyecto define. Update context definition y Remove context definition agregan y quitan, respectivamente, la definicion del contexto que el proyecto define al servidor web. De esta forma, pode- mos tener una instancia de Tomeat corriendo. y cargar y descargar contex- tos (aplicaciones web) de este sin necesidad de detener el servidor. Primer proyecto Al tenninar la configuracion, lo primero que vamos a desear es probar un servlet. Por lo tanto, en Eclipse vamos a File/New Project/Web/ Dynamic web Project. Indicamos el nombre del proyecto, por ejemplo elclasico servletHolaMundo [Link] Target runtime. la opcién. Apache Tomcat vx.0 (dependiendo de la version que instalemos). Al crear- se el proyecto, nos encontraremos con su contenido por defecto. 6) PranVclam canon ine! ‘Tomeat tiene la capacidad de soportar la carga de clases de manera dinémica, Esto significa que al momento de modificar una clase que esta realizando una carga y corriendo (como por ejemplo, un servlet), Tomeat detecta el cambio y. de ser nece- sario, reinicia también el contexto. >> wowed users .com DESARROLLO WEB CON JAVA DESDE CERO os 45 En Java Resources podremos poner los servlets pulsando el boten dere- cho delmouse en New/Servlet . Completamos la informacién necesaria de la ventana Create Servlet como el nombre del paquete y la clase, Presionamos el botén Next y de esta manera configuramos los méto- dos que deseamos para nuestro servlet; en este caso, solo dejaremos seleccionado el método doGet . Al finalizar. se generara el archivo Hola- Miundo,java con el contenido. El cédigo que debemos escribir dentro de doGet es el siguiente: PrintWriter out; out = [Link](): [Link](“”); [Link](“Ejemplo de Serviet<‘title></head>”): [Link](“<body>") [Link](“<h1>Hola Mundo</hl>”): out printin(“</body></htm1>"): Este ejemplo se encuentra alojado en la web de RedUsers. Al finalizar la codificacin, hacemos clic en el botén RUN, selecciona- mos el servidor que ya tenemos configurado y abriré un navegador dentro de Eclipse con el resultado que programamos. El archivo [Link] La especificacién define que la carpeta WEB-INF es donde debe ir toda {a informacion relativa a la aplicacion. En particular, define que dentro de ella debe existir el archivo [Link]. Este archivo es el deployment des- criptor um archivo XML que contiene toda la informacién de configura- cin de la aplicacion. En el apéndice veremos una descripeion completa de las posibilidades que offece este descriptor, pero por ahora echemos un vistazo a las funcionalidades ms importantes que usaremos en este libro: [Link] users com €€ 46 oe 2. SERVLETS * display-name define el nombre que le queramos dar a nuestra aplicacién, * context-param contiene un par nombre-valor y define un parémetro de icializacion dentro del contexto. Pueden definirse 0 o mids elementos context-param . Cualquier servlet podra acceder a estos parmetros. * filter y filte-mapping definen los filttos. En el capitulo sobre filtros veremos a fondo esta configuracion. * servlet y servlet-mapping _contienen la definicidn de los servlets. Veamos el cédigo ejemplo por defecto: <2xmnl version="1.0” encoding="UTE-8"2> <web-app version="3.0° ximlns= “http’//java,[Link]/sinl/ns/javaee™ sanls:xsi="hitp:/Aww w.w3,org/2001/XML Schema-instance” xsisschemal ocation="htp:/av _a.[Link]/xml/ns/javaee hitp:/ava [Link]/xml/ns/javaee/web-app_3_0.xsd"> <serviet> <servlet-name>HolaMundoServlet</servlet-name> <servlet-classorg. prueba. servlet HolaMundoServiet</serviet-class> </servlet> <servlet-mapping> <servlet-name>HolaMundoServlet</serviet-name> <url-pattern>/HolaMundoServlet</url-pattem> </servlet-mapping> <session-config> <session-timeout>30</session-timeout> </session-config> </web-app> * En servlet definimos los servlets que residirén en el contexto. Todo servlet que queramos usar debe estar declarado en el descriptor. Cada elemento debe contener un servlet-name que es el nombre con » DESARROLLO WEB CON JAVA DESDE CERO [Users] a7 «qe sera referenciado el servlet dentro del contexto, y un servlet. class , que es el nombre completo de la clase del servlet. Opcional- ‘mente se puede definir uno o mas init-param. , que, similarmente al elemento context-param _, consisten en un par param-name y param-value , que especifica nombre y valor del pardmeto a definir, respective mente. Estos paramettos de inicializacion solo pueden ser vistos por el servlet en donde son definidos. * servlet-mapping define una relacion entre un servlet y ua patron de di- recciones web, Es el que especifica qué servlet ha de cargarse segin a qué direccién web (0 URL. Uniform Resource Locator _) se haya accedido. servlet-name indica a qué servlet se le est definiendo la relacién (segtin el nombre definido previamente en el elemento servlet). y url-pattem especifica el patron de direcciones web asociado. Interactuar con el servlet Para poder crear una aplicacion web, es menester que podamos brindar interaccién con el usuario, El servlet debe poder recibir informacion de en- trada, procesarla y devolver una respuesta acorde. ,Cémo enviarle datos al servlet? Basicamente hay dos formas, dependiendo de si usamos. GET 0 POST como tipo de pedido HTTP (0 ambos). Recordemos que GET, en teoria, se usaba tnicamente para pedir un recurso: sin ‘embargo, pocemos usarlo para enviar cierto tipo limitado de informacion al servidor. UN SERVLET Un pedido GET no es ni mas ni menos que PUEDE RECIBIR una direccién web enviada al servidor (como vi- . mosenel Capitulo 1). Cuando escribimos en el INFORMACION DE navegador una direccién web, estamos generan- ENTRADA Y DAR UNA down pedido GET. Podemos también agregarle parimettos al pedido, y estos seri recibidos RESPUESTA ACORDE por el servidor. Para enviar paramettos, debe- mos agregar, luego de la direccion, el query string. que se construye de la siguiente forma: [Link] com <«€ 48 >. SERVLETS * un‘ % indicando qne comienza la seccién de parémetros; un par nombre y valor, separados por un“ : + sihay més de un parémetto, estos se separan mediante * &. Por ejemplo, si quiero pasar los parémetros “nombre” y “edad”, con va- lores “Juan” y “16” respectivamente, la direccién web resultante seria: hitp://<sitio>/<recurso>?nombre=Iuan&edad=16 El protocolo HTTP no impone ninguna restriccion al largo de las diree- ciones web que pueden ser enviadas; sin embargo, los servidores si. Aun- que existen servidores que aceptan tamaios més grandes, por compatibili- dad se recomienda que el tamaiio total no supere los 256 caracteres. Unpedido POST se crea utilizando formularios HTML. Al enviarse el fonmulatio a la direcciou especificada en el tag <form> (asumiendo que METHOD="POST™ ), el navegador crea un pedido HTTP POST yloenviaa esa direccion. Veamos un pequeiio ejemplo: <form method="post” action="miServiet”> ‘Nombre: <input type="text” name="nombre”><br/> Edad: <input type="text” name="edad”><br/> <input type="submit”> </form> Laclase HttpServletRequest _abstrae el tipo de pedido que recibié el servlet, y sus métodos getParameter(String name) —_—,_getParameterMap() getParameterNames() —_y getParameterValues(String name) —_sirven tanto para pedidos GET como POST. Para probar elanétodo POST _-y GET, vamos a crear dos archivos HTML usarGethtml —y [Link] —_—_—, com el siguiente cédigo fuente. Paraelarchivo usarGethtml = >> wwwired users com DESARROLLO WEB CON JAVA DESDE CERO [Users] 49 <hl>Método GET</h1> <form method="GET” action= “hitp://localhost:8080/EjemploUser/ UsarGetPost"™> <input type="submit”> </form> Para el archivo [Link] <h1>Método POST</h1> <form method="POST” action= “http/localhost:8080/ EjemploUser/UsarGetPost”> <input type="submit™> </form> Ahora ereamos el servlet, UsarGetPost java, y dentro del evento DoGet, escribimos [Link](“text/html”); PrintWriter out = response. getWriter(); out-printin@*<himl>): [Link](“<body>"): [Link]¢“<h1=Hola Mundo (llamada GET)</h1>"); [Link]¢“</body>"); out-printin(@“</html>”); Dentro del evento DoPost . escribimos: [Link] com <«€ 50. cas 2. SERVLETS [Link](“texthtm!”); PrintWriter out = response. getWriter(): out printin¢<him>”); [Link]@<body>"): out printin(~<h1>Hola Mundo (llamada POST)</h1>"); out printin(“</body>”); out printn(“</htmi>”); Con este ejemplo, podremos saber cuando estamos utilizando un méto- do u otro, Este se encuentra disponible en el sitio web de RedUsers. Problematica de los servlets Los servlets son la piedra angular en el desarrollo de aplicaciones web con Java, y es muy importante que sepamos qué son y como funcionan. ‘Sin embargo, los servlets no son la herramienta adecuada para el desarto- ilo web. Hacer una aplicacion entera usando solo servlets resulta lento, engorroso y dificil de mantener. Los servlets plantean una problematica fundamental: no separan la presentacion del contenido. Hemos visto que en el servlet tenemos que imprimir el resultado comple- to. y esto incluye contenido HTML y contenido propio de la aplicacién. Esto dificulta las cosas. Si quisiéramos cambiar el diseito grafico de la aplicacion, tendriamos que tocar el cédigo fuente y recompilar. Pero, lo més importante: un diseftador grafico que, generalmente, no sabe programar Java, tendria que modificar el contenido del servlet para agregarle diseiio, por lo cual potencialmente podria daiiar el cédigo y generar problemas. En el proximo capitulo veremos una alternativa para esto: JavaServer Pages Un ejemplo completo ‘Vamos a desarrollar un ejemplo completo que abarque todo lo que vi- mos en este capitulo, Desarrollaremios el juego El Ahoreado DESARROLLO WEB CON JAVA DESDE CERO as 51 La pagina HTML mostraré las letras elegitlas, las acertadas y las chances restantes. El servlet deberd hacer uso de la sesién para guardar qué letras ‘ya arriesg6 el usuario y sobre qué palabra esta adivinando (habra varias). El ntimero de chances sera un pardmetro de inicializacion. ‘Veamios el c6digo fuente: import [Link].]OException: import [Link]; import [Link] Random: import javax servlet. ServletException: import javax servlet http HttpServiet: import javax servlet http HpServletRequest: import javax.servlet_http HttpServletResponse: import [Link]; public class AhorcadoServlet extends HttpServlet { // Las palabras disponibles para jugar private static final String[] PALABRAS = { “GATO”.“CAPILLA”.“BABOR”. “MURCIELAGO”, “VENTANAL™. “HAMACA” }: protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { doPost(req, res); } protected void doPost(HttpServietRequest req. HttpServletResponse res) throws ServletException, IOException { HipSession sesion = req. getSession(): int maxIntentos = 5: mumredusers com <€ cas 2. SERVLETS //La palabra sobre la que esta adivinando String palabra = (String) [Link](“palabra”): //Las letras que acerté String aciertos: 1/ Las letras que no acerté String errados; /* Primera vez del usuario, no tiene palabra asignada */ if (palabra = null) { Random rand = new Random): /* Le agregamos una al azar de las disponibles */ palabra = PALABRAS[[Link](PALABRAS length)|; aciertos: errados /* Guardamos los datos iniciales en “sesion” */ sesion setAttribute(“ palabra”, palabra); sesion setAttribute(“aciertos”, aciertos): sesion setAttribute(“errados”, errados): } else { /* Obtenemos los datos de este usuario de “sesion” */ aciertos = (String) sesion getAttribute(“aciertos”): errados = (String) sesion getAttribute(“errados”): /* Verificamos si la letra que artiesg6 pertenece o no a la palabra */ String letra = [Link](“letra”); if (palabra indexOf{letra) >= 0) { aciertos += letra; >> wwwired users com DESARROLLO WEB CON JAVA DESDE CERO 5 33 3 else { cexrados += letra: } 1/ Guardamos los datos actualizados en “sesion”” sesion setAttribute(“aciertos”, aciertos): sesion setAttribute(“errados”, emrados); } // Tmprimimos el resultado PrintWriter out = [Link]: out printin@*<html>"): out-printin(“<head>”); out printin(“<title> AHORCADO<‘title>” out printin(“</head>"); out printhn(“<body>"); [Link](“<hl>”); /* Tteramos por las letras de 1a palabra. Si ya la acert6, 1a mostramos: si no, mostramos un *_” */ for (int i=0: i<[Link]: +4) { String letra = [Link](i, i+ 1): if (aciertos indexOfiletra) >= 0) { [Link](* “ + letra): } else { out-printin(*_”): } } [Link]¢</n1>” [Link](*<br 54 cE 2. SERVLETS /* Nos fijamos si err mis de Los intentos permitidos */ if (maxlatentos > [Link]() { // Todavia esté en juego ont printla(“Intentos: “ + (maxIntentos - [Link])): out printha(“<br/>"); // Las chances restantes for (char ¢ = ‘A’; ¢ <= ‘Zs c++) { if ([Link]{[Link](c)) == -1 && errados indexOf{[Link](c)) DE /* Mostramos letra como opeién sino fire atriesgada atin */ out printin¢<a href=\"AhoreadoServlet?letra=" + ¢+"\">" +e +c) } 3 3 else { // juego terminado /* Invalidamos “sesion”, limpiando todo su contenido */ sesion invalidate): out-printin(“<h2>Juego terminado!</h2>"); [Link](“<br/>"); /* Le damos la oportunidad de que juegue de nuevo */ out println(“<a href=\"ahorcado\”>Jugar de muevo</a>”): } ont printin(“</body>"): out printin(“</htmI>"); } >> wowwired users .com DESARROLLO WEB CON JAVA DESDE CERO a 55 0-0 BAG mm a arama _EN__N_L Inventor: 6 Figura 6. El Ahorcado esté compuesto por un solo serviet. ‘Como vemos, el juego usa mucho la sesion para guardar las letras que el usuario fie arriesgando. El juego va contando las letras arriesgadas por el jugador y, cuando superan el maximo niimero permitido, avisa al usuario que perdié. Sin embargo, no esta realizada la funcionalidad para cuando el usa rio acierta la palabra completa y gana, ;Es un buen ejercicio para el lector! En la pagina web de RedUsers encontraremos todos los ejemplos de este capitulo y, ademas, tres ejemplos de envio de parametros, wee -~ Pay og En este capitulo vimos la parte practica de los conceptos que fueron desarrollados enel Capitulo 1. Los servlets son la tecnologia fundamental sobre la que se basa todo tipo de desarrollo web con Java. Vimos algunas aplicaciones, configuraciones y armamos tn entomo de desarrollo. Tambign pudimos ver que los servlets por si solos plantean una problematica que hemos de resolver. e z 5 E a 56 ass 2. SERVLETS Actividades TEST DE AUTOEVALUACION 1 (Qué define Ia especificacion Java Servlet Teclmology 7 2 {Qué objetos recibe un servlet al invocarse? 3 (Para qué se usael metodo getLocale() de HttpServietRequest ? 4 {Donde debe residir el deployment descriptor dentro de una aplicacién web? 5 {Qué informacion contiene el deployment descriptor? EJERCICIOS PRACTICOS 1 Escriba un servlet que muestre todos los parimettos, tanto de contexto como de inicializaci6n, con st nombre y valor. 2 Modifique el serviet TestRequestRespouse para que responda en otro idioma de su eleccién, ademas de inglés y espaol. 3° Modifique el AhoreadoServiet _ para que le avise al usuario cuando gano. 4 Modifique el AhoreadoServlet para que no repita nunca las palabras sobre las que el usuario ya arriesg6. (Es necesario usar la sesién? PROFESOR EN LINEA Si tiene alguna consulta técnica relacionada eon el contenido, puecte contactarse con nuestros expertos: profesor @[Link] >> www. red users com ESS JavaServer Pages Una vez conocida la base del desarrollo de aplicaciones web con Java, los servlets, podemos comprobar que su utilizacién puede tommarse un poco dificil para grandes aplicaciones. En este capitulo ‘veremos uma alternativa mas itil: JavaServer Pages (JSP) {Por qué no servlets?. Variables implicitas x Directivas de pagina 68 JavaServer Pages... ISP y JavaBeans . Inclusion de paginas. ySintaxis JSP .. ‘Un ejemplo completo... a Comentarios Problemas de usar solo JSP .....84 Fragmento de codigo 64 Declaraciones Resumen. Actividades, Ana 58 ES, 3. JAVASERVER PAGES: {Por qué no servlets? Enel Capitulo 2 —_vimos con detalle como crear paginas web dinimicas usando servlets. La prineipal dificultad de los servlets es que mezclan presentacion con contenido, Como ya afinnamos, un diseiiador grafico tendria que tocar cédigo fuente Java para poder aplicaule diseiio ala pagina que creamos. y. a su vez, un programador tendria que tocar cédigo leno de elementos de disefio que dificultan el desarrollo. Para ihustrar mejor este concepto, veamos un fragmento de una pagina web con mucho diseito grafico embebida en un servlet. import [Link].]OException: import [Link] Print Writer: import [Link] import [Link]; import [Link] http HttpServletRequest: import javax servlet http HttpServietResponse: public class ServletConDisenio extends HupServlet { protected void doGet(HttpServietRequest req, HitpServletResponse res) throws ServletException, IOException { doPost(req. res): } protected void doPost(HitpServletRequest req. HttpServletResponse res) throws ServletException, IOException { PrintWriter out = [Link] Writer): {ila respuesta out printin¢“<himl>); out. printin(“chead>" >> wwwired users com DESARROLLO WEB CON IAVA DESDE CERO aS 59 out println(“<title>Bienvenidos<fitle>”); [Link](“<meta http-equiv-\"Content-Type\” content=\"text/html; charset=iso-8859-1\"> °: [Link](“<link href=\"ess/[Link]\" rel=\" stylesheet\” type=\"text/ess\">"); [Link](“</head>"); [Link](“<body class="body">"); out printin(“<table width=\"740\" border=\"0\" align=\” center\” cellpadding=\"0\" cellspacing=\"0\">"): out-printin(“<t>”): for (int i=0:1< 5; i+) { [Link](“<td width=\"185\" height=\"64\” align=\"Ieft)” valign=\” middle\” becolor=\"#1AA440\"><a href=\".\"><img ste=\"/_images/common/ logo” +i+” gif" width=\"179\" height=\"60\" border=\"0\"></a><Itd>”): } [Link](“</tr>”); [Link](“</table>”): out printin( <tbody>") [Link](“</html>"); // cerxamos el stream out-flush(: [Link]: Este cédigo es muy dificil de leer y mantener. Tenemos que escapar cada comilla del cédigo HTML, en el c6digo Java, con \° , complicando su lectura, Ademés, si el disediador grifico quisiera cambiar algo de la estética, tendria que modificar el codigo fuente y reiniciar el servidor para que tome los cambios. Por estos motivos, se desarrollé una solucién: JavaServer Pages wowed users com «€ 60 ce 3. JAVASERVER PAGES JavaServer Pages JavaServer Pages, como st nombre lo indica, son paginas. Esta tecno- Jogia propone tn cambio al modo en que se desarrollan paginas web con Java, En vez de escribir un servlet que, al ejecutarse, devuelva el conte- nido (tanto estitico como dindmico), lo que propoue es crear una pagina web cou el contenido estatico y el dinamico. Esto apriori suena igual que un servlet: ;donde radica la diferencia? La mejor forma de entender de (qué trata JavaServer Pages es con un ejemplo. Veamos: <html> <head> <title>Fecha en JSP<ititle> <head> <body> Hola!<br/> La fecha de hoy es <b><%= new [Link] Date() %></b> </body> <Aatul> wee 6) ee Algunas implementaciones ( Apache Tomest , entre ellas) proveen tn _compilador de ISP. Compilar el JSP se refiere al proceso de tradueirlo a servlet. compilarlo y dejarlo listo para ser accedido por los clientes. De esta forma, se evita que el proceso de compilacién se produzca al ser accedido el JSP por primera vez, lo cual puede tomar mucho tiempo y retrasar la respuesta al cliente. >> wow red users .com DESARROLLO WEB CON JAVA DESDE CERO [sens] a Si creamos este archivo en la carpeta raiz de nuestro proyecto Tomcat en Eclipse, arrancamos el servidor Tomcat y apuntamos el navegador a http /locathost:8080/Servletsfecha isp {asumiendo que mestro pro- yecto sellama Servlets _), veremos algo similar a la Figura 1 G-O- BAD wm recctin |] hetps/ localhost: 8080)[Link] otal ‘La fecha de hoy es Mon Jan 09 10: ‘52 GMT-03:00 2006 Figura 1. Las JavaServer Pages _ evan por defecto la extensién JSP ‘Como vemos, una pagina JavaServer Pages (en adelante, pigina ISP) tiene contenido estatico (HTML) y contenido dindmico. En este capitulo, ‘vamos a ver en detalle como crear y definir el contenido dinémico en una ina JSP: por ahora, concentrémonos en el ejemplo de la linea que sigue: La fecha de hoy es <b><%= new [Link]. Date) %></b> ‘Vemos que el contenido estitico es simplemente codigo HTML. y el con- tenido dinamico se diferencia mediante ciertos tags. Aligual que HTML, las paginas JSP definen ciertos tags especificos para determinar sentencias propias, marcadores de contenido dinamico. de cédigo Tava, etcétera. Antes de metemos de leno en como programar paginas JSP, es impor- ‘tamte aclarar algo acerca del fincionamiento de esta tecnologia, JavaServer Pages surgié como una especificacién (al igual que los servlets) en base a las necesidades de simplificar el desarrollo de aplicaciones web. a cess 3. JAVASERVER PAGES: Esta simplificacién, con respecto a los servlets, es lograda; sin em- bargo, detras de escena, juna pagina ISP es un servlet! ‘Cuando accedemos a una pagina JSP por primera vez, un traductor se en- carga de transformarla en un servlet, se compila y luego se ejecuta, Por eso notaremos que, al acceder a un JSP por primera vez o luego de haberle he- cho alguna modificaci6u, toma mas tiempo en devolvemes La pagina que el resto de las veces; esto se debe a que se esti transformando y compilando La buena noticia es que se puede acceder ficilmente al servlet gene- rado, aunque. al ser cédigo generado. es de muy dificil Lectura. Por de- fecto, los servlets generados se guardian en la carpeta work. La mala noticia es que si la pagina ISP no esté bien programada y, al gjecutarla, se genera una excepcion, esta ocurre en el servlet generado, que es en definitiva el que se ejecuta. El error nos informara cual es la linea y la excepcion arrojada —pero del servlet-, y este tipo de errores suele resultar muy confitso porque muchas veces no refleja realmente Jo que produjo la excepei6n, Con las actuales versiones de JavaServer Pages se han incorporado muchas mejoras al respecto Sintaxis JSP A contimacién, vamos a definir algo de sintaxis ISP y Inego la aplica- remos en algunos ejemplos. wee JSP COMO XML Desde su versin 2.0, la sintaxis ISP tiene una altermativa XML, para que la pagina en <efinitiva termine siendo ademas un documento XML. y asi poder procesarlo,trans- formarlo, etcétera. En el sitio web 1 java podemos encontrar documentos sobre la sintaxis del formato JSP como XML. DESARROLLO WEB CON JAVA DESDE CERO oS a Comentarios ISP acepta dos tipos de comentarios. {Suena extrano? jLo es! ‘Nuevamente, un ejemplo para ihistrar; nego, presentaremos las explicaciones pertinentes. Veamos nn cédigo con comentarios: <html> <head> <title>Pagina con comentarios<(title> <head> <body> ‘<!+- Inicia seccin tablas datos --> <table> </table> <%-- Guardar resultado en la base de datos --%6> <% ... %> </body> </html> El primer tipo de comentario es un comentario a nivel HIML . y el se- gundo es un comentario JSP . El primer comentario. al ser HTML. es enviado junto con el resto de la respuesta al cliente. El segundo, al ser un comenta- rio del cédigo ISP, no es incluico en la respuesta, Si accedemos a esta pagi- na ISP y vemos su cédigo fiente HTML, veriamos algo parecido a esto: <html> <head> <title>Pagina con comentarios<‘title> <head> <body> wowed users com «€ 64 cass 3. JAVASERVER PAGES: <!-- Inicia seccién tablas datos --> <table> </table> </body> </html> En resumen: <!~ Comentario HTML -> <¥o-- Comentario ISP --> Fragmento de cddigo Para introducir cédigo Java en una pagina JSP, debemos utilizar los tags <% codigo %> . Recordemos que este cédigo terminard siendo embebido dentro del servlet resultante, por lo que debe compilar al igual que cual- quier programa Java, no olvidar los ; finales, etcetera Declaraciones Podemos declarar métodos y variables a ser utilizadas luego eu la pagi- nausando los tags <a! declaraciones %> _. Estas declaraciones serin inserta- das al comienzo de la clase (no importa en qué lugar de la pagina JSP las declaremos), por lo que seran variables y métodos de instancia. Expresiones En JSP una expresion es una porcion de codigo que se evaliia y su resultado se imprime. Los tags de utilizacion son <%= expresion %>. Un detalle importan- te a notar es que el contenido de esta expresién no debe finalizarse con : >> wwuired users com DESARROLLO WEB CON JAVA DESDE CERO 68 Un ejemplo integrador ‘Veamos un ejemplo que utilice los tags vistos hasta ahora: <html> <head> <title> Nú:xmeros de Fibonacci/title> </head> <body> <%-- Declaramos el método fibonacci --%6> <M! private int fibonacci(int n) { if@=0){ Tetum 0; } if@=1){ return 1: } else { retum fibonacci(n-1)+fibonacci(n-2): } 3 %> Los primeros 10 nú:meros de Fibonacci:<br/><br/> = 10. i++) £ Fibonacei(<®= i %>) = <%= fibonacei(i) %><br/> </body> <html> Alacceder a la pagina, vemos el resultado como en la siguiente figura’ [Link] com <«€ 66 ss 3. JAVASERVER PAGES eYieren nee ‘seco Escin ver Favortos Heramintas Ayuda 6- Oo BAD wm oven } Rep: ocabost6080ySer ets fbenacs. ‘Los primeros 10 nimeros de Fibonacci Fibonacci(0) = 0 Fibonacci(1) = 1 Fibonacci(6) = 8 Fibonacci(?) = 13, Fibonacci(8) = 21 Figura 2. La pagina es traducida y compilada una sola vez y ejecutada en cada acceso. Al haber declarado el método usando los tags de declaracion, sabemos que podemos llamarlo desde cualquier lugar de la pagina y estara accesi- ble, No ocurre Jo mismo en la linea siguiente Fibonacci(<%= i %>) = <%= fibonacci(i) %><br/> “ue SOBRE LAS DECLARACIONES Bien podriamos efectuar las declaraciones en fragmentos de cédigo: no es necesa- rio que usemos explicitamente los tags de declaracién, Sin embargo, usindolos, las, variables y métodos que declaremos estarém definidos como variables y métodos de instancia y. por ende, seran accesibles desde cualquier parte del eédizo. >> www red users com DESARROLLO WEB CON JAVA DESDE CERO users} or con lavariable i, que es accesible solamente porque esta dentro dal ciclo for definido previamente Variables implicitas Al programar servlets, teniamos acceso a una serie de variables que ne- cesitibamos para poder interactuar con el entomno y con los parémettos de entrada y salida, como el pedido originario ( HitpServletRequest ). el resultado de salida ( HitpServletResponse_), la sesin (mediante el pedido), etcétera. Has- ‘ta ahora no hemos visto cémo acceder a estas variables en una pagina ISP. Como esta termina sienclo, en definitiva, un servlet. tenemos acceso a ciertas, variables implicitas que podemos asumir que existen y estin instanciadas. Ena siguiente tabla —_ tenemos un listado de las variables y su tipo. Tabla 1. Listado de variables implicitas. wwwwired users com cs CEES 3. JAVASERVER PAGES: request y response: son los objetos que recibe el servlet como parametro para su ejecucién. pageContext : contiene informacién sobre el contexto donde se ejecuta la pagina JSP y provee acceso a variables de coutexto. session : es el resultado de ejecutar pageContext. getSession() application : es el resultado de ejecutar pageContext getServletContexi() out: es el resultado de ejecutar pageContext getSession() config: es el resultado de ejecutar pageContext getSession() page : es el servlet resultante Inego de ser transformadlo; esta variable no suele ser usada en paginas JSP. exception : es definida solamente cuando la pagina JSP es declarada como isErrorPage . Mas adelante veremos un poco mas sobre esto. Directivas de pagina ‘Un tag especial que se aplica a las paginas JSP es <%@ page %> . Este tag define una serie de atzibutos que se usan para configurar la pagina web. Los atributos configurables son los siguientes: language : JavaServer Pages es una especificacién que. en teoria. permite cualquier lenguaje en st contenido. Hoy dia, solo Java es soportado, por lo que este atributo no tiene mucho sentido de ser explicitado, Su valor por defecto es: Java. “ve BY BV ICIEAU GSU UcrU PSI Dy ‘Debemos ser muy cautelosos si creamos una pigina con isThreadSafe=false Si esa pagina es accedida por varios usuarios, puede ser un cuello de botella y frenar Ja mavegacién enormemente. Como regla general, debemos procurar escribir las paginas ISP cuidando que varios hilos puedan ejecutarla sin problemas. DESARROLLO WEB CON JAVA DESDE CERO [sens] 69 © extends : podemos definir qué clase ha de extender el servlet resultante. Por defecto, el servlet container es el que define qué clase ha de exten- der, por Jo tanto, no se recomienda cambiar este valor. ‘+ import : con este atributo pocemos importar tantas clases o paquetes como quetamos para ser utilizados dentro de la pagina. Podemtos definir todas las clases y paquetes dentro de una sola senten- cia import . separéndolos por comas, o declarar varias sentencias import . * session : mediante este atributo definimos si el usuario va a tener acceso a la sesién o no (valores true / false). Valor por defecto: tue Si declaramos este atributo con valor false , no tendremos acceso a la variable implicita session © buffer: la variable implicita out (de tipo _IspWriter ) contiene un bitfer interno para manejar el contenido que se va devolviendo al navegador Cou este attibuto definimos el tamaiio del bifer (en kilobytes) 0 none si xno queremos biifer de salida. Valor por defecto: § Kb. * autoFlush : sieste atributo es true , enfonces. al Ilenarse el biifer de sali- da. los datos seran automaticamente enviados al cliente. Si es false y el bafer se lena, se produce una excepcién, Notemos que no es posible definir este atributo como false_ si también definimos el tamano del bi- fercomo none. Valor pordefecto: true . * isThreadSafe : con este atributo declaramos si la pagina es segura para el acceso multi-threaded. Si lo especificamos como true . el container puede andar varios pedidos concuzentes a esta pagina; si no, serializara los pedidos mandando de a uno por vez. Valor por defecto: tue. WY gTE RESULTA UTIL? Lo que estas leyendo es el fruto del trabajo de cientos de personas que ponen tado de si para lograr un mejor LM a ne ck er) De erm OL at [Link] users com <€ 0 foseres] 3. JAVASERVER PAGES: * info: en este atributo podemos especificar un texto que sera devnelto mediante el método getServletInfo() + errorPage : aqui podemos definir una pagina para manejo de errores. Si una excepcién ocurre durante la ejecucién de esta pagina, entonces se redirige el pedido a la pagina de error que esté declarada en esta variable, © isEnorPage con este atributo distinguimos las paginas de error. Estas tienen acceso a la variable implicita exception que contiene Ja excepeion ocurrida. + contentType este atributo identifica el tipo de contenido MIME que estamos devolviendo. Opcionalmente podemos definir también el mapa de caracteres que usamos para codificar. Valor por defecto: text/html:charset=1$0-8859-1 © pageEncoding : aqui podemos definir el mapa de caracteres de la codifi- caciou de la pagina. Valor por defecto: 1SO-8859-1 . * isELIgnored : JSP 2.0 incorpora soporte para EL (Expression Language lengnaje de expresiones). Al ser una sintaxis nueva, por compati- Dilidad podemos optar por pedirle al traductor que la ignore. Valor pordefecto: false . ‘Veamios ahora algunos ejemplos de directivas de pagina: <@ page import="[Link],*” errorPage="error,jsp” content Type="textiplain”%> <2@ page info="ISP que maneja el panel de control” isELignored="tue"%6> <26@ page buffer="none” autoFlush="false"%@> _ INCORRECTO! JSP y JavaBeans JavaServer Pages fue diseilada teniendo presente la integracién con JavaBeans. Ya desde la version 1.0 se definian los tags que se usan para instanciar y acceder a JavaBeans. Para aquellos lectores no familiarizados con los JavaBeans, haremos una pequeita introduccién. >> wow. redusers com DESARROLLO WEB CON JAVA DESDE CERO. eee 71 JavaBeans LOS JAVABEANS, Los componentes JavaBeans no son mas . que clases Java que siguen ciertas con- PROVEEN METODOS venciones, No es necesario que extiendan PARA ACCEDER A IF zt ih It alguna clase ni que implementen ninguna SUS PROPIEDADES interfaz, simplemente deben proveer méto- dos para poder acceder a sus propiedades DE MODO ESTANDAR de una manera estandar. Si una clase Java cualquiera cumple con estas condiciones, Ja clase puede ser considerada un JavaBean. Estas convenciones no son excluyentes, Ja clase puede, adems de los métodos que acceden a las propiedades, definir cualquier cantidad de métodos propios, extender cualquier clase ¢ implementar cualquier interfaz. Veamos las convenciones: * Dada una propiedad, podemos definirla como de lectura yio de escritura. * Una propiedad no necesariamente debe estar respaldada por una varia- ble de instaneia; basta con que implemente los métodos requeridos. + Siuna propiedad es de lectura, entonces debe definir un método getter para accederla, Este método debe ser piblico y de la forma public [tipo] get{uombre de la propiedad]() © Siuna propiedad es de escritura, entonces debe definir un método setter para escribirla. Este método debe ser piiblico y de la forma public void set{nombre de la propiedad|{(tipo] nombre). + Ademas, un componente JavaBean debe proveer un constructor ‘que no tome parémetro alguno. Notemos que los nombres de los métodos de acceso deberin ser camel-case . 0 sea, seguir la convencion de mayuisculas que Java propoue. Si queremos implementar un getter sobre una propiedad de nombre peso. entonces el método debera Hamarse getPeso (notarla P maytiscula). ‘Veamos tun ejemplo sobre los métodos getter y setter para aclarar la sintaxis abstracta que hemos definido. Supongamos tenemos la propiedad [Link] users com «€ n pena 3. JAVASERVER PAGES detipo string denombre — descripcion y queremos que esta propiedad pueda leerse y escribirse. Entonces, debemos implementar estos dos métodos: public String getDeseripeion() { ... } public void setDescripeion( String str) { Si la propiedad es de tipo booleano (ya sea del primitive boolean o de laclase Boolean ),elmétodo accesor( getter )debe llamarse—_isPropiedad() en cualquier otro caso: getPropiedad() Por lo general, las propiedades de los componentes JavaBean estan re- lacionadas una a una con variables de instancia, pero esto no es necesario, ‘Veamos un ejemplo completo de un componente JavaBean: public class Circunferencia { ye * Radio + private double radio: jon * Posicion del centro ” private int x, y: i * Hueco 0 lleno 7 private boolean hueco: jee * Un constructor sin parimetros * public Circunferencia) { super(): >> wwuired users com DESARROLLO WEB CON JAVA DESDE CERO losers] 2B } public int getXO { retum x; } public void setX(int x) { this.x=x: } public int get¥() { return y; } public void set¥ (int y) { thisy=y: } public void setRadio(double r) { [Link] =r: } public double getArea() { return Math PI * radio * radio: } public boolean isHueco() { retum hueco: 3 pe * Para establecer el area nueva y ser consistentes, debemos modificar el radio * @param al frea nueva que queremos para la circunferencia ad public void setArea(double area) { radio = Math sqrt(area / Math PD: } 3 [Link] users com <€ ” ass 3. JAVASERVER PAGES: Enel ejemplo, definimos una clase llamada Circunferencia La clase tiene variables de instancia que, a su vez, son propiedades del componente Ja- vaBean, Las variables x € y que identifican la posicion de la ciromnferencia en el plano son tanto de lectura como de escritura, por lo que hemos de- finido métodos getter _y setter . El radio es una propiedad de solo eseritura, por lo que definimos solo un método setter . Tenemos una propiedad boo- leana, cuyométodo getter empieza con _ is. A su vez, tenemos la propiedad area . que, segiin vemos, es de lectnra y escritura, y esta propiedad no esta directamente relacionada con una variable de instancia. Scopes Antes de ver cémo interactuar con JavaBeans desde un JSP_ veamos primero los tipos de alcance (scopes) que existen y su utilizacion. Cuando definimos un JavaBean desde un JSP, como veremos Inego, de- Demos darle un aleance, Este alcance también puede ser pensado como visibilidad —_. Se define un componente con cierto alcance, y puede ser visto por otros objetos que estan en el mismo alcance que el compo- nente. Los tipos de alcance son: TIPOS DE ALCAN vy UTILIZACION Tabla 2. Scopes. >> www. red users com DESARROLLO WEB CON IAVA DESDE CERO aS 75 Usar JavaBeans desde un JSP ISP define ciertos tags especificos para la interaccion con JavaBeans. La idea es delegar todo tipo de légica de negocios en los JavaBeans y li+ initar la funcionalidad de las paginas JSP a la interaccion con el usuario, manejo de excepciones, redireccion a paginas, etcétera. De esta forma. tenemos componentes reutilizables (Ia principal cualidad deseable de un JavaBean) a través de la aplicacién web. Basicamente la interaccién con un JavaBean se reduce a: + crearlo u obtener una instancia; © acceder a propiedades; y + escribizle propiedades. jspuseBean tiene un doble propdsito. Sirve tanto para crear un bean como para acceder a uno ya creado, Si el bean ya existe en el scope, se obtiene una referencia, y si no existe, se lo crea. La sintaxis es: <jgp:useBean id="beauName” scope~"pagelrequest sessioulapplication” class="package class” [ type="package class” ] > (Otra forma, asignando atributos al crear (0 localizar) directamente, es: ‘<jspzuseBean id="beanName” scope="page'request|session|application” class="[Link]” [ type="[Link]” ]> <jop:setProperty .../> <jop:setProperty ... > </jspuuseBean> La segunda forma usa un tag que veremos luego, que se utiliza para escribir propiedades a un bean, wwwredusers com <€ 76 ces 3. JAVASERVER PAGES * id es el nombre del bean, Esto es andlogo al nombre de una variable. En el caso de que el bean se cree, se crearé con ese nombre: si ya existe un bean de ese nombre (en el scope definido), se devuelve tuna referencia a ese bean. * scope define el alcance del bean, segiin lo definido previamente. $i no especificamos este atributo, el valor por defecto es page. * class es el nombre completo de la clase que este bean ha de instancia. ‘Como todo JavaBean provee un constructor sin parémetros, siempre podremos crear un bean sin necesidad de contar con otro dato que no sea el nombre de la clase a instancia. + type determina el tipo del bean a instanciar. Esto puede sonar confuso No estamos declarando la clase a instanciar en el atributo class ? El atribu- to type es opcional: sino lo definimos, el tipo del bean sera el mismo que Ja clase que se instancia, Sin embargo, podemos querer que el tipo sea tuna superclase del bean instanciado o una interfaz que se implemente. Ejemplos: <jsp:useBean id="cire1” class="Circunferencia” /> seBean id=" <jep: ‘circ2” scope="session” class="Circunferencia” type" FiguraGeometrica” /> wee BPW eo Bs) Usar JavaBeans en las paginas JSP es una excelente forma de separar responsabilidades. Los JavaBeans se encargan de la logiea de los objetos de negocios sin saber siquiera que estan siendo usados en un entomo web. y las paginas JSP se ocupan de la presentacién. >> wwwired users com DESARROLLO WEB CON JAVA DESDE CERO ee 7 ‘Veamos el codigo generado para el primer ejemplo. Un detalle a no- tar es que cada implementacion es libre de generar el cédigo que quiera al traducir un JSP a servlet; sin embargo, si o si tiene que ser consisten- te con lo que pide la especificacién. En nuestro caso particular, Jasper 2, el componente de Tomeat encargado de traducir los JSP, gener6 la siguiente porcién de eddigo: [Link]évencia cirel = null; synchronized (_jspx_page_context) { cire1 = ([Link]) _ispx_page_context.getAttribute(“cirel”, PageContext PAGE SCOPE): if (cine1 = mull) { cire] = new [Link](); _ispx_page_context.setAttribute(“cirel”, circl, PageContext PAGE_SCOPE); Como vemos, el codigo hace exactamente lo esperado. Declara una variable detipo Circunferencia denombre cite], ¢ intenta obtenerla del scope de pagina. En caso de que no exista, el bean es creado y guardado en dicho scope “Le Ara ae Jasper 2 es un componente muy poderoso y configurable. En un entomo de produccién con mucho requerimiento de procesador. puede ser itil configurarlo paramejorar su performance. En la pagina web httpv/[Link]/ —_ancontraremos informacién especifica. [Link] users com 78 Es 3. JAVASERVER PAGES isp:getProperty se usa para obtener una propiedad de un bean. Su sintaxis es muy sencilla: <jsp:getProperty name="beanName” property="propertyName” /> name debe ser un bean ya creado u obtenido previamente mediante jsp:useBean + property es el nombre de la propiedad que deseamos acceder. Ejemplos: <jgp:getProperty name="citel” property="x" > <jsp:getProperty name="cite2” property="area” /> spsetProperty es utilizado para escribir propiedades en el bean. Su sintaxis es un tanto complicada, vedmosla con detalle: <jp:setProperty name="beanName” {property property="propertyName” [ param="parameterName” ] | property="propertyName” vahte="{string | ‘S{* Expression *}" | <®= expression %>}" } P name ; debe ser un bean ya creado u obtenido previamente mediante jsp:useBean property : es el nombre de la propiedad que vamos a escribir, ‘© “** para indicar todas las propiedacles del mismo nombre «que un parametro del request. * param :€s el nombre del parimetro del request que tiene el valor aasignatle a la propiedad. DESARROLLO WER CON JAVA DESDE CERO cm 79 * value: es el valor, constante o en forma de expresion, a asignatle a Ja propiedad. ‘Veamos unos ejemplos clarificadores <[-- Establecemos en 5 el valor de la propiedad x del bean cirel --> <jpp:setProperty name="cire1” property="x” value= <!-- Cambiamos el valor de la propiedad y de circ1 al resultado de la expresin > <joprsetProperty name="cire1” property="y" value="<%= Math sqrt(49) %>" /> <J-- Seteamos el valor de la propiedad radio de circ] al valor del pardmetro del mismo nombre (radio) > <jgp:setProperty name="cirel” property="radio” /> <I-- Cambiamos el valor de la propiedad radio de circl al valor del parametro ‘ratio’ > <jgp:setProperty name="cire1” property="radio” param="ratio"/> <I-- Cambiamos todos los valores de las propiedades, del bean circl a los valores de los parametros del mismo nombre --> <jsp:setProperty name="circ1” property="*" /> En el tltimo ejemplo, para cada parimetro que contenga el request, intentara escribir el valor del parémetro en una propiedad del mismo nombre. si existiera Inclusion de paginas Si intentamos apuntar a la reutilizacion de codigo (y también paginas). podemos incluir otros documentos (sean JSP. HTML 0 lo que queramos) wowwered users com €€ 80. cE 3. JAVASERVER PAGES dentro de una pagina JSP. La idea basica es abstraer funcionalidades y lograr una mayor modularizacién del sistema. Tipicamente, los encabe- zados, pies de pagina, firmas, eteétera, son implementados como paginas incluidas. Un ejemplo mas complicado es la seguridad de la pagina. Si quetemos verificar en cada pedido de cada pigina que el usuario esté au- tenticado y autorizado a su vez para ver la pagina en cuestiOn, entonces en toda pagina JSP incluiremos la funcionalidad de verificar la seguridad. ISP provee dos formas de incluir contenido: inclusion estatica e inclusién dinémica El primer tipo es equivalente a insertar el cédigo. ya sea estitico (una pagina HTML. por ejemplo) o dinamico (un JSP), en el documen- to. Al traducirse la pagina a servlet se inserta el contenido. La sintaxis es: <%@ include file="archivo%> EI segundo tipo también permite inciuir cualquier tipo de documento (estatico o dinémico), aunque tiene mas sentido al incluir paginas di- namicas. Este tipo de inclusion se procesa durante la ejecucion del JSP. Cuando un pedido llega al JSP. es redirigido a cada documento inchuido del segundo tipo, se procesa y el resultado es entonces incorporado en el documento que lo incluye. La sintaxis para inclusiones del segundo tipo es: <jpp:include page="includedPage” /> Un ejemplo completo ‘Vamos a desarrollar una aplicacién con paginas JSP para ejemplificar los conceptos del capitulo, La aplicacién consiste en un caleulador de in- tereses para plazos fijos. Dada la inversion inicial, la cantidad de meses que seri depositado el dinero y Ia tasa nominal anual que el banco paga, podremos saber las ganancias obtenidas. >> wwwired users com DESARROLLO WEB CON JAVA DESDE CERO losers] 81 Desarrollaremos a aplicacisn de la siguiente forma: un bean conten- dé Ia informacién (inversién, meses y tasa) y ademés sera el encarga- do de efectuar el céleulo con Jos datos. Una pagina HTML (sin funciona- lidad JSP) seré la puerta de entrada a la aplicacion. En ella, se pediran los datos y se reenviara la informacion al JSP. Este recibira el pedido, creari el bean, escribira los valores de sus propiedades segin los va- lores del pedido y obtendra el resultado (tambien una propiedad, pero en este caso, solo de lectura), Ademés, la pagina ISP definiré una pagina de error por si ocurriera una excepcién en Ta entrada de datos (en este caso. si se ingresara un dato que no fuera un niimero). intereses html <html> <head> <title>Calculador de intereses ISP
Inversigó:n:
Meses:
Tasa Anual %:
InteresesBean [Link] package capitulo3; public class InteresesBean { private donble inversion: private int meses; private double tasa: public void setInversion(donble inversion) { this inversion = inversion; 3 public void setMeses(int meses) { [Link] = meses: } public void setTasa(double tasa) { [Link] = tasa: } public double getInversion() { retum inversion: 3 public int getMeses() { retum meses: } public double getTasa() { retum tasa: } // El céleulo de las ganancias public double getGanancias() { retum inversion * (tasa / 100.0) * (meses / 12.0): } 3 >> wwuired users com 3. JAVASERVER PAGES: DESARROLLO WEB CON JAVA DESDE CERO os 83 calculolntereses jsp <%@ page errorPage="[Link]"%> Calculador de intereses JSP<Ititle> <head> <body> <jsp:nseBean id="intereses” class~"capitulo3 InteresesBean”> <jsp'setProperty name="‘intereses” property="*” > </jspzuseBean> Inversig&coacute:n : <jsp:getProperty name=" intereses” property="inversion” /><br/> Meses: <jsp:getProperty name="'intereses” property="meses” /><br/> Tasa Anual %: <jsp:getProperty name="intereses” property-"tasa” /><br/> <br> Ganancias: <jsp:getProperty name="intereses” property="ganancias” /><br/> <ibody> <html> error jsp <%@ page isErrorPage="trne"9%> <html> <head> <title>Ettor en pagina JSP [Link] users com 84 ees 3. JAVASERVER PAGES Error en Ja entrada de datos:
<%= [Link]() %>
Volver Problemas de usar solo JSP ‘Al igual que con Jos servlets, usar solo ISP para desaurollar un sitio complejo no es muy eficiente. Mezclar c6digo Java junto con el conteni- do web puede resultar en cédigo dificil de leer y mantener, como en el ‘ejemplo que se ve a contimiacién: <% int total for(int i=0: i < productos size: i++) { Producto pr = (Producto) [Link](i): total += prgetPrecio(): %> El producto tiene un de descuento % 3 else { >> www red us DESARROLLO WEB CON JAVA DESDE CERO cea 8s %> El producto tiene un 15% de descuento % t } if (precio > 1000) { > Este tipo de cédigo puede ser mejorado considerablemente si move- mos la logica de negocios a umn JavaBean. También puede ayudar mucho usar EL (Expression Language _), un Jenguaje que sirve para aeceder a variables, expresar ciclos, condiciones. etcetera, sin necesidad de inser- tar cédigo Java en el JSP. Sin embargo, tenemos el problema del control de flujo. y hay ciertos inconvenientes que simplemente hacen el cédigo dificil de entender y mantener. El control de flujo invariablemente im- plica cédigo dentro de un JSP, y tener el control de flujo de la aplicacion disperso en las paginas agrega complejidad al sistema. Enel proximo capitulo, veremos como usar una combinacion de servlets y ISP para resolver estos problemas, planteando un nuevo pa radigma, y veremos un fiamework que nos va a ayudar mucho: Struts wie @ OOO En el capitulo vimos las JavaServer Pages. una especificacién que se disefié para resolver, algunas complicaciones que presenta el desarrollo con servlets. Vimos eémo usarla para generar contenido dinamico y cémo interactuar con JavaBeans . También vimos que JSP no es la panacea y que trae sus complicaciones si lo queremos utilizar exhaustivamente. 86 oss 3. JAVASERVER PAGES Actividades TEST DE AUTOEVALUACION 1 ¢Cual es la principal ventaja de usar ISP respecto de usar servlets? {Por qué hay variables implicitas en un JSP? ,Cémo son inicializadas? {Qué ventajas tiene escribir un JSP como un documento XML? Row Ny {En qné casos es necesario usar un tipo de inclusién de documentos al ISP porque el otto tipo no serviria? EJERCICIOS PRACTICOS 1 Escriba una pagina JSP que salude al usuario de diferentes formas segiin Ja hora del dia (maitana, tarde 0 noche). 2 Bscriba una pagina JSP que use un JavaBean para acceder y escribir propiedades. Luego vea el servlet desarrollado, 3° Convierta el AhorcadoServiet del Capitulo 2 en una pagina JSP. manteniendo su fimcionalidad (?) PROFESOR EN LiNEA Si tiene alguna consulta técnica relacionada con el contenido, puede contactarse con nuestros expertos: profesor @[Link] >> wowed user E : Y. Struts En este capitulo haremos una introduccién a Struts, una potente herramienta de desarrollo web que nos posibilita una mesa de trabajo (framework) del cual podemos disponer para potenciar los alcances de nuestra programacion. ‘vintroduccién a Struts El modelo .. La vista El controlador... Struts. Hola Struts. Desarrollando aplicaciones con Struts 104 105 106 ws Aaa 88 ass 4. STRUTS: Introduccion a Struts El desarrollo de aplicaciones web usando JSP 0 servlets es conocido como Model 1. Bajo este primer paradigma, accediamos directanente a paginas o servlets, estos procesaban informacion y devolvian wn re- sultado, Esta forma de desarrollo auzastra problemas tales como la mez cla de logica con contenido, um flujo de la aplicacion bastante confuso, tuna reutiliza dn de cédigo que se toma dificultosa y, en definitiva, al final nos queda tna aplicacién dificil de mantener tanto para los pro- gramadores como para los diseftadores. Para remediar esto, se propuso usar servlets para el control de flujo y JSP para generar el HTML resultante. A esta conjuncién de tecnologia selaconoce como Model 2_. Este nievo modelo es tina adaptacian del patrén de diseno —- Model-View-Controller . Este nuevo paradigma propone separar el modelo, la vista y el controlador en tres componentes disjuntos y desacoplados (en lo posible), a fin de poder modificar un componente independientemente de los demids y que el resulta do impacte poco o nada sobre los otros componentes. Por ejemplo, poclemos rediseftar completamente la parte gréfica de muestra aplicacién sin tener que modificar en absoluto su funcionalidad subyacente: estamos modificando la vista sin necesidad de modificar el modelo o el controlador. Antes de seguir ahondando en el paradigma, veamos con detalle cada una de sus pastes. 6) STRUTS ACTION VS. STRUTS SHALE. Actualmente, el proyecto Struts —desarrollado por Apache Foundation se encuentra ‘en proceso de cambios. Por un lado, siguen mejorando el proyecto Struts original, amado Struts Action. y, por otro lado, estén desarrollando una versién alternativa Hamada Stsuts Shale. Esta iltima se basaen JavaServer Faces > wow DESARROLLO WEB CON JAVA DESDE CERO. EES 89 El modelo Se trata de los componentes que representan la informacion con la cual debe interactuar la aplicacion, Usualmente, son implementados con JavaBeans que contienen todo lo necesario para soportar a fuu- cionalidad que es requerida por el sistema, Por ejemplo, si la aplicacion consiste en una agenda de contactos, el modelo contend las personas, sus datos, sus relaciones, etcétera La vista Es la representacién grafica (y, generalmente. interactiva) de nuestra aplicacién. Eu nnestro caso, esta representacién seri finalmente una pigi- na HTML. pero podriamos disentar aplicaciones que tengan varias vistas. Por ejemplo, umn sitio web accesible desde un navegaclor con vista HTML y desde un teléfono celular con vista WML, El controlador Es el encargado del control del Alujo de la aplicacion, responde a los eventos generados en la vista e invoea las acciones pertinentes (en el modelo) y devuelve el control al usuario (en la vista). El funcionamiento de una aplicacion (web, en nuestro caso, pero puede ser de cualquier tipo) bajo este paradigma es el siguiente (1) El usuario hace un pedido. (2) El controlador recibe el pedido, lo analiza y decide qué accion debe ejecutar. (3) Laaccion se ejecuta y el modelo es modificado (o no) para ser consistente con el pedido del usuario. (4) El controlador recibe el control de vuelta del modelo y decide aué vista activar. (5) La vista se muestra, accediendo al modelo -de ser necesatio- para generarse, 90, ces 4. STRUTS: Figura 1. Los componentes son independientes pero interactitan entre si Struts Stmits es un framework para el desarrollo de aplicaciones web bajo el paradigma MVC. Debemos recordar que Struts 2 no es una continuacion de Struts 1; es una unificacién de dos framework: WebWork y Struts, Es sim- plemente un servlet, esté configurado para responder a una serie de pedidos. Al invocar al servlet desde una pagina web. este accede a su configuracion que, segin el pedido que se esté efectuando, redirige el control a una accion patticular. Esta accion (una clase especifica) se ejecuta y finaknente Hama al controlador para que cree y devuelva la vista conespondiente. El controlador wee Este paradigma existe desde 1979, fie ideado por Tryzve Reenskaug, un noruego que desarrollaba en Smalltalk para Xerox. Actualmente es muy usado en aplicaciones web yy tambign fue el paradigm que eligieron los ingenieros de Sun al disenar Swing, >> wow red users .com DESARROLLO WEB CON JAVA DESDE CERO ee al obtiene la vista que ha de mostrar (auevamente mediante la configuracién) y Ja muestra. Por lo general. al ser contenido dinémico, la vista necesita acceder al modelo para obtener los datos a mostrar. Podemios ver que esta légica de fincionamiento se adapta al patrén Model-View-Controller ActionFon - pedido “avaBean Ascion: Cliente @ JavaBean JavaBean, Figura 2. La representacion de componentes Struts como paradigma MVC, Hola Struts ‘Veamos un ejemplo de “Hola Mundo” usando Struts, para lego discutir al respecto. En btp/[Link]/[Link] descargamos Struts. Hay varias distribuciones posibles de descarga: a4 BPS OES Ute iy Muchos componentes que utiliza Struts para su implementacin son provistos por Jakarta Commons: BeanUtils (manejo de JavaBeans), Digester (proceso de archivos XML)FileUpload (envio de archivos), Logging (registracién de eventos) y Validator (validacion de formularios). También ineluye al proyecto ANTLR. um parser para inter- pretar validaciones complejas definidas por el usuario, 92 cess 4. STRUTS: * Binaries: esta distribucién contiene Ia distribucién completa de Struts en archivos FRAMEWORK PARA compilados, con documentacién y, ademas, STRUTS ES UN EL DESARROLLO aplicaciones de ejemplo. * Sources: coutiene el cOdigo fuente de DE APLICACIONES todo el framework y aplicaciones de ejemplo WEB BAJO MVC y documentacion, * Library: contiene solamente los archi- vos JAR empaquetados para ser usados en aplicaciones web. La distibucion Sources es ideal para indagar y entender el funciona- miento completo de Struts por dentro. A los efectos de seguimiento del libro, usaremos Ia distribucién Library. Una vez realizado el Paso apaso de la siguiente pagina, podremos com- probar que ya tenemos todos los archivos de Struts necesarios para inte grarlo a nuestra aplicaci6n. El siguiente desafio cousistiré en aprender como configurar la aplicacion para que use Struts. Recordemos que la configuraci6n de una aplicacion web se realizaba mediante el archivo [Link] . residente en la carpeta WEB-INF . Para ello. en la pagina 95, veremos un archivo [Link] basico que inchrye Struts, wee SPAS UL Struts esta disefiado para ser independiente de la vista, y aunque JSP es la opcién ‘mas usada y con mayor soporte de fincionalidad, también podemos usar otros rar meworks que se integran facilmente con Struts, como Velocity (similar a ISP pero basado en plantillas), Cocoon (un framework de desarrollo web) y Stex (tna extensién de Struts que implementa Model 2X_). DESARROLLO WEB CON JAVA DESDE CERO [users] 93 0 Cree un muevo proyecto accediendo a File/New/Project Elija el tipo de proyecto Tomeat Project © New Project (BS daa Propet 1 ava Projet rom Biting At le | Puen Deveoent 0 Copie solo los archivos de extension. JAR de la distribucion Struts enlacarpeta WEB-INF/lib del proyecto que se ve en la imagen. 94 Es 4. STRUTS: > 0 Agregue los archivos JAR al classpath accediendo a las propiedades del proyecto (botén derecho sobre el nombre del proyecto tr Properties yen lapestaila Libraries. haciendo clic en Add JARs . Java ald Path ne —— ates 2 sae] eS penas Bh Ltrs |% Gow wes | Seen tat a 4 reo Sle 4 is cone ome atc 0 Presione OKen el cuadro de propiedades del proyecto. Luego. copie todos los archivos de extension . TLD de la distribucion Struts en. lacarpeta_ WEB-INF del proyecto. >> wewired users com DESARROLLO WEB CON JAVA DESDE CERO oS 98 Aplicacién con Struts action org. apache [Link] config /WEB-INF/[Link] -- Esta directiva indica que el servlet ha de cargarse al inicializarse Tomeat > 2 actions/servlet-name> *.do wowwired users com &€ 96 4. STRUTS [Link] /tags/struts-bean-/taglib-ui> /WEB-INF/[Link] /tags/struts-humls/taglib-uri> /WEB-INF/[Link] /tags/struts-logic /WEB-INF/[Link] /tags/struts-nested /WEB-INF/[Link] /tags/struts-tiles/taglib-uri> DESARROLLO WEB CON JAVA DESDE CERO oa 97 Se define un servlet que es el controlador de Struts y se asocia todo pedido que termine con do ase serviet. Tradicionalmente. las aplicacio- nes Struts asocian esta extensién, pero podemos definir cualquier tipo qne queramos. Notemos también que dicho servlet toma un parametro. Este parametro ¢s la ubicacién del archivo de configuracion de Struts, que contiene toda la informacion necesaria para el funcionamiento de 1a aplicaciou, Mas adelante volveremos con detalles sobre este archivo. Finalmente, estin las declaraciones de taglibs Struts provee una se- rie de tags imny titles para usar en las paginas ISP (la vista). Para poder usar dichos tags. los declaramos en el descriptor web. ‘Veamos tun ejemplo minimalista del archivo de confignracién de Struts ([Link] ) para ejecutar “Hola Mundo” como aplicaciou web con Struts. type="capitulo4 action HolaMundoAction”> [Link] users com <«€ 98. cess 4. STRUTS: El archivo de configuracién de una aplicacién completa es inmensamente mas grande y complejo que este. En esta redncida y sencilla versién simple- mente declaramos que nuestra aplicacién tiene una tinica accién posible. Esta se activara cuando se acceda a la direecion holamundo y la accion a eje- cutarse es Ja que define la clase [Link] A su vez, esta accion tiene una sola vista asociada, de nombre ok y asociada a la pagina ISP ubicada en _/jsp/holamundo jsp Unos detalles mas a destacar (sin entuar aiin en detalles sobre este archivo): el path 0 punto de acceso de la aplicacién determina la di- reccién que queremos asociar a la accién. Notemos que no estamos agregando la extension do al path: sin embargo, en el descriptor de la aplicacién definimos que asociamos todas las direccioues que tenminan con do al servlet de Struts. Esto implica que si queremos acceder a la accion definida, asumiendo que estamos ejecutando Tomcat en la ma- quina local y que el proyecto se Hama Struts, debemos acceder a la si- guiente direccion web: http:/localhost:8080/Struts/[Link] : ‘Veams la implementacion de la clase HolaMundoAction package [Link]; import [Link] HupServietRequest: import [Link] http HttpServletResponse: import [Link]: import [Link]: import org. apache [Link]: import [Link]: public class HolaMundoAction extends Action { // Debemos sobreescribir el método execute public ActionForward execute(ActionMapping map, ActionForm form, HitpServletRequest req, HttpServletResponse res) throws Exception { 1/ Queremos ir a la vista de nombre “ok” retum [Link](“ok"); } 3 >> www red users com DESARROLLO WEB CON JAVA DESDE CERO a 99 ‘Una accién qne defina una clase para ser ejecutada debe referirse a una clase que extienda —_org.apache [Link] Action . Tipicamente sobrescribiremos. elmétodo execute , que es el método llamado por Struts. En el ejemplo, simple- mente le informamos al controlador que devuelva la vista de nombre ok. A no preocuparse si esto no se entiende totalmente: simplemente estamos mostrando un pantallazo del funcionamiento de Struts, para luego poder proseguir con més detalle y con ejemplos més completos. Para terminar esta mnini aplicacion, nos falta la vista. Segii el archivo de configuracién de Struts, esta se encuentra ubicada en jjsp/[Link] Creamos la carpeta y dentro de ella creams la pagina JSP: <%@ taglib uri="/tags/strnts-bean” prefix="bean”%> Esta pagina JSP declara que usaremos un conjunto de tags de Struts, instancia un JavaBean (esto es exactamente igual que en el Capitulo3) y finalmente utiliza un tag especifico de Struts para imprimir el saludo wee JAR Y CLASSPATH Enel paso 3 del Paso apaso_, agregamos los JAR de los proyectos que utiliza Struts a nuestro classpath, Esto es necesario para compilar nuevas clases que tengan referencias a clases de estos proyectos. Para la ejecucién, Tomeat automaticamente agrega a su classpath los archivos que estén dentro de las carpetas - WEB-INF/ib. de cada proyecto. wwwired users com <« 100 EES 4. STRUTS: ‘en pantalla. En este ejemplo. el tag de Struts no aporta mayor funcionalidad ala que podriamos haber logrado usando _, pero nego veremos que estos tags provistos por Struts son muy poderosos y tities ‘Vemos que hemos instanciado un bean, El e6digo de dicho bean es: package capitulo4 model: public class HolaMundoBean { 1/ Una propiedad private String saludo = “Hola mundo con Struts”; // La propiedad es de lectura public String getSaludo() { retum saludo: 3 3 ‘Sin mas, un bean con una propiedad de tipo string y un método accesor. Si arrancamos Tomeat y apuntamos el navegador a la direccion http:/localhost:8080/[Link] veremos lo signiente: Pee ee eee fctivo Edin Yer Fovorkos Heramientes. Ayuda OO BAD wu Dreccn | http focahost:8080/[Link] Hola mundo con Struts Figura 3. El resultado producido es el de siempre, la diferencia es que lo hemos producido mediante Struts. DESARROLLO WEB CON JAVA DESDE CERO. cas 1 Esto quiere decir qne, despnés de tanto trabajo. jobtenemos exacta- ‘mente lo mismo que hubiésemos logrado con una sola linea de JSP! Struts no es muy eficiente para escribir aplicaciones del estilo Hola Mundo _, pero pronto veremos que, para aplicaciones que requieran un minimo de complejidad, aporta mucho y simplifica el desarrollo. Ahora que hemos visto un ejemplo concreto en Struts, vamos a iden- tificar los componentes del modelo MVC. * El modelo en este caso consiste simplemente en un JavaBean (HolaMundoBean ) que contiene los datos a utilizar por la aplicacién, © La vista es uma pagina JSP que no tiene fimncionalidad propia, simplemente muestra los datos provistos por el modelo. © Elcontrolador es Stmts, que provee el servlet, las clases necesarias para obtener la configuracién, la légica interna. etcétera, y, ademas, laclase HolaMundoAction encarzada de definir las acciones y el flujo de nuestra aplicacién. Utilidad de Struts Struts nos va a ayudar mucho a desarrollar aplicaciones web. Algunas de las utilidades que provee son: + Desarrollo en componentes seatin el paradiema MVC, separando Ia légica del contenido. wee OLSEN LB ed El hecho de que tna accién tenga varias vistas asociadas se refiere a que las acciones, por lo general, dependen de ciertos parimetros de entrada, y puede ocurrir que prefiramos mostrar diferentes resultados que dependen de estos parametros, [Link] com <« 1020 ES 4 STRUTS: * Utilidades para mapear JavaBeans con for- ACTION ESLA mularios (mediante ActionForms ) y cargar los formularios con el contenido del bean CLASE MADRE DE © Internacionalizaci6n de la presentacion, LAS ACCIONES QUE En base al lenguaje del navegador. Struts automaticamente puede mostrar el conte- SE REALIZAN EN nido apropiado, LA APLICACION * Validacién _ Para validar formularios envia- dos por el usuario, Struts provee el Validator Framework, muy util para validadores simples (y no tan simples) que nos permiten efectuar validaciones sin necesidad de escribir c6digo. También podemos crear muestros propios validadores o definir la validacién especifica de los formularios, si lo necesitamos. * Subclases de Action No tenemos que limitarnos a extender la clase Action para cada accion que deseemos. Struts prove varias subclases que proveen ciertas funcionalidades. * Manejo de excepciones Podemos definir mangjadores de exeep- ciones a nivel global o por accion; de esta forma, cuando ocurra una excepcion, podremos realizar acciones de contingencia, registrar lo ocurrido para depuracién, etcétera. Soporte para DataSources En el archivo de configuracion podemos declarar uno 0 mas elementos data-somrce para definir accesos a bases de datos y utilizarlos desde acciones o servlets. 6) STRUTS EN EVOLUCION, Al ser Struts un proyecto de cédigo abierto (open source). esti en constante evo~ Iuci6n, Actualmente, cientos de colaboradores de todas partes del mundo aportan codigo e ideas para futuras versiones del proyecto. >> wwwred users .com DESARROLLO WEB CON JAVA DESDE CERO == 18 © Plugins. Pocemos definir plugins que se enchnfan en la aplicacién para realizar diversas tareas en la inicializacién o terminacién de esta. © Uploadde archivos. Struts provee una APT sencilla para manejar casos en los que el usuario envia archivos al servidor como parte de un fonmulario. + Reusabilidad de componentes de vista usando Struts Tiles. Action y ActionForm En los préximos capitulos analizaremos en detalle estos componen- tes, pero es menester aqui una pequea explicacién para entender el funcionamiento de Struts. Como vimos. Action es la clase madre de las acciones que se realizan en la aplicaci6n. Los objetos Action son un adaptador entre un pedido HTTP y la logica que ha de efectuarse en respuesta al pedido. Al recibir un pedido HTTP, Struts lo recibe y lo envia al Action correspondiente, proporcionan- do ademas objetos propios de Struts para su ejecucion. La aridad ¢s la signatura del método: qué parametros toma y en qué orden. Recordemos la aridad del método execute : Action orward execute(ActionMapping mapping. ActionForm form, HipServietRequest request, HitpServletResponse response) Una clase a destacar en esta discusién es ActionForm . Un ActionForm es un JavaBean cuyas propiedades son relacionadas con ‘parimetros del pedido. Al enviarse un formulario, se carga ActionForm con los valores establecidos por el usuario y se envia a Action para su ejecucion, Desarrollando aplicaciones con Struts Sabiendo como desarrollar aplicaciones con servlets y con JSP, veamos ahora en que se diferencia el desarrollo al utilizar Struts. www red users com « 104 aS 4. STRUTS: Siguiendo con la temética del paradigma MVC, el desarrollo de apli- caciones web se reduce a escribir estos componentes: * Model: objetos, por lo general JavaBeans, aunque pueden ser objetos de cualquier tipo que contienen la informacién y la logica de lo que queremos representar. Si bien los ActionForms por lo general contienen. propiedades compatidas con objetos del modelo, son componentes del controlador. Los objetos del modelo idealmente deben estar com- pletamente desacoplados del entomno web. Esto incrementa las chances de poder reutilizarlos en otros entomos. En concreto, no deberiamos depencler de ninguna clase especifica de Struts o servlets. * View: la vista consiste en generar péginas HTML o crear componentes que las generen, como paginas JSP. Es importante recordar que Struts no se limita a usar JSP como capa de presentacién. jNi siquiera tenemos que generar HTML como resultado! Podriamos generar y devolver al ustiario cualquier tipo de documento, si asi lo quisigramos. * Controller : escribir estos componentes consiste en desarrollar objetos Action, ActionForm. y asociarlos entre si en el archivo de configuracion. Los objetos ActionForm no se limitan a replicar las propiedades del for- unulario al cual estan asociados, sino que tambien desarrollan su vali- dacion, Los objetos Action. sou los encargados de procesar los pedidos ¢ indicarle al controlador la vista a mostrar como resultado. En los proximos capitulos conoceremos cada uno de estos compo- nentes, sus posibles variantes y su interaccion. Model 2X Al poco tiempo de popularizarse Struts en el mereado, algunas per- sonas notaron que el paradigma MVC inmplementado por Struts usando JSP como capa de presentaci6n no termina de aislar completamente el >> wwuired users com DESARROLLO WEB CON JAVA DESDE CERO. cee 105 contenido de la presentaci6n. Si bien las buenas practicas dicen que debemos usar JSP tinicamente como capa de presentacion y acceder al modelo para el contenido, nada impide que escribamos cédigo en Jos documentos JSP. Si esto ocurre, los beneficios del paradiema MVC se pierden, y la funcionalidad queda esparcida entre el modelo y Ia vis- ta. Si encima ejecutamos logica en las acciones, jtendremos funcionali- dad en el modelo, la vista y el controlador! ‘Una altemativa planteada, amada Model 2X _, consiste en hacer que las clases Action generen documentos XML y luego estos sean procesados mediante transformadores como XSLT o XLS:FO. Este acercamiento separa completamente el contenido de Ia presentaci6n y tiene numerosas ventajas wee En el presente capitulo vimos una introduccién a Struts, su funcionamiento segtin el pa- radigma Model-View-Controller, sus componentes, y cémo utilizarlo para el desarrollo de aplicaciones web. Vimos como emplearlo en un proyecto web nuevo, creamos una pequeia aplicacién de ejemplo y dimos un pantallazo por el Model 2X. [Link] users com <« 106 ce 4. STRUTS. Actividades wk won TEST DE AUTOEVALUACION (En qué consiste el paradizma MVC? {Qué fincién tiene eada componente del paradigma MVC? {Como implementa Struts el paradigma Model-View-Controller? {Cudl es la utilidad de los ActionForm ? Apegindonos al paradigma MVC, ;conviene ejecutar eédigo de la aplicacion enas clases Action? EJERCICIOS PRACTICOS Modifiqne la aplicacioa para que Struts mangje los pedidos que terminen con struts envezde .do. Modifique el modelo en Ia aplicacién para que devuelva la fecha actual ademas del salndo. Modifiqne la vista en la aplicacion para que devuelva la fecha actual ademas del saludo. wee Sitiene alguna consulta técnica relacionada con el contenido, puette contactarse ‘con nuestros expertos: profesor @[Link] ActionForms En este capitulo conoceremos los ActionForms. Veremos con detalle qué son, cémo programarlos y cual es su importancia en el desarrollo de aplicaciones. Luego del enfoqne tradicional. contemplaremos otras altemativas, ‘vInteractuando con el usuario...108 Lazy ValidatorForm. ActionFonns 109 Configurar un ActionForm........113 yResumen.... vAltemativas .. DynaActionForm 126 Aan los. 5. ACTIONFORMS Interactuando con el usuario Por lo general. desarrollamos aplicaciones web que interactiian con usuarios. Aunque es valido crear aplicaciones que simplemente muestren contenido (dinamico) que vaya cambiando con el correr del tiempo, sole- ‘mos buscar que el usuario interactte con la aplicacién, de forma tal que podamios brindarle la informacién especifica que necesita, En la programacién web con piginas HTML, el usuario tiene diversas fonnas de interactuar con una aplicacin, Por ejemplo, cuando necesita nos que el usuario ingrese datos, usamos un formulario, Los formularios en HTML no son unas que una aplicacién grafica que existe solamente en el cliente (el navegador web) para ayudar a generar el pedido HTTP. En teoria, podriamos no usar formularios y dejar que el usuario cree el pedido él mismo, pero seria una aplicacién muy poco amigable. Al ser los formularios la herramienta fundamental para recibir infor- macién del usuatio, las aplicaciones web trabajan con ellos intensamente. Struts _ provee fimeionalidad para ayudamos a simplificar la tarea de escri- bir formulavios y, sobre todo, para mantener su estado entre pedidos. (Aquénosreferimos con _ mantener el estado de un formnlario ? Es muy contin en los sitios web tener un formulario de registracion donde se pide una gran cantidad de datos, como nombre. clave, confit macion de clave, direccién, teléfono, correo electronico, eteétera. Supongamos (como EL FORMULARIO ES snele suceder) que tenemos ciertas restric ciones sobre ese formulario: los campos clave _¥ confirmacion de clave deben con- FUNDAMENTAL QUE | tenerel mismo valor: el nombre de usuario RECIBE INFORMACION 1° debe existir ya en nuestra base de datos, Imaginemos que el usuario ingresa algunos UNA HERRAMIENTA DEL USUARIO datos y envia el fornmulario pulsando el botén correspondiente. Estos datos llegan e al servidor y son recibidos. El servidor, al procesarlos, encuentra, por ejemplo, que el >> woowred users .com DESARROLLO WEB CON JAVA DESDE CERO c= 109 campo de correo electrénico, que es un campo requerido, no contiene datos. Entonces agrega el mensaje de error correspondiente y devuelve el mismo formulario al usuario para que corrija el error. Siguiendo estos pasos aqui descritos, todo parece estar correctamente; sin embargo, el usuario recibird el mensaje de error correspondiente, jy el formulario todo en blanco! Deberd entonces volver a completar todos los datos ademas de realizar la correcci6n, algo sumamente largo y tedioso. Anngue aiin hoy se ven en intemet aplicaciones que fimeionan de esa manera, debemos aseguramos de devolver el formulario cargado con los datos que el usuario ya habia ingresado, y esto es alo que nos referimos con mantenimiento del estado del formulario, Struts, entre otras cosas, nos provee lo necesario para no tener que implementar nosotros la funcionalidad de completar los campos que el usuario ya habia ingresado al devolverle un formulatio. ActionForms Un ActionForm representa un formulario en una pagina web. Las ac- ciones en Struts (implementadas en la clase Action ) rara vez interactian directamente con _HttpServletRequest 0 HttpServletResponse Implementar un ActionForm es seneillo: simplemente debemos crear un JavaBean que extienda la clase [Link] —_y definir sus propiedades y métodos de acceso como cualquier otro JavaBean. 6) erroNae icons WZNEe Una analogia ttl es pensar que el ActionForm es unfirewall entre el pedido HTTP y elAction que se ejecuta, De esta forma, solo enviemos al Action propiedades que declaramos en el ActionForm y. a su vez, podemos validar los datos que son pasadlos, de forma de poder programar el Action asumiendo que los datos son los necesarios y son validos. wuwured users com <« Tm sss] 5. ACTIONFORMS Una vez definido el ActionForm, debemos declararlo en el strats-config yy asociarlo con acciones. Al asociar un ActionForm con acciones, le estamos diciendo a Struts que, cuando llegue un pedido para una accién asociada, intente completar los datos del ActionForm con los datos del pedido, y ese ActionF orm es el que recibird el método execute delaclase Action. Desarrollemos un ejemplo de aplicacion web con um formulario donde el usuario debe ingresar nombre, sexo, edad y si es fumador o no. La pagi- na resultante se vera como en la Figural. Nombre: Edad: Fomador: 1 Figura 1. En entomos de produccién deberiamos restringir el acceso directo a las paginas JSP: el usuario deberia interactuar solamente con acciones de Struts. Luego, nos dedicaremos a la parte de creacin de la vista. que no es como en un JSP tradicional, sino que se crea utilizando tags de Struts; ‘mientras tanto, veamos cémo seria nuestro ActionForm. import [Link]: import [Link] [Link]. ActionForm: import org. apache [Link]: public class DatosForm extends ActionFonn { private String nombre: >> wowwired users com para indicar su status de fumador. ;Por qué DESARROLLO WEB CON JAVA DESDE CERO private Integer edad private boolean fumador: public Integer getEdad() { retum edad: } public void setEdad(Integer edad) { [Link] = edad: 3 public boolean isFumador() { retwn fumador; } public void setFumador(boolean fumador) { this_fumador = fumador: } public String getNombre(Q) { retum nombre: 3 public void setNombre(String nombre) { this nombre = nombre: } ‘Nuestro ActionForm no es mas que un JavaBean que extiende la clase ActionForm de Struts. ‘Vemos qe usamos tn Integer para representar la edad yun Recordemos que toda la connunicacion cliente-servidor se realiza me- diante el protocolo HTTP, que en definitiva transmite cadenas de caracteres, ee ol boolean, Integer ynoel primitive int? [Link] users com €€ TP c==7s] 5. ACTIONFORMS ACTIONFORM ES Simts recibe los datos ¢ intenta hacer la conver sin de tipos correspondiente entre los valores UN FORMULARIO del pedido y las propiedades del ActionForm. EN UNA PAGINA WEB Sienvezde Integer , hubigsemos puesto. Vee tor . por ejemplo. al enviar el formulario desde YES SENCILLO el navegador obtendriamos un error de tipo. DE IMPLEMENTAR Luego. le brindamos al usuario un campo de texto donde pueda ingresar la edad y espe- ramos un ntimero que represente una edad. Pero el usuario puede ingresar cualquier tex- to, Si el usuario ingresa una cadena que no puede ser transformada a un nimero, Struts nos devuelve el valor por defecto del objeto (en este caso, un mimero con valor cero). Esto finnciona tanto para el primitivo int como para el objeto Integer pero no podremos discemir si el usuario no ingres6 valor o ingresé un valor incorrecto, o si realmente ingres6 el nimero 0. Si usamos como tipo de datos el primitivo int , no tendremos forma de saberlo, En cambio, usando Integer podemos indicarle a Struts que. cuando no pueda realizar las eonversiones de tipo, establezea null como valor de los objetos en vez de su valor por defecto. De esta fora, si recibimos null como valor, podremos aseverar que hubo un error de conversién de tipo y que el usuario no ingres6 un nimero valido. Esta configuracién se realiza asignando el parémetro de inicializacin convertNull enelarchivo [Link]. En nuestra aplicacién, aplicando los cam- bios, el fragmento que inicializa Struts quedaria de la siguiente forma: action org. apache [Link]. ActionServlet config /WEB-INF/[Link] DESARROLLO WEB CON JAVA DESDE CERO em 1B convertNull tre 2 Configurar un ActionForm ‘Una vez definido un ActionForm, debemos asociarlo con determinadas acciones para que sea instanciado y cargado por Struts cuando dichas accio- nes sean accedidas. Los forms dentro del stmits-config se definen como una seriedetags form-bean encerrados dentro de un tag form-beans . Por ejemplo: STRING O NO STRING, Tae sd Peal SU LO)! Algunos desarrolladores optan por definir todas las propiedades de los ActionForm tienen més control sobre lo que reciben, ya que no suite como objetos string - Asi ninguna transformacién de tipo y pueden realizar validaciones propias. Otros prefieren usar tipos mas concretos ( integer - boolean ) cuando corresponde. Ambos enfoques son vlidos y tienen sus pros y sus contras 4 pe 5. ACTIONFORMS Cada elemento form-bean puede poseer tres atributos: * className define la clase que ha de configurar al bean que estamos de- finiendo (subelase de [Link] _). Puede ser itil usar esta configuracion cuando tenemos varios beans iguales. En vez de configurarlos uno por uno en el struts-config., creamos una clase FormBeanConfig_y se la pasamos a cada bean para que se configure, aunque por lo general es mas practico confignrarlos en el stnuts-config * name ¢s el nombre que queremos darle a este bean, * type es el nombre de la clase que instanciaré el bean, En nuestro ejemplo, la configmacion para definir el bean en Struts seria: Es un solo bean, de nombre datosForm_, que utiliza la clase que defini- ‘mos previamente. Declaremos ahora una accién que use el ActionForm: > wows DESARROLLO WEB CON JAVA DESDE CERO cS Notamos dos atributos nuevos, relacionados con form-beans © uame define el nombre del form-bean que esta accion va a usar. Este nom- bre debe existir entre los. form-bean declarados u obtendremos un error. + scope indica el contexto donde buscar el form-bean . Este puede residir en request o en session. Siel form-bean es guardado en sesién, cada vez que accedamos a una pagina que lo use estaremos accediendo a una instancia, posiblemente, con valores ya guardados de antes. Esto puede ser de utili- dad si queremos dividir una carga de informaci6n en varias paginas. ActionForm reset ‘Un método importante que define la clase ActionForm es: public void reset(ActionMapping map. HttpServletRequest req) Este método es invocado por Struts antes de completar las propiedades del form. A priori, jeste método no tiene sentido! Dado un form con pro- piedades, se llama a un método que reinicializa sus propiedades, volvign- dolas a su valor por defecto, para Inego establecerle los valores que vie~ nen del cliente, Entonces, ;para qué volverlas aun valor por defecto si en definitiva se van a reescribir? En la préctica, hay un caso en el ACTIONFORM que este método es necesario. RESET REINICIA Si tenemos un form guardado en sesié (esto es, declarado en la accién que lo utiliza SUS PROPIEDADES con scope="session” )y este formulario tiene PARA LUEGO algim checkbox (casilla de seleccion binaria, RESTABLECERLAS como, en el ejemplo, la propiedad. fumador ), es necesario reestablecer el valor de las pro- piedades asociadas con los checkboxes. Esto R 5 se debe a que un checkbox, que tiene dos [Link] users com <€ 16 ass 5. ACTIONFORMS estados. solo envia su estado cuando esta marcado. Cuando se encuentra desmarcado, no envia nada al servidor. Bajo este funcionamiento, si el form es reutilizado y el valor de una propiedad booleana asociada con un checkbox era verdadero, munca va a cambiar a falso aunque la opcién esté desmarcada en el navegador, simplemente porque no se recibira informacion alguna sobre esa pro- piedad y mantendra su estado. Validacion de ActionForms Por lo general, al interactuar con el usuario, necesitamos validar lo que este ingresa en los formularios. Algunos datos son requeridos y el usuario no puede no completarlos, otros tienen un rango que no puede excederse, otros deben pertenecer a cierto dominio, etcétera. Laclase ActionForm pose un método apropiado para validar los datos jgresados por el usuario. y su aridad es: public ActionErrors validate(ActionMapping map. HttpServletRequest req) Este metodo puede ser invocado cada vez que se realiza un pedido. Nosotros debemos proveer una implementacién particular para cada uno de los ActionForms que creemos. ActionErrors es una clase que encapsula mensajes de error. Cada men- saje de error (una instancia de la clase ActionMessage_) puede ser global © estar a asociado con un campo en particular. En nuestro ejemplo, si el usuario no eseribe un nombre, el mensaje indicador estara asociado conel campo nombre . Volvamos al ejemplo previo y asummamos que los campos nombre y edad son requeridos, y que fumador puede ser verdadero solo si la edad es mayor que 18. Eutonces debemos implementar el metodo validate de Ja siguiente forma: >> www red users com DESARROLLO WEB CON JAVA DESDE CERO c= 7 public ActionErrors validate(ActionMapping map, HttpServletRequest req) { ActionErrors ret = new ActionErrors(): if (nombre = null | [Link]().equals(“”)) { [Link](nombre”, new ActionMessage(“Falta ingresar nombre” false)): } if (edad = null) { [Link](“edad”, new ActionMessage(“Falta ingresar edad”, false)): } else { if (fiumador && [Link] < 18) { [Link](“fumador”. new ActionMessage( “Pequeñ:o fimador!”, false)): } 3 return ret: 3 Si no hay mensajes de error, podemos devolver un objeto ActionEtrors vacio (como en el ejemplo) o bien null. Es conveniente devolver todos los errores juntos y no frenarnos al encontrar el primer error: si no, el usuario tendria que hacer las correcciones una por una. Es muy simple agregar un mensaje de error aun ActionEsrors . invo- cando el método: add(String property, ActionMessage message) EI primer partmetro es el nombre de la propiedad a la cual esta asocia- do el mensaje de error. Si queremos un mensaje de error global, usamos la constante — ActionErrors. GLOBAL_MESSAGE [Link] users com <€ us mess 5. ACTIONFORMS Los objetos ActionMessage _fiteron disefiadas para trabajar con interna- cionalizacién y extemalizacién de cadenas de caracteres, a fin de no tener que embeber texto en el cédigo. Configurar la validacion Dijimos que el metodo validate puede ser invocado con cada pedido. La invocacién o no del método es configurable para cada accion. Pode- mos querer que algunas acciones validen el contenido y otras que no, siempre refiriéndonos al mismo ActionForm. Para configurar las accio- nes con la validacién. debemos establecer los valores de dos atributos en cada elemento action del struts-config + validate define siesta accion efectia la validacion del form (valores time / false ). * input define la pagina adonde reditigir al usuario si la validacién falla Configurar Struts con MessageResources Al respecto de textos externalizados, Struts necesita que definamos jos archivos en donde hallar estos textos (en varios idiomas). En los proxi- mos capitulos, ahondaremos sobre esos temas, pero es probable que ‘Struts no funcione correctamente si falta esta definicion. wee ACTIONERROR VS. ACTIONMESSAGI Suena extrafio que, existiendo la clase Action ror , los mensajes de error se ereen, usando laclase ActiouMessage -Laclase ActiouError es casi exactamente igual a ActionMessage . En las iltimas versiones, su cédigo fue unificado y, en las proximas, ya no se incluira mas ActionError como clase. >> wwwired users com DESARROLLO WEB CON IAVA DESDE CERO ca 9 Para solucionar el problema, basta con agregar la siguiente linea en [Link] luego de los action-mappings. = <1-- Definimos un form-bean de nombre datosForm, implementado por a clase [Link] —> wwwwired users com Pe uss] 5. ACTIONFORMS action path="/ingresoDatos” name="datosForm” scope="request™ validate="true” input=”/jsp/capitulos/formulario,jsp” type="capitulos. IngresoDatosAction”> . wu ‘G) arenes Sateen it sree lett te lenre eseererl sea wre pencae teats ‘caso, no nos olvidemos de tener la comespondiente. Si nos falta alguna de ellas, podemos visitar la siguiente pagina web: [Link] —_Particularmente podemos encontrar la que necesitamos para este proyecto en este sitio web: www [Link]/Code /Jar/s Downloadstrutstaglib1 39jaritm >> wwuired users com DESARROLLO WEB CON JAVA DESDE CERO cs 2 Creamos el archivo de formulario, que es el punto de entrada: ‘isp/capitulo5/formulario jsp <%(@ taglib uri="/tags/struts-htmnt” prefix="himl"%6> <%-- Este formulario se enviard a la accién ingresoDatos ~%> <%-~ El mensaje de error si algo falla respecto al nombre ~-%> <%r~ El mensaje de error si algo falla respecto a la edad ~%> <%-- El mensaje de error si algo falla respecto a la condicién de fumador --%> Esta definicion podria reemplazar a la clase DatosForm que definimos al principio del capitulo, aunque con este DynaActionForm perdemos la va- lidaci6n. Sibien laclase —_- DynaActionForm_ permite tipos primitivos en sus >> [Link] users .com DESARROLLO WEB CON JAVA DESDE CERO [Users propiedades, si se intenta asignarles nn valor malo obtendremos una ex- cepcién, por lo que es conveniente usar siempre objetos. Las opciones del elemento form-property son: © className : nombre de la clase que configura este elemento. Es un atri- buto que fimciona igual que en la definicion de un foun-bean . La super- clase que deben extender las clases de definicion de propiedades es [Link] [Link]. FormPropertyConfig * initial: valor inicial que tomara esta propiedad (sepresentada por una cadena de texto). Si omitimos este valor, la propiedad sera ereada usando el constructor sin arguments de la clase. * name : es el nombre de la propiedad. * size: es el niimero de elementos a crear si el tipo de esta propiedad es un arreglo y no se especificé un valor inicial de creacién, * type: es el nombre de la clase que instanciaré el bean. Los atreglos son necesarios cuando el usuario tiene que elegir una can- tidad de items de una lista miiltiple, Un aspecto positive de los DynaActionForm es que no necesitamos mo- dificar nada de cédigo para acceder a ellos en las piginas JSP. Si estamos migrando viejos ActionForm a DynaActionForm . si tenemos que modificar ligeramente la forma de acceder a las propiedades. El método para obtener Jos valores de los campos en un DynaActionForm. ¢s el siguiente: wee CIONALIZACI Idealmente, no deberiamos tener ningtin tipo de texto en nuestro cédigo: Struts nos ayuda con la intemnacionalizacion, Los mensajes son externalizados a archivos, y 250 nos facta hacer miltiples versiones en diferentes idiomas, para poder mostrarle al ‘usuario un mensaje en su propio idioma, [Link] users com <« Rs pees 5. ACTIONFORMS public Object get(String name) El pardmetro corresponde al nombre de la propiedad a acceder y el resultado es el valor de dicha propiedad. La ventaja principal de usar DynaActionForm es prescindir de escribir una clase completa para cada formulario web que necesitemos, Sin embar- 20. este cambio no es gratis. Entre sus desventajas, podemos nombrar: © Elmétodo get devuelveun Object , lo cual implica que debemos cas tear el resultado. Al ser el casteo dinémico, no se lo puede predecir en tiempo de compilacion, y, si cometimos un error, nos enteraemos (eventualmente) en tiempo de ejecucion. * Lo mismo ocurre con el nombre del campo. Podemos equivocamnos en el nombre y el compilador interpretaré una Hamada a funcién totalmente valida, Recién al ejecutar nos enteraremos del error. Pese a estas dificultades, usar DynaActionForm es muy conveniente cuando el formulario precisa validaciones simples que pueden imple mentarse usando el Struts Validator. LazyValidatorForm Esta clase se basa en la clase LazyDynaBean , un bean dinamico como el usado por DynaActionForm , pero con la posibilidad de agregarle y quitarle elementos en tiempo de ejecucion, Esto nos libera incluso de tener que definir las propiedades del form en el struts-config . Aunque no es necesario, es conveniente declarar los arreglos que vaya- ‘mos a usar. porque, si no lo hacemos, puede haber complicaciones al usar esta clase en conjunto con el validador de Struts. Ante la ventaja de no tener que declarar las propiedades de los for mularios, tenemos la desventaja de que LazyDynaBean no sabe los tipos que queremos asignarle, por lo que, al recibir cadenas de texto, siempre >» wow DESARROLLO WEB CON JAVA DESDE CERO cm 129 ‘tendremos cadenas de texto y no hara conversiones de tipo. Esto podria no serun inconveniente si no dependemos de las conversiones de tipo y usamos las propiedades de los forms siempre como objetos de tipo string. Figura 3. ‘Todas Jas altemnativas siguen siendo ActionFonm, (Lazy Validator? El lector atento habra notado que las otras clases eran ActionForm, DynaActionForm y que, ahora, esta clase no se lama, como podriamos asumir. “LazyActionForm”. sino LazyValidatorForm . {Por qué? De hecho, tanto ActionForm como DynaActionForm tienen de subclases a ValidatorForm y DynaValidatorForm . respectivamente. wwwwired users com 30 EES 5. ACTIONFORMS Estas clases —jadivinaron!— estan relacionadas con el uso del va- lidador de Struts, En el capitulo dedicado a validacién, veremos que tendremos que usar ——_-ValidatorForm 0 DynaValidatorForm si queremos usar dicho paquete. El autor de LazyValidatorFoun ismplementé directamente la version que fimeiona cou validador. A causa de esto. es posible que un ejemplo que use —_LazyValidatorForm no funcione si no esti definido el plu- gin de Struts Validator Ejemplo en JSP Para aplicar lo que aprendimos en este capitulo, proponemos el siguiente ejemplo de fommulario en paginas JSP para luego aplicar las facilidades que vimos en ActionForm y DynaValidatorForm Tenemos dos archivos sp que utilizaremos: uno hard de formulario ¥ el otro, de resultado, Veamos el cédigo. Creamos el archivo indexjsp = ‘Formulario Principal<\title> </head> <body> <form action="proceso,jsp” method= Nombre: <input type="text” name="nombre”> <br> Apellido: <input type="text” name~"apellido”> <br/> Edad: <input type="text” name="edad”> DESARROLLO WEB CON JAVA DESDE CERO [users] <br> Lenguaje prefer <select name="lenguaje"> ‘java>javal selected>jsp <option value"php”>php <option value="C/C+4+>C/C++ <option value="C#”>C# <option valne="Asp”>Asp <option value="AS3">AS3 </select> <bi> Me gusta el: <br> 131 <input type="Radio” name="preferencia” value="Diseito”checked>Diseito <br> <input type="Radio” name="preferencia” value="Programacion’>Programacion <br> <input type="Radio” name= “preferencia”value="Modelada”>Modelado <br> <input type="Radio” name= “preferencia” value=" Gerencia”>Gerencia de proyectos <br> <p><input type="submit” value="Envi </form> </body> </htnl> woww red users .com « B20 GEES 5. ACTIONFORMS Creamos el archivo de resultado proceso,jsp <html> <head> <title-HOLA FORMULARIOS<‘title> <head> <body> % /*podemos leer los datos del request a una variable*/ String edad=(String)request getParameter(“edad”); String prefieres=(String)[Link](“preferencia”): out print(“tu nombre es “+[Link](“nombre”) +"+[Link](“apellido”)); [Link](“<br/>"); out print(“tienes “+edad=" aitos”); [Link](“<br/>"); out print(“tu lenguaje favorito es “+request getParameter(“lenguaje”)); out print(“<br/>"); out print(“y prefieres el(a) “+prefieres+" de un proyect [Link](“<br/>"); /*podemos usar los datos directamente desde el request*/ out print(“Bienvenido a jsp “+ request. getParameter (“nombre”).[Link]()); %> </body> </html> >> wwwired users com DESARROLLO WEB CON JAVA DESDE CERO ca 33 Luego ejecutamos el proyecto desde el archivo [Link] en el servidor Tomcat predeterminado, Los resultados deberian ser los siguientes: <> Femi Pincrs Figura 4. Resultado del modelo de paginas dinémicas. “ue En este capitulo vimos los ActionForms, su importancia dentro de Struts y como usarlos para obtener informacién del usuario en una forma portable y elegante. También vimos eémo validar los datos que el usuario ingresa y altemativas para no escribir una clase por cada formulario. 4 EES 5. ACTIONFORMS Actividades TEST DE AUTOEVALUACION 1 {Qué aportan los ActionForms? 2 {Por qué es preferible usar ActionForms en vez de interactuar directamente con el HttpServietRequest ? 3. (Porqué se considera un ActionForms como un firewall entre el pedido HTTP y laaccion que se ejecuta? 4 {Cudl es la complicacién de usar tipos primitives como propiedades de los ActionForm? EJERCICIOS PRACTICOS 1 Modifique la clase DatosForm para que, ademas, verifique que edad sea un niimero positivo. 2 Creeun ActionForm con propiedades fechaDeNacimiento yralle. Escriba nn método para validar ambos campos segiin su criterio (ayuda: use SimpleDateFormat para validar fecha). 3. Tome el ultimo ejemplo de JSP y mejore su programacion con ActionForm. 4 Tome el iltimo ejemplo de ISP y mejore su programacién con DynaValidatorForm PROFESOR EN LINEA Si tiene alguna consulta técnica relacionada eon el contenido, puecte contactarse con nuestros expertos: profesor @[Link] >> www. red users com ale Actions en Struts Luego de estudiar las facilidades de ActionForms, nuestro proximo paso es tratar los Action en Struts. En este capitulo vveremos para qué sirven, como programarlos, las diversas alternativas que oftecen y cémo interactitan con la vista, usando tags propios de Struts. 136 137 140 141 yProgramar el controlador Configurar un Action. ActionForward.. Actions para todos Resumen. Actividades aaa B6 | ESE 6 ACTIONS EN STRUTS Programar el controlador En el capitulo anterior vimos que un ActionForm escomoun — firewall entre el pedido que hace el cliente y el servidor: no deja pasar informa- cion no deseada, y, la que pasa debe ser validada, Lasclases Action hacen las veces de interfaces entre el pedido HTTP que efectita el cliente y las clases que han de efectuar la légica subya- cente, Bien podriamos realizar todas las operaciones dentro del cédi en los Action . pero esto implica mezclar responsabilidades: la légica estard altamente atada al entomo web (y, en particular, a Struts) y 0 podremos reutilizar componentes de software ‘Una buena practica de programacion web es programar los Action como adaptadores entre objetos propios del entorno web y de Struts (HitpServletRequest . ActionForward_. etcétera) y los JavaBeans. Deben. recibir Ia informacién proveniente de las paginas, validarla, procesarla y envidtsela a los JavaBeans para que hagan lo suyo. Finalmente, envian el resultado a la vista, en donde esta consultara a los beans su estado para mostrar al cliente nna pagina web. ActionFon) O pedido JavaBean “Acciéa Cliente JavaBean O JavaBem Figural. Siaislamos los JavaBeans del entorno web. nos resultaré mucho mas facil la reutilizacién: en otros entomos. >> woowred users .com DESARROLLO WEB CON JAVA DESDE CERO. eee 137 Struts reutiliza las instancias de las clases Action que definamos para mane- jar pedidos sinulténeos: debemos programar las, Action de forma segura a la ejecucién concurrente: las variables (tanto de instancia como de clase) no de- ben usarse para mantener informacién del estado actual del pedido, y el acce- so a recursos extemos debe estar sincronizado si dicho recurso lo requiriera. Configurar un Action ‘Veamos las opciones que tenemos para configurar un action. Los siguientes son algunos atributos posibles de Action enel struts-config © attribute : es el nombre que queramos dale al ActionForm para ser guar- dado en el pedido o en la sesion. Si no especificamos este atributo, se usard el nombre del ActionForn tal como aparece en el atributo name. + forward: es la direccion del recuzso (otto action, un JSP, un servlet u otto recurso que pueda manejar el pedido) que ha de procesar este pedido. + include : direccién del recurso qne se ha de incluir en la respuesta que genere este pedido. La diferencia de fincionalidad entre estos dos iitimos atributos es similar a los distintos tipos de inclusion que existen en las paginas ISP. Usando forward creamos una accién que envia el pedido al recurso que es- ‘pecifiquemos, y ese recurso se encargara de procesarlo y generar la respues- ta, En cambio, si usamos include, estamos incluyendo en nuestra respuesta 6) EVITANDO SINCRONIZACIONES En general, una buena practica consiste en no utilizar directamente ningtin tipo de va- riables globales (ni de instancia, ni de clase) dentro de Ins clases y declarar todas Ins variables a ser usadas como locales dentro del método execute - wwwwired users com BS ass 6 ACTIONS EN STRUTS: el resultado que genere el recurso especificado. pero no estamos derivando completamente el pedido a dicho recurso. * type: nombre completo de la subelase de [Link]. Action que procesara los pedidos que este elemento describe. Encada elemento action los atributos forward , include y type son exelu- yentes entre si, solo puede haber uno de ellos. * input : direccién del recurso a invocar si el ActionForm asociado al elemento (en caso de que exista) reporta errores de validacién. * name: nombre del form-bean asociado (tal como fue definide dentro del elemento form-beans ), si hubiere. © path : direccion que este elemento procesara. * parameter : parimetto de uso general, usado para pasar informacion extra al Action, Podemos crear una clase llamada BDAction y que tome de este parametro el nombre de la conexion a la base de datos. Luego, las accio- nes que requieran conexién a una base simplemente extenderan BDAction, * scope : contexto en donde reside el form-bean + request 0 session (este tema fie expuesto en el Capitulo), * unknown : mareador (solo puede tomar valores ‘tmue o false) usado para cou- figurar la accion por defecto a ser ejecutada. Si se recibe un pedido que no esta asociado con ninguna accion, el usuario recibira un e1zor de parte de Struts. Si declaramos una accién con el atributo unknown verdadero, sera la accién por defecto a ejecutarse en estos casos: esto es itil para mostrar al usnario un mensaje de error agradable o reditigirlo a una pagina de nave- zacién, Solo puede haber una sola accién con este attibuto con valor ime. * validate : marcador (solo puede tomar valores tmte 0 false ) usado para indicar sil formebean debe ser validado antes de ser enviado al objeto Action y este, ejecutado, Por defecto, este atributo leva el valor true. En todos los atributos donde hemos de especificar direcciones, estas deben empezar con una barra ( d. >> www red users com DESARROLLO WEB CON JAVA DESDE CERO cas 139 ‘Veamos ejemplos de confignraciones, con sus respectivas explicaciones: <action path="/formulario™ forward="/jsp/capitulo6 /formulatio jsp"> ‘Un elemento simple que asocia una accién directamente con una pagina ISP. Este tipo de configuracién es til para esconder las paginas JSP detris de acciones, una buena practica por temas de seguridad (que veremos luego). <action path="/footer™ include="/jsp/comun/ footer jsp"> Similar al anterior, pero usando include , este ejemplo es de utilidad para pies de pagina o elementos que se repiten mucho, De mievo, esconde las paginas JSP de la interaccién directa con el usuario. <action path="/accionXYZ” name="xyzForm” validate="false” input="xyz,jsp” type-"[Link]”> En este raro ejemplo, declaramos que el bean no debe ser validado: sin embargo, estamos definiendo la pagina donde debe reenviarse en caso de que la validacion falle. Si bien la pagina no sera accedida nun- ca, esto es sintacticamente correcto. [Link] users com <«€ 0 EES 6. ACTIONS EN STRUTS <action path="/” unknown="true” forward="/jsp/error jsp” /> Este ejemplo sirve para manejar todos los pedidos que Struts reciba yno tengan asociados un elemento action . y redirigirlos a una pagina JSP donde se muestre un mensaje de error. ActionForward Todo elemento action puede tener opcionalmente un conjunto de elemen- tos que describan _ActionForward , los cuales pueden ser accedidos desde el action para comunicaule al controlador hacia donde debe seguir el flujo de la accin. Un ActionForward es una clase que contiene informacién sobre hacia donde debe enviar el pedi el controlador como resultado de una accién, Los tres atributos elementales para definir un ActionForward son: * name: nombre que queramos datle al ActionForward . * path : direceion de destino. * redirect ; si este atributo toma valor tue , entonces un auevo pedido sera emitido para acceder al destino de este ActionFerward Al emitirse un nuevo pedido para el des- ‘tino del ActionForward . estamos periliendo ACTIONFORWARD ‘todos los datos que el pedido actual tenia: CONTIENE LA datos de formulatios, datos guardados por . un Action , entre otros, se pierden. Esto puede INFORMACION SOB] ser beneficioso o perjudicial. Si necesitamos HACIA DONDE ENVIAR _ alguna de estas informaciones para poder UNA ACCION constmuir la vista, obtendremos un error 0 “ bien la vista estara incompleta. El hecho de emitir un nuevo pedido es itil para cuando el R e usuario efectiia una acci6n con efectos cola terales y no queremos que la repita por error. DESARROLLO WEB CON IAVA DESDE CERO c= Por ejemplo, si transfirié una cantidad de dinero entre cuentas de un banco. En este caso, la accién fie “transferis X cantidad de dinero entre cuenta A y cuenta B”, que, como resultado final, tuvo un ActionForward a tuna pagina que confirmé la operacién. Si el usuario, accidentalmente 0 no, presionara el botou de recargar pagina en el navegador, estaria reenviando el pedido de transferir nuevamente el efectivo, algo que dudosamente sea lo que él quiera. Siel _ActionForward de Ja operacion de transferencia hacia la pagina que muestra que se efectnd comectamente emite un nuevo pedi- do, entonces el iltimo pedido sera “ir hasta la pagina de confirmacién”, y no habria problemas si el usuario recargara la pagina. ‘Veamos algunos ejemplos de ActionForward : <forward name="pedido” path="/jsp/[Link]” > <forward name="confimacion” path="/jsp/confirm jsp” redireet="true"/> Actions para todos Elpaquete [Link] _provee varias subclases de Action con diversas funcionalidades comunes ya implementadas. Podemos descargar estos paquetes desde las direcciones web vistas en el capitulo anterior. Como ya vimos, Struts invoca el método execute dentro de los objetos Action . Esto implica que debemos crear una clase por cada accion. Seria ns conveniente poder tener varias acciones dentro de un mismo objeto Action , de modo de agmupar las acciones segiin lo que realicen. Las clases DispatchAction y sus subclases sirven exactamente para esto. Para estos ejemplos, pocemos descargar cualquier paquete que necesi- temos desde esta excelente pagina de recursos: [Link] DispatchAction DispatchAction lama al método segin el valor de un parimetro del pedido. cuyo nombre es especificado por la propiedad parameter en el wwwwired users com M2 eS 6, ACTIONS EN STRUTS elemento action del struts-config . ;Confuso? Vedmoslo en la practica. Uno de los attibutos del elemento action era parameter . cuya funcién era ser de uso general para pasar informacién extra al objeto Action . En este caso, vamos a hacer uso de ese parimetro, Declaramos una accién en struts-config . <action path="/cuentas” type="[Link]” name="cuentaForm” scope="request” parameter="metodo” Definimos la clase: package capitulo6; import javax servlet http HttpServietRequest: import javax servlet http HttpServletResponse: import [Link] struts action ActionForm: import [Link] [Link]; import [Link] [Link]: import [Link]: public class CuentaAction extends DispatchAction { public ActionForward depositar(ActionMapping map. ActionForm form. HtpServletRequest req, HttpServletResponse res) throws Exception { /) Acciones de depésito >> [Link] users com DESARROLLO WEB CON JAVA DESDE CERO =m 148 public ActionForward extraer(ActionMapping map, ActionForm form, ‘HupServletRequest req, HttpServletResponse res) throws Exception { i Acciones de extraccion. ‘Y he aqui una pagina minimalista JSP que interactia con esta accion. La llamaremos —_ formulario jps <a href="[Link]?metodo=depositar”>Depositars/a> <br> <a href="[Link]?metodo=extraer”>Extraer</a> <br/> <a href="[Link]">Error!</a> Al acceder a esta accion, Struts buscaré el parémetro de nombre metodo en el pedido, obtendra su valor y llamara al método de ese nombre. Si el parémetro no existe, o si el valor del parametro no coincide con nine sin método, obtendremos una excepeién, Es importante destacar que no aleauza con que el métode coineida con el nombre: tambien debe coincidir con los parametros recibidos. Por eso, al implemen tar estos métodos, debemos asegurarmos de respetar la aridad del método execute . MappingDispatchAction En este caso. no necesitamos de un parime- tro en el pedido: el metodo a ser llamado es el valor del atributo parameter . Utilicemos el ejem- plo anterior. Usando — MappingDispatchAction , seria’ [Link]. [Link] TIENE SUBCLASES DE ACTION TMPLEMENTADAS " [Link] users com <€ M4 ees 6. ACTIONS EN STRUTS <action path="YextraccionCnentas” type="[Link]” name="cuentaForm” scope="request” parameter—"extraer™ b <action path="/depositoCuentas” type="[Link]” name="cuentaForm” scope="request” parameter="deposito” La clase no varia, tiene los dos métodos con los mismos nombres. <a href~"[Link]”>Depositars/a> <br/> <a href"[Link]”>Extraer</a> <br/> ForwardAction, IncludeAction Estas dos clases proveen la misma funcionalidad que los atributos forward ¢ include en los elementos action . En ambos casos, el valor del atributo parameter indica el recurso a redirigir o incluir, respectivamente. En concreto, los signientes ejemplos son eqnivalentes: >> wowwired users com DESARROLLO WEB CON JAVA DESDE CERO cS <action path="/verFormulario” "/jsp/capitulo6/formulario,jsp"> forwar¢ <action path="/verFormulario” type="org. apache [Link]. ForwardAction” parameter="/jsp/capitulo6/formulario jsp"/> Igualmente para el caso de —_IncludeAction <action path="/footer” incude="/jsp/commn/[Link]"> <action path="/footer” type~[Link] [Link]. InchideAction” parameter="/jsp/comun footer jsp"> DownloadAction Esta clase brinda la funcionalidad basica para manejar la descarga de archivos por parte del usuario. Usar Struts en vez de directamente crear un enlace al archivo a descargar nos sirve para no revelarle al usuario la ubicacion del archivo y. fundamentalmente, para poder realizar comprobaciones (tipicamente. permisos) antes de permitir Ia descarga, ademas del hecho de que un enlace es estitico y, usando este enfoque, la ubicacién del archivo (incluso el contenido mismo del archivo) se puede obtener dinamicamente. DownloadAction ¢s una clase abstracta; nuestra subclase debe implementar el método abstracto getStreaminfo y. opcionalmente, _—_getBufferSize [Link] users com <« 6 EES 6 ACTIONS EN STRUTS: © getBufferSize : simplemente devuelve un entero con el tamafio del buffer a ser usado por el servlet al transferir la informacién al cliente. * getStreamlnfo : devnelve un objeto con la informacién sobre los datos, atransferir, del tipo [Link] . que es una interfaz. Los dos métodos que declara esta interfiz son: String getContentType0 Con este método le informamos al cliente (el navegador) el tipo de archivo que estamos enviando. InputStream getInputStreamQ) Aqui definimos la fuente de los datos a enviar. Laclase DownloadAction prove dos clases estaticas que implementan esta interfaz, listas para ser usadas. Veamos sus constructores, que son. todo lo que necesitamos de ellas: DownloadAction FileStreamInfo(String contentType. [Link] File file) DownloadAction ResourceStreamInfo(String contentType, ServletContext context, String path) En el primer caso, proveemos el contentType y,luego, un objeto File con el archivo que se descargar. Esto es itl para archivos fijos y no variables, ya que debemos proveer una direccién absoluta. En el segundo caso, ademas del contentType , debemos proveer el con- texto del servlet y nna direceién relativa. Este caso es mas itil para devolver recursos de la aplicacion web, ya que estamos limitados en las direcciones a usar. Veamos tres ejemplos, uno usando FileStreamlnfo otro DESARROLLO WEB CON JAVA DESDE CERO cm 47 con ResourceStreamInfo yun tercero en donde implementamos nosotros mismos la interfaz. Crearemos la clase DownloadFileAction : package capituloé.downlo: import [Link]: import [Link] http HitpServletRequest; import javax. servlet http HitpServletResponse: import [Link]: import org. apache. [Link]: import [Link] DownloadAction; public class DownloadFileAction extends DownloadAction { protected StreamInfo getStreamInfo(ActionMapping map, ActionForm form, HupServletRequest req, HttpServletResponse res) throws Exception { return new FileStreamInfo(“image/gif”, new File(“/home/tulsi/[Link]”)): } 6) Biivestneteo arsine) Los diferentes tipos de contenido que existen son manejados por JANA (Intemet Assigned Numbers Authority _), tna entidad que supervisa la asignacién de direccio- nes IP, sistemas auténomos y otros recursos relatives a los protocolos de internet. En su pagina web, [Link]/assignments/mediactypes ..se pueden consultar todos los tipos existentes ¢ incluso registrar nuevos. [Link] users com <€ us ES, 6, ACTIONS EN STRUTS Creamos la clase DownloadResourceAction package capitulo6 download: import javax servlet http HttpServietRequest: import javax [Link] HttpServletResponse: import [Link]: import org. apache [Link]: import org. apache struts. actions. DownloadAction: public class DownloadResourceAction extends DownloadAction { protected Streamlnfo getStreamInfo(ActiouMapping map, ActiouForm form, HtpServletRequest req, HttpServletResponse res) throws Exception { retum new ResourceStreamInfo( “application/pdf”. getServlet().getServletContext(. “/pdfimapreduce pdf”); 1/ Este archivo es grande, agrandamos el buffer protected int getBuffersize() { return 8192: Creamos la clase DownloadCustomAction package capitulo6 download: import [Link]. ByteAtraylnputStream: import [Link]. ]OException: >> wwwired users com DESARROLLO WEB CON JAVA DESDE CERO ez 49 import [Link] InputStream: import javax.servlet_http HttpServletRequest: import [Link]; import org. apache [Link]; import [Link]. struts. action. ActionMapping: import org. apache struts actions Download Actior public class DownloadCustomAction extends DownloadAction { protected StreamInfo getStreamnfo(ActionMapping map. ActionForm form, HitpServletRequest req, HttpServletResponse res) throws Exception { 1/Una clase interna que implemente la interfaz retum new StreamInfoO { public String getContentType() { remm “text/plain”: 3 public InputStream getInputStream() throws IOException { String texto = “texto a devolver”: retum new ByteAnaylnputStream([Link](): Como vemos en estos ejemplos, con poco cédigo podemos enviar al usuario directamente archivos que podran ser guardados 0 manejados por el navegador y quiz mostrados directamente (muchos navegadores mo- demos tienen fimcionalidades para manejar archivos PDE, por ejemplo). [Link] users com <« 150 EES 6 ACTIONS EN STRUTS En la practica, las acciones de descarga de archivos van asociadas con restrieciones al usuario y, ademés, por lo general, el archivo 0 conteni- do a descargar es dinamico, LocaleAction Esta accién nos permite cambiar el Locale del usuario. Por defecto, Struts configura un Locale basandose en propiedades enviadas por el navegador. En muchos casos. el usuario no configuré el navegador para elegir sn idioma, © esté en otra maquina, o simplemente quiere cambiar el idioma de navega- ion, Con esta accién podemos cambiar fieilmente el objeto Locale que Struts guarda intemnamente, y, si nuestra aplicacion soporta intemacionalizacion, cambiaremos el idioma en que el usuario navega. Esta accién se define normalmente en el struts-config . Al ejecutarse, busca en el pedlido los parémetros language , country y page. Los valoresde language y country definen el nuevo Locale . El paréme- tro page define la pagina adonde dirigirse luego del cambio de Locale . Sielparimeto page no existiera, se redirecciona el ActionForward de nombre success. . Dado este fimcionamiento, es altamente recomendable definir un ActiouForward de salida con ese nombre si pensamos usar esta accién: annque siempre pasemos el parimetro page . nos resguardara de posibles errores al hacer cambios 0 adaptaciones. Un uso tipico de esta clase es el que se muestra a continnacion. Definimos la accién en struts-config wee Los pardmetros language y countrydefinen tnLocaleen Java. La lista de los posibles lenguajes Yy paises se encuentra disponible en [Link]/publietfhtyy/related /[Link] y [Link]. [Link]/diverse/doc/ISO_3166.html respectivamente. DESARROLLO WEB CON IAVA DESDE CERO ISL <action path="/cambiarldioma”” type="[Link] actions LocaleAction” scope="request”> <forward name="success” path="/index,jsp” /> </action> Y Ia llamamos desde una pagina JSP, idioma jsp <a href~"[Link]?language=es”>Espaã:ol</a> <a href="[Link]?language=en&country= za>South Aftican English</a> <a href="[Link]?language=en&country=uk”>British English</a> En este caso. no usamos el parémetro page, y el cambio de idioma siem- pre vuelve a la pagina de inicio. Si estas opciones estuvieran en varios lados, volver siempre a la pagina de inicio seria muy molesto para el usua- rio, y convendria mantener la pagina con el idioma cambiado. wee @ RESUMEN. En este capitulo pudimos conocer a fondo los objetos Action . st fimcionamiento, su fincién en el modelo MVC y su interaceién con los demas componentes. Vimos también cémo prevenir los problemas mas comunes. wwwwired users com 152 cea 6 ACTIONS EN STRUTS Actividades Row N TEST DE AUTOEVALUACION {Cuil es la fncion de los objetos Action? {Qué representa un ActionForward ? En qué aso se utilizaria DispatchAction y en cul MappingDispatchAction ? {Por qué sélo puede haber una accién con el atributonnknown con valor trie? EJERCICIOS PRACTICOS Modifique el ejemplo del Capitulo $y escriba la validacién en la accién, en vez de hacerlo en el form-bean Escriba una accién que permita al usuario descargar el archivo [Link] de la aplicacion, Eseriba una accién genérica que reenvie el pedido a una direccién dada, pero antes gnarde la marca en la sesién (sugerencia: escriba una subclase de ActionForward )- wee Sitiene alguna consulta técnica relacionada con el contenido, puede contactarse con nuestros expertos; profesor@[Link] >> wow red users .com ET Vista En este capitulo veremos cémo programar la vista. Para ello. cn las préximas paginas estudiaremos cémo generar paginas ISP con tags de Struts y cules son sus principales utilidades Hasta la vista, baby. 154 wResumen, 191 oS Tags de Struts, Actividades... AAA 154 aS 7. VISTA, Hasta la vista, baby Llegé el momento de concentramos en el tercer pilar del modelo MVC: la vista. En este caso, consiste en generar paginas HTML mediante el uso de JSP. ‘Una vez més, no debemios olvidar que, si bien Struts offece una gran varie dad de herramientas y fumcionalidades para facilitar la creaciOn de la vista con JSP, no es la tmica forma de crear paginas HTML. ya que trae tambien soporte (aunque menor) para otras formas como Velocity, XSL. entre otras. Tags de Struts Struts define varios tags propios para la creacion de la vista, Dichos tags agregan fimeionalidad y nos penmiten completar automaticamente campos al cargar una pagina. cambiar el estilo a un formulario si ocn- rio algiin error, cargar opciones de colecciones. eteétera. Enel Capitulo 4 — definimos, en el archivo [Link] . un conjunto de des- criptores de los tags de Struts, como vemos a contimuacion: <taglib> <taglib-uri> tags/struts-htmls/taglib-uri> <taglib-location>/WEB-INF/[Link]</taglib-location> </taglib> Esta configuracién asocia la nbicacién de los descriptores de los tags (que definen los posibles parametros de entrada y la clase que los im- plementa, entre otras cosas) con un identificador. Este identiticador es el que debemos usar en las paginas JSP para indicarle al motor JSP (en el caso de Tomeat, seri Iasper2 donde buscar las definiciones y cla- ses de los tags. Por ejemplo: <%(@ taglib uri="/tags/struts-html” prefix="html”"%> >> wwuired users com DESARROLLO WEB CON JAVA DESDE CERO cas SS En este caso, el atributo wri debe coincidir con algiin elemento taglib-nri definido en el archivo [Link] . Elatribnto prefix indica el prefijo a usar dentro de la pagina. Errores en los tags La mayoria de los tags de Struts estan definidos para arrojar una excep- cién del tipo IspException en caso de error. Por eso, es importante declarar una pagina de error (en la directiva <2%@ page %> ) de la pagina ISP para procesar estas excepciones cnando ocusran. Bean tags Estos tipos de tags son ttiles para el manejo de JavaBeans. Si bien ISP provee por defecto tags para el manejo de beans, los tags de Struts brindan funcionalidad extra que es de mucha utilidad para el manejo de componentes JavaBean. Acceso a propiedades de beans Los tags de beans de struts poseen una sintaxis que permite el acceso a propiedades simples, anidadas e indexadas. * Las propiedades simples son las que ya conocemos: si estamos usando un tag que accede a una propiedad xyz .setraducirien — getXyz0) * Encambio, las propiedades —anidadas__permiten descender en las propie- dades del bean, Supongamos que tenemos un bean Persona que tiene una propiedad — mascota que, a su vez, tiene una propiedad raza, y esta, a sw. vez, posee la propiedad nombre ; ent este caso, podemos hacer referencia al nombre de la raza de Ja mascota de la persona usando la propiedad mas- [Link] «que se traducira en getMascota().getRaza().getNombre() * Enos casos en que estemos usando la propiedad para establecer va- lores (por ejemplo. un —_ setter ), solo el tiltimo métado es Hamado como wuwised users com <« 6 EES 7. VISTA, setter ylosdemascomo getter . En este iiltimo ejemplo, el cédigo gene- rado sera: getMascota().2etRaza().setNombre(valor). + Las propiedades indexadas_—_se emplean cuando tenemos propieda- des con mtltiples valores, es decit, una propiedad que es un coujun- to de elementos. En estos casos, los métodos getter y setter deben, ademas, suministrar un pardmetro entero indicando a qué elemento de la coleccién se estén refiriendo, Por ejemplo: class Persona { private List mascotas; public Mascota getMascota(int pos) { ret (Mascota) [Link](pos) 3 public void setMascota(Mascota m. int pos) { ‘[Link](pos, m): 3 3 En estos casos, podemos suministrar la propiedad indexada mascota[2] que se traducira en getMascota(2) bean:write ‘Vamos a comenzar por ver en detalle el tag uzis simple del paquete de los tags de beans. Este tag simplemente devuelve el contenido del bean 0 una de sus propiedades. En esencin, este tag es igual a <jsp:getProperty> , pero con las mejoras que vimos previamente. Los atributos que podemos proveer son los siguientes: * name : especitica el nombre del bean al que estamos accediendo. ‘+ property : la propiedad a la que estamos accediendo (soporta la sintaxis extendida de Struts, propiedades simples, anidadas e indexadas) >> [Link] users .com DESARROLLO WEB CON JAVA DESDE CERO cea? Si no especificamos propiedad. se devuelve el bean. * scope : especifica el scope donde buscar el bean. * ignore : si este atributo es true , y el bean que especificamos no existe en el scope indicado, entonces el tag no devuelve nada, Caso contra- rio, obtendremos una exeepeion, * filter: este atributo con valor true indica que el resultado de este tag seri filtrado por los caracteres sensitives HTML que contenga, y estos, serin reemplazados por su entidad correspondiente. Esto es: si la eva- Inacién del tag —consistente en una propiedad de determinado bean devuelve retoito ,ysielatributo filter es verdadero, se filtrard la letra efle y se reemplazara por Sautilde , de forma que el resultado sea compa tible con HTML y visualizable en cualquier navegador. + formatKey = especifica la clave de los mensajes de aplicacién (MessageResources _) en donde bmscar la cadena de formato a aplicar al resultado del tag. * format: especifica la cadena de formato que ha de aplicarse al resultado de este tag. El resultado de la evaluacion de este tag siempre es, aposteriori , un objeto de tipo string. Sin embargo, una gran cantidad de veces esta- mos accediendo a objetos que no son de tipo string y debe efectuarse una conversion. Struts evalia el tipo del objeto accedido y, en ciertos casos, puede aplicar una transformacién que implique formateo de los datos. Struts aplica el formato a objetos enteros, decimales y fechas CREAR UN BEAN EN LAS PAGINAS JSP Sélo con los tags de Struts no tenemos forma de crear un bean en las paginas ISP. Seguin el paradigma MVC, esto no tendria que pasar nunca: todos los objetos (el modelo) son creados en las acciones y son accedidos Inego en las paginas JSP para mostrar propiedades. Sin embargo, si necesitaramos crear un bean (no recomen- dado), podemos usar el tag jsp:useBean [Link] users com <« Iss EES 7. VISTA ‘Veamos un ejemplo de nso de este tag. Para simplificarlo un poco. vamos a hacer algunas cosas no muy acordes con las buenas pricticas de programacion web, como ser: usar cédigo caduco y crear un objeto usando codigo eu la pagina ISP, Pero, a los efectos del ejemplo, sirve, asi no tenemos que crear una accion, definirla, etcetera, <I-- Declaramos que vamos a usar la libreria de tags de beans y que la usaremos con el prefijo bean > <%(@ taglib uri="/tags/struts-bean” prefix="bean”™%6> <h2>Fechas</h2> <J-- Declaramos un objeto Date que haré las veces de bean > <<jgp:nseBean id="fecha” class="[Link]. Date” /> <!-- Imprimimos el objeto > Fecha: <bean:write name="fecha” /><br/> <J-- Imprimimos propiedades del objeto (jeste cddigo es caduco!) —> Dia: <bean:write name="fecha” property="date” /><br/> Mes: <bean write name="fecha” property="month” /><br/> Añ:o: <bean:write name="fecha” property=" year” /><br/> <I-- Imprimimos la fecha, pero déndole un formato ~ Fecha con formato: <bean:write name="fecha” format="dd/MM/yyyy” /><br/> <1 Con formato, usando formatKey > Fecha con formatKey: <bean:write name="fecha” formatKey="fecha formato” /><br/> <h2>Nú:meros</h2><br/> ™% /* Declaramos nn objeto de tipo Double y lo agregamos al scope de pagina */ >> [Link] users .com DESARROLLO WEB CON JAVA DESDE CERO ems Double pi=MathPI; [Link] ttribute(“pi”, pi, PageContext: PAGE_SCOPE); %> <J-- Imprimimos el miimero -> PI: <bean:write name="pi” /><br/> <!-- El ntimero, formateado --> Pl con 4 decimales: <bean: write name="pi” format="##.###4" /><br/> <l-- Uso del atributo ignore, el siguiente tag no arrojara ‘una excepcién pese a que el bean no existe -> <bean:iwrite name="inexistente” property="prop” ignore="tue” /> Alacceder a la pagina, obtendremos el siguiente resultado, con fecha y hora actuales, de manera muy clara: Fechas Fecha Thu Feb 02 1147.07 GMT-03.00 2006 Dia 2 Mes 1 ‘Ado: 106 Fecha com formate: 02/02/2006 Fecha con formatK ey. 02 - 02 - 2006 Numeros PL3.141592653580793 Poon decimaes: 3,1416 Figura 1. Si usamos el tag de Struts podemos dar formato a nuestros objetos sin necesidad de escribir cédigo extra. Como podemos observar, mostramos la fecha dos veces y con forma- tos distintos, En el primer caso, especificamos explicitamente el tipo de fommato que queriamos, usando el atzibuto format . www red users com « 160 ES 7. VISTA, Si esta pagina firera accedida por gente de distintas partes del mundo, deberiamos mostrarles las fechas en los formatos que ellos mejor en- tiendan, Por ejemplo, en Norteamérica es conniin poner primero el mes y Inego el dia (0 sea, un formato MMidd'yyyy —_). Usando formatKey . estamos diciéndole a Struts que, dada una clave, busque el tipo de formato en el archivo de recursos (en nuestro caso, “MessageResources properties). ‘Como vimos, que podemos tener varias versiones del archivo de recuisos, una para cada Locale que queramos soportar. Usando este enfoque, simplemente guardamos los distintos tipos de formatos en los archivos, y el usnario vera los objetos en sus respectivos formatos. Enel ejemplo, escribimos el atributo formatKey con valor fecha formato ‘Veamios ahora unos ejemplos de archivos de recursos para esta clave: MessageResources properties (el archivo por defecto) [Link]=dd/MM/yyyy MessageResources_en_us.properties (el archivo para el Locale inglés de Estados Unidos): [Link]=MM/d/yyyy MessageResources_ko.properties (el archivo para el Locale coreano): [Link]=yyyy/MMidd Podemos tener todos los archivos de recursos que queramos. Siempre debe haber un archivo de recursos por defecto. sin especificacion de Locale. Los otros archivos se crean con el mismo nombre que definimos en el struts- config agregando antes de Ja extension el Locale, como se ve en los ejemplos. >> wwwired users com DESARROLLO WEB CON IAVA DESDE CERO == (ll Usando esta configuracién, si un usnario con un navegador configurado con Ienguaje coreano entra en nuestra aplicacién, verd la fecha con el for- mato acorde; por ejemplo: 2002|02|02. Pero no olvidemos que tener que especificar un formato o clave de formato cada vez que accedamos a objetos o propiedades de tipo fecha ‘0 numéricos es monétono y propenso a errores. Es por eso que Struts define unas claves por defecto para usar en el archi- vo de propiedades segtin el tipo de objeto que estemos accediendo en el tag, De esta forma, si no especificamos los atributos format o formatKey y estamos accediendo a, por ejemplo, un objeto de tipo [Link] Date , Struts busea en el archivo de recursos una clave por defecto, y, si existe, le aplica el formato. Enla Tabla1 tenemos la lista de claves por defecto y los objetos a los que se aplica. CLAVES POR DEFECTO Meee ecu) [Link],[Link] [Link] org [Link] format date javantil Date cong [Link] format float java lang Float, javadong Double, java dang BigDecimal Tabla 1. Lista de claves por defecto. wowwired users com 162 ES 7. VISTA, Un ejemplo de archivo de recursos podria ser: [Link] [Link] date=dd/MM/yyyy [Link]= dd/MM/yyyy [Link]. [Link]=hh:mmss [Link]. bean format. float=##.### Y, de esta forma, no necesitamos explicitar que deseamos una salida con formato para estos tipos de objetos al usar el tag. write. bean:message Se trata de un tag usado para obtener una cadena de texto del archivo de recursos. Esto es titil para mostrar texto intemacionalizado, ya que no escri- Dimos el texto en si a mostrar, sino que declaramos qué texto ha de mostrar- sey, Inego, en base a las preferencias de idioma del navegador del usuario, se obtiene la cadena de texto correspondiente. Podemos obtener un mensaje especificando directamente la clave del mensaje, o indirectamente, usando un bean que contenga el valor de dicha clave. Los mensajes, ademas. pueden tener hasta cinco argumentos parametriza- bles. Veamos los atributos del tag + arg0, arg, are2, arg3, ared_: valor del argumento. * key: clave del archivo de recursos que contiene el valor del mensaje que queremos mostrar. © uame : nombre del bean que contiene el valor o la propiedad de la clave del mensaje. «property : la propiedad dentro del bean que contiene la clave del mensaje + scope : el scope donde bnscar el bean. Si no especificamos directamente el atributo key, debemos especificar un bean (y. opcionalmente, una propiedad del bean) adonde ir a buscar la clave. DESARROLLO WEB CON IAVA DESDE CERO c= 163 <%@ taglib uri: rags/struts-bean” prefix="bean”%> % /* Declaramos un objeto de tipo String y lo agregamos al scope de pagina */ String clave ="saludo inicial [Link](“clave”, clave, PageContext PAGE SCOPE); %> <!-- Llamado directo --> Sahudo: <bean:message key="saludo inicial"/><br/> <I-- Llamado directo con pardmetro —> Saludo con parametro: <bean:message key=" saludo parametrico” arg0="Signore Rigoberto” /><br/> <I-- Llamado directo con parametro —> Saludo con diná:mico: <bean:message key="[Link]” arg0="<%= [Link](Math PI * 10) %>" /><bri> <!-+ Llamado indirecto > Saludo indirecto: <bean:message name="clave™ /><br/> Yelarchivo MessageResources properties: saludo inicial=Hola! [Link]-Hola {0}! Como seveen —[Link] . las cadenas {0} {1} {2} (3}y {4}seran reemplazadas por el valor del argumento: arg0, argl, eteétera En la pagina JSP, vemos ejemplos de lamados directos ¢ indirectos. El parametro puede ser fijo o el resultado de una expresién cualquiera. wowwired users com &€ 164 EES 7. VISTA, La Figura2 —_mmestra el resultado: (Bro: ocsbos cool srtsvpleantke7feen 055998 Salado: Holal Salado con parameto: Hola Signore Rigoberta! Saludo con dindeico: Hola 31.41592653589793) Saludoieirecto:Helal Figura 2. Eltagbean:message _¢s ideal para intemacionalizar aplicaciones web y mostrar al usuario contenidos en su idioma. bean:define Mediante este tag podemos definir un nuevo bean. Este tag es similar a <jsp:useBean> pero difiere en varios aspectos, El primero se usa para crear objetos invocando a su constructor vacio. El caso de Struts, en cambio, se usa para introducir referencias a objetos sobre la base de valores constantes 0 ex presiones y copiar beans o alguna de sus propiedades, Veamos los atributos que podemos definir en el bean y, luego. los infaltables ejemplos. + id: el nombre del bean que se creara + name : nombre del bean al qe accedemos para copiarlo (0 alguna de sus propiedades), ‘+ property : propiedad del bean especifieado en name que queremos copiar en el bean a crear. * scope : scope donde busear el bean a copiar. © toScope : scope donde guardar el bean que se crea (por defecto, page). + type: nombre completo de la clase que sera el tipo del bean creado. + value: valor con el que el nuevo bean sera instanciado. Fundamentalmente tenemos dos formas de crear un muevo bean: pasan- do un valor (constante o una expresion) al atributo value 0 como cuerpo del tag -lo cual crear un bean de tipo string con el contenido que le pasamos— DESARROLLO WEB CON JAVA DESDE CERO ca © definiendo otro bean y, eventualmente, una propiedad de este, y el bean a crear sera una referencia al bean (0 propiedad). Estas dos formas son ¢x- cluyentes, y, si definimos el atributo value y name a la vez, obtendremos una excepei6n. De todas formas, si definimos el atributo value y, adem, el tag tiene cuerpo (ya que estamos creaudo un bean string), estaremos brindando dos veces el contenido. Pasemos ahora a los ejemplos. <%(@ taglib uri="/Aags/struts-bean” prefix="beant"%> <J-- Creamos un GregorianCalendar --> <jsp:useBean id="cal” class="[Link]. GregorianCalendar” /> <1-- Copiamos el bean cal en otto bean y definimos su tipo > <beanrdefine id="cal2” name="cal” type="[Link]. Calendat”/> <1-- Creamios un bean en base a ima propiedad de otro bean —> <bean‘define id="tz” name="cal” property="timeZone” /> <[-- Diferentes formas de crear un bean de tipo String —> <bean:define id="str1” value="Nuevo bean” toScope~"request” /> <bean:define id="str2” value="<%= “hola pianola"%>" > <bean:define id="str3">Valor del tercer String, en el cuerpo del tag-/bean:define> <I-- Mostramos los beans o propiedades de los beans recientemente creados —> Timezone: <bean: write name="2” property="displayName” /><br/> String 1: <bean:write name="str1” /><br/> String 2: <bean:write name="str2” /><br/> String 3: <bean:write name="str3” /><br/> bean:size Este sencillo tag erea un bean con la cantidad de elementos de una coleccién dada. Si bien veremos Inego tags para iterar sobre colecciones, sin este tag no habria forma (sin recurrir a c6digo en el JSP) de obtener los [Link] users com 165 ES 7. VISTA, elementos de una coleccién. Su modo de uso es sencillo y facil de entender. ‘Veamos los atributos: * collection : expresion que evalia a una coleccion. * id: el nombre del bean de tipo Integer que se crearé, © name: nombre del bean que contiene la coleccion a ser evaluada. + property : nombre de la propiedad (dentro del bean de nombre name) que devuelve la coleccion. scope : el scope donde buscar el bean de nombre name Nnevamente, tenemos dos formas: 0 bien usamos el atributo collection 0 bien definimos un bean o propiedad con los atributos name, property y scope: <%(@ taglib uri="/tags/struts-bean” prefix="bean”%> <I Creamos una coleccion y la guardamos en el scope de pagina > % [Link]. Vector v = new [Link]. Vector): [Link](“s”): [Link](“t"): [Link](“2”) [Link](“v”. v. PageContext PAGE_SCOPE): > Diferentes formas de acceder al tamaiio de la coleccion --> <beam:size id="s” collection="<%= v %>" /> <beam:size id="s2” name="v" /> Es muy importante que recordemos que escribir eédigo Java en las pie ginas JSP no es recomendable, y que, en estos casos, lo estamos haciendo solamente para mantener los ejemplos pequetios y focalizar en lo que queremos ver, que son los tags. >> wwwired users com DESARROLLO WEB CON JAVA DESDE CERO ca? Logic tags Este paquete contiene tags para acciones légicas: condiciones, iteraciones, etcétera. La idea aqui es, nuevamente, no embeber cédigo Java en las paginas sino usar los tags de Struts para no mezclar la presentacion con el contenido, logic:equal, logic:greaterEqual, logic:greaterThan, logic:lessEqual, logic:lessThan, logic:notEqual Estos tags son tags de comparaciones_—_. En todos Jos casos, sus atributos y funcionamiento son iguales, y solo cambia el tipo de comparacién. La légica de estos tags es proveer dos valores que nego seran comparados. Si la evaluacién es satisfactoria, se ejecuta el cuerpo del tag: caso contrario, se omite, Veamos primero Los atributos posibles, para luego pasar a la explicacion de su fuucionamiento: * value: primer valor a ser comparado (constante o expresién). * name, property . scope: nombre, propiedad y scope del bean con el dato a ser comparado. * cookie : nombre de la cookie con el valor a ser comparado. * parameter : nombre del pardmetro con el valor a ser comparado. * header : nombre del encabezado con el valor a ser comparado. Debemos proporcionar dos valores: uno es una constante o resultado de una expresion y se especifica con el atributo value . El otto valor puede ser especificado mediante un bean o una propiedad, el valor de una coo- kie, de un encabezado o un parametro del pedido. Debemos especificar solo uno de estos atributos 1 obtendremos una excepcién. ‘Notemos que los valores pasados siempre serén cadenas de texto. Al hacer Ja comparaci6n, primeramente se evalita si los valores pueden ser converti- dosa double o long. De ser asi, la comparacion sera numérica; caso contratio, se realizara una comparacion de cadenas de caracteres. Si alguno de los valo- res es nulo, sera reemplazado por una cadena vacia ‘Veamos algunos ejemplos de uso: [Link] users com <«€ 168 EES 7. VISTA <%-~ Declaramos que vamos a usar la libreria de tags logic y que la usaremos con el prefijo logic -%> <%@ taglib uri="/tags/struts-logic” prefix="logic”%6> <%Q@ taglib uri="/tags/struts-bean” prefix="bean”%6> <%-- Definimos dos variables --96> <%-- Comparacién por igualdad, numérica -%> <logic:equal name="dos” value="2"> <Mlogic:equal> <%-- Comparacién por desigualdad. numérica --96> <logic:notEqual name="dos" value="<%= Double toString(Math.E) %>"> 2'e <br/> </logic-:notEqual> <2%-- Comparacién por menor, numérica --%> <logic:lessThan name="dos” valtie="<%= [Link](Math.E) %>"> 2<e <br> </logic:lessThan> <®%-- Comparacién por mayor, texto --%> <logic:greaterThan name="cadena” valne="a"> java>a <br/> </logic:greaterThan> <%-- Comparacién por mayor, texto > <logic:greaterThan name="cadena” valne="2"> java>2 <br/> <logic:greaterThan> DESARROLLO WEB CON JAVA DESDE CERO ca 169 logic:empty, logic:notEmpty Con estos tags podemos evaluar una variable para comprobar si tie- ne algiin valor. Los atributos son los clasicos name , property y scope que ya tanto conocemos y usamos para determinar un objeto sobre la base de un bean o una propiedad de este, Segiin el objeto que determinemos usando estos atributos, la evaluacion determinard si su contenido es vacioono( empty y notEmpty . respectivamente). El objeto sera. vacio si es mulo, si es una cadena de caracteres de tama- iio cero o si es uma colecci6n, mapa o arreglo sin elementos. De manera ‘andloga podremos constatar su condicién de. no vacio logic:iterate ‘Mediante este tag podemos iterar sobre una coleccion y repetir el con- tenido del cuerpo del tag tantas veces como elementos tenga la coleccién. Los atribntos del tag para definir Ia iteracién son: * collection : expresion que evaltia a una coleccién, * name, property. scope : atributos para determinar la collection (ya son amigos, no necesitan mas explicacién). * id: nombre que le daremos al elemento actual de iteracion. * type : nombre de clase del elemento actual de iteracion (el definido porelparimetro id). Sino especificamos este atributo, no se realiza- rin conversiones de tipo. * indexTd: nombre de la variable que contiene el indice de iteracién actual. © length : maximo mimero de iteraciones que haremos sobre esta coleccién. Puede ser un niimero directo o referencia a un bean de tipo Integer. * offset : indice de inicio de iteracion. ‘Tenemos atributos para determinar el objeto a iterar y otros propios de la iteracion, Pueden parecer confusos, pero son sinilares a mua itera cion count de Java, Veamos una iteracion sobre una coleccién usando un ciclo for. y comprobaremos la analogia con los atributos de Struts [Link] users com <«€ 170 ES, 7. VISTA, i La coleccién Collection col = ... {/Tteramos for (int indexId=offset; indexId < length: indexld++) { [type] id = [Link](indextd) Este pseudocédigo muestra la funeisn de los atributos del tag iterate . Los atributos offset y length son usados para paginacién, cuando tenemos una co leccion muy grande y no queremos que el usuario reciba una pagina enorme de respuesta. En ese caso. usamos variables para ir mostrando paginas acota- das con algunos resultados. No pueden faltar los ejemplos clarificadores: <%-- Importamos clases --%> <%@ page import="[Link].*, [Link]"%6> <%-~ Declaramos que vamos a usar la libreria de tags logic y que la usaremos con el prefijo logic -%6> <%@ taglib uri=” tags/struts-Logic” prefix="logic”%> <%(@ taglib uri /tags/struts-bean” prefix—"bean”%> <% // Una coleccién de direcciones web Collection urls = new Vector(): [Link](new URL (“http:/[Link]”)): [Link](new URLChitp://[Link]”)); [Link](new URL (“[Link] [Link](new URL (“[Link] [Link](new URL( “http:/java, sun com/products/isp/")) [Link](*colUrls”, urls, PageContext. PAGE_SCOPE); %—> >> wwwired users com DESARROLLO WEB CON JAVA DESDE CERO wes IT <%-- Iteramos y mostramos todas las direcciones web %6> <h3>Toda la colecciscoacute:n:</3> <logic:iterate id="url” name="colUrls"> <bean:write name="url”/><br/> </logic:iterate> <%-- Iteramos y mostramos la propiedad host de las primeros dos elementos de la coleccién --6> <h3Los primeros dos hosts:</h3> id="wl” name="colUrls” length= “<bean-write name="utl” property="host” /><br/> <flogic:iterate> <%e- Iteramos y mostramos la propiedad protocol de las primeros dos elementos de la coleccién y su posicion --%> <h3>Las direcciones 3 y 4:</h3> <logic:iterate indexld="i” id="url” name="colUrls” offset= <bean:write name="url” > (posició:n <bean: write name="i" />) <br/> <flogic:iterate> Notaremos que, en el tiltimo caso, estamos accediendo al tercery cuarto elemento de la coleceién y, sin embargo, al imprimir su posicién usando el bean indexld, nos devuelve 2 y 3 respectivamente. La explicacion queda como ejercicio para el lector (aleanza con recordar que el indice empieza en cero ). Html tags Este paquete de tags se utiliza para crear paginas HTML con més facili- dad y, sobre todo, que puedan interactuar con componentes de Struts (en especial, formularios) para ahorramos trabajo, Muchos de estos tags tienen ‘una gran cantidad de attibutos para ser compatibles con los tags estindar de HTML (atributos para métodos JavaScript, estilos CSS, entte otros). 12 EES 7. VISTA, html:htm1 Este tag es sencillo de usar y provee una fincionalidad muy poderosa ‘Su funci6n es generar un tag <html> . Sus atributos: + lang: si su valor es verdadero ( true ), se generard el atributo con el valor del idioma y pais (el Locale) definido en la sesion, o el brindado por el navegador o el Locale por defecto (en ese orden de prioridades), Este atributo es itil para el navegador para poder mostrar el contenido apropiadamente o para los motores buscadores que puedan catalogar el sitio con mas precision. © xhtml: estableciendo este valor como verdadero, todos los tags del paquete HTML generarén e6digo compatible con XHTML. html:form ‘Mediante este tag podemos generar un tag <form> de HTML. Todos los componentes del formulario deben estar encerrados dentro de un tag form. Con los atributos del formulario podremos aplicar funcionalidad a todos sus componentes. Vamos a ver sus atributos: + action : la direccién adonde es enviado este form. Este valor debe existir como atributo path _ en alguno de los elementos action del struts-config . © acceptCharset _; una lista de los posibles charsets (conjuntos de carac- teres) que este formulatio aceptara. © disabled :sies tme , deshabilita todos los campos de este fornmulario. + enctype : la codificacién del formulario cuando sea enviado, General- mente no debemos modificar este valor, a menos que queramos incuir funeionalidad para que el usuario envie archivos, en cuyo caso debe- mos especificar este atributo con valor multipart/formdata + focus: nombre del campo perteneciente a este form al que queremos darle foco cuando la pagina se cargue. + focusindex : si especificamos un campo en el atzibuto focus y este campo contiene miltiples valores (una lista de opciones, por ejemplo), podemos >> wwwired users com DESARROLLO WEB CON IAVA DESDE CERO c= 13 establecer el elemento especifico dentro del campo al que queramos dar foco mediante este atributo + method : el método HTTP que deseemos usar para enviar el formulario. Podemos especificear GET 0 POST (por defecto, este ultimo). © onreset : codigo JavaScript a ejecutarse cuando el form es limpiado. © onsubmit : codigo JavaScript a ejecutarse cuando el form es enviado. + readonly: sies true . establece que todos los campos del formulario sean solo de lectura, inmodificables por el usuario. + style :estilos CSS a aplicar al elemento + styleClass : clase CSS a aplicar al elemento. + styleld : identificador a asignar al elemento. © target; ventana destino adonde el formulario es enviado. Util para aplicaciones que san frames. A medida que vayamos viendo campos de formularios, veremos tam- bién ejemplos de configuraciones y usos de este tag, html:text Este tag genera un campo de texto (en HTML un elemento <input type="text”), Este tag contiene una gran cantidad de atributos posibles. ‘Nos concentraremos en algunos y otros simplemente los enunciaremos. ‘Veamos algunos de ellos: * disabled :sies true , deshabilita este campo. + style :estilos CSS a aplicar al elemento. + styleClass: clase CSS a aplicar al elemento. + qrrorStyle : estilo CSS a aplicar al campo si un error existe para la propiedad que define este campo. + errorStyleClass : clase CSS a aplicar al campo siun error existe para la propiedad que define este campo. © maxlength : nimero maximo de caracteres a aceptar en el campo. ‘+ property : propiedad del form que se populava al enviar el formulario. wowwired users com &€ srs] 7. VISTA + size: tamatio del campo (en caracteres). + value : valor inicial del campo. El tag soporta, ademas, una gran cantidad de atributos compatibles con acciones JavaScript (onclick, onfocus, oumousedown , eteétera). Algunos ejemplos: <%-- Declaramos el uso del paquete de tags HTML ~-%> <%@ taglib uri= <%-- Foco en el campo edad --%%> <html:form action=" procesarF ormulario” focus="edad”> <%-- Un campo con estilo que cambia al haber un error --%> Nombre: <<himl:text property="nombr errorStyle=" font-family: Verdana;font-size:12px:” style="font-family: Verdana:font-size:12px: background-color:#FFFF00;color:#FF0000” /> <br/> <%-- Un campo acotado en tamaito ~-%> Edad: <html:text property="edad” size="3” maxlength="3"/> <br/> <%- Campo deshabilitado --%6> Campo deshabilitado: <html:text property="deshabilitado” disabled="true” > <br/> <®%z Campo de solo lectura y con valor por defecto --%6> Campo de só:lo lectura: <html:text property="readonly” readonly="true” value="No soy modificable” /> <br/> <Stml:form> </html:html> >> wwwired users com DESARROLLO WEB CON JAVA DESDE CERO ca 175 html:password Casi igual a html:text este tag genera un campo propicio para el ingreso de contraseftas y datos confidenciales. Comparte todos los atributos con html:text y agrega uno mas: + redisplay: por defecto, cuando una pagina con valores es mostrada, ya sea por valores de inicializacion, por la vuelta a la pagina luego de una valida ion fallida, eteétera, los valores de los campos son completados automa- ticamente. En el caso de un campo de contraseiia, esto no es conveniente, porque, por mas que aparezcan asteriscos, el valor de la contrasefia sera visible si accedemos al cédigo de la pagina HTML. Si establecemos este atributo como false, el campo no se repopulara automaticamente. html:textarea En esencia, similar a _html:text , solo que este taz genera un campo de texto de més de una linea. Tiene practicamente los mismos atributos de hmal:text aexcepeiu de los atributos _-maxlength y size, Este iltimo es reemplazado por: * rows: miimero de filas del campo. * cols: nimero de colummas del campo. html:select Este tag genera una lista de valores que puede ser multiple o simple, petmitiendo al usuario seleccionar muchos o solo un valor de la lista, Veamos sus atributos: * disabled , style . styleClass . errorStyle , e1rorStyleClass property . value : com- parte las mismas fimciones que himb:text + muttiple : sies tme . el usuario pnede elegir varios elementos de la lista; si no, solo uno. * size: cantidad de elementos a mostrar a la vez. waw.n i g a 176 ES 7. VISTA, Este tag genera el elemento HTML <select> , pero todavia tenemos qne ge- nerar las opciones (los elementos <option> ). Para ello, podemos usar cualquier combinacién de los tags htmloption , html:options y html:optionsCollection , sola- mente validos dentro del cuerpo de un html:select . html:option Genera uma opcion dentro de una lista, Para esta opcion debemos especificar dos valores: el que se ha de enviar si esta opcién es selec- cionada y el que se muestra al usuario. + disabled, style, styleld, styleClass : misma funcionalidad que la deseripta antes. + key: si especificamos este atributo, determina La clave dentro del archivo de recursos que se usara para el valor a mostrar para esta opei6n: caso conttario, dicho valor se obtendra del cuerpo del tag. + value: el valor a enviar si esta opcién es Ia elegida html:options Genera un conjunto de opciones, baséndose en una coleeci6n. Este tag tiene dos formas de funcionamiento distintas en base a si el atribu- to collection esta seteado o no. Vamos a ver solamente un funcionamien- to, ya que ambos tomnaran confuiso el asunte y, ademais, para el segun- do caso. eltag html:optionsCollection —_es mas simple de usar. ‘Veamos los atributos y su uso: + style , styleClass : estilo y clase CSS del elemento, * collection : asumiremos que este atributo no se especitica. + filter: por defecto, filtra los caracteres sensitives HTML. Sino queremos que esto pase, debemos establecerle valor false. © uame, property : determinan un bean conteniendo una coleccion de valores. * IabelName . labelProperty _: determinan un bean que contiene una colec- cién de etiquetas. >> wwwired users com DESARROLLO WEB CON JAVA DESDE CERO ose 177 ‘Una explicacién es necesaria sobre el fin- LOS HTML TAGS cionamiento de este tag: recordemos que cada opcion tiene un valor. que es el enviado cuan- SON PAQUETES DE do la opcion es elegida, y una etiqueta, que TAGS PARA CREAR es la que se muestra al usuario en la lista. . . PAGINAS HTML CON Este tag genera un conjunto de opciones y toma os valores y las etiquetas de dos colecciones MAS FACILIDAD separadas. La primera opcién seré el valor del primer elemento de la coleceién de valores y la ‘etiqueta del primer elemento de la coleccién de etiquetas, y asi sucesivamente. Con los atribu- tos name y property , estamos determinando la colecci6n de valores ( property es opcional), ycon —_labeIName y labelProperty determinamos la coleccion de etiquetas. En este caso, ambos atributos son opcionales. Si especificamos solo labelProperty . la coleccién de etiquetas sera buscada como una propiedad del form. Si no especificamos ninguno de los dos, la etiqueta sera el valor. LQué pasa si las dos colecciones tienen distinto miimero de elementos? Si tenemos més elementos en la coleceién de etiqnetas, estos simplemente erin ignorados. Si tenemos més elementos en la coleccién de valores, estos seri agregados a la lista, y su etiqueta serd el mismo valor. html:optionsCollection Este tag genera también una lista de opciones. A diferencia de html:options . este tag funciona con una tnica coleccion de beans donde cada uno contiene el valor y, opcionalmente, la etiqueta. Veamos los atributos antes de la expli- cacion pertinente: * filter, style , styleClass : poseen la misma funcionalidad que himl:options * name, property : determinan la coleccidn de beans que usaremos para generar las opciones. * label: propiedad del bean que devuelve la etiqueta, + value: propiedad del bean que devuelve el valor. [Link] users com 1s eS 7. VISTA, ‘Veamos un ejemplo integrador. Es importante destacar que, dentro deun elemento html:select_, podemos inchuir y mezelar cualquier canti- dad de estos tags de opciones, y en eualquier orden. En el ejemplo, crea- ‘mosiun elemento select y lo populamos con os tres tags posibles. Un simple bean que creamos aad hoe : package [Link]: public class Pais { private String codigo: private String nombre: public Pais(String codigo, String nombre) { [Link] = codigo: this nombre = nombre: } public String getCodigo() { return codigo: } public String getNombre() { return nombre: } t LL ONWEB: EJEMPLO INTEGRADOR [Link]/premium podemos acceder a un ejemplo integrador de todo lo visto en este capitulo, Después de tantos tags, atributos, configuraciones y modos de uso, es menester mostrar un ejemplo que use todos los tags y ver cémo acceder a los datos desde el servidor >> [Link] users com DESARROLLO WEB CON JAVA DESDE CERO == (179 Ahora Ia pigina JSP que muestra la lista y sus opciones: <2%-- Importamos clases -%> <%@ page import="[Link].*, [Link] Pais”%6> <%6(@ taglib uri=”/tags/struts-html” prefix="html”%> <% 1/ Una coleccién de paises Collection paises = new Vector(); [Link](new Pais(“bo”, “Bolivia [Link](new Pais(“co”, “ Colombia”): [Link](new Pais(“cl”, “Chile”)): [Link](new Pais(“pe’ [Link](new Pais(“py [Link](new Pais(“ve [Link](new Pais(uy’ pageContext setAttribute(“paises”. paises, PageContextPAGE_SCOPE): 1/ Una coleccion de cbdigos Collection codigos = new Vector(): [Link]( [Link](“br"); [Link](“mx’ [Link](“bb"); /* Este cédigo seré etiqueta también */ pageContext setAttribute(“codigos”, codigos, PageContext. PAGE_SCOPE): 1/Una coleccién de nombres Collection nombres = new Vector(): [Link](“Ecuador”): [Link](“Brasil”); [Link](“Mexico”); pageContext setAttribute(“nombres”, nombres, PageContext. PAGE SCOPE): %> [Link] com <«€ 180 EES 7. VISTA, <htm!:html xhtm!="true”> <html:form action="procesarFormulario"> <%e- Una lista de elementos, mostramos 4 items por vez y es una lista de seleccién simple -%> <html:select property="pepe” size"4” nultiple="false”> <%-- Primera opcion, fija —-%6> <html:option value="ar”>Argentina</html:option> <%o-~ Accedemos a distintas colecciones para obtener valores y etiquetas --%> <<hitml:options name="codigos” labeIName="nombres”/> <%-- Accedemos a una coleccién de beans y especificamos las propiedades para obtener el valor y la etiqueta de cada elemento ~%> <html:optionsCollection name="paises” label="nombre” value="codigo” /> </html:select™ </ntml:form> </html:himl> html:radio Con este tag generamos un bot6n de exclusion mutua, también conocido como radio button . Al igual que en la lista, el usuario elije una y solo una op- cion (de abi sunombre, exclusion mmutua__). Si hay una opci6n ya elegida y el usuario marca otta, se desmarcars la primera y se marcara la segunda, obligando a elegir solo un valor. Veamos los atributos findamentales del tag: * property : propiedad del form correspondiente a este componente. * idName : nombre del bean que contiene el valor que ha de devolver este componente, Por lo general, se usa en conjuncién con un iterador. » DESARROLLO WEB CON JAVA DESDE CERO == sl * value: valor constante a devolver o, si existe el atributo idName, nombre de la propiedad del bean determinado por idName que contiene el valor. ‘Vemios que este tag tiene dos formas de fumcionamiento, dependiendo de si especificamos o no el atributo idName. Si no especificamos tal atributo, en value definimos el valor que se enviard al servidor si el boton actual es el ele- gido por el usuario. Puede ser una constante o el resultado de una expresion, Caso contrario, idName determina un bean que contiene el valor a usar yy podemos opcionalmente especificar, con el atributo value , la propiedad de dicho bean que devolverd el valor. Una vez mas, es preciso un ejemplo: <%-~ Importamos clases --%6> <%@ page import="[Link].*. [Link] Pais”%6> <%-- En este ejemplo, usamos tres paquetes de tags -%> <%@ taglib uri~”/tags/struts-html” prefix="html”%> <%@ taglib uri"/tags/struts-logic” prefix="logic™%> <% 1/ Una coleccién de paises Collection paises = new Vector(): [Link](new Pais(“bo”, “Bolivia’)): [Link](new Pais(“co™, “Colombia™)); [Link](new Pais(“cl”, “Chile") [Link](new Pais(“pe”. “Peru”) [Link](new Pais(“py”, “Paraguay”)): [Link] ttribute(paises”, paises, PageContextPAGE_SCOPE); %> <htnl:honl xhtml="true"> <%e~ Le pasamos el foco al tercer componente del grupo de botones pais -%> wowwered users com €€ 182 ESS 7. VISTA, <hitml:form action=" procesarF ormulario” focus="pais” focusIndex="2"> Sexo: <br/> <%e~ Dos radios con valor constante ~%> <html:tadio property="sexo” valtte="M” />Masculino<br/> <html:tadio property="sexo” valte="F” />Femenino<br/> <br/> Pagí:s:<br/> <%-~ Iteramos sobre el conjunto de paises para generar los radios --%@> <logic:iterate id="itPais” name="paises™> <%-- Cada radio obtiene su valor de la propiedad codigo del bean itPais, el bean actual de la iteracién --%6> <himl-:radio property="pais” idName="itPais” value="co% <%-- Escribimos el nombre del pais para el usuario -—-%6> <bean:write name="itPais” property="uombre” /> <br> <Jlogic:iterate> </html:form> /html:html> 6) SONI UCOO geil. see ae lOl [Una buena idea es agregar una primera opeién fija en las listas de seleccion que contenga una etiqueta del estilo ELIJA OPCION y valor mulo para faeilitar su validacién, Usando htmkoption podremos agregar este valor ficilmente a la lista de valores, >> [Link] users com DESARROLLO WEB CON JAVA DESDE CERO c= 83 Este cédigo en accién,en la Figura Sexo: ‘O Masculine OFemenine Pais: © Bolvia © Colonia © chile ener © Pangay © Venera © Uruguay Figura 3. Los botones radio cumplen la misma funcién que las listas de seleccién simple, pero son mas claros cuando hay pocas opciones. En el primer caso, simplemente creamos dos opciones con un valor fijo. En el segundo caso, mas eomplicado, nos valemos de un iterador para crear tantos botones radio como elementos tengamos en una coleccién dada, y especificamos los atributos idName y value para obtener el valor de una pro- piedad del objeto iterado. Notemos como en este sencillo ejemplo hemos usado tags del paquete bean, huml y logic html:checkbox Este tag sirve para generar tn checkbox (‘casilla de verificacién’). Cada uno de estos componentes, a diferencia del boton radio, puede tomar dos valores we OGIC:ELSE, El paquete logic no tiene ningiin tag para manejar una condicién que fall6, como seria else en Java, Debemos crear dos tags condicionales: el segundo. con la condicién complementaria, 1st ESS, 7. VISTA, (marcado 0 desmarcado, implicando verdadero y falso_respectivamente), independientemente de los otros componentes checkbox que existan en la pagina. Enel Capitulo 5, en uno de los ejemplos que programamos, usamos un checkbox que el usuario podia marear segiin su condicién de fumador. Los atributos principales del tag son muy sencillos: * property : propiedad del form a enviar. * value: valor a enviar si el checkbox es marcado. Este atributo. a dife- rencia de casi todos los otros tags, es opcional; sino se especifica, el valor por defecto es on. Antes de pasar a un ejemplo, veamos primero otro tag. html:multibox Si tenemos una larga lista de opciones que el usuario puede marcar, tendremos que crear una propiedad en el form-bean para cada una de ellas y, nego, en la accion, preguntar una por ta por su estado, Silla lista es larga, este proceso es tedioso, Mas importante aim: sino sa- bemos apriori 1a cantidad de elementos que tiene la lista, no podremos realizar esta funcionalidad. El tag hhiml:multibox nos sirve en estas ocasio- nes. Este tag genera el mismo cédigo HTML que html:checkbox . pero su forma de obtener los elementos y enviarlos al servidor es distinta. El tag html:checkbox genera un checkbox y esta asociado a una propiedad. wee OTROS TAGS HTML ‘Struts tiene varios tags en el paquete HTML: no hemos visto aqui todos los atributos posibles. sino solo los mas significatives. En la direecién hitp://[Link]/struts-doc-1.2.8/ userGuide/struts-htimLhtml — hay documentacién sobre los restantes tags. >> wow red users com DESARROLLO WEB CON JAVA DESDE CERO ca 18S Cuando el formnlario se envia, esa propiedad tendra el valor especificado enelatributo value o el valor por defecto on. Con html:multibox se envia al servidor un arreglo (por lo general, de objetos de tipo string) con los valores seleccionados. Veamos la forma de utilizar el tag y, luego, un ejemplo. property : propiedad del form a enviar. + value: valor a enviar si el checkbox es marcado. Si este atributo no se especifica, el valor es tomado del cuerpo del tag. ‘Vamos a aprovechar y ver un ejemplo completo, donde usemos estos dos liltimos tags. Definimos un form en el archivo [Link] : <form-bean name="checkboxForm” type="[Link] struts. validator. LazyValidatorForm”> <form-property name="paisesVisitados” type="java lang. String[]” /> </form-bean> Notemos que, si bien el tipo del form-bean es LazyValidatorForm ya priori no necesitamos definir sus propiedades, si es necesario en este caso explicitar que _paisesVisitados es un arreglo de tipo string. Sino lo hicieramos, al enviar el formulario con varios items seleccionados, el, fom lo tomaria como varios valores de la misma propiedad y sobres- cribiria el valor anterior, en definitiva, obteniendo a lo sumo un tmico valor seleccionado, que, claramente, no es lo que necesitamas. Definimos dos acciones: la primera proveerd los datos a la pagina para mostrar el formulario, y la seunda procesaré el fornmulario enviado. <action path="/verCheckboxF orm” type="capitulo7 action. VerCheckboxAction” name="checkboxForm” scape="request”> <forward name="ok” path="/jsp/capitulo7/atml_checkbox.jsp” > </action> [Link] users com <€ 186 SG 7. VISTA, <action path="/procesarCheckboxForm” type="capitulo7 action ProcesarCheckboxAction” name="checkboxF orm” scope="request”/> ‘Veamos, aliora, la clase que implementa la primera accion: package [Link]; import [Link]; import [Link]. Vector: import javax servlet http HtpServletRequest: import [Link] http HttpServietResponse: import [Link]. Action: import [Link], ActionForm:; import [Link] action. ActionForward:; import [Link]. ActionMapping; import org apache. struts. validator-Lazy ValidatorForm: import [Link] Pais; public class VerCheckboxAction extends Action { public ActionForward execute(ActionMapping map, ActionForm form, HttpServletRequest req, HttpServletResponse res) throws Exception { // Cast al tipo especifico de objeto LazyValidatorForm dyna = (LazyValidatorForm) form; // Una coleccién de paises Collection paises = new Vector); >> wwwired users com DESARROLLO WEB CON JAVA DESDE CERO es? [Link](new Pais(“bo”. “Bolivia”)): [Link](new Pais(“co”, “Colombia”)); [Link](new Pais(“cl”, “Chile”)); [Link](new Pais(“pe”, “Peru")): [Link](new Pais(“py”. “Paraguay”)): [Link](new Pais(“ve”, “Venezuela”)): [Link](new Pais(“uy”, “Uruguay”)): /) Agregamos los paises al form dyna set(“paises”. paises): // Quetemos ira la vista de nombre “ok” return [Link] orward(“ok”); ‘Vemos que simplemente se trata de crear una coleccion de objetos de tipo Pais y agregarla al form. Finalmente, estamos haciendo esta parte bien! No mis inserciones en las paginas JSP, La pagina del formulario: <%(@ taglib uri="/tags/struts-html” prefix="himl”"%> <%(@ taglib uri="/tags/struts-bean” prefix="bean”%6> <%(@ taglib uri="tags/struts-logic” prefix="logic”%> <html:htmi> <%-- Le pasamos el foco al tercer componente del grupo de botones pais --%6> <html:form action="procesarCheckboxFoum”> Condimentos: <br/> <%e= Objetos checkbox que envian un valor que definimos nosotros --%> wwwred users com <€ Iss ES 7. VISTA, \eckbox property="aceite” value="si” />Aceite<br/> <hitml:checkbox property" vinagre” value="si” />Vinagte<br/> <html:checkbox property="sal” value="si” />Sal<br/~ Pagiacute:ses visitados:<br/> <%-- Iteramos sobre el conjunto de paises para generar los ottos checkbox --%6> <logic:iterate id="itPais” name="checkboxF orm” property="paises”> <html:multibox property="paisesVisitados”> <bean: write name= <Shtmi:multibox> <%-- Escribimos el nombre del pais para el usuario --°6> <bean:write name="itPais” property="nombre” /> <br/> <logic:iterate> <br/> <html:submit value="Enviar™ /> <Jhtml:form> </htmi:html> wee FORM COMO BEAN Notemos que, en el ejemplo, Ia lista de opciones esta guardada en el formulario, por lo que debemos especificar el nombre del formulario como objeto bean (mediante el atibuto name) y, ademas, una propiedad, que es la que nos devnelve la coleccién sobre Ia que iteraremos. >> wwwired users com DESARROLLO WEB CON JAVA DESDE CERO c= 89 El primer grupo de checkboxes tiene tres elementos fijos: el segundo es una lista de la que, en principio, no sabemos qué cantidad de elementos tiene. Condimentos DiaAceite OVinagre Osa Paises vsitados: CO Bolivia 1D Colombia O Chile Open Paraguay Di Venemuela OD Uroguay Figura 4. Distintos tags generan el mismo resultado. Por tiltimo, veamos un bosquejo de la accién que procesa el formula- rio una vez enviado: package [Link]; import javax. servlet http HttpServletRequest; import [Link] http HitpServletResponse: import [Link] Action: import [Link]; import [Link] orward: import [Link]. ActionMapping: import org apache. struts validator: Lazy ValidatorForm: public class ProcesarCheckboxAction extends Action { [Link] users com 190 EES 7. VISTA, public ActionForward execute(ActiouMapping map, ActionForm form, HtpServletRequest req, HttpServletResponse res) throws Exception { LazyValidatorForm dyna = (LazyValidatorForm) form: // Obtenemos los resultados de los checkbox juals([Link](“aceite”)): boolean vinagre = “si” equals([Link](“vinagre”)); boolean sal = “si” equals([Link](“sal”)): boolean aceite // Obtenemos los paises String[] paises Visitados = (String[]) [Link](“paisesVisitados”): return null; Esta accién es solo un esqueleto para que veamos las diferentes formas de acceder a los valores, tanto de los checkboxes como de los multiboxes (que, en definitiva, tambign son checkboxes) whe CONJUNTOS DE CARACTERES Siestablecemos conjuntos de caracteres validos impedimos, por ejemplo, que un usuario ingrese datos que contengan caracteres incompatibles con nuestra base de datos y que, finalmente, terminardn mostrindose incorrectamente en los navegadores. La organizacién IANA mantiene la lista de todos los conjuntos de caracteres y su descripeién en: www jana orp/assignments/charactersets . >> [Link] users .com DESARROLLO WEB CON JAVA DESDE CERO. ca SL html:submit Antes de terminar el capitulo, un tag sencillo pero fandamental en la creacién de formulatios: hmil:submit . Este tag genera un botén de envio de formulario. Cuando este botén es presionado, el formulario y sus datos seran enviados a la direccién especificada por el atributo action del tag himl:form . El uso de este tag es muy sencillo, pero debemos re- cordar siempre agregar una forma de enviar los datos en cada formula- rio. El tinico atributo significative es value . que determina la etiqueta a aplicar al boton. En el ejemplo de checkboxes usamos este tag. wee @ RESUMEN Este capitulo fue largo pero fructifero, ya que analizamos un aspecto fundamental del desarrollo web: la vista. Usando JSP junto con tags propios de Struts, vimos cémo crear formularios ficilmente, sobre la base de colecciones y atributos de aplicacién. y como usar los tags para evitar Ia necesidad de embeber cédigo Java. wwwwired users com 192 EES 7. VISTA, Actividades TEST DE AUTOEVALUACION 1 (Qué diferencia existe entre los tres tags que generan opciones para la lista (tml:option - himloptions ¥ html:optionsCollection )? 2 (Por qué esnecesario contar con el tag tml:multibox cuando ya existe hunl:cheekbox ? EJERCICIOS PRACTICOS 1 Pruebe el resultado de no definir el arreglo en el ejemplo de checkboxes y Vea qué obtiene cuando elige mas de un checkbox. 2 Complete el ejemplo de checkbox haciendo algo con la accion y ereando una pagina de salida. 3. Traduzca el juego del Ahoreado para que fincione con Struts. wee Sitiene alguna consulta técnica relacionada con el contenido, puede contactarse con nuestros expertos; profesor@[Link] >> wow red users .com CONECTESE CON LOS MEJORES | LIBROS DE COMPUTACION Cree su propia red social e implemente un sistema capaz de evolucionar en el tiempo Speenotea tect ar td LLEGAMOS A TODO EL MUNDO VIA >0ca* Y ==" MAS INFORMACION / CONTACTENOS Pee ACS eee eo et tee) Desarrollo web con Java desde cero Complemento ideal de Java desde cero esta obra retine todas las herramientas necesarias para convertirse en un verdadero experto en el desarrollo de aplicaciones web con Java. En cada capitulo se presenta un ejemplo integrador, real y concreto, realizado con herramientas open source: Dentro del libro encontrara*: Otros RU Introduccidn a la programacion web Configuracién de un servidot Trabajo con ISP / Programacién de Struts y ActionForms Programacién de vistas/ Validacién automitica de paginas * Pare del contenido de este libro fe publcado previamente ea Progremacién web Jva de esa misma editors titulos de la coleccién: [esa [ea gg pend PHP ® Java desde cero desde ceo desde cero A [Link] PROFESOR EN LINEA. En muostro sitio pods ancontrar noticias Anta cualquier consulta técnica relacionadas y también participar relacionada con el libro, puede de la comunidad de tecnologia més ccontactarse eon nuestros expertos importante de América Latina. profesor @[Link],</div><section class="_1A5SlX"><div class="_13Fwm2"><div class=""><div class="J21xEw" data-e2e="recommender-list"><h2 class="_2zE7Q5" data-e2e="list-title">También podría gustarte</h2><ul class="_1LVQoI" data-e2e="list-content-wrapper"><li class="_2ariaX" data-e2e="document-list-item"><div class=""><div data-e2e="list-item-info" class="_1x3wi9"><a class="jKsa3q" data-e2e="list-item-link" href="https://es.scribd.com/document/421625407/Ing-Desarrollo-Software" target="_blank"><span style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal">Ing Desarrollo Software</span></a><div class="DocumentThumbnail-module_wrapper_ljLM72"><img class="DocumentThumbnail-module_image_0tTQ0O _2Jhoqp" data-testid="thumbnail" alt="" loading="eager" src="https://imgv2-1-f.scribdassets.com/img/document/421625407/149x198/8c9d42e896/1565638291?v=1" srcSet="https://imgv2-2-f.scribdassets.com/img/document/421625407/298x396/6d933d5a61/1565638291?v=1 2x" style="width:80px;height:106.66666666666667px"/><svg class="DocumentThumbnail-module_tagOverlay_hN0eTR" viewBox="0 0 108 145" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M0 0H35V15C35 17.2091 33.2091 19 31 19H0V0Z" fill="var(--color-charcoal-400)"></path><text x="8" y="13" fill="var(--spl-color-text-white)" aria-hidden="true">PDF</text></svg><div class="DocumentThumbnail-module_stack_66zCPf"></div><div class="DocumentThumbnail-module_stack_66zCPf"></div></div><div class="_1wdVHx"><div class="_1zgq1v"><div class="_2Uoa2G">Aún no hay calificaciones</div></div><div class="_33xQ8e _2kfau2" data-e2e="doc-info-title">Ing Desarrollo Software</div><div class="_3UuYwh zs8qzW">1 página</div></div></div></div></li><li class="_2ariaX" data-e2e="document-list-item"><div class=""><div data-e2e="list-item-info" class="_1x3wi9"><a class="jKsa3q" data-e2e="list-item-link" href="https://es.scribd.com/document/396768489/Java-GUI-La-Libreria-Swing" target="_blank"><span style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal">Introducción a Java Swing GUI</span></a><div class="DocumentThumbnail-module_wrapper_ljLM72"><img class="DocumentThumbnail-module_image_0tTQ0O _2Jhoqp" data-testid="thumbnail" alt="" loading="eager" src="https://imgv2-2-f.scribdassets.com/img/document/396768489/149x198/798d73b9e7/1546565134?v=1" srcSet="https://imgv2-2-f.scribdassets.com/img/document/396768489/298x396/d7288f8e0c/1546565134?v=1 2x" style="width:80px;height:106.66666666666667px"/><svg class="DocumentThumbnail-module_tagOverlay_hN0eTR" viewBox="0 0 108 145" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M0 0H35V15C35 17.2091 33.2091 19 31 19H0V0Z" fill="var(--color-charcoal-400)"></path><text x="8" y="13" fill="var(--spl-color-text-white)" aria-hidden="true">PDF</text></svg><div class="DocumentThumbnail-module_stack_66zCPf"></div><div class="DocumentThumbnail-module_stack_66zCPf"></div></div><div class="_1wdVHx"><div class="_1zgq1v"><div class="_2Uoa2G">Aún no hay calificaciones</div></div><div class="_33xQ8e _2kfau2" data-e2e="doc-info-title">Introducción a Java Swing GUI</div><div class="_3UuYwh zs8qzW">53 páginas</div></div></div></div></li><li class="_2ariaX" data-e2e="document-list-item"><div class=""><div data-e2e="list-item-info" class="_1x3wi9"><a class="jKsa3q" data-e2e="list-item-link" href="https://es.scribd.com/document/501775300/Programacion-A-Guia-Didactica" target="_blank"><span style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal">Fundamentos de Programación Multiplataforma</span></a><div class="DocumentThumbnail-module_wrapper_ljLM72"><img class="DocumentThumbnail-module_image_0tTQ0O _2Jhoqp" data-testid="thumbnail" alt="" loading="eager" src="https://imgv2-1-f.scribdassets.com/img/document/501775300/149x198/353642efe2/1617716434?v=1" srcSet="https://imgv2-1-f.scribdassets.com/img/document/501775300/298x396/7a75d04f5e/1617716434?v=1 2x" style="width:80px;height:106.66666666666667px"/><svg class="DocumentThumbnail-module_tagOverlay_hN0eTR" viewBox="0 0 108 145" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M0 0H35V15C35 17.2091 33.2091 19 31 19H0V0Z" fill="var(--color-charcoal-400)"></path><text x="8" y="13" fill="var(--spl-color-text-white)" aria-hidden="true">PDF</text></svg><div class="DocumentThumbnail-module_stack_66zCPf"></div><div class="DocumentThumbnail-module_stack_66zCPf"></div></div><div class="_1wdVHx"><div class="_1zgq1v"><div class="_2Uoa2G">Aún no hay calificaciones</div></div><div class="_33xQ8e _2kfau2" data-e2e="doc-info-title">Fundamentos de Programación Multiplataforma</div><div class="_3UuYwh zs8qzW">17 páginas</div></div></div></div></li><li class="_2ariaX" data-e2e="document-list-item"><div class=""><div data-e2e="list-item-info" class="_1x3wi9"><a class="jKsa3q" data-e2e="list-item-link" href="https://es.scribd.com/document/562105552/Acceso-a-Datos-Garceta-367-432" target="_blank"><span style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal">Acceso A Datos - Garceta-367-432</span></a><div class="DocumentThumbnail-module_wrapper_ljLM72"><img class="DocumentThumbnail-module_image_0tTQ0O _2Jhoqp" data-testid="thumbnail" alt="" loading="eager" src="https://imgv2-2-f.scribdassets.com/img/document/562105552/149x198/31f2e6c252/1716019058?v=1" srcSet="https://imgv2-1-f.scribdassets.com/img/document/562105552/298x396/0443f11e66/1716019058?v=1 2x" style="width:80px;height:106.66666666666667px"/><svg class="DocumentThumbnail-module_tagOverlay_hN0eTR" viewBox="0 0 108 145" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M0 0H35V15C35 17.2091 33.2091 19 31 19H0V0Z" fill="var(--color-charcoal-400)"></path><text x="8" y="13" fill="var(--spl-color-text-white)" aria-hidden="true">PDF</text></svg><div class="DocumentThumbnail-module_stack_66zCPf"></div><div class="DocumentThumbnail-module_stack_66zCPf"></div></div><div class="_1wdVHx"><div class="_1zgq1v"><div class="_2Uoa2G">Aún no hay calificaciones</div></div><div class="_33xQ8e _2kfau2" data-e2e="doc-info-title">Acceso A Datos - Garceta-367-432</div><div class="_3UuYwh zs8qzW">66 páginas</div></div></div></div></li><li class="_2ariaX" data-e2e="document-list-item"><div class=""><div data-e2e="list-item-info" class="_1x3wi9"><a class="jKsa3q" data-e2e="list-item-link" href="https://es.scribd.com/presentation/486306622/Principios-de-diseno-web" target="_blank"><span style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal">Principios Esenciales del Diseño Web</span></a><div class="DocumentThumbnail-module_wrapper_ljLM72"><img class="DocumentThumbnail-module_image_0tTQ0O _2Jhoqp" data-testid="thumbnail" alt="" loading="eager" src="https://imgv2-1-f.scribdassets.com/img/document/486306622/149x198/abf404acd3/1725870181?v=1" srcSet="https://imgv2-2-f.scribdassets.com/img/document/486306622/298x396/d67fdbe3cc/1725870181?v=1 2x" style="width:80px;height:106.66666666666667px"/><svg class="DocumentThumbnail-module_tagOverlay_hN0eTR" viewBox="0 0 108 145" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M0 0H35V15C35 17.2091 33.2091 19 31 19H0V0Z" fill="var(--color-charcoal-400)"></path><text x="8" y="13" fill="var(--spl-color-text-white)" aria-hidden="true">PDF</text></svg><div class="DocumentThumbnail-module_stack_66zCPf"></div><div class="DocumentThumbnail-module_stack_66zCPf"></div></div><div class="_1wdVHx"><div class="_1zgq1v"><div class="_2x9K4q"><span class="Icon-module_wrapper_LUeQrI _3BAw53"><svg width="16" height="16" fill="none" xmlns="http://www.w3.org/2000/svg" role="img" aria-hidden="true" focusable="false"><path fill-rule="evenodd" clip-rule="evenodd" d="M14.18 14.055a2 2 0 0 1-1.857 1.257H4.498a3.11 3.11 0 0 1-1.39-.328A3.812 3.812 0 0 1 1 11.574V5.312h3.382l2.103-3.206a2 2 0 0 1 3.203-.52l.433.433A3 3 0 0 1 11 4.14v1.172h2a3 3 0 0 1 3 3v.037c0 .763-.146 1.52-.43 2.228l-1.39 3.478Zm-9.682-.743h7.148a1 1 0 0 0 .928-.629l1.14-2.848A4 4 0 0 0 14 8.349v-.037a1 1 0 0 0-1-1H9V4.14a1 1 0 0 0-.293-.707L8.274 3 6.17 6.206a2 2 0 0 1-1.789 1.106H3v4.262c0 .686.388 1.314 1.002 1.62.154.078.324.118.496.118Z" fill="currentColor"></path></svg><span style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal"></span></span><div>100% (1)</div></div></div><div class="_33xQ8e _2kfau2" data-e2e="doc-info-title">Principios Esenciales del Diseño Web</div><div class="_3UuYwh zs8qzW">13 páginas</div></div></div></div></li><li class="_2ariaX" data-e2e="document-list-item"><div class=""><div data-e2e="list-item-info" class="_1x3wi9"><a class="jKsa3q" data-e2e="list-item-link" href="https://es.scribd.com/document/64858311/Ingenieria-del-Software-en-entornos-de-Software-Libre" target="_blank"><span style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal">Ingeniería Del Software en Entornos de Software Libre</span></a><div class="DocumentThumbnail-module_wrapper_ljLM72"><img class="DocumentThumbnail-module_image_0tTQ0O _2Jhoqp" data-testid="thumbnail" alt="" loading="eager" src="https://imgv2-2-f.scribdassets.com/img/document/64858311/149x198/4bfdf53e2c/1569174708?v=1" srcSet="https://imgv2-2-f.scribdassets.com/img/document/64858311/298x396/1a16b4e543/1569174708?v=1 2x" style="width:80px;height:106.66666666666667px"/><svg class="DocumentThumbnail-module_tagOverlay_hN0eTR" viewBox="0 0 108 145" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M0 0H35V15C35 17.2091 33.2091 19 31 19H0V0Z" fill="var(--color-charcoal-400)"></path><text x="8" y="13" fill="var(--spl-color-text-white)" aria-hidden="true">PDF</text></svg><div class="DocumentThumbnail-module_stack_66zCPf"></div><div class="DocumentThumbnail-module_stack_66zCPf"></div></div><div class="_1wdVHx"><div class="_1zgq1v"><div class="_2x9K4q"><span class="Icon-module_wrapper_LUeQrI _3BAw53"><svg width="16" height="16" fill="none" xmlns="http://www.w3.org/2000/svg" role="img" aria-hidden="true" focusable="false"><path fill-rule="evenodd" clip-rule="evenodd" d="M14.18 14.055a2 2 0 0 1-1.857 1.257H4.498a3.11 3.11 0 0 1-1.39-.328A3.812 3.812 0 0 1 1 11.574V5.312h3.382l2.103-3.206a2 2 0 0 1 3.203-.52l.433.433A3 3 0 0 1 11 4.14v1.172h2a3 3 0 0 1 3 3v.037c0 .763-.146 1.52-.43 2.228l-1.39 3.478Zm-9.682-.743h7.148a1 1 0 0 0 .928-.629l1.14-2.848A4 4 0 0 0 14 8.349v-.037a1 1 0 0 0-1-1H9V4.14a1 1 0 0 0-.293-.707L8.274 3 6.17 6.206a2 2 0 0 1-1.789 1.106H3v4.262c0 .686.388 1.314 1.002 1.62.154.078.324.118.496.118Z" fill="currentColor"></path></svg><span style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal"></span></span><div>100% (1)</div></div></div><div class="_33xQ8e _2kfau2" data-e2e="doc-info-title">Ingeniería Del Software en Entornos de Software Libre</div><div class="_3UuYwh zs8qzW">314 páginas</div></div></div></div></li><li class="_2ariaX" data-e2e="document-list-item"><div class=""><div data-e2e="list-item-info" class="_1x3wi9"><a class="jKsa3q" data-e2e="list-item-link" href="https://es.scribd.com/document/300978164/Framework-Hibernate" target="_blank"><span style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal">Guía Rápida de Hibernate para Principiantes</span></a><div class="DocumentThumbnail-module_wrapper_ljLM72"><img class="DocumentThumbnail-module_image_0tTQ0O _2Jhoqp" data-testid="thumbnail" alt="" loading="eager" src="https://imgv2-2-f.scribdassets.com/img/document/300978164/149x198/043f5eb9da/1456673250?v=1" srcSet="https://imgv2-1-f.scribdassets.com/img/document/300978164/298x396/490584f130/1456673250?v=1 2x" style="width:80px;height:106.66666666666667px"/><svg class="DocumentThumbnail-module_tagOverlay_hN0eTR" viewBox="0 0 108 145" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M0 0H35V15C35 17.2091 33.2091 19 31 19H0V0Z" fill="var(--color-charcoal-400)"></path><text x="8" y="13" fill="var(--spl-color-text-white)" aria-hidden="true">PDF</text></svg><div class="DocumentThumbnail-module_stack_66zCPf"></div><div class="DocumentThumbnail-module_stack_66zCPf"></div></div><div class="_1wdVHx"><div class="_1zgq1v"><div class="_2Uoa2G">Aún no hay calificaciones</div></div><div class="_33xQ8e _2kfau2" data-e2e="doc-info-title">Guía Rápida de Hibernate para Principiantes</div><div class="_3UuYwh zs8qzW">18 páginas</div></div></div></div></li><li class="_2ariaX" data-e2e="document-list-item"><div class=""><div data-e2e="list-item-info" class="_1x3wi9"><a class="jKsa3q" data-e2e="list-item-link" href="https://es.scribd.com/document/625471450/Tema-4-SOM-1" target="_blank"><span style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal">Tema 4 SOM</span></a><div class="DocumentThumbnail-module_wrapper_ljLM72"><img class="DocumentThumbnail-module_image_0tTQ0O _2Jhoqp" data-testid="thumbnail" alt="" loading="eager" src="https://imgv2-2-f.scribdassets.com/img/document/625471450/149x198/8c7786cb87/1676275717?v=1" srcSet="https://imgv2-2-f.scribdassets.com/img/document/625471450/298x396/0dac81f975/1676275717?v=1 2x" style="width:80px;height:106.66666666666667px"/><svg class="DocumentThumbnail-module_tagOverlay_hN0eTR" viewBox="0 0 108 145" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M0 0H35V15C35 17.2091 33.2091 19 31 19H0V0Z" fill="var(--color-charcoal-400)"></path><text x="8" y="13" fill="var(--spl-color-text-white)" aria-hidden="true">PDF</text></svg><div class="DocumentThumbnail-module_stack_66zCPf"></div><div class="DocumentThumbnail-module_stack_66zCPf"></div></div><div class="_1wdVHx"><div class="_1zgq1v"><div class="_2Uoa2G">Aún no hay calificaciones</div></div><div class="_33xQ8e _2kfau2" data-e2e="doc-info-title">Tema 4 SOM</div><div class="_3UuYwh zs8qzW">60 páginas</div></div></div></div></li><li class="_2ariaX" data-e2e="document-list-item"><div class=""><div data-e2e="list-item-info" class="_1x3wi9"><a class="jKsa3q" data-e2e="list-item-link" href="https://es.scribd.com/document/45631645/ProgramacionenPHP" target="_blank"><span style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal">Guía Completa de Programación en PHP</span></a><div class="DocumentThumbnail-module_wrapper_ljLM72"><img class="DocumentThumbnail-module_image_0tTQ0O _2Jhoqp" data-testid="thumbnail" alt="" loading="eager" src="https://imgv2-2-f.scribdassets.com/img/document/45631645/149x198/e2e8d6397a/1406221448?v=1" srcSet="https://imgv2-1-f.scribdassets.com/img/document/45631645/298x396/b23e18f60f/1406221448?v=1 2x" style="width:80px;height:106.66666666666667px"/><svg class="DocumentThumbnail-module_tagOverlay_hN0eTR" viewBox="0 0 108 145" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M0 0H35V15C35 17.2091 33.2091 19 31 19H0V0Z" fill="var(--color-charcoal-400)"></path><text x="8" y="13" fill="var(--spl-color-text-white)" aria-hidden="true">PDF</text></svg><div class="DocumentThumbnail-module_stack_66zCPf"></div><div class="DocumentThumbnail-module_stack_66zCPf"></div></div><div class="_1wdVHx"><div class="_1zgq1v"><div class="_2x9K4q"><span class="Icon-module_wrapper_LUeQrI _3BAw53"><svg width="16" height="16" fill="none" xmlns="http://www.w3.org/2000/svg" role="img" aria-hidden="true" focusable="false"><path fill-rule="evenodd" clip-rule="evenodd" d="M14.18 14.055a2 2 0 0 1-1.857 1.257H4.498a3.11 3.11 0 0 1-1.39-.328A3.812 3.812 0 0 1 1 11.574V5.312h3.382l2.103-3.206a2 2 0 0 1 3.203-.52l.433.433A3 3 0 0 1 11 4.14v1.172h2a3 3 0 0 1 3 3v.037c0 .763-.146 1.52-.43 2.228l-1.39 3.478Zm-9.682-.743h7.148a1 1 0 0 0 .928-.629l1.14-2.848A4 4 0 0 0 14 8.349v-.037a1 1 0 0 0-1-1H9V4.14a1 1 0 0 0-.293-.707L8.274 3 6.17 6.206a2 2 0 0 1-1.789 1.106H3v4.262c0 .686.388 1.314 1.002 1.62.154.078.324.118.496.118Z" fill="currentColor"></path></svg><span style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal"></span></span><div>100% (1)</div></div></div><div class="_33xQ8e _2kfau2" data-e2e="doc-info-title">Guía Completa de Programación en PHP</div><div class="_3UuYwh zs8qzW">143 páginas</div></div></div></div></li><li class="_2ariaX" data-e2e="document-list-item"><div class=""><div data-e2e="list-item-info" class="_1x3wi9"><a class="jKsa3q" data-e2e="list-item-link" href="https://es.scribd.com/document/421057925/PDF-M5-JAVA" target="_blank"><span style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal">PDF M5 Java</span></a><div class="DocumentThumbnail-module_wrapper_ljLM72"><img class="DocumentThumbnail-module_image_0tTQ0O _2Jhoqp" data-testid="thumbnail" alt="" loading="eager" src="https://imgv2-2-f.scribdassets.com/img/document/421057925/149x198/a763e2851c/1565180884?v=1" srcSet="https://imgv2-2-f.scribdassets.com/img/document/421057925/298x396/65b0a04687/1565180884?v=1 2x" style="width:80px;height:106.66666666666667px"/><svg class="DocumentThumbnail-module_tagOverlay_hN0eTR" viewBox="0 0 108 145" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M0 0H35V15C35 17.2091 33.2091 19 31 19H0V0Z" fill="var(--color-charcoal-400)"></path><text x="8" y="13" fill="var(--spl-color-text-white)" aria-hidden="true">PDF</text></svg><div class="DocumentThumbnail-module_stack_66zCPf"></div><div class="DocumentThumbnail-module_stack_66zCPf"></div></div><div class="_1wdVHx"><div class="_1zgq1v"><div class="_2Uoa2G">Aún no hay calificaciones</div></div><div class="_33xQ8e _2kfau2" data-e2e="doc-info-title">PDF M5 Java</div><div class="_3UuYwh zs8qzW">166 páginas</div></div></div></div></li><li class="_2ariaX" data-e2e="document-list-item"><div class=""><div data-e2e="list-item-info" class="_1x3wi9"><a class="jKsa3q" data-e2e="list-item-link" href="https://es.scribd.com/document/325672105/Monografia-Modelamiento-de-Base-de-Datos" target="_blank"><span style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal">Monografia Modelamiento de Base de Datos</span></a><div class="DocumentThumbnail-module_wrapper_ljLM72"><img class="DocumentThumbnail-module_image_0tTQ0O _2Jhoqp" data-testid="thumbnail" alt="" loading="eager" src="https://imgv2-1-f.scribdassets.com/img/document/325672105/149x198/3f8595d5a9/1542741647?v=1" srcSet="https://imgv2-1-f.scribdassets.com/img/document/325672105/298x396/cd973adae6/1542741647?v=1 2x" style="width:80px;height:106.66666666666667px"/><svg class="DocumentThumbnail-module_tagOverlay_hN0eTR" viewBox="0 0 108 145" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M0 0H35V15C35 17.2091 33.2091 19 31 19H0V0Z" fill="var(--color-charcoal-400)"></path><text x="8" y="13" fill="var(--spl-color-text-white)" aria-hidden="true">PDF</text></svg><div class="DocumentThumbnail-module_stack_66zCPf"></div><div class="DocumentThumbnail-module_stack_66zCPf"></div></div><div class="_1wdVHx"><div class="_1zgq1v"><div class="_2Uoa2G">Aún no hay calificaciones</div></div><div class="_33xQ8e _2kfau2" data-e2e="doc-info-title">Monografia Modelamiento de Base de Datos</div><div class="_3UuYwh zs8qzW">75 páginas</div></div></div></div></li><li class="_2ariaX" data-e2e="document-list-item"><div class=""><div data-e2e="list-item-info" class="_1x3wi9"><a class="jKsa3q" data-e2e="list-item-link" href="https://es.scribd.com/document/781732476/Desarrollo-y-reutilizacion-de-componentes-software-y-multimedia-mediante-lenguajes-de-guion-UF1842" target="_blank"><span style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal">Desarrollo y Reutilización de Componentes Software y Multimedia Mediante Lenguajes de Guion - UF1842</span></a><div class="DocumentThumbnail-module_wrapper_ljLM72"><img class="DocumentThumbnail-module_image_0tTQ0O _2Jhoqp" data-testid="thumbnail" alt="" loading="eager" src="https://imgv2-2-f.scribdassets.com/img/document/781732476/149x198/91046bdc03/1755980485?v=1" srcSet="https://imgv2-2-f.scribdassets.com/img/document/781732476/298x396/67a5f784aa/1755980485?v=1 2x" style="width:80px;height:106.66666666666667px"/><svg class="DocumentThumbnail-module_tagOverlay_hN0eTR" viewBox="0 0 108 145" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M0 0H35V15C35 17.2091 33.2091 19 31 19H0V0Z" fill="var(--color-charcoal-400)"></path><text x="8" y="13" fill="var(--spl-color-text-white)" aria-hidden="true">PDF</text></svg><div class="DocumentThumbnail-module_stack_66zCPf"></div><div class="DocumentThumbnail-module_stack_66zCPf"></div></div><div class="_1wdVHx"><div class="_1zgq1v"><div class="_2x9K4q"><span class="Icon-module_wrapper_LUeQrI _3BAw53"><svg width="16" height="16" fill="none" xmlns="http://www.w3.org/2000/svg" role="img" aria-hidden="true" focusable="false"><path fill-rule="evenodd" clip-rule="evenodd" d="M14.18 14.055a2 2 0 0 1-1.857 1.257H4.498a3.11 3.11 0 0 1-1.39-.328A3.812 3.812 0 0 1 1 11.574V5.312h3.382l2.103-3.206a2 2 0 0 1 3.203-.52l.433.433A3 3 0 0 1 11 4.14v1.172h2a3 3 0 0 1 3 3v.037c0 .763-.146 1.52-.43 2.228l-1.39 3.478Zm-9.682-.743h7.148a1 1 0 0 0 .928-.629l1.14-2.848A4 4 0 0 0 14 8.349v-.037a1 1 0 0 0-1-1H9V4.14a1 1 0 0 0-.293-.707L8.274 3 6.17 6.206a2 2 0 0 1-1.789 1.106H3v4.262c0 .686.388 1.314 1.002 1.62.154.078.324.118.496.118Z" fill="currentColor"></path></svg><span style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal"></span></span><div>100% (1)</div></div></div><div class="_33xQ8e _2kfau2" data-e2e="doc-info-title">Desarrollo y Reutilización de Componentes Software y Multimedia Mediante Lenguajes de Guion - UF1842</div><div class="_3UuYwh zs8qzW">140 páginas</div></div></div></div></li><li class="_2ariaX" data-e2e="document-list-item"><div class=""><div data-e2e="list-item-info" class="_1x3wi9"><a class="jKsa3q" data-e2e="list-item-link" href="https://es.scribd.com/document/473488935/Aprender-PHP-MySQL-y-JavaScript-con-jQuery-CSS-y-HTML5" target="_blank"><span style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal">Aprender PHP, MySQL y JavaScript Con Jquery, CSS y HTML5</span></a><div class="DocumentThumbnail-module_wrapper_ljLM72"><img class="DocumentThumbnail-module_image_0tTQ0O _2Jhoqp" data-testid="thumbnail" alt="" loading="eager" src="https://imgv2-1-f.scribdassets.com/img/document/473488935/149x198/a4724ac15e/1712885924?v=1" srcSet="https://imgv2-2-f.scribdassets.com/img/document/473488935/298x396/5b3099a2e8/1712885924?v=1 2x" style="width:80px;height:106.66666666666667px"/><svg class="DocumentThumbnail-module_tagOverlay_hN0eTR" viewBox="0 0 108 145" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M0 0H35V15C35 17.2091 33.2091 19 31 19H0V0Z" fill="var(--color-charcoal-400)"></path><text x="8" y="13" fill="var(--spl-color-text-white)" aria-hidden="true">PDF</text></svg><div class="DocumentThumbnail-module_stack_66zCPf"></div><div class="DocumentThumbnail-module_stack_66zCPf"></div></div><div class="_1wdVHx"><div class="_1zgq1v"><div class="_2x9K4q"><span class="Icon-module_wrapper_LUeQrI _3BAw53"><svg width="16" height="16" fill="none" xmlns="http://www.w3.org/2000/svg" role="img" aria-hidden="true" focusable="false"><path fill-rule="evenodd" clip-rule="evenodd" d="M14.18 14.055a2 2 0 0 1-1.857 1.257H4.498a3.11 3.11 0 0 1-1.39-.328A3.812 3.812 0 0 1 1 11.574V5.312h3.382l2.103-3.206a2 2 0 0 1 3.203-.52l.433.433A3 3 0 0 1 11 4.14v1.172h2a3 3 0 0 1 3 3v.037c0 .763-.146 1.52-.43 2.228l-1.39 3.478Zm-9.682-.743h7.148a1 1 0 0 0 .928-.629l1.14-2.848A4 4 0 0 0 14 8.349v-.037a1 1 0 0 0-1-1H9V4.14a1 1 0 0 0-.293-.707L8.274 3 6.17 6.206a2 2 0 0 1-1.789 1.106H3v4.262c0 .686.388 1.314 1.002 1.62.154.078.324.118.496.118Z" fill="currentColor"></path></svg><span style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal"></span></span><div>83% (6)</div></div></div><div class="_33xQ8e _2kfau2" data-e2e="doc-info-title">Aprender PHP, MySQL y JavaScript Con Jquery, CSS y HTML5</div><div class="_3UuYwh zs8qzW">790 páginas</div></div></div></div></li><li class="_2ariaX" data-e2e="document-list-item"><div class=""><div data-e2e="list-item-info" class="_1x3wi9"><a class="jKsa3q" data-e2e="list-item-link" href="https://es.scribd.com/presentation/532799874/Servicios-Web" target="_blank"><span style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal">Introducción a Servicios Web y XML</span></a><div class="DocumentThumbnail-module_wrapper_ljLM72"><img class="DocumentThumbnail-module_image_0tTQ0O _2Jhoqp" data-testid="thumbnail" alt="" loading="eager" src="https://imgv2-1-f.scribdassets.com/img/document/532799874/149x198/ab9026e4de/1634335845?v=1" srcSet="https://imgv2-1-f.scribdassets.com/img/document/532799874/298x396/3e71044e57/1634335845?v=1 2x" style="width:80px;height:106.66666666666667px"/><svg class="DocumentThumbnail-module_tagOverlay_hN0eTR" viewBox="0 0 108 145" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M0 0H35V15C35 17.2091 33.2091 19 31 19H0V0Z" fill="var(--color-charcoal-400)"></path><text x="8" y="13" fill="var(--spl-color-text-white)" aria-hidden="true">PDF</text></svg><div class="DocumentThumbnail-module_stack_66zCPf"></div><div class="DocumentThumbnail-module_stack_66zCPf"></div></div><div class="_1wdVHx"><div class="_1zgq1v"><div class="_2Uoa2G">Aún no hay calificaciones</div></div><div class="_33xQ8e _2kfau2" data-e2e="doc-info-title">Introducción a Servicios Web y XML</div><div class="_3UuYwh zs8qzW">56 páginas</div></div></div></div></li><li class="_2ariaX" data-e2e="document-list-item"><div class=""><div data-e2e="list-item-info" class="_1x3wi9"><a class="jKsa3q" data-e2e="list-item-link" href="https://es.scribd.com/document/425193471/Desarrollo-Web-HTML5-CSS3-y-XML" target="_blank"><span style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal">Guía de HTML5 y CSS3 para Principiantes</span></a><div class="DocumentThumbnail-module_wrapper_ljLM72"><img class="DocumentThumbnail-module_image_0tTQ0O _2Jhoqp" data-testid="thumbnail" alt="" loading="eager" src="https://imgv2-2-f.scribdassets.com/img/document/425193471/149x198/f4d5474f17/1750699842?v=1" srcSet="https://imgv2-1-f.scribdassets.com/img/document/425193471/298x396/faa9f48e2f/1750699842?v=1 2x" style="width:80px;height:106.66666666666667px"/><svg class="DocumentThumbnail-module_tagOverlay_hN0eTR" viewBox="0 0 108 145" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M0 0H35V15C35 17.2091 33.2091 19 31 19H0V0Z" fill="var(--color-charcoal-400)"></path><text x="8" y="13" fill="var(--spl-color-text-white)" aria-hidden="true">PDF</text></svg><div class="DocumentThumbnail-module_stack_66zCPf"></div><div class="DocumentThumbnail-module_stack_66zCPf"></div></div><div class="_1wdVHx"><div class="_1zgq1v"><div class="_2x9K4q"><span class="Icon-module_wrapper_LUeQrI _3BAw53"><svg width="16" height="16" fill="none" xmlns="http://www.w3.org/2000/svg" role="img" aria-hidden="true" focusable="false"><path fill-rule="evenodd" clip-rule="evenodd" d="M14.18 14.055a2 2 0 0 1-1.857 1.257H4.498a3.11 3.11 0 0 1-1.39-.328A3.812 3.812 0 0 1 1 11.574V5.312h3.382l2.103-3.206a2 2 0 0 1 3.203-.52l.433.433A3 3 0 0 1 11 4.14v1.172h2a3 3 0 0 1 3 3v.037c0 .763-.146 1.52-.43 2.228l-1.39 3.478Zm-9.682-.743h7.148a1 1 0 0 0 .928-.629l1.14-2.848A4 4 0 0 0 14 8.349v-.037a1 1 0 0 0-1-1H9V4.14a1 1 0 0 0-.293-.707L8.274 3 6.17 6.206a2 2 0 0 1-1.789 1.106H3v4.262c0 .686.388 1.314 1.002 1.62.154.078.324.118.496.118Z" fill="currentColor"></path></svg><span style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal"></span></span><div>0% (1)</div></div></div><div class="_33xQ8e _2kfau2" data-e2e="doc-info-title">Guía de HTML5 y CSS3 para Principiantes</div><div class="_3UuYwh zs8qzW">48 páginas</div></div></div></div></li><li class="_2ariaX" data-e2e="document-list-item"><div class=""><div data-e2e="list-item-info" class="_1x3wi9"><a class="jKsa3q" data-e2e="list-item-link" href="https://es.scribd.com/document/597867822/Html5-Cheatsheet-Emezeta-01" target="_blank"><span style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal">Html5 Cheatsheet Emezeta 01</span></a><div class="DocumentThumbnail-module_wrapper_ljLM72"><img class="DocumentThumbnail-module_image_0tTQ0O _2Jhoqp" data-testid="thumbnail" alt="" loading="eager" src="https://imgv2-1-f.scribdassets.com/img/document/597867822/149x198/e3b9e47975/1664628644?v=1" srcSet="https://imgv2-2-f.scribdassets.com/img/document/597867822/298x396/dac3df8c9b/1664628644?v=1 2x" style="width:80px;height:106.66666666666667px"/><svg class="DocumentThumbnail-module_tagOverlay_hN0eTR" viewBox="0 0 108 145" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M0 0H35V15C35 17.2091 33.2091 19 31 19H0V0Z" fill="var(--color-charcoal-400)"></path><text x="8" y="13" fill="var(--spl-color-text-white)" aria-hidden="true">PDF</text></svg><div class="DocumentThumbnail-module_stack_66zCPf"></div><div class="DocumentThumbnail-module_stack_66zCPf"></div></div><div class="_1wdVHx"><div class="_1zgq1v"><div class="_2Uoa2G">Aún no hay calificaciones</div></div><div class="_33xQ8e _2kfau2" data-e2e="doc-info-title">Html5 Cheatsheet Emezeta 01</div><div class="_3UuYwh zs8qzW">2 páginas</div></div></div></div></li><li class="_2ariaX" data-e2e="document-list-item"><div class=""><div data-e2e="list-item-info" class="_1x3wi9"><a class="jKsa3q" data-e2e="list-item-link" href="https://es.scribd.com/document/539180212/Pdfcoffee-com-Aprender-Php-Mysql-y-Javascript-Con-Jquery-Css-y-Html5-5epdf-4-PDF-Free" target="_blank"><span style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal">Aprender PHP Mysql y Javascript Con Jquery Css y Html5 5epdf 4 PDF Free</span></a><div class="DocumentThumbnail-module_wrapper_ljLM72"><img class="DocumentThumbnail-module_image_0tTQ0O _2Jhoqp" data-testid="thumbnail" alt="" loading="eager" src="https://imgv2-2-f.scribdassets.com/img/document/539180212/149x198/2a47d46f85/1636738540?v=1" srcSet="https://imgv2-2-f.scribdassets.com/img/document/539180212/298x396/06b1953949/1636738540?v=1 2x" style="width:80px;height:106.66666666666667px"/><svg class="DocumentThumbnail-module_tagOverlay_hN0eTR" viewBox="0 0 108 145" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M0 0H35V15C35 17.2091 33.2091 19 31 19H0V0Z" fill="var(--color-charcoal-400)"></path><text x="8" y="13" fill="var(--spl-color-text-white)" aria-hidden="true">PDF</text></svg><div class="DocumentThumbnail-module_stack_66zCPf"></div><div class="DocumentThumbnail-module_stack_66zCPf"></div></div><div class="_1wdVHx"><div class="_1zgq1v"><div class="_2Uoa2G">Aún no hay calificaciones</div></div><div class="_33xQ8e _2kfau2" data-e2e="doc-info-title">Aprender PHP Mysql y Javascript Con Jquery Css y Html5 5epdf 4 PDF Free</div><div class="_3UuYwh zs8qzW">790 páginas</div></div></div></div></li><li class="_2ariaX" data-e2e="document-list-item"><div class=""><div data-e2e="list-item-info" class="_1x3wi9"><a class="jKsa3q" data-e2e="list-item-link" href="https://es.scribd.com/document/305509034/Aplicaciones-Web" target="_blank"><span style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal">Desarrollo y Seguridad en Aplicaciones Web</span></a><div class="DocumentThumbnail-module_wrapper_ljLM72"><img class="DocumentThumbnail-module_image_0tTQ0O _2Jhoqp" data-testid="thumbnail" alt="" loading="eager" src="https://imgv2-1-f.scribdassets.com/img/document/305509034/149x198/7bb0e23d07/1726421199?v=1" srcSet="https://imgv2-2-f.scribdassets.com/img/document/305509034/298x396/e373c3b31e/1726421199?v=1 2x" style="width:80px;height:106.66666666666667px"/><svg class="DocumentThumbnail-module_tagOverlay_hN0eTR" viewBox="0 0 108 145" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M0 0H35V15C35 17.2091 33.2091 19 31 19H0V0Z" fill="var(--color-charcoal-400)"></path><text x="8" y="13" fill="var(--spl-color-text-white)" aria-hidden="true">PDF</text></svg><div class="DocumentThumbnail-module_stack_66zCPf"></div><div class="DocumentThumbnail-module_stack_66zCPf"></div></div><div class="_1wdVHx"><div class="_1zgq1v"><div class="_2x9K4q"><span class="Icon-module_wrapper_LUeQrI _3BAw53"><svg width="16" height="16" fill="none" xmlns="http://www.w3.org/2000/svg" role="img" aria-hidden="true" focusable="false"><path fill-rule="evenodd" clip-rule="evenodd" d="M14.18 14.055a2 2 0 0 1-1.857 1.257H4.498a3.11 3.11 0 0 1-1.39-.328A3.812 3.812 0 0 1 1 11.574V5.312h3.382l2.103-3.206a2 2 0 0 1 3.203-.52l.433.433A3 3 0 0 1 11 4.14v1.172h2a3 3 0 0 1 3 3v.037c0 .763-.146 1.52-.43 2.228l-1.39 3.478Zm-9.682-.743h7.148a1 1 0 0 0 .928-.629l1.14-2.848A4 4 0 0 0 14 8.349v-.037a1 1 0 0 0-1-1H9V4.14a1 1 0 0 0-.293-.707L8.274 3 6.17 6.206a2 2 0 0 1-1.789 1.106H3v4.262c0 .686.388 1.314 1.002 1.62.154.078.324.118.496.118Z" fill="currentColor"></path></svg><span style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal"></span></span><div>100% (1)</div></div></div><div class="_33xQ8e _2kfau2" data-e2e="doc-info-title">Desarrollo y Seguridad en Aplicaciones Web</div><div class="_3UuYwh zs8qzW">131 páginas</div></div></div></div></li><li class="_2ariaX" data-e2e="document-list-item"><div class=""><div data-e2e="list-item-info" class="_1x3wi9"><a class="jKsa3q" data-e2e="list-item-link" href="https://es.scribd.com/document/118430020/Spring-MVC-Espanol" target="_blank"><span style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal">Spring MVC Español</span></a><div class="DocumentThumbnail-module_wrapper_ljLM72"><img class="DocumentThumbnail-module_image_0tTQ0O _2Jhoqp" data-testid="thumbnail" alt="" loading="eager" src="https://imgv2-2-f.scribdassets.com/img/document/118430020/149x198/2d19a03828/1543559713?v=1" srcSet="https://imgv2-1-f.scribdassets.com/img/document/118430020/298x396/5039e05efa/1543559713?v=1 2x" style="width:80px;height:106.66666666666667px"/><svg class="DocumentThumbnail-module_tagOverlay_hN0eTR" viewBox="0 0 108 145" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M0 0H35V15C35 17.2091 33.2091 19 31 19H0V0Z" fill="var(--color-charcoal-400)"></path><text x="8" y="13" fill="var(--spl-color-text-white)" aria-hidden="true">PDF</text></svg><div class="DocumentThumbnail-module_stack_66zCPf"></div><div class="DocumentThumbnail-module_stack_66zCPf"></div></div><div class="_1wdVHx"><div class="_1zgq1v"><div class="_2Uoa2G">Aún no hay calificaciones</div></div><div class="_33xQ8e _2kfau2" data-e2e="doc-info-title">Spring MVC Español</div><div class="_3UuYwh zs8qzW">63 páginas</div></div></div></div></li><li class="_2ariaX" data-e2e="document-list-item"><div class=""><div data-e2e="list-item-info" class="_1x3wi9"><a class="jKsa3q" data-e2e="list-item-link" href="https://es.scribd.com/presentation/366546316/Arquitectura-de-N-Capas" target="_blank"><span style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal">Arquitectura de N Capas en Software</span></a><div class="DocumentThumbnail-module_wrapper_ljLM72"><img class="DocumentThumbnail-module_image_0tTQ0O _2Jhoqp" data-testid="thumbnail" alt="" loading="eager" src="https://imgv2-1-f.scribdassets.com/img/document/366546316/149x198/45e4b62b8f/1665349751?v=1" srcSet="https://imgv2-1-f.scribdassets.com/img/document/366546316/298x396/3f65bb70ad/1665349751?v=1 2x" style="width:80px;height:106.66666666666667px"/><svg class="DocumentThumbnail-module_tagOverlay_hN0eTR" viewBox="0 0 108 145" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M0 0H35V15C35 17.2091 33.2091 19 31 19H0V0Z" fill="var(--color-charcoal-400)"></path><text x="8" y="13" fill="var(--spl-color-text-white)" aria-hidden="true">PDF</text></svg><div class="DocumentThumbnail-module_stack_66zCPf"></div><div class="DocumentThumbnail-module_stack_66zCPf"></div></div><div class="_1wdVHx"><div class="_1zgq1v"><div class="_2x9K4q"><span class="Icon-module_wrapper_LUeQrI _3BAw53"><svg width="16" height="16" fill="none" xmlns="http://www.w3.org/2000/svg" role="img" aria-hidden="true" focusable="false"><path fill-rule="evenodd" clip-rule="evenodd" d="M14.18 14.055a2 2 0 0 1-1.857 1.257H4.498a3.11 3.11 0 0 1-1.39-.328A3.812 3.812 0 0 1 1 11.574V5.312h3.382l2.103-3.206a2 2 0 0 1 3.203-.52l.433.433A3 3 0 0 1 11 4.14v1.172h2a3 3 0 0 1 3 3v.037c0 .763-.146 1.52-.43 2.228l-1.39 3.478Zm-9.682-.743h7.148a1 1 0 0 0 .928-.629l1.14-2.848A4 4 0 0 0 14 8.349v-.037a1 1 0 0 0-1-1H9V4.14a1 1 0 0 0-.293-.707L8.274 3 6.17 6.206a2 2 0 0 1-1.789 1.106H3v4.262c0 .686.388 1.314 1.002 1.62.154.078.324.118.496.118Z" fill="currentColor"></path></svg><span style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal"></span></span><div>100% (1)</div></div></div><div class="_33xQ8e _2kfau2" data-e2e="doc-info-title">Arquitectura de N Capas en Software</div><div class="_3UuYwh zs8qzW">29 páginas</div></div></div></div></li><li class="_2ariaX" data-e2e="document-list-item"><div class=""><div data-e2e="list-item-info" class="_1x3wi9"><a class="jKsa3q" data-e2e="list-item-link" href="https://es.scribd.com/document/64201336/Curso-de-Algoritmos-y-Estructura-de-Datos-UNIDAD-I-y-II-The-Oliztik" target="_blank"><span style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal">Curso de Algoritmos y Estructura de Datos - UNIDAD I y II - The Oliztik</span></a><div class="DocumentThumbnail-module_wrapper_ljLM72"><img class="DocumentThumbnail-module_image_0tTQ0O _2Jhoqp" data-testid="thumbnail" alt="" loading="eager" src="https://imgv2-2-f.scribdassets.com/img/document/64201336/149x198/1932fc06a6/1726884410?v=1" srcSet="https://imgv2-1-f.scribdassets.com/img/document/64201336/298x396/c5b965f93e/1726884410?v=1 2x" style="width:80px;height:106.66666666666667px"/><svg class="DocumentThumbnail-module_tagOverlay_hN0eTR" viewBox="0 0 108 145" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M0 0H35V15C35 17.2091 33.2091 19 31 19H0V0Z" fill="var(--color-charcoal-400)"></path><text x="8" y="13" fill="var(--spl-color-text-white)" aria-hidden="true">PDF</text></svg><div class="DocumentThumbnail-module_stack_66zCPf"></div><div class="DocumentThumbnail-module_stack_66zCPf"></div></div><div class="_1wdVHx"><div class="_1zgq1v"><div class="_2x9K4q"><span class="Icon-module_wrapper_LUeQrI _3BAw53"><svg width="16" height="16" fill="none" xmlns="http://www.w3.org/2000/svg" role="img" aria-hidden="true" focusable="false"><path fill-rule="evenodd" clip-rule="evenodd" d="M14.18 14.055a2 2 0 0 1-1.857 1.257H4.498a3.11 3.11 0 0 1-1.39-.328A3.812 3.812 0 0 1 1 11.574V5.312h3.382l2.103-3.206a2 2 0 0 1 3.203-.52l.433.433A3 3 0 0 1 11 4.14v1.172h2a3 3 0 0 1 3 3v.037c0 .763-.146 1.52-.43 2.228l-1.39 3.478Zm-9.682-.743h7.148a1 1 0 0 0 .928-.629l1.14-2.848A4 4 0 0 0 14 8.349v-.037a1 1 0 0 0-1-1H9V4.14a1 1 0 0 0-.293-.707L8.274 3 6.17 6.206a2 2 0 0 1-1.789 1.106H3v4.262c0 .686.388 1.314 1.002 1.62.154.078.324.118.496.118Z" fill="currentColor"></path></svg><span style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal"></span></span><div>100% (2)</div></div></div><div class="_33xQ8e _2kfau2" data-e2e="doc-info-title">Curso de Algoritmos y Estructura de Datos - UNIDAD I y II - The Oliztik</div><div class="_3UuYwh zs8qzW">198 páginas</div></div></div></div></li><li class="_2ariaX" data-e2e="document-list-item"><div class=""><div data-e2e="list-item-info" class="_1x3wi9"><a class="jKsa3q" data-e2e="list-item-link" href="https://es.scribd.com/document/433941959/Admnistracion-de-Bases-de-Datos" target="_blank"><span style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal">Administración de Bases de Datos: Guía Completa</span></a><div class="DocumentThumbnail-module_wrapper_ljLM72"><img class="DocumentThumbnail-module_image_0tTQ0O _2Jhoqp" data-testid="thumbnail" alt="" loading="eager" src="https://imgv2-2-f.scribdassets.com/img/document/433941959/149x198/122334f10b/1573170058?v=1" srcSet="https://imgv2-2-f.scribdassets.com/img/document/433941959/298x396/2c80016d7d/1573170058?v=1 2x" style="width:80px;height:106.66666666666667px"/><svg class="DocumentThumbnail-module_tagOverlay_hN0eTR" viewBox="0 0 108 145" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M0 0H35V15C35 17.2091 33.2091 19 31 19H0V0Z" fill="var(--color-charcoal-400)"></path><text x="8" y="13" fill="var(--spl-color-text-white)" aria-hidden="true">PDF</text></svg><div class="DocumentThumbnail-module_stack_66zCPf"></div><div class="DocumentThumbnail-module_stack_66zCPf"></div></div><div class="_1wdVHx"><div class="_1zgq1v"><div class="_2Uoa2G">Aún no hay calificaciones</div></div><div class="_33xQ8e _2kfau2" data-e2e="doc-info-title">Administración de Bases de Datos: Guía Completa</div><div class="_3UuYwh zs8qzW">9 páginas</div></div></div></div></li><li class="_2ariaX" data-e2e="document-list-item"><div class=""><div data-e2e="list-item-info" class="_1x3wi9"><a class="jKsa3q" data-e2e="list-item-link" href="https://es.scribd.com/document/365408663/artesania-del-software-pdf" target="_blank"><span style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal">Artesania Del Software PDF</span></a><div class="DocumentThumbnail-module_wrapper_ljLM72"><img class="DocumentThumbnail-module_image_0tTQ0O _2Jhoqp" data-testid="thumbnail" alt="" loading="eager" src="https://imgv2-1-f.scribdassets.com/img/document/365408663/149x198/319356d786/1511565556?v=1" srcSet="https://imgv2-2-f.scribdassets.com/img/document/365408663/298x396/9c27734054/1511565556?v=1 2x" style="width:80px;height:106.66666666666667px"/><svg class="DocumentThumbnail-module_tagOverlay_hN0eTR" viewBox="0 0 108 145" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M0 0H35V15C35 17.2091 33.2091 19 31 19H0V0Z" fill="var(--color-charcoal-400)"></path><text x="8" y="13" fill="var(--spl-color-text-white)" aria-hidden="true">PDF</text></svg><div class="DocumentThumbnail-module_stack_66zCPf"></div><div class="DocumentThumbnail-module_stack_66zCPf"></div></div><div class="_1wdVHx"><div class="_1zgq1v"><div class="_2Uoa2G">Aún no hay calificaciones</div></div><div class="_33xQ8e _2kfau2" data-e2e="doc-info-title">Artesania Del Software PDF</div><div class="_3UuYwh zs8qzW">58 páginas</div></div></div></div></li><li class="_2ariaX" data-e2e="document-list-item"><div class=""><div data-e2e="list-item-info" class="_1x3wi9"><a class="jKsa3q" data-e2e="list-item-link" href="https://es.scribd.com/document/316693529/Java-Swings" target="_blank"><span style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal">Java Swings</span></a><div class="DocumentThumbnail-module_wrapper_ljLM72"><img class="DocumentThumbnail-module_image_0tTQ0O _2Jhoqp" data-testid="thumbnail" alt="" loading="eager" src="https://imgv2-1-f.scribdassets.com/img/document/316693529/149x198/e6e927eb18/1466857240?v=1" srcSet="https://imgv2-2-f.scribdassets.com/img/document/316693529/298x396/4939b77bfd/1466857240?v=1 2x" style="width:80px;height:106.66666666666667px"/><svg class="DocumentThumbnail-module_tagOverlay_hN0eTR" viewBox="0 0 108 145" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M0 0H35V15C35 17.2091 33.2091 19 31 19H0V0Z" fill="var(--color-charcoal-400)"></path><text x="8" y="13" fill="var(--spl-color-text-white)" aria-hidden="true">PDF</text></svg><div class="DocumentThumbnail-module_stack_66zCPf"></div><div class="DocumentThumbnail-module_stack_66zCPf"></div></div><div class="_1wdVHx"><div class="_1zgq1v"><div class="_2Uoa2G">Aún no hay calificaciones</div></div><div class="_33xQ8e _2kfau2" data-e2e="doc-info-title">Java Swings</div><div class="_3UuYwh zs8qzW">38 páginas</div></div></div></div></li><li class="_2ariaX" data-e2e="document-list-item"><div class=""><div data-e2e="list-item-info" class="_1x3wi9"><a class="jKsa3q" data-e2e="list-item-link" href="https://es.scribd.com/presentation/424901680/Patrones-de-Diseno-Java" target="_blank"><span style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal">Ámbito de Variables y Patrones de Diseño</span></a><div class="DocumentThumbnail-module_wrapper_ljLM72"><img class="DocumentThumbnail-module_image_0tTQ0O _2Jhoqp" data-testid="thumbnail" alt="" loading="eager" src="https://imgv2-2-f.scribdassets.com/img/document/424901680/149x198/eba1c7d91c/1567909010?v=1" srcSet="https://imgv2-2-f.scribdassets.com/img/document/424901680/298x396/097fbf2b90/1567909010?v=1 2x" style="width:80px;height:106.66666666666667px"/><svg class="DocumentThumbnail-module_tagOverlay_hN0eTR" viewBox="0 0 108 145" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M0 0H35V15C35 17.2091 33.2091 19 31 19H0V0Z" fill="var(--color-charcoal-400)"></path><text x="8" y="13" fill="var(--spl-color-text-white)" aria-hidden="true">PDF</text></svg><div class="DocumentThumbnail-module_stack_66zCPf"></div><div class="DocumentThumbnail-module_stack_66zCPf"></div></div><div class="_1wdVHx"><div class="_1zgq1v"><div class="_2Uoa2G">Aún no hay calificaciones</div></div><div class="_33xQ8e _2kfau2" data-e2e="doc-info-title">Ámbito de Variables y Patrones de Diseño</div><div class="_3UuYwh zs8qzW">48 páginas</div></div></div></div></li><li class="_2ariaX" data-e2e="document-list-item"><div class=""><div data-e2e="list-item-info" class="_1x3wi9"><a class="jKsa3q" data-e2e="list-item-link" href="https://es.scribd.com/document/683917817/DAM-M09-T04-Pdf" target="_blank"><span style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal">Servicios en Red: Protocolo y Aplicaciones</span></a><div class="DocumentThumbnail-module_wrapper_ljLM72"><img class="DocumentThumbnail-module_image_0tTQ0O _2Jhoqp" data-testid="thumbnail" alt="" loading="eager" src="https://imgv2-1-f.scribdassets.com/img/document/683917817/149x198/fa545b1517/1710540481?v=1" srcSet="https://imgv2-1-f.scribdassets.com/img/document/683917817/298x396/02d3977991/1710540481?v=1 2x" style="width:80px;height:106.66666666666667px"/><svg class="DocumentThumbnail-module_tagOverlay_hN0eTR" viewBox="0 0 108 145" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M0 0H35V15C35 17.2091 33.2091 19 31 19H0V0Z" fill="var(--color-charcoal-400)"></path><text x="8" y="13" fill="var(--spl-color-text-white)" aria-hidden="true">PDF</text></svg><div class="DocumentThumbnail-module_stack_66zCPf"></div><div class="DocumentThumbnail-module_stack_66zCPf"></div></div><div class="_1wdVHx"><div class="_1zgq1v"><div class="_2Uoa2G">Aún no hay calificaciones</div></div><div class="_33xQ8e _2kfau2" data-e2e="doc-info-title">Servicios en Red: Protocolo y Aplicaciones</div><div class="_3UuYwh zs8qzW">24 páginas</div></div></div></div></li><li class="_2ariaX" data-e2e="document-list-item"><div class=""><div data-e2e="list-item-info" class="_1x3wi9"><a class="jKsa3q" data-e2e="list-item-link" href="https://es.scribd.com/document/556640477/Guia-de-Estudio-Programamcion-Aplicaciones-Web" target="_blank"><span style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal">Guía de Estudio: Desarrollo Web 4to Año</span></a><div class="DocumentThumbnail-module_wrapper_ljLM72"><img class="DocumentThumbnail-module_image_0tTQ0O _2Jhoqp" data-testid="thumbnail" alt="" loading="eager" src="https://imgv2-2-f.scribdassets.com/img/document/556640477/149x198/bd3507e2f3/1731532136?v=1" srcSet="https://imgv2-1-f.scribdassets.com/img/document/556640477/298x396/b4e3c9e555/1731532136?v=1 2x" style="width:80px;height:106.66666666666667px"/><svg class="DocumentThumbnail-module_tagOverlay_hN0eTR" viewBox="0 0 108 145" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M0 0H35V15C35 17.2091 33.2091 19 31 19H0V0Z" fill="var(--color-charcoal-400)"></path><text x="8" y="13" fill="var(--spl-color-text-white)" aria-hidden="true">PDF</text></svg><div class="DocumentThumbnail-module_stack_66zCPf"></div><div class="DocumentThumbnail-module_stack_66zCPf"></div></div><div class="_1wdVHx"><div class="_1zgq1v"><div class="_2x9K4q"><span class="Icon-module_wrapper_LUeQrI _3BAw53"><svg width="16" height="16" fill="none" xmlns="http://www.w3.org/2000/svg" role="img" aria-hidden="true" focusable="false"><path fill-rule="evenodd" clip-rule="evenodd" d="M14.18 14.055a2 2 0 0 1-1.857 1.257H4.498a3.11 3.11 0 0 1-1.39-.328A3.812 3.812 0 0 1 1 11.574V5.312h3.382l2.103-3.206a2 2 0 0 1 3.203-.52l.433.433A3 3 0 0 1 11 4.14v1.172h2a3 3 0 0 1 3 3v.037c0 .763-.146 1.52-.43 2.228l-1.39 3.478Zm-9.682-.743h7.148a1 1 0 0 0 .928-.629l1.14-2.848A4 4 0 0 0 14 8.349v-.037a1 1 0 0 0-1-1H9V4.14a1 1 0 0 0-.293-.707L8.274 3 6.17 6.206a2 2 0 0 1-1.789 1.106H3v4.262c0 .686.388 1.314 1.002 1.62.154.078.324.118.496.118Z" fill="currentColor"></path></svg><span style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal"></span></span><div>100% (2)</div></div></div><div class="_33xQ8e _2kfau2" data-e2e="doc-info-title">Guía de Estudio: Desarrollo Web 4to Año</div><div class="_3UuYwh zs8qzW">129 páginas</div></div></div></div></li><li class="_2ariaX" data-e2e="document-list-item"><div class=""><div data-e2e="list-item-info" class="_1x3wi9"><a class="jKsa3q" data-e2e="list-item-link" href="https://es.scribd.com/document/393136399/Guia-Didactica-Java-1" target="_blank"><span style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal">Guia Didactica Java - 1</span></a><div class="DocumentThumbnail-module_wrapper_ljLM72"><img class="DocumentThumbnail-module_image_0tTQ0O _2Jhoqp" data-testid="thumbnail" alt="" loading="eager" src="https://imgv2-2-f.scribdassets.com/img/document/393136399/149x198/838b048b3d/1724441564?v=1" srcSet="https://imgv2-2-f.scribdassets.com/img/document/393136399/298x396/68a2f2104b/1724441564?v=1 2x" style="width:80px;height:106.66666666666667px"/><svg class="DocumentThumbnail-module_tagOverlay_hN0eTR" viewBox="0 0 108 145" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M0 0H35V15C35 17.2091 33.2091 19 31 19H0V0Z" fill="var(--color-charcoal-400)"></path><text x="8" y="13" fill="var(--spl-color-text-white)" aria-hidden="true">PDF</text></svg><div class="DocumentThumbnail-module_stack_66zCPf"></div><div class="DocumentThumbnail-module_stack_66zCPf"></div></div><div class="_1wdVHx"><div class="_1zgq1v"><div class="_2x9K4q"><span class="Icon-module_wrapper_LUeQrI _3BAw53"><svg width="16" height="16" fill="none" xmlns="http://www.w3.org/2000/svg" role="img" aria-hidden="true" focusable="false"><path fill-rule="evenodd" clip-rule="evenodd" d="M14.18 14.055a2 2 0 0 1-1.857 1.257H4.498a3.11 3.11 0 0 1-1.39-.328A3.812 3.812 0 0 1 1 11.574V5.312h3.382l2.103-3.206a2 2 0 0 1 3.203-.52l.433.433A3 3 0 0 1 11 4.14v1.172h2a3 3 0 0 1 3 3v.037c0 .763-.146 1.52-.43 2.228l-1.39 3.478Zm-9.682-.743h7.148a1 1 0 0 0 .928-.629l1.14-2.848A4 4 0 0 0 14 8.349v-.037a1 1 0 0 0-1-1H9V4.14a1 1 0 0 0-.293-.707L8.274 3 6.17 6.206a2 2 0 0 1-1.789 1.106H3v4.262c0 .686.388 1.314 1.002 1.62.154.078.324.118.496.118Z" fill="currentColor"></path></svg><span style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal"></span></span><div>100% (1)</div></div></div><div class="_33xQ8e _2kfau2" data-e2e="doc-info-title">Guia Didactica Java - 1</div><div class="_3UuYwh zs8qzW">55 páginas</div></div></div></div></li><li class="_2ariaX" data-e2e="document-list-item"><div class=""><div data-e2e="list-item-info" class="_1x3wi9"><a class="jKsa3q" data-e2e="list-item-link" href="https://es.scribd.com/document/393480335/Servicios-de-Red-e-Internet-2011-DOC-pdf" target="_blank"><span style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal">Servicios de Red e Internet (2011) - DOC PDF</span></a><div class="DocumentThumbnail-module_wrapper_ljLM72"><img class="DocumentThumbnail-module_image_0tTQ0O _2Jhoqp" data-testid="thumbnail" alt="" loading="eager" src="https://imgv2-1-f.scribdassets.com/img/document/393480335/149x198/5eb630a070/1542520114?v=1" srcSet="https://imgv2-2-f.scribdassets.com/img/document/393480335/298x396/41c952b3e0/1542520114?v=1 2x" style="width:80px;height:106.66666666666667px"/><svg class="DocumentThumbnail-module_tagOverlay_hN0eTR" viewBox="0 0 108 145" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M0 0H35V15C35 17.2091 33.2091 19 31 19H0V0Z" fill="var(--color-charcoal-400)"></path><text x="8" y="13" fill="var(--spl-color-text-white)" aria-hidden="true">PDF</text></svg><div class="DocumentThumbnail-module_stack_66zCPf"></div><div class="DocumentThumbnail-module_stack_66zCPf"></div></div><div class="_1wdVHx"><div class="_1zgq1v"><div class="_2Uoa2G">Aún no hay calificaciones</div></div><div class="_33xQ8e _2kfau2" data-e2e="doc-info-title">Servicios de Red e Internet (2011) - DOC PDF</div><div class="_3UuYwh zs8qzW">39 páginas</div></div></div></div></li><li class="_2ariaX" data-e2e="document-list-item"><div class=""><div data-e2e="list-item-info" class="_1x3wi9"><a class="jKsa3q" data-e2e="list-item-link" href="https://es.scribd.com/document/601916975/programar-en-java" target="_blank"><span style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal">Programar en Java</span></a><div class="DocumentThumbnail-module_wrapper_ljLM72"><img class="DocumentThumbnail-module_image_0tTQ0O _2Jhoqp" data-testid="thumbnail" alt="" loading="eager" src="https://imgv2-1-f.scribdassets.com/img/document/601916975/149x198/8314c2eaa5/1710579914?v=1" srcSet="https://imgv2-2-f.scribdassets.com/img/document/601916975/298x396/f9051422d3/1710579914?v=1 2x" style="width:80px;height:106.66666666666667px"/><svg class="DocumentThumbnail-module_tagOverlay_hN0eTR" viewBox="0 0 108 145" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M0 0H35V15C35 17.2091 33.2091 19 31 19H0V0Z" fill="var(--color-charcoal-400)"></path><text x="8" y="13" fill="var(--spl-color-text-white)" aria-hidden="true">PDF</text></svg><div class="DocumentThumbnail-module_stack_66zCPf"></div><div class="DocumentThumbnail-module_stack_66zCPf"></div></div><div class="_1wdVHx"><div class="_1zgq1v"><div class="_2Uoa2G">Aún no hay calificaciones</div></div><div class="_33xQ8e _2kfau2" data-e2e="doc-info-title">Programar en Java</div><div class="_3UuYwh zs8qzW">12 páginas</div></div></div></div></li><li class="_2ariaX" data-e2e="document-list-item"><div class=""><div data-e2e="list-item-info" class="_1x3wi9"><a class="jKsa3q" data-e2e="list-item-link" href="https://es.scribd.com/document/644340534/Diseno-Web-Con-HTML-CSS-USERS-Gustavo-Carballeiro" target="_blank"><span style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal">Diseño Web Con HTML & CSS, USERS - Gustavo Carballeiro</span></a><div class="DocumentThumbnail-module_wrapper_ljLM72"><img class="DocumentThumbnail-module_image_0tTQ0O _2Jhoqp" data-testid="thumbnail" alt="" loading="eager" src="https://imgv2-1-f.scribdassets.com/img/document/644340534/149x198/a20bb3c4bd/1683739329?v=1" srcSet="https://imgv2-1-f.scribdassets.com/img/document/644340534/298x396/4705183dc4/1683739329?v=1 2x" style="width:80px;height:106.66666666666667px"/><svg class="DocumentThumbnail-module_tagOverlay_hN0eTR" viewBox="0 0 108 145" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M0 0H35V15C35 17.2091 33.2091 19 31 19H0V0Z" fill="var(--color-charcoal-400)"></path><text x="8" y="13" fill="var(--spl-color-text-white)" aria-hidden="true">PDF</text></svg><div class="DocumentThumbnail-module_stack_66zCPf"></div><div class="DocumentThumbnail-module_stack_66zCPf"></div></div><div class="_1wdVHx"><div class="_1zgq1v"><div class="_2Uoa2G">Aún no hay calificaciones</div></div><div class="_33xQ8e _2kfau2" data-e2e="doc-info-title">Diseño Web Con HTML & CSS, USERS - Gustavo Carballeiro</div><div class="_3UuYwh zs8qzW">196 páginas</div></div></div></div></li><li class="_2ariaX" data-e2e="document-list-item"><div class=""><div data-e2e="list-item-info" class="_1x3wi9"><a class="jKsa3q" data-e2e="list-item-link" href="https://es.scribd.com/document/757109957/Backend" target="_blank"><span style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal">Guía Completa de Backend y Java</span></a><div class="DocumentThumbnail-module_wrapper_ljLM72"><img class="DocumentThumbnail-module_image_0tTQ0O _2Jhoqp" data-testid="thumbnail" alt="" loading="eager" src="https://imgv2-2-f.scribdassets.com/img/document/757109957/149x198/479d33715c/1723090596?v=1" srcSet="https://imgv2-1-f.scribdassets.com/img/document/757109957/298x396/3d1726b582/1723090596?v=1 2x" style="width:80px;height:106.66666666666667px"/><svg class="DocumentThumbnail-module_tagOverlay_hN0eTR" viewBox="0 0 108 145" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M0 0H35V15C35 17.2091 33.2091 19 31 19H0V0Z" fill="var(--color-charcoal-400)"></path><text x="8" y="13" fill="var(--spl-color-text-white)" aria-hidden="true">PDF</text></svg><div class="DocumentThumbnail-module_stack_66zCPf"></div><div class="DocumentThumbnail-module_stack_66zCPf"></div></div><div class="_1wdVHx"><div class="_1zgq1v"><div class="_2Uoa2G">Aún no hay calificaciones</div></div><div class="_33xQ8e _2kfau2" data-e2e="doc-info-title">Guía Completa de Backend y Java</div><div class="_3UuYwh zs8qzW">299 páginas</div></div></div></div></li><li class="_2ariaX" data-e2e="document-list-item"><div class=""><div data-e2e="list-item-info" class="_1x3wi9"><a class="jKsa3q" data-e2e="list-item-link" href="https://es.scribd.com/document/561780456/Modulo1-NETCORE-2" target="_blank"><span style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal">Introducción a .NET Core y Visual Studio</span></a><div class="DocumentThumbnail-module_wrapper_ljLM72"><img class="DocumentThumbnail-module_image_0tTQ0O _2Jhoqp" data-testid="thumbnail" alt="" loading="eager" src="https://imgv2-1-f.scribdassets.com/img/document/561780456/149x198/dadced2304/1710583211?v=1" srcSet="https://imgv2-1-f.scribdassets.com/img/document/561780456/298x396/6d359e1d2b/1710583211?v=1 2x" style="width:80px;height:106.66666666666667px"/><svg class="DocumentThumbnail-module_tagOverlay_hN0eTR" viewBox="0 0 108 145" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M0 0H35V15C35 17.2091 33.2091 19 31 19H0V0Z" fill="var(--color-charcoal-400)"></path><text x="8" y="13" fill="var(--spl-color-text-white)" aria-hidden="true">PDF</text></svg><div class="DocumentThumbnail-module_stack_66zCPf"></div><div class="DocumentThumbnail-module_stack_66zCPf"></div></div><div class="_1wdVHx"><div class="_1zgq1v"><div class="_2Uoa2G">Aún no hay calificaciones</div></div><div class="_33xQ8e _2kfau2" data-e2e="doc-info-title">Introducción a .NET Core y Visual Studio</div><div class="_3UuYwh zs8qzW">12 páginas</div></div></div></div></li><li class="_2ariaX" data-e2e="document-list-item"><div class=""><div data-e2e="list-item-info" class="_1x3wi9"><a class="jKsa3q" data-e2e="list-item-link" href="https://es.scribd.com/document/356957232/Desarrollo-Web-Con-Java-Desde-Cero" target="_blank"><span style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal">Desarrollo Web Con Java Desde Cero</span></a><div class="DocumentThumbnail-module_wrapper_ljLM72"><img class="DocumentThumbnail-module_image_0tTQ0O _2Jhoqp" data-testid="thumbnail" alt="" loading="eager" src="https://imgv2-1-f.scribdassets.com/img/document/356957232/149x198/1a5c6626c1/1686247750?v=1" srcSet="https://imgv2-2-f.scribdassets.com/img/document/356957232/298x396/363d9a1d1e/1686247750?v=1 2x" style="width:80px;height:106.66666666666667px"/><svg class="DocumentThumbnail-module_tagOverlay_hN0eTR" viewBox="0 0 108 145" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M0 0H35V15C35 17.2091 33.2091 19 31 19H0V0Z" fill="var(--color-charcoal-400)"></path><text x="8" y="13" fill="var(--spl-color-text-white)" aria-hidden="true">PDF</text></svg><div class="DocumentThumbnail-module_stack_66zCPf"></div><div class="DocumentThumbnail-module_stack_66zCPf"></div></div><div class="_1wdVHx"><div class="_1zgq1v"><div class="_2x9K4q"><span class="Icon-module_wrapper_LUeQrI _3BAw53"><svg width="16" height="16" fill="none" xmlns="http://www.w3.org/2000/svg" role="img" aria-hidden="true" focusable="false"><path fill-rule="evenodd" clip-rule="evenodd" d="M14.18 14.055a2 2 0 0 1-1.857 1.257H4.498a3.11 3.11 0 0 1-1.39-.328A3.812 3.812 0 0 1 1 11.574V5.312h3.382l2.103-3.206a2 2 0 0 1 3.203-.52l.433.433A3 3 0 0 1 11 4.14v1.172h2a3 3 0 0 1 3 3v.037c0 .763-.146 1.52-.43 2.228l-1.39 3.478Zm-9.682-.743h7.148a1 1 0 0 0 .928-.629l1.14-2.848A4 4 0 0 0 14 8.349v-.037a1 1 0 0 0-1-1H9V4.14a1 1 0 0 0-.293-.707L8.274 3 6.17 6.206a2 2 0 0 1-1.789 1.106H3v4.262c0 .686.388 1.314 1.002 1.62.154.078.324.118.496.118Z" fill="currentColor"></path></svg><span style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal"></span></span><div>100% (1)</div></div></div><div class="_33xQ8e _2kfau2" data-e2e="doc-info-title">Desarrollo Web Con Java Desde Cero</div><div class="_3UuYwh zs8qzW">195 páginas</div></div></div></div></li><li class="_2ariaX" data-e2e="document-list-item"><div class=""><div data-e2e="list-item-info" class="_1x3wi9"><a class="jKsa3q" data-e2e="list-item-link" href="https://es.scribd.com/document/682044537/2015-Reparacion-de-PC-Desde-Cero-USERS" target="_blank"><span style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal">2015 Reparación de PC Desde Cero (USERS)</span></a><div class="DocumentThumbnail-module_wrapper_ljLM72"><img class="DocumentThumbnail-module_image_0tTQ0O _2Jhoqp" data-testid="thumbnail" alt="" loading="eager" src="https://imgv2-1-f.scribdassets.com/img/document/682044537/149x198/81a8544638/1716428510?v=1" srcSet="https://imgv2-1-f.scribdassets.com/img/document/682044537/298x396/177922e469/1716428510?v=1 2x" style="width:80px;height:106.66666666666667px"/><svg class="DocumentThumbnail-module_tagOverlay_hN0eTR" viewBox="0 0 108 145" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M0 0H35V15C35 17.2091 33.2091 19 31 19H0V0Z" fill="var(--color-charcoal-400)"></path><text x="8" y="13" fill="var(--spl-color-text-white)" aria-hidden="true">PDF</text></svg><div class="DocumentThumbnail-module_stack_66zCPf"></div><div class="DocumentThumbnail-module_stack_66zCPf"></div></div><div class="_1wdVHx"><div class="_1zgq1v"><div class="_2Uoa2G">Aún no hay calificaciones</div></div><div class="_33xQ8e _2kfau2" data-e2e="doc-info-title">2015 Reparación de PC Desde Cero (USERS)</div><div class="_3UuYwh zs8qzW">172 páginas</div></div></div></div></li><li class="_2ariaX" data-e2e="document-list-item"><div class=""><div data-e2e="list-item-info" class="_1x3wi9"><a class="jKsa3q" data-e2e="list-item-link" href="https://es.scribd.com/document/434461914/Estrategias-y-Claves-Para-El-Marketing-Digital" target="_blank"><span style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal">Estrategias y Claves para El Marketing Digital</span></a><div class="DocumentThumbnail-module_wrapper_ljLM72"><img class="DocumentThumbnail-module_image_0tTQ0O _2Jhoqp" data-testid="thumbnail" alt="" loading="eager" src="https://imgv2-2-f.scribdassets.com/img/document/434461914/149x198/50ae9ca92a/1717620842?v=1" srcSet="https://imgv2-1-f.scribdassets.com/img/document/434461914/298x396/91b51ade9d/1717620842?v=1 2x" style="width:80px;height:106.66666666666667px"/><svg class="DocumentThumbnail-module_tagOverlay_hN0eTR" viewBox="0 0 108 145" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M0 0H35V15C35 17.2091 33.2091 19 31 19H0V0Z" fill="var(--color-charcoal-400)"></path><text x="8" y="13" fill="var(--spl-color-text-white)" aria-hidden="true">PDF</text></svg><div class="DocumentThumbnail-module_stack_66zCPf"></div><div class="DocumentThumbnail-module_stack_66zCPf"></div></div><div class="_1wdVHx"><div class="_1zgq1v"><div class="_2x9K4q"><span class="Icon-module_wrapper_LUeQrI _3BAw53"><svg width="16" height="16" fill="none" xmlns="http://www.w3.org/2000/svg" role="img" aria-hidden="true" focusable="false"><path fill-rule="evenodd" clip-rule="evenodd" d="M14.18 14.055a2 2 0 0 1-1.857 1.257H4.498a3.11 3.11 0 0 1-1.39-.328A3.812 3.812 0 0 1 1 11.574V5.312h3.382l2.103-3.206a2 2 0 0 1 3.203-.52l.433.433A3 3 0 0 1 11 4.14v1.172h2a3 3 0 0 1 3 3v.037c0 .763-.146 1.52-.43 2.228l-1.39 3.478Zm-9.682-.743h7.148a1 1 0 0 0 .928-.629l1.14-2.848A4 4 0 0 0 14 8.349v-.037a1 1 0 0 0-1-1H9V4.14a1 1 0 0 0-.293-.707L8.274 3 6.17 6.206a2 2 0 0 1-1.789 1.106H3v4.262c0 .686.388 1.314 1.002 1.62.154.078.324.118.496.118Z" fill="currentColor"></path></svg><span style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal"></span></span><div>75% (4)</div></div></div><div class="_33xQ8e _2kfau2" data-e2e="doc-info-title">Estrategias y Claves para El Marketing Digital</div><div class="_3UuYwh zs8qzW">184 páginas</div></div></div></div></li><li class="_2ariaX" data-e2e="document-list-item"><div class=""><div data-e2e="list-item-info" class="_1x3wi9"><a class="jKsa3q" data-e2e="list-item-link" href="https://es.scribd.com/document/471147563/Estrategias-y-Claves-Para-el-Marketing-Digital-USERS-Lorena-Hure-pdf" target="_blank"><span style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal">Estrategias y Claves para El Marketing Digital, USERS - Lorena Hure PDF</span></a><div class="DocumentThumbnail-module_wrapper_ljLM72"><img class="DocumentThumbnail-module_image_0tTQ0O _2Jhoqp" data-testid="thumbnail" alt="" loading="eager" src="https://imgv2-1-f.scribdassets.com/img/document/471147563/149x198/eba47f5655/1716124374?v=1" srcSet="https://imgv2-2-f.scribdassets.com/img/document/471147563/298x396/cb54f391b4/1716124374?v=1 2x" style="width:80px;height:106.66666666666667px"/><svg class="DocumentThumbnail-module_tagOverlay_hN0eTR" viewBox="0 0 108 145" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M0 0H35V15C35 17.2091 33.2091 19 31 19H0V0Z" fill="var(--color-charcoal-400)"></path><text x="8" y="13" fill="var(--spl-color-text-white)" aria-hidden="true">PDF</text></svg><div class="DocumentThumbnail-module_stack_66zCPf"></div><div class="DocumentThumbnail-module_stack_66zCPf"></div></div><div class="_1wdVHx"><div class="_1zgq1v"><div class="_2Uoa2G">Aún no hay calificaciones</div></div><div class="_33xQ8e _2kfau2" data-e2e="doc-info-title">Estrategias y Claves para El Marketing Digital, USERS - Lorena Hure PDF</div><div class="_3UuYwh zs8qzW">184 páginas</div></div></div></div></li><li class="_2ariaX" data-e2e="document-list-item"><div class=""><div data-e2e="list-item-info" class="_1x3wi9"><a class="jKsa3q" data-e2e="list-item-link" href="https://es.scribd.com/document/492503248/Reparacion-de-PC-Desde-Cero" target="_blank"><span style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal">Reparacion de PC Desde Cero</span></a><div class="DocumentThumbnail-module_wrapper_ljLM72"><img class="DocumentThumbnail-module_image_0tTQ0O _2Jhoqp" data-testid="thumbnail" alt="" loading="eager" src="https://imgv2-1-f.scribdassets.com/img/document/492503248/149x198/e435dc4dd4/1685058029?v=1" srcSet="https://imgv2-2-f.scribdassets.com/img/document/492503248/298x396/623aa11536/1685058029?v=1 2x" style="width:80px;height:106.66666666666667px"/><svg class="DocumentThumbnail-module_tagOverlay_hN0eTR" viewBox="0 0 108 145" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M0 0H35V15C35 17.2091 33.2091 19 31 19H0V0Z" fill="var(--color-charcoal-400)"></path><text x="8" y="13" fill="var(--spl-color-text-white)" aria-hidden="true">PDF</text></svg><div class="DocumentThumbnail-module_stack_66zCPf"></div><div class="DocumentThumbnail-module_stack_66zCPf"></div></div><div class="_1wdVHx"><div class="_1zgq1v"><div class="_2x9K4q"><span class="Icon-module_wrapper_LUeQrI _3BAw53"><svg width="16" height="16" fill="none" xmlns="http://www.w3.org/2000/svg" role="img" aria-hidden="true" focusable="false"><path fill-rule="evenodd" clip-rule="evenodd" d="M14.18 14.055a2 2 0 0 1-1.857 1.257H4.498a3.11 3.11 0 0 1-1.39-.328A3.812 3.812 0 0 1 1 11.574V5.312h3.382l2.103-3.206a2 2 0 0 1 3.203-.52l.433.433A3 3 0 0 1 11 4.14v1.172h2a3 3 0 0 1 3 3v.037c0 .763-.146 1.52-.43 2.228l-1.39 3.478Zm-9.682-.743h7.148a1 1 0 0 0 .928-.629l1.14-2.848A4 4 0 0 0 14 8.349v-.037a1 1 0 0 0-1-1H9V4.14a1 1 0 0 0-.293-.707L8.274 3 6.17 6.206a2 2 0 0 1-1.789 1.106H3v4.262c0 .686.388 1.314 1.002 1.62.154.078.324.118.496.118Z" fill="currentColor"></path></svg><span style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal"></span></span><div>100% (2)</div></div></div><div class="_33xQ8e _2kfau2" data-e2e="doc-info-title">Reparacion de PC Desde Cero</div><div class="_3UuYwh zs8qzW">195 páginas</div></div></div></div></li><li class="_2ariaX" data-e2e="document-list-item"><div class=""><div data-e2e="list-item-info" class="_1x3wi9"><a class="jKsa3q" data-e2e="list-item-link" href="https://es.scribd.com/document/651446178/Scribd-vpdfs-com-Users-Windows-10-Avanzado" target="_blank"><span style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal">Users Windows 10 Avanzado</span></a><div class="DocumentThumbnail-module_wrapper_ljLM72"><img class="DocumentThumbnail-module_image_0tTQ0O _2Jhoqp" data-testid="thumbnail" alt="" loading="eager" src="https://imgv2-2-f.scribdassets.com/img/document/651446178/149x198/455e790577/1716439131?v=1" srcSet="https://imgv2-2-f.scribdassets.com/img/document/651446178/298x396/fe3686665a/1716439131?v=1 2x" style="width:80px;height:106.66666666666667px"/><svg class="DocumentThumbnail-module_tagOverlay_hN0eTR" viewBox="0 0 108 145" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M0 0H35V15C35 17.2091 33.2091 19 31 19H0V0Z" fill="var(--color-charcoal-400)"></path><text x="8" y="13" fill="var(--spl-color-text-white)" aria-hidden="true">PDF</text></svg><div class="DocumentThumbnail-module_stack_66zCPf"></div><div class="DocumentThumbnail-module_stack_66zCPf"></div></div><div class="_1wdVHx"><div class="_1zgq1v"><div class="_2Uoa2G">Aún no hay calificaciones</div></div><div class="_33xQ8e _2kfau2" data-e2e="doc-info-title">Users Windows 10 Avanzado</div><div class="_3UuYwh zs8qzW">322 páginas</div></div></div></div></li><li class="_2ariaX" data-e2e="document-list-item"><div class=""><div data-e2e="list-item-info" class="_1x3wi9"><a class="jKsa3q" data-e2e="list-item-link" href="https://es.scribd.com/document/395003897/Mi-Portafolio-de-Evidencias-del-Modulo-14-Prepa-en-linea-SEP-G-12" target="_blank"><span style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal">Guía del Portafolio de Evidencias SEP</span></a><div class="DocumentThumbnail-module_wrapper_ljLM72"><img class="DocumentThumbnail-module_image_0tTQ0O _2Jhoqp" data-testid="thumbnail" alt="" loading="eager" src="https://imgv2-2-f.scribdassets.com/img/document/395003897/149x198/c974414a11/1544044372?v=1" srcSet="https://imgv2-2-f.scribdassets.com/img/document/395003897/298x396/e944ecc6cf/1544044372?v=1 2x" style="width:80px;height:106.66666666666667px"/><svg class="DocumentThumbnail-module_tagOverlay_hN0eTR" viewBox="0 0 108 145" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M0 0H35V15C35 17.2091 33.2091 19 31 19H0V0Z" fill="var(--color-charcoal-400)"></path><text x="8" y="13" fill="var(--spl-color-text-white)" aria-hidden="true">PDF</text></svg><div class="DocumentThumbnail-module_stack_66zCPf"></div><div class="DocumentThumbnail-module_stack_66zCPf"></div></div><div class="_1wdVHx"><div class="_1zgq1v"><div class="_2Uoa2G">Aún no hay calificaciones</div></div><div class="_33xQ8e _2kfau2" data-e2e="doc-info-title">Guía del Portafolio de Evidencias SEP</div><div class="_3UuYwh zs8qzW">1 página</div></div></div></div></li><li class="_2ariaX" data-e2e="document-list-item"><div class=""><div data-e2e="list-item-info" class="_1x3wi9"><a class="jKsa3q" data-e2e="list-item-link" href="https://es.scribd.com/document/464646338/Windows-10-Guia-Completa-pdf" target="_blank"><span style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal">Windows 10 - Guia Completa PDF</span></a><div class="DocumentThumbnail-module_wrapper_ljLM72"><img class="DocumentThumbnail-module_image_0tTQ0O _2Jhoqp" data-testid="thumbnail" alt="" loading="eager" src="https://imgv2-2-f.scribdassets.com/img/document/464646338/149x198/7e5c576d6e/1716139513?v=1" srcSet="https://imgv2-1-f.scribdassets.com/img/document/464646338/298x396/d31bdf5ca4/1716139513?v=1 2x" style="width:80px;height:106.66666666666667px"/><svg class="DocumentThumbnail-module_tagOverlay_hN0eTR" viewBox="0 0 108 145" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M0 0H35V15C35 17.2091 33.2091 19 31 19H0V0Z" fill="var(--color-charcoal-400)"></path><text x="8" y="13" fill="var(--spl-color-text-white)" aria-hidden="true">PDF</text></svg><div class="DocumentThumbnail-module_stack_66zCPf"></div><div class="DocumentThumbnail-module_stack_66zCPf"></div></div><div class="_1wdVHx"><div class="_1zgq1v"><div class="_2Uoa2G">Aún no hay calificaciones</div></div><div class="_33xQ8e _2kfau2" data-e2e="doc-info-title">Windows 10 - Guia Completa PDF</div><div class="_3UuYwh zs8qzW">322 páginas</div></div></div></div></li><li class="_2ariaX" data-e2e="document-list-item"><div class=""><div data-e2e="list-item-info" class="_1x3wi9"><a class="jKsa3q" data-e2e="list-item-link" href="https://es.scribd.com/document/693614829/Presentacion-direcion" target="_blank"><span style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal">Presentacion Direcion</span></a><div class="DocumentThumbnail-module_wrapper_ljLM72"><img class="DocumentThumbnail-module_image_0tTQ0O _2Jhoqp" data-testid="thumbnail" alt="" loading="eager" src="https://imgv2-2-f.scribdassets.com/img/document/693614829/149x198/47867ffaa3/1716516455?v=1" srcSet="https://imgv2-1-f.scribdassets.com/img/document/693614829/298x396/3756af4379/1716516455?v=1 2x" style="width:80px;height:106.66666666666667px"/><svg class="DocumentThumbnail-module_tagOverlay_hN0eTR" viewBox="0 0 108 145" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M0 0H35V15C35 17.2091 33.2091 19 31 19H0V0Z" fill="var(--color-charcoal-400)"></path><text x="8" y="13" fill="var(--spl-color-text-white)" aria-hidden="true">PDF</text></svg><div class="DocumentThumbnail-module_stack_66zCPf"></div><div class="DocumentThumbnail-module_stack_66zCPf"></div></div><div class="_1wdVHx"><div class="_1zgq1v"><div class="_2Uoa2G">Aún no hay calificaciones</div></div><div class="_33xQ8e _2kfau2" data-e2e="doc-info-title">Presentacion Direcion</div><div class="_3UuYwh zs8qzW">3 páginas</div></div></div></div></li><li class="_2ariaX" data-e2e="document-list-item"><div class=""><div data-e2e="list-item-info" class="_1x3wi9"><a class="jKsa3q" data-e2e="list-item-link" href="https://es.scribd.com/document/723977647/Tecnico-en-Electronica-Nivel-3-Leccion-1-2024" target="_blank"><span style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal">Tecnico en Electronica Nivel 3 Leccion 1 2024</span></a><div class="DocumentThumbnail-module_wrapper_ljLM72"><img class="DocumentThumbnail-module_image_0tTQ0O _2Jhoqp" data-testid="thumbnail" alt="" loading="eager" src="https://imgv2-2-f.scribdassets.com/img/document/723977647/149x198/2248951a31/1713365360?v=1" srcSet="https://imgv2-2-f.scribdassets.com/img/document/723977647/298x396/9454c5484f/1713365360?v=1 2x" style="width:80px;height:106.66666666666667px"/><svg class="DocumentThumbnail-module_tagOverlay_hN0eTR" viewBox="0 0 108 145" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M0 0H35V15C35 17.2091 33.2091 19 31 19H0V0Z" fill="var(--color-charcoal-400)"></path><text x="8" y="13" fill="var(--spl-color-text-white)" aria-hidden="true">PDF</text></svg><div class="DocumentThumbnail-module_stack_66zCPf"></div><div class="DocumentThumbnail-module_stack_66zCPf"></div></div><div class="_1wdVHx"><div class="_1zgq1v"><div class="_2Uoa2G">Aún no hay calificaciones</div></div><div class="_33xQ8e _2kfau2" data-e2e="doc-info-title">Tecnico en Electronica Nivel 3 Leccion 1 2024</div><div class="_3UuYwh zs8qzW">2 páginas</div></div></div></div></li><li class="_2ariaX" data-e2e="document-list-item"><div class=""><div data-e2e="list-item-info" class="_1x3wi9"><a class="jKsa3q" data-e2e="list-item-link" href="https://es.scribd.com/document/901750148/Item-214" target="_blank"><span style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal">Item 214.</span></a><div class="DocumentThumbnail-module_wrapper_ljLM72"><img class="DocumentThumbnail-module_image_0tTQ0O _2Jhoqp" data-testid="thumbnail" alt="" loading="eager" src="https://imgv2-1-f.scribdassets.com/img/document/901750148/149x198/a645392655/1755206004?v=1" srcSet="https://imgv2-2-f.scribdassets.com/img/document/901750148/298x396/af864d2794/1755206004?v=1 2x" style="width:80px;height:106.66666666666667px"/><svg class="DocumentThumbnail-module_tagOverlay_hN0eTR" viewBox="0 0 108 145" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M0 0H35V15C35 17.2091 33.2091 19 31 19H0V0Z" fill="var(--color-charcoal-400)"></path><text x="8" y="13" fill="var(--spl-color-text-white)" aria-hidden="true">PDF</text></svg><div class="DocumentThumbnail-module_stack_66zCPf"></div><div class="DocumentThumbnail-module_stack_66zCPf"></div></div><div class="_1wdVHx"><div class="_1zgq1v"><div class="_2Uoa2G">Aún no hay calificaciones</div></div><div class="_33xQ8e _2kfau2" data-e2e="doc-info-title">Item 214.</div><div class="_3UuYwh zs8qzW">2 páginas</div></div></div></div></li><li class="_2ariaX" data-e2e="document-list-item"><div class=""><div data-e2e="list-item-info" class="_1x3wi9"><a class="jKsa3q" data-e2e="list-item-link" href="https://es.scribd.com/document/715724741/Soldadura-en-Bridas-Slip-On-ASME-B31-3" target="_blank"><span style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal">Soldadura en Bridas Slip-On ASME B31.3</span></a><div class="DocumentThumbnail-module_wrapper_ljLM72"><img class="DocumentThumbnail-module_image_0tTQ0O _2Jhoqp" data-testid="thumbnail" alt="" loading="eager" src="https://imgv2-2-f.scribdassets.com/img/document/715724741/149x198/bac2b811e5/1716429760?v=1" srcSet="https://imgv2-1-f.scribdassets.com/img/document/715724741/298x396/f7ff01ee93/1716429760?v=1 2x" style="width:80px;height:106.66666666666667px"/><svg class="DocumentThumbnail-module_tagOverlay_hN0eTR" viewBox="0 0 108 145" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M0 0H35V15C35 17.2091 33.2091 19 31 19H0V0Z" fill="var(--color-charcoal-400)"></path><text x="8" y="13" fill="var(--spl-color-text-white)" aria-hidden="true">PDF</text></svg><div class="DocumentThumbnail-module_stack_66zCPf"></div><div class="DocumentThumbnail-module_stack_66zCPf"></div></div><div class="_1wdVHx"><div class="_1zgq1v"><div class="_2Uoa2G">Aún no hay calificaciones</div></div><div class="_33xQ8e _2kfau2" data-e2e="doc-info-title">Soldadura en Bridas Slip-On ASME B31.3</div><div class="_3UuYwh zs8qzW">2 páginas</div></div></div></div></li><li class="_2ariaX" data-e2e="document-list-item"><div class=""><div data-e2e="list-item-info" class="_1x3wi9"><a class="jKsa3q" data-e2e="list-item-link" href="https://es.scribd.com/document/408214662/Justificacion-Practica" target="_blank"><span style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal">Justificacion Practica</span></a><div class="DocumentThumbnail-module_wrapper_ljLM72"><img class="DocumentThumbnail-module_image_0tTQ0O _2Jhoqp" data-testid="thumbnail" alt="" loading="eager" src="https://imgv2-1-f.scribdassets.com/img/document/408214662/149x198/29762a9671/1665839033?v=1" srcSet="https://imgv2-1-f.scribdassets.com/img/document/408214662/298x396/0fd06f2e4d/1665839033?v=1 2x" style="width:80px;height:106.66666666666667px"/><svg class="DocumentThumbnail-module_tagOverlay_hN0eTR" viewBox="0 0 108 145" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M0 0H35V15C35 17.2091 33.2091 19 31 19H0V0Z" fill="var(--color-charcoal-400)"></path><text x="8" y="13" fill="var(--spl-color-text-white)" aria-hidden="true">PDF</text></svg><div class="DocumentThumbnail-module_stack_66zCPf"></div><div class="DocumentThumbnail-module_stack_66zCPf"></div></div><div class="_1wdVHx"><div class="_1zgq1v"><div class="_2x9K4q"><span class="Icon-module_wrapper_LUeQrI _3BAw53"><svg width="16" height="16" fill="none" xmlns="http://www.w3.org/2000/svg" role="img" aria-hidden="true" focusable="false"><path fill-rule="evenodd" clip-rule="evenodd" d="M14.18 14.055a2 2 0 0 1-1.857 1.257H4.498a3.11 3.11 0 0 1-1.39-.328A3.812 3.812 0 0 1 1 11.574V5.312h3.382l2.103-3.206a2 2 0 0 1 3.203-.52l.433.433A3 3 0 0 1 11 4.14v1.172h2a3 3 0 0 1 3 3v.037c0 .763-.146 1.52-.43 2.228l-1.39 3.478Zm-9.682-.743h7.148a1 1 0 0 0 .928-.629l1.14-2.848A4 4 0 0 0 14 8.349v-.037a1 1 0 0 0-1-1H9V4.14a1 1 0 0 0-.293-.707L8.274 3 6.17 6.206a2 2 0 0 1-1.789 1.106H3v4.262c0 .686.388 1.314 1.002 1.62.154.078.324.118.496.118Z" fill="currentColor"></path></svg><span style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal"></span></span><div>0% (2)</div></div></div><div class="_33xQ8e _2kfau2" data-e2e="doc-info-title">Justificacion Practica</div><div class="_3UuYwh zs8qzW">3 páginas</div></div></div></div></li><li class="_2ariaX" data-e2e="document-list-item"><div class=""><div data-e2e="list-item-info" class="_1x3wi9"><a class="jKsa3q" data-e2e="list-item-link" href="https://es.scribd.com/document/454235446/Los-120-Mas-Ricos-de-Uruguay" target="_blank"><span style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal">Los 120 Mas Ricos de Uruguay</span></a><div class="DocumentThumbnail-module_wrapper_ljLM72"><img class="DocumentThumbnail-module_image_0tTQ0O _2Jhoqp" data-testid="thumbnail" alt="" loading="eager" src="https://imgv2-2-f.scribdassets.com/img/document/454235446/149x198/40e4475ca3/1585693182?v=1" srcSet="https://imgv2-1-f.scribdassets.com/img/document/454235446/298x396/aa38b50d8d/1585693182?v=1 2x" style="width:80px;height:106.66666666666667px"/><svg class="DocumentThumbnail-module_tagOverlay_hN0eTR" viewBox="0 0 108 145" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M0 0H35V15C35 17.2091 33.2091 19 31 19H0V0Z" fill="var(--color-charcoal-400)"></path><text x="8" y="13" fill="var(--spl-color-text-white)" aria-hidden="true">PDF</text></svg><div class="DocumentThumbnail-module_stack_66zCPf"></div><div class="DocumentThumbnail-module_stack_66zCPf"></div></div><div class="_1wdVHx"><div class="_1zgq1v"><div class="_2Uoa2G">Aún no hay calificaciones</div></div><div class="_33xQ8e _2kfau2" data-e2e="doc-info-title">Los 120 Mas Ricos de Uruguay</div><div class="_3UuYwh zs8qzW">15 páginas</div></div></div></div></li><li class="_2ariaX" data-e2e="document-list-item"><div class=""><div data-e2e="list-item-info" class="_1x3wi9"><a class="jKsa3q" data-e2e="list-item-link" href="https://es.scribd.com/document/651720149/CUADRO-COMPARATIVO-DE-ANTIBIOTICOS-EN-LA-TERAPIA-PERIODONTAL" target="_blank"><span style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal">Cuadro Comparativo de Antibióticos en La Terapia Periodontal</span></a><div class="DocumentThumbnail-module_wrapper_ljLM72"><img class="DocumentThumbnail-module_image_0tTQ0O _2Jhoqp" data-testid="thumbnail" alt="" loading="eager" src="https://imgv2-1-f.scribdassets.com/img/document/651720149/149x198/290649e853/1716025373?v=1" srcSet="https://imgv2-1-f.scribdassets.com/img/document/651720149/298x396/44b5ea59a4/1716025373?v=1 2x" style="width:80px;height:106.66666666666667px"/><svg class="DocumentThumbnail-module_tagOverlay_hN0eTR" viewBox="0 0 108 145" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M0 0H35V15C35 17.2091 33.2091 19 31 19H0V0Z" fill="var(--color-charcoal-400)"></path><text x="8" y="13" fill="var(--spl-color-text-white)" aria-hidden="true">PDF</text></svg><div class="DocumentThumbnail-module_stack_66zCPf"></div><div class="DocumentThumbnail-module_stack_66zCPf"></div></div><div class="_1wdVHx"><div class="_1zgq1v"><div class="_2Uoa2G">Aún no hay calificaciones</div></div><div class="_33xQ8e _2kfau2" data-e2e="doc-info-title">Cuadro Comparativo de Antibióticos en La Terapia Periodontal</div><div class="_3UuYwh zs8qzW">3 páginas</div></div></div></div></li><li class="_2ariaX" data-e2e="document-list-item"><div class=""><div data-e2e="list-item-info" class="_1x3wi9"><a class="jKsa3q" data-e2e="list-item-link" href="https://es.scribd.com/document/681792251/2do-Ingles-2da-parcial" target="_blank"><span style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal">2do - Inglés - 2da Parcial</span></a><div class="DocumentThumbnail-module_wrapper_ljLM72"><img class="DocumentThumbnail-module_image_0tTQ0O _2Jhoqp" data-testid="thumbnail" alt="" loading="eager" src="https://imgv2-2-f.scribdassets.com/img/document/681792251/149x198/5bdee5ce07/1716578219?v=1" srcSet="https://imgv2-2-f.scribdassets.com/img/document/681792251/298x396/3a00143a35/1716578219?v=1 2x" style="width:80px;height:106.66666666666667px"/><svg class="DocumentThumbnail-module_tagOverlay_hN0eTR" viewBox="0 0 108 145" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M0 0H35V15C35 17.2091 33.2091 19 31 19H0V0Z" fill="var(--color-charcoal-400)"></path><text x="8" y="13" fill="var(--spl-color-text-white)" aria-hidden="true">PDF</text></svg><div class="DocumentThumbnail-module_stack_66zCPf"></div><div class="DocumentThumbnail-module_stack_66zCPf"></div></div><div class="_1wdVHx"><div class="_1zgq1v"><div class="_2Uoa2G">Aún no hay calificaciones</div></div><div class="_33xQ8e _2kfau2" data-e2e="doc-info-title">2do - Inglés - 2da Parcial</div><div class="_3UuYwh zs8qzW">10 páginas</div></div></div></div></li><li class="_2ariaX" data-e2e="document-list-item"><div class=""><div data-e2e="list-item-info" class="_1x3wi9"><a class="jKsa3q" data-e2e="list-item-link" href="https://es.scribd.com/document/681788158/3ro-Ingles-Parcial-3" target="_blank"><span style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal">3ro - Inglés - Parcial 3</span></a><div class="DocumentThumbnail-module_wrapper_ljLM72"><img class="DocumentThumbnail-module_image_0tTQ0O _2Jhoqp" data-testid="thumbnail" alt="" loading="eager" src="https://imgv2-1-f.scribdassets.com/img/document/681788158/149x198/6ea569f94c/1716421207?v=1" srcSet="https://imgv2-1-f.scribdassets.com/img/document/681788158/298x396/363e494dfa/1716421207?v=1 2x" style="width:80px;height:106.66666666666667px"/><svg class="DocumentThumbnail-module_tagOverlay_hN0eTR" viewBox="0 0 108 145" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M0 0H35V15C35 17.2091 33.2091 19 31 19H0V0Z" fill="var(--color-charcoal-400)"></path><text x="8" y="13" fill="var(--spl-color-text-white)" aria-hidden="true">PDF</text></svg><div class="DocumentThumbnail-module_stack_66zCPf"></div><div class="DocumentThumbnail-module_stack_66zCPf"></div></div><div class="_1wdVHx"><div class="_1zgq1v"><div class="_2Uoa2G">Aún no hay calificaciones</div></div><div class="_33xQ8e _2kfau2" data-e2e="doc-info-title">3ro - Inglés - Parcial 3</div><div class="_3UuYwh zs8qzW">10 páginas</div></div></div></div></li><li class="_2ariaX" data-e2e="document-list-item"><div class=""><div data-e2e="list-item-info" class="_1x3wi9"><a class="jKsa3q" data-e2e="list-item-link" href="https://es.scribd.com/document/681785752/1ro-Ingles-2da-parcial" target="_blank"><span style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal">1ro - Inglés - 2da Parcial</span></a><div class="DocumentThumbnail-module_wrapper_ljLM72"><img class="DocumentThumbnail-module_image_0tTQ0O _2Jhoqp" data-testid="thumbnail" alt="" loading="eager" src="https://imgv2-2-f.scribdassets.com/img/document/681785752/149x198/1f8f932f2f/1716171172?v=1" srcSet="https://imgv2-2-f.scribdassets.com/img/document/681785752/298x396/4f65e6fe08/1716171172?v=1 2x" style="width:80px;height:106.66666666666667px"/><svg class="DocumentThumbnail-module_tagOverlay_hN0eTR" viewBox="0 0 108 145" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M0 0H35V15C35 17.2091 33.2091 19 31 19H0V0Z" fill="var(--color-charcoal-400)"></path><text x="8" y="13" fill="var(--spl-color-text-white)" aria-hidden="true">PDF</text></svg><div class="DocumentThumbnail-module_stack_66zCPf"></div><div class="DocumentThumbnail-module_stack_66zCPf"></div></div><div class="_1wdVHx"><div class="_1zgq1v"><div class="_2Uoa2G">Aún no hay calificaciones</div></div><div class="_33xQ8e _2kfau2" data-e2e="doc-info-title">1ro - Inglés - 2da Parcial</div><div class="_3UuYwh zs8qzW">10 páginas</div></div></div></div></li><li class="_2ariaX" data-e2e="document-list-item"><div class=""><div data-e2e="list-item-info" class="_1x3wi9"><a class="jKsa3q" data-e2e="list-item-link" href="https://es.scribd.com/document/640124549/PC2-Algoritmos" target="_blank"><span style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal">PC2 Algoritmos</span></a><div class="DocumentThumbnail-module_wrapper_ljLM72"><img class="DocumentThumbnail-module_image_0tTQ0O _2Jhoqp" data-testid="thumbnail" alt="" loading="eager" src="https://imgv2-1-f.scribdassets.com/img/document/640124549/149x198/86480c469f/1716462685?v=1" srcSet="https://imgv2-1-f.scribdassets.com/img/document/640124549/298x396/c668114249/1716462685?v=1 2x" style="width:80px;height:106.66666666666667px"/><svg class="DocumentThumbnail-module_tagOverlay_hN0eTR" viewBox="0 0 108 145" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M0 0H35V15C35 17.2091 33.2091 19 31 19H0V0Z" fill="var(--color-charcoal-400)"></path><text x="8" y="13" fill="var(--spl-color-text-white)" aria-hidden="true">PDF</text></svg><div class="DocumentThumbnail-module_stack_66zCPf"></div><div class="DocumentThumbnail-module_stack_66zCPf"></div></div><div class="_1wdVHx"><div class="_1zgq1v"><div class="_2Uoa2G">Aún no hay calificaciones</div></div><div class="_33xQ8e _2kfau2" data-e2e="doc-info-title">PC2 Algoritmos</div><div class="_3UuYwh zs8qzW">2 páginas</div></div></div></div></li><li class="_2ariaX" data-e2e="document-list-item"><div class=""><div data-e2e="list-item-info" class="_1x3wi9"><a class="jKsa3q" data-e2e="list-item-link" href="https://es.scribd.com/document/711835491/PC1-2021-1-2-0" target="_blank"><span style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal">PC1 2021.1 2.0</span></a><div class="DocumentThumbnail-module_wrapper_ljLM72"><img class="DocumentThumbnail-module_image_0tTQ0O _2Jhoqp" data-testid="thumbnail" alt="" loading="eager" src="https://imgv2-2-f.scribdassets.com/img/document/711835491/149x198/bde26b0ef8/1716534725?v=1" srcSet="https://imgv2-2-f.scribdassets.com/img/document/711835491/298x396/15760e6ac0/1716534725?v=1 2x" style="width:80px;height:106.66666666666667px"/><svg class="DocumentThumbnail-module_tagOverlay_hN0eTR" viewBox="0 0 108 145" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M0 0H35V15C35 17.2091 33.2091 19 31 19H0V0Z" fill="var(--color-charcoal-400)"></path><text x="8" y="13" fill="var(--spl-color-text-white)" aria-hidden="true">PDF</text></svg><div class="DocumentThumbnail-module_stack_66zCPf"></div><div class="DocumentThumbnail-module_stack_66zCPf"></div></div><div class="_1wdVHx"><div class="_1zgq1v"><div class="_2Uoa2G">Aún no hay calificaciones</div></div><div class="_33xQ8e _2kfau2" data-e2e="doc-info-title">PC1 2021.1 2.0</div><div class="_3UuYwh zs8qzW">3 páginas</div></div></div></div></li><li class="_2ariaX" data-e2e="document-list-item"><div class=""><div data-e2e="list-item-info" class="_1x3wi9"><a class="jKsa3q" data-e2e="list-item-link" href="https://es.scribd.com/document/566302917/Test-5-Tecnologias-Emergentes-y-Transformacion-Digital" target="_blank"><span style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal">Test 5 Tecnologias Emergentes y Transformación Digital</span></a><div class="DocumentThumbnail-module_wrapper_ljLM72"><img class="DocumentThumbnail-module_image_0tTQ0O _2Jhoqp" data-testid="thumbnail" alt="" loading="eager" src="https://imgv2-1-f.scribdassets.com/img/document/566302917/149x198/d156685b2c/1648097252?v=1" srcSet="https://imgv2-1-f.scribdassets.com/img/document/566302917/298x396/be260ae02c/1648097252?v=1 2x" style="width:80px;height:106.66666666666667px"/><svg class="DocumentThumbnail-module_tagOverlay_hN0eTR" viewBox="0 0 108 145" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M0 0H35V15C35 17.2091 33.2091 19 31 19H0V0Z" fill="var(--color-charcoal-400)"></path><text x="8" y="13" fill="var(--spl-color-text-white)" aria-hidden="true">PDF</text></svg><div class="DocumentThumbnail-module_stack_66zCPf"></div><div class="DocumentThumbnail-module_stack_66zCPf"></div></div><div class="_1wdVHx"><div class="_1zgq1v"><div class="_2Uoa2G">Aún no hay calificaciones</div></div><div class="_33xQ8e _2kfau2" data-e2e="doc-info-title">Test 5 Tecnologias Emergentes y Transformación Digital</div><div class="_3UuYwh zs8qzW">1 página</div></div></div></div></li><li class="_2ariaX" data-e2e="document-list-item"><div class=""><div data-e2e="list-item-info" class="_1x3wi9"><a class="jKsa3q" data-e2e="list-item-link" href="https://es.scribd.com/document/681792235/2do-Ingles-EV1-ATRASADA" target="_blank"><span style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal">2do - Inglés - EV1 ATRASADA</span></a><div class="DocumentThumbnail-module_wrapper_ljLM72"><img class="DocumentThumbnail-module_image_0tTQ0O _2Jhoqp" data-testid="thumbnail" alt="" loading="eager" src="https://imgv2-1-f.scribdassets.com/img/document/681792235/149x198/05cfe27cea/1716039863?v=1" srcSet="https://imgv2-2-f.scribdassets.com/img/document/681792235/298x396/3daabad4f9/1716039863?v=1 2x" style="width:80px;height:106.66666666666667px"/><svg class="DocumentThumbnail-module_tagOverlay_hN0eTR" viewBox="0 0 108 145" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M0 0H35V15C35 17.2091 33.2091 19 31 19H0V0Z" fill="var(--color-charcoal-400)"></path><text x="8" y="13" fill="var(--spl-color-text-white)" aria-hidden="true">PDF</text></svg><div class="DocumentThumbnail-module_stack_66zCPf"></div><div class="DocumentThumbnail-module_stack_66zCPf"></div></div><div class="_1wdVHx"><div class="_1zgq1v"><div class="_2Uoa2G">Aún no hay calificaciones</div></div><div class="_33xQ8e _2kfau2" data-e2e="doc-info-title">2do - Inglés - EV1 ATRASADA</div><div class="_3UuYwh zs8qzW">2 páginas</div></div></div></div></li><li class="_2ariaX" data-e2e="document-list-item"><div class=""><div data-e2e="list-item-info" class="_1x3wi9"><a class="jKsa3q" data-e2e="list-item-link" href="https://es.scribd.com/document/681785723/1ro-Ingles-EV1-ATRASADA" target="_blank"><span style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal">1ro - Inglés - EV1 ATRASADA</span></a><div class="DocumentThumbnail-module_wrapper_ljLM72"><img class="DocumentThumbnail-module_image_0tTQ0O _2Jhoqp" data-testid="thumbnail" alt="" loading="eager" src="https://imgv2-1-f.scribdassets.com/img/document/681785723/149x198/30b8b80e01/1716447493?v=1" srcSet="https://imgv2-2-f.scribdassets.com/img/document/681785723/298x396/9c8d373e87/1716447493?v=1 2x" style="width:80px;height:106.66666666666667px"/><svg class="DocumentThumbnail-module_tagOverlay_hN0eTR" viewBox="0 0 108 145" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M0 0H35V15C35 17.2091 33.2091 19 31 19H0V0Z" fill="var(--color-charcoal-400)"></path><text x="8" y="13" fill="var(--spl-color-text-white)" aria-hidden="true">PDF</text></svg><div class="DocumentThumbnail-module_stack_66zCPf"></div><div class="DocumentThumbnail-module_stack_66zCPf"></div></div><div class="_1wdVHx"><div class="_1zgq1v"><div class="_2Uoa2G">Aún no hay calificaciones</div></div><div class="_33xQ8e _2kfau2" data-e2e="doc-info-title">1ro - Inglés - EV1 ATRASADA</div><div class="_3UuYwh zs8qzW">2 páginas</div></div></div></div></li><li class="_2ariaX" data-e2e="document-list-item"><div class=""><div data-e2e="list-item-info" class="_1x3wi9"><a class="jKsa3q" data-e2e="list-item-link" href="https://es.scribd.com/document/681788144/3ro-Ingles-EV1-ATRASADA" target="_blank"><span style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal">3ro - Inglés - EV1-ATRASADA</span></a><div class="DocumentThumbnail-module_wrapper_ljLM72"><img class="DocumentThumbnail-module_image_0tTQ0O _2Jhoqp" data-testid="thumbnail" alt="" loading="eager" src="https://imgv2-2-f.scribdassets.com/img/document/681788144/149x198/b8a4ebeec1/1716607646?v=1" srcSet="https://imgv2-2-f.scribdassets.com/img/document/681788144/298x396/464d83997f/1716607646?v=1 2x" style="width:80px;height:106.66666666666667px"/><svg class="DocumentThumbnail-module_tagOverlay_hN0eTR" viewBox="0 0 108 145" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M0 0H35V15C35 17.2091 33.2091 19 31 19H0V0Z" fill="var(--color-charcoal-400)"></path><text x="8" y="13" fill="var(--spl-color-text-white)" aria-hidden="true">PDF</text></svg><div class="DocumentThumbnail-module_stack_66zCPf"></div><div class="DocumentThumbnail-module_stack_66zCPf"></div></div><div class="_1wdVHx"><div class="_1zgq1v"><div class="_2Uoa2G">Aún no hay calificaciones</div></div><div class="_33xQ8e _2kfau2" data-e2e="doc-info-title">3ro - Inglés - EV1-ATRASADA</div><div class="_3UuYwh zs8qzW">2 páginas</div></div></div></div></li><li class="_2ariaX" data-e2e="document-list-item"><div class=""><div data-e2e="list-item-info" class="_1x3wi9"><a class="jKsa3q" data-e2e="list-item-link" href="https://es.scribd.com/document/681788143/3ro-Ingles-EV3-Atrasada" target="_blank"><span style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal">3ro - Inglés - EV3 Atrasada</span></a><div class="DocumentThumbnail-module_wrapper_ljLM72"><img class="DocumentThumbnail-module_image_0tTQ0O _2Jhoqp" data-testid="thumbnail" alt="" loading="eager" src="https://imgv2-2-f.scribdassets.com/img/document/681788143/149x198/93fb5466c8/1716205089?v=1" srcSet="https://imgv2-1-f.scribdassets.com/img/document/681788143/298x396/1da229d166/1716205089?v=1 2x" style="width:80px;height:106.66666666666667px"/><svg class="DocumentThumbnail-module_tagOverlay_hN0eTR" viewBox="0 0 108 145" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M0 0H35V15C35 17.2091 33.2091 19 31 19H0V0Z" fill="var(--color-charcoal-400)"></path><text x="8" y="13" fill="var(--spl-color-text-white)" aria-hidden="true">PDF</text></svg><div class="DocumentThumbnail-module_stack_66zCPf"></div><div class="DocumentThumbnail-module_stack_66zCPf"></div></div><div class="_1wdVHx"><div class="_1zgq1v"><div class="_2Uoa2G">Aún no hay calificaciones</div></div><div class="_33xQ8e _2kfau2" data-e2e="doc-info-title">3ro - Inglés - EV3 Atrasada</div><div class="_3UuYwh zs8qzW">2 páginas</div></div></div></div></li><li class="_2ariaX" data-e2e="document-list-item"><div class=""><div data-e2e="list-item-info" class="_1x3wi9"><a class="jKsa3q" data-e2e="list-item-link" href="https://es.scribd.com/document/677628242/conceptos-basicos-de-las-redes-lan" target="_blank"><span style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal">Conceptos Basicos de Las Redes Lan</span></a><div class="DocumentThumbnail-module_wrapper_ljLM72"><img class="DocumentThumbnail-module_image_0tTQ0O _2Jhoqp" data-testid="thumbnail" alt="" loading="eager" src="https://imgv2-1-f.scribdassets.com/img/document/677628242/149x198/eaeb7dd3a7/1716112990?v=1" srcSet="https://imgv2-1-f.scribdassets.com/img/document/677628242/298x396/5cdf9ae8ba/1716112990?v=1 2x" style="width:80px;height:106.66666666666667px"/><svg class="DocumentThumbnail-module_tagOverlay_hN0eTR" viewBox="0 0 108 145" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M0 0H35V15C35 17.2091 33.2091 19 31 19H0V0Z" fill="var(--color-charcoal-400)"></path><text x="8" y="13" fill="var(--spl-color-text-white)" aria-hidden="true">PDF</text></svg><div class="DocumentThumbnail-module_stack_66zCPf"></div><div class="DocumentThumbnail-module_stack_66zCPf"></div></div><div class="_1wdVHx"><div class="_1zgq1v"><div class="_2Uoa2G">Aún no hay calificaciones</div></div><div class="_33xQ8e _2kfau2" data-e2e="doc-info-title">Conceptos Basicos de Las Redes Lan</div><div class="_3UuYwh zs8qzW">29 páginas</div></div></div></div></li><li class="_2ariaX" data-e2e="document-list-item"><div class=""><div data-e2e="list-item-info" class="_1x3wi9"><a class="jKsa3q" data-e2e="list-item-link" href="https://es.scribd.com/document/749630657/UD4-BAC" target="_blank"><span style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal">Estrategias SEO para Documentos PDF</span></a><div class="DocumentThumbnail-module_wrapper_ljLM72"><img class="DocumentThumbnail-module_image_0tTQ0O _2Jhoqp" data-testid="thumbnail" alt="" loading="eager" src="https://imgv2-2-f.scribdassets.com/img/document/749630657/149x198/41d74c70f4/1720692107?v=1" srcSet="https://imgv2-2-f.scribdassets.com/img/document/749630657/298x396/55d819ef5e/1720692107?v=1 2x" style="width:80px;height:106.66666666666667px"/><svg class="DocumentThumbnail-module_tagOverlay_hN0eTR" viewBox="0 0 108 145" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M0 0H35V15C35 17.2091 33.2091 19 31 19H0V0Z" fill="var(--color-charcoal-400)"></path><text x="8" y="13" fill="var(--spl-color-text-white)" aria-hidden="true">PDF</text></svg><div class="DocumentThumbnail-module_stack_66zCPf"></div><div class="DocumentThumbnail-module_stack_66zCPf"></div></div><div class="_1wdVHx"><div class="_1zgq1v"><div class="_2Uoa2G">Aún no hay calificaciones</div></div><div class="_33xQ8e _2kfau2" data-e2e="doc-info-title">Estrategias SEO para Documentos PDF</div><div class="_3UuYwh zs8qzW">11 páginas</div></div></div></div></li></ul></div></div></div></section></div><div class="GridColumn-module_wrapper_soqyu- GridColumn-module_hide_below_l_7M0-Xa GridColumn-module_extended_xl4_2_1yIW6E GridColumn-module_extended_xl3_2_mt-u-v GridColumn-module_extended_xl2_3_m7b4Yd GridColumn-module_extended_xl_3_-M4jBh GridColumn-module_extended_l_3_BRh6gm GridColumn-module_extended_m_3_WS7F6q GridColumn-module_extended_s_3_80JJD4 GridColumn-module_extended_xs_3_1WuHyd GridColumn-module_extended_xxs_3_glgZEz _1oOrzj"></div></div></div><div class="GridRow-module_wrapper_Uub42x GridRow-module_extended_Bvagp4"><div class="GridColumn-module_wrapper_soqyu- GridColumn-module_extended_xl4_12_UeyicL GridColumn-module_extended_xl3_12_TsrxQ- GridColumn-module_extended_xl2_12_ceos-a GridColumn-module_extended_xl_12_7vx87Y GridColumn-module_extended_l_12_gCRsqg GridColumn-module_extended_m_8_bDZzOd GridColumn-module_extended_s_4_ZU5JoR GridColumn-module_extended_xs_4_NH6tlg GridColumn-module_extended_xxs_4_dHKOII"></div></div></div><footer class="Footer-module_wrapper__7jj0T _1ZsTbw" id="global_footer"><h2 class="visually_hidden">Menú pie de pagina</h2><div class="GridContainer-module_wrapper__7Rx6L GridContainer-module_extended__fiqt9"><div class="GridRow-module_wrapper__Uub42 GridRow-module_extended__Bvagp"><div class="GridColumn-module_wrapper__soqyu GridColumn-module_extended_xl4_12__Ueyic GridColumn-module_extended_xl3_12__TsrxQ GridColumn-module_extended_xl2_12__ceos- GridColumn-module_extended_xl_12__7vx87 GridColumn-module_extended_l_12__gCRsq GridColumn-module_extended_m_8__bDZzO GridColumn-module_extended_s_4__ZU5Jo GridColumn-module_extended_xs_4__NH6tl GridColumn-module_extended_xxs_4__dHKOI"><div class="BackToTopLink-module_wrapper__HTQnD visually_hidden"><a data-e2e="back-to-top-link" href="#global_header" class="BackToTopLink-module_link__EOy-v">Volver arriba</a></div></div></div><div class="GridRow-module_wrapper__Uub42 GridRow-module_extended__Bvagp"><div class="GridColumn-module_wrapper__soqyu GridColumn-module_hide_below_s__Lbw11 GridColumn-module_extended_xl4_2__1yIW6 GridColumn-module_extended_xl3_2__mt-u- GridColumn-module_extended_xl2_2__A8qwF GridColumn-module_extended_xl_2__QYBNc GridColumn-module_extended_l_2__iqMJD GridColumn-module_extended_m_2__9nXEO GridColumn-module_extended_s_2__-n3HH GridColumn-module_extended_xs_2__C9iyY GridColumn-module_extended_xxs_2__1MEQR"><div class="Footer-module_horizontalColumn__vuSBJ"><p class="Footer-module_columnHeader__gcdjp Footer-module_scribdColumnHeader__HpvDx">Sobre Nosotros</p><ul class="Footer-module_columnList__fqabA"><li><a aria-disabled="false" aria-label="Acerca de Scribd, Inc." class="TextButton-module_wrapper__ZwW-w FooterLink-module_wrapper__V1y4b" data-e2e="footer_about_column_about_scribd_link" href="https://www.scribd.com/about"><span class="TextButton-module_content__6x-Ra"><span class="TextButton-module_children__HwxUl">Acerca de Scribd, Inc.</span></span></a></li><li><a aria-disabled="false" aria-label="Slideshare" class="TextButton-module_wrapper__ZwW-w FooterLink-module_wrapper__V1y4b" data-e2e="shared.footer.slideshare" href="https://www.slideshare.net/" target="_blank"><span class="TextButton-module_content__6x-Ra"><span class="TextButton-module_children__HwxUl">Slideshare</span></span></a></li><li><a aria-disabled="false" aria-label="¡Únete a nuestro equipo!" class="TextButton-module_wrapper__ZwW-w FooterLink-module_wrapper__V1y4b" data-e2e="footer_about_column_join_our_team_link" href="https://www.scribd.com/careers" target="_self"><span class="TextButton-module_content__6x-Ra"><span class="TextButton-module_children__HwxUl">¡Únete a nuestro equipo!</span></span></a></li><li><a aria-disabled="false" aria-label="Contáctanos" class="TextButton-module_wrapper__ZwW-w FooterLink-module_wrapper__V1y4b" data-e2e="footer_about_column_contact_us_link" href="https://www.scribd.com/contact" target="_self"><span class="TextButton-module_content__6x-Ra"><span class="TextButton-module_children__HwxUl">Contáctanos</span></span></a></li></ul></div></div><div class="GridColumn-module_wrapper__soqyu GridColumn-module_hide_below_s__Lbw11 GridColumn-module_extended_xl4_2__1yIW6 GridColumn-module_extended_xl3_2__mt-u- GridColumn-module_extended_xl2_2__A8qwF GridColumn-module_extended_xl_2__QYBNc GridColumn-module_extended_l_2__iqMJD GridColumn-module_extended_m_2__9nXEO GridColumn-module_extended_s_2__-n3HH GridColumn-module_extended_xs_2__C9iyY GridColumn-module_extended_xxs_2__1MEQR"><p class="Footer-module_columnHeader__gcdjp Footer-module_scribdColumnHeader__HpvDx">Centro de Ayuda</p><ul class="Footer-module_columnList__fqabA"><li><a aria-disabled="false" aria-label="Ayuda / Preguntas frecuentes" class="TextButton-module_wrapper__ZwW-w FooterLink-module_wrapper__V1y4b" data-e2e="footer_support_column_help_faq_link" href="http://support.scribd.com/hc/es"><span class="TextButton-module_content__6x-Ra"><span class="TextButton-module_children__HwxUl">Ayuda / Preguntas frecuentes</span></span></a></li><li><a aria-disabled="false" aria-label="Accesibilidad" class="TextButton-module_wrapper__ZwW-w FooterLink-module_wrapper__V1y4b" data-e2e="footer_support_column_accessibility_link" href="https://support.scribd.com/hc/es/articles/210129586-Accessibility-Notice"><span class="TextButton-module_content__6x-Ra"><span class="TextButton-module_children__HwxUl">Accesibilidad</span></span></a></li><li><a aria-disabled="false" aria-label="Compras" class="TextButton-module_wrapper__ZwW-w FooterLink-module_wrapper__V1y4b" data-e2e="footer_support_column_purchase_help_link" href="https://support.scribd.com/hc/en-us/sections/202246306"><span class="TextButton-module_content__6x-Ra"><span class="TextButton-module_children__HwxUl">Compras</span></span></a></li><li><a aria-disabled="false" aria-label="AdChoices" class="TextButton-module_wrapper__ZwW-w FooterLink-module_wrapper__V1y4b" data-e2e="footer_support_column_adchoices_link" href="https://support.scribd.com/hc/en-us/articles/210129366"><span class="TextButton-module_content__6x-Ra"><span class="TextButton-module_children__HwxUl">AdChoices</span></span></a></li></ul></div><div class="GridColumn-module_wrapper__soqyu GridColumn-module_hide_below_s__Lbw11 GridColumn-module_extended_xl4_2__1yIW6 GridColumn-module_extended_xl3_2__mt-u- GridColumn-module_extended_xl2_2__A8qwF GridColumn-module_extended_xl_2__QYBNc GridColumn-module_extended_l_2__iqMJD GridColumn-module_extended_m_2__9nXEO GridColumn-module_extended_s_2__-n3HH GridColumn-module_extended_xs_2__C9iyY GridColumn-module_extended_xxs_2__1MEQR"><p class="Footer-module_columnHeader__gcdjp Footer-module_scribdColumnHeader__HpvDx">Legal</p><ul class="Footer-module_columnList__fqabA"><li><a aria-disabled="false" aria-label="Términos" class="TextButton-module_wrapper__ZwW-w FooterLink-module_wrapper__V1y4b" data-e2e="footer_legal_column_terms_link" href="https://support.scribd.com/hc/en-us/articles/210129326-General-Terms-of-Use"><span class="TextButton-module_content__6x-Ra"><span class="TextButton-module_children__HwxUl">Términos</span></span></a></li><li><a aria-disabled="false" aria-label="Privacidad" class="TextButton-module_wrapper__ZwW-w FooterLink-module_wrapper__V1y4b" data-e2e="footer_legal_column_privacy_link" href="https://www.scribd.com/privacy" target="_self"><span class="TextButton-module_content__6x-Ra"><span class="TextButton-module_children__HwxUl">Privacidad</span></span></a></li><li><a aria-disabled="false" aria-label="Copyright" class="TextButton-module_wrapper__ZwW-w FooterLink-module_wrapper__V1y4b" data-e2e="footer_legal_column_copyright_link" href="https://support.scribd.com/hc/en-us/sections/202246086"><span class="TextButton-module_content__6x-Ra"><span class="TextButton-module_children__HwxUl">Copyright</span></span></a></li></ul></div><div class="GridColumn-module_wrapper__soqyu GridColumn-module_hide_below_s__Lbw11 GridColumn-module_extended_xl4_2__1yIW6 GridColumn-module_extended_xl3_2__mt-u- GridColumn-module_extended_xl2_2__A8qwF GridColumn-module_extended_xl_2__QYBNc GridColumn-module_extended_l_2__iqMJD GridColumn-module_extended_m_2__9nXEO GridColumn-module_extended_s_2__-n3HH GridColumn-module_extended_xs_2__C9iyY GridColumn-module_extended_xxs_2__1MEQR"><p class="Footer-module_columnHeader__gcdjp Footer-module_scribdColumnHeader__HpvDx">Social</p><ul class="Footer-module_columnList__fqabA"><li><a aria-disabled="false" aria-label="Scribd en Instagram" class="TextButton-module_wrapper__ZwW-w SocialLink-module_wrapper__7Rvvt" data-e2e="footer_social_column_instagram_link" href="https://www.instagram.com/scribd/"><span class="TextButton-module_content__6x-Ra"><span class="TextButton-module_children__HwxUl"><span class="SvgIcon-module_wrapper__1fPqw SocialLink-module_iconImage__JSzvR"><svg width="16" height="16" fill="none" xmlns="http://www.w3.org/2000/svg" role="img" aria-hidden="true" class="SvgIcon-module_icon__sUHUn"><path fill-rule="evenodd" clip-rule="evenodd" d="M8 3.081c1.602 0 1.792.006 2.425.035.584.027.902.124 1.114.207.26.096.497.249.69.448.2.194.353.43.45.691.082.212.18.53.206 1.114.029.633.035.823.035 2.425 0 1.602-.006 1.792-.035 2.425-.027.585-.124.902-.207 1.114a1.99 1.99 0 01-1.138 1.138c-.212.082-.53.18-1.114.207-.633.029-.823.035-2.425.035-1.602 0-1.792-.006-2.425-.035-.585-.027-.902-.124-1.114-.207a1.858 1.858 0 01-.69-.449c-.2-.193-.353-.43-.45-.69-.082-.212-.18-.53-.206-1.114-.029-.633-.035-.823-.035-2.425 0-1.602.006-1.792.035-2.425.027-.585.124-.902.207-1.114.096-.26.25-.497.449-.69.193-.2.43-.353.69-.45.212-.082.53-.18 1.114-.206.633-.029.823-.035 2.425-.035L8 3.081zm0-1.082c-1.629 0-1.833.007-2.473.036-.64.03-1.076.132-1.457.28-.4.15-.763.387-1.063.692-.305.3-.541.663-.692 1.063-.148.381-.25.818-.279 1.457C2.007 6.165 2 6.37 2 8s.007 1.834.036 2.474c.03.64.13 1.075.279 1.456.15.4.387.763.692 1.063.3.305.663.541 1.063.692.381.148.818.25 1.457.279.638.029.844.036 2.473.036 1.63 0 1.834-.007 2.474-.036.64-.03 1.075-.13 1.456-.28a3.068 3.068 0 001.755-1.754c.148-.381.25-.818.279-1.457C13.993 9.835 14 9.63 14 8c0-1.63-.007-1.833-.036-2.473-.03-.64-.13-1.075-.28-1.456-.15-.4-.386-.763-.691-1.063a2.946 2.946 0 00-1.063-.692c-.381-.148-.818-.25-1.457-.279C9.835 2.007 9.63 2 8 2v-.001zm0 2.92a3.081 3.081 0 100 6.162A3.081 3.081 0 008 4.92zm0 5.082A2 2 0 118 6 2 2 0 018 10zm3.923-5.204a.72.72 0 11-1.44 0 .72.72 0 011.44 0z" fill="currentColor"></path></svg><span style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal">Instagram</span></span> <!-- -->Instagram</span></span></a></li><li><a aria-disabled="false" aria-label="Scribd en Facebook" class="TextButton-module_wrapper__ZwW-w SocialLink-module_wrapper__7Rvvt" data-e2e="footer_social_column_facebook_link" href="https://www.facebook.com/Scribd/"><span class="TextButton-module_content__6x-Ra"><span class="TextButton-module_children__HwxUl"><span class="SvgIcon-module_wrapper__1fPqw SocialLink-module_iconImage__JSzvR"><svg width="16" height="16" fill="none" xmlns="http://www.w3.org/2000/svg" role="img" aria-hidden="true" class="SvgIcon-module_icon__sUHUn"><path fill-rule="evenodd" clip-rule="evenodd" d="M8 2a6 6 0 01.938 11.927V9.734h1.397L10.602 8H8.937V6.875c0-.474.233-.938.978-.938h.757V4.462s-.08-.014-.21-.032a9.524 9.524 0 00-.887-.08 6.278 6.278 0 00-.246-.005c-1.37 0-2.267.83-2.267 2.334V8H5.54v1.734h1.524v4.193A6.002 6.002 0 018 2z" fill="currentColor"></path></svg><span style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal">Facebook</span></span> <!-- -->Facebook</span></span></a></li><li><a aria-disabled="false" aria-label="Scribd en Pinterest" class="TextButton-module_wrapper__ZwW-w SocialLink-module_wrapper__7Rvvt" data-e2e="footer_social_column_pinterest_link" href="https://www.pinterest.com/scribd/"><span class="TextButton-module_content__6x-Ra"><span class="TextButton-module_children__HwxUl"><span class="SvgIcon-module_wrapper__1fPqw SocialLink-module_iconImage__JSzvR"><svg width="16" height="16" fill="none" xmlns="http://www.w3.org/2000/svg" role="img" aria-hidden="true" class="SvgIcon-module_icon__sUHUn"><path fill-rule="evenodd" clip-rule="evenodd" d="M12.217 12.268A5.98 5.98 0 018 14c-.62 0-1.218-.094-1.78-.269.246-.4.606-1.045.738-1.563l.375-1.427c.193.375.766.691 1.373.691 1.808 0 3.111-1.664 3.111-3.733 0-1.985-1.62-3.467-3.698-3.467-2.593 0-3.966 1.738-3.966 3.63 0 .884.47 1.975 1.22 2.326.113.054.178.03.202-.08l.058-.233.11-.448a.179.179 0 00-.04-.173c-.246-.3-.444-.854-.444-1.368 0-1.323 1.003-2.602 2.711-2.602 1.477 0 2.509 1.002 2.509 2.44 0 1.62-.82 2.745-1.886 2.745-.588 0-1.033-.489-.89-1.086.062-.255.143-.517.222-.772.142-.46.277-.898.277-1.228 0-.46-.246-.845-.76-.845-.602 0-1.086.622-1.086 1.457 0 .528.177.889.177.889s-.592 2.514-.7 2.983c-.12.518-.075 1.247-.02 1.722A6.003 6.003 0 012 8a6 6 0 016.653-5.965A5.988 5.988 0 0113.99 8.01a5.981 5.981 0 01-1.773 4.258z" fill="currentColor"></path></svg><span style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal">Pinterest</span></span> <!-- -->Pinterest</span></span></a></li></ul></div><div class="GridColumn-module_wrapper__soqyu GridColumn-module_hide_below_m__-PoVO GridColumn-module_extended_xl4_2__1yIW6 GridColumn-module_extended_xl3_2__mt-u- GridColumn-module_extended_xl2_2__A8qwF GridColumn-module_extended_xl_2__QYBNc GridColumn-module_extended_l_2__iqMJD GridColumn-module_extended_m_2__9nXEO GridColumn-module_extended_s_2__-n3HH GridColumn-module_extended_xs_2__C9iyY GridColumn-module_extended_xxs_2__1MEQR"></div><div class="GridColumn-module_wrapper__soqyu GridColumn-module_hide_below_m__-PoVO GridColumn-module_extended_xl4_2__1yIW6 GridColumn-module_extended_xl3_2__mt-u- GridColumn-module_extended_xl2_2__A8qwF GridColumn-module_extended_xl_2__QYBNc GridColumn-module_extended_l_2__iqMJD GridColumn-module_extended_m_2__9nXEO GridColumn-module_extended_s_2__-n3HH GridColumn-module_extended_xs_2__C9iyY GridColumn-module_extended_xxs_2__1MEQR"><p class="Footer-module_columnHeader__gcdjp Footer-module_scribdColumnHeader__HpvDx">Obtén nuestras aplicaciones gratuitas</p><ul class="mobile_icons wrapper__app_store_buttons"><li class="wrapper__store_button" data-e2e="app_store_btn"><a aria-label="Scribd - Descárgala desde App Store" class="app_link ios_btn" data-e2e="ios_btn" href="https://apps.apple.com/us/app/6448807714?mt=8&pt=298534"><div class="app_store_img"><img class="LazyImage-module_image__uh0sq" alt="Scribd - Descárgala desde App Store"/></div></a></li><li class="wrapper__store_button" data-e2e="app_store_btn"><a aria-label="Scribd - Consíguela en Google Play" class="app_link google_play_btn" data-e2e="google_play_btn" href="https://play.google.com/store/apps/details?id=com.scribd.app.reader0.docs"><div class="app_store_img play_store_link"><img class="LazyImage-module_image__uh0sq" alt="Scribd - Consíguela en Google Play"/></div></a></li></ul></div></div><div class="GridRow-module_wrapper__Uub42 GridRow-module_extended__Bvagp"><div class="GridColumn-module_wrapper__soqyu GridColumn-module_hide_above_s__NbVNC GridColumn-module_extended_xl4_12__Ueyic GridColumn-module_extended_xl3_12__TsrxQ GridColumn-module_extended_xl2_12__ceos- GridColumn-module_extended_xl_12__7vx87 GridColumn-module_extended_l_12__gCRsq GridColumn-module_extended_m_8__bDZzO GridColumn-module_extended_s_2__-n3HH GridColumn-module_extended_xs_2__C9iyY GridColumn-module_extended_xxs_2__1MEQR"><div class="Footer-module_verticalColumn__-CR6f"><p class="Footer-module_columnHeader__gcdjp Footer-module_scribdColumnHeader__HpvDx">Sobre Nosotros</p><ul class="Footer-module_columnList__fqabA"><li><a aria-disabled="false" aria-label="Acerca de Scribd, Inc." class="TextButton-module_wrapper__ZwW-w FooterLink-module_wrapper__V1y4b" data-e2e="footer_about_column_about_scribd_link" href="https://www.scribd.com/about"><span class="TextButton-module_content__6x-Ra"><span class="TextButton-module_children__HwxUl">Acerca de Scribd, Inc.</span></span></a></li><li><a aria-disabled="false" aria-label="Slideshare" class="TextButton-module_wrapper__ZwW-w FooterLink-module_wrapper__V1y4b" data-e2e="shared.footer.slideshare" href="https://www.slideshare.net/" target="_blank"><span class="TextButton-module_content__6x-Ra"><span class="TextButton-module_children__HwxUl">Slideshare</span></span></a></li><li><a aria-disabled="false" aria-label="¡Únete a nuestro equipo!" class="TextButton-module_wrapper__ZwW-w FooterLink-module_wrapper__V1y4b" data-e2e="footer_about_column_join_our_team_link" href="https://www.scribd.com/careers" target="_self"><span class="TextButton-module_content__6x-Ra"><span class="TextButton-module_children__HwxUl">¡Únete a nuestro equipo!</span></span></a></li><li><a aria-disabled="false" aria-label="Contáctanos" class="TextButton-module_wrapper__ZwW-w FooterLink-module_wrapper__V1y4b" data-e2e="footer_about_column_contact_us_link" href="https://www.scribd.com/contact" target="_self"><span class="TextButton-module_content__6x-Ra"><span class="TextButton-module_children__HwxUl">Contáctanos</span></span></a></li></ul></div><div class="Footer-module_verticalColumn__-CR6f"><p class="Footer-module_columnHeader__gcdjp Footer-module_scribdColumnHeader__HpvDx">Legal</p><ul class="Footer-module_columnList__fqabA"><li><a aria-disabled="false" aria-label="Términos" class="TextButton-module_wrapper__ZwW-w FooterLink-module_wrapper__V1y4b" data-e2e="footer_legal_column_terms_link" href="https://support.scribd.com/hc/en-us/articles/210129326-General-Terms-of-Use"><span class="TextButton-module_content__6x-Ra"><span class="TextButton-module_children__HwxUl">Términos</span></span></a></li><li><a aria-disabled="false" aria-label="Privacidad" class="TextButton-module_wrapper__ZwW-w FooterLink-module_wrapper__V1y4b" data-e2e="footer_legal_column_privacy_link" href="https://www.scribd.com/privacy" target="_self"><span class="TextButton-module_content__6x-Ra"><span class="TextButton-module_children__HwxUl">Privacidad</span></span></a></li><li><a aria-disabled="false" aria-label="Copyright" class="TextButton-module_wrapper__ZwW-w FooterLink-module_wrapper__V1y4b" data-e2e="footer_legal_column_copyright_link" href="https://support.scribd.com/hc/en-us/sections/202246086"><span class="TextButton-module_content__6x-Ra"><span class="TextButton-module_children__HwxUl">Copyright</span></span></a></li></ul></div></div><div class="GridColumn-module_wrapper__soqyu GridColumn-module_hide_above_s__NbVNC GridColumn-module_extended_xl4_12__Ueyic GridColumn-module_extended_xl3_12__TsrxQ GridColumn-module_extended_xl2_12__ceos- GridColumn-module_extended_xl_12__7vx87 GridColumn-module_extended_l_12__gCRsq GridColumn-module_extended_m_8__bDZzO GridColumn-module_extended_s_2__-n3HH GridColumn-module_extended_xs_2__C9iyY GridColumn-module_extended_xxs_2__1MEQR"><div class="Footer-module_verticalColumn__-CR6f"><p class="Footer-module_columnHeader__gcdjp Footer-module_scribdColumnHeader__HpvDx">Centro de Ayuda</p><ul class="Footer-module_columnList__fqabA"><li><a aria-disabled="false" aria-label="Ayuda / Preguntas frecuentes" class="TextButton-module_wrapper__ZwW-w FooterLink-module_wrapper__V1y4b" data-e2e="footer_support_column_help_faq_link" href="http://support.scribd.com/hc/es"><span class="TextButton-module_content__6x-Ra"><span class="TextButton-module_children__HwxUl">Ayuda / Preguntas frecuentes</span></span></a></li><li><a aria-disabled="false" aria-label="Accesibilidad" class="TextButton-module_wrapper__ZwW-w FooterLink-module_wrapper__V1y4b" data-e2e="footer_support_column_accessibility_link" href="https://support.scribd.com/hc/es/articles/210129586-Accessibility-Notice"><span class="TextButton-module_content__6x-Ra"><span class="TextButton-module_children__HwxUl">Accesibilidad</span></span></a></li><li><a aria-disabled="false" aria-label="Compras" class="TextButton-module_wrapper__ZwW-w FooterLink-module_wrapper__V1y4b" data-e2e="footer_support_column_purchase_help_link" href="https://support.scribd.com/hc/en-us/sections/202246306"><span class="TextButton-module_content__6x-Ra"><span class="TextButton-module_children__HwxUl">Compras</span></span></a></li><li><a aria-disabled="false" aria-label="AdChoices" class="TextButton-module_wrapper__ZwW-w FooterLink-module_wrapper__V1y4b" data-e2e="footer_support_column_adchoices_link" href="https://support.scribd.com/hc/en-us/articles/210129366"><span class="TextButton-module_content__6x-Ra"><span class="TextButton-module_children__HwxUl">AdChoices</span></span></a></li></ul></div><div><p class="Footer-module_columnHeader__gcdjp Footer-module_scribdColumnHeader__HpvDx">Social</p><ul class="Footer-module_columnList__fqabA"><li><a aria-disabled="false" aria-label="Scribd en Instagram" class="TextButton-module_wrapper__ZwW-w SocialLink-module_wrapper__7Rvvt" data-e2e="footer_social_column_instagram_link" href="https://www.instagram.com/scribd/"><span class="TextButton-module_content__6x-Ra"><span class="TextButton-module_children__HwxUl"><span class="SvgIcon-module_wrapper__1fPqw SocialLink-module_iconImage__JSzvR"><svg width="16" height="16" fill="none" xmlns="http://www.w3.org/2000/svg" role="img" aria-hidden="true" class="SvgIcon-module_icon__sUHUn"><path fill-rule="evenodd" clip-rule="evenodd" d="M8 3.081c1.602 0 1.792.006 2.425.035.584.027.902.124 1.114.207.26.096.497.249.69.448.2.194.353.43.45.691.082.212.18.53.206 1.114.029.633.035.823.035 2.425 0 1.602-.006 1.792-.035 2.425-.027.585-.124.902-.207 1.114a1.99 1.99 0 01-1.138 1.138c-.212.082-.53.18-1.114.207-.633.029-.823.035-2.425.035-1.602 0-1.792-.006-2.425-.035-.585-.027-.902-.124-1.114-.207a1.858 1.858 0 01-.69-.449c-.2-.193-.353-.43-.45-.69-.082-.212-.18-.53-.206-1.114-.029-.633-.035-.823-.035-2.425 0-1.602.006-1.792.035-2.425.027-.585.124-.902.207-1.114.096-.26.25-.497.449-.69.193-.2.43-.353.69-.45.212-.082.53-.18 1.114-.206.633-.029.823-.035 2.425-.035L8 3.081zm0-1.082c-1.629 0-1.833.007-2.473.036-.64.03-1.076.132-1.457.28-.4.15-.763.387-1.063.692-.305.3-.541.663-.692 1.063-.148.381-.25.818-.279 1.457C2.007 6.165 2 6.37 2 8s.007 1.834.036 2.474c.03.64.13 1.075.279 1.456.15.4.387.763.692 1.063.3.305.663.541 1.063.692.381.148.818.25 1.457.279.638.029.844.036 2.473.036 1.63 0 1.834-.007 2.474-.036.64-.03 1.075-.13 1.456-.28a3.068 3.068 0 001.755-1.754c.148-.381.25-.818.279-1.457C13.993 9.835 14 9.63 14 8c0-1.63-.007-1.833-.036-2.473-.03-.64-.13-1.075-.28-1.456-.15-.4-.386-.763-.691-1.063a2.946 2.946 0 00-1.063-.692c-.381-.148-.818-.25-1.457-.279C9.835 2.007 9.63 2 8 2v-.001zm0 2.92a3.081 3.081 0 100 6.162A3.081 3.081 0 008 4.92zm0 5.082A2 2 0 118 6 2 2 0 018 10zm3.923-5.204a.72.72 0 11-1.44 0 .72.72 0 011.44 0z" fill="currentColor"></path></svg><span style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal">Instagram</span></span> <!-- -->Instagram</span></span></a></li><li><a aria-disabled="false" aria-label="Scribd en Facebook" class="TextButton-module_wrapper__ZwW-w SocialLink-module_wrapper__7Rvvt" data-e2e="footer_social_column_facebook_link" href="https://www.facebook.com/Scribd/"><span class="TextButton-module_content__6x-Ra"><span class="TextButton-module_children__HwxUl"><span class="SvgIcon-module_wrapper__1fPqw SocialLink-module_iconImage__JSzvR"><svg width="16" height="16" fill="none" xmlns="http://www.w3.org/2000/svg" role="img" aria-hidden="true" class="SvgIcon-module_icon__sUHUn"><path fill-rule="evenodd" clip-rule="evenodd" d="M8 2a6 6 0 01.938 11.927V9.734h1.397L10.602 8H8.937V6.875c0-.474.233-.938.978-.938h.757V4.462s-.08-.014-.21-.032a9.524 9.524 0 00-.887-.08 6.278 6.278 0 00-.246-.005c-1.37 0-2.267.83-2.267 2.334V8H5.54v1.734h1.524v4.193A6.002 6.002 0 018 2z" fill="currentColor"></path></svg><span style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal">Facebook</span></span> <!-- -->Facebook</span></span></a></li><li><a aria-disabled="false" aria-label="Scribd en Pinterest" class="TextButton-module_wrapper__ZwW-w SocialLink-module_wrapper__7Rvvt" data-e2e="footer_social_column_pinterest_link" href="https://www.pinterest.com/scribd/"><span class="TextButton-module_content__6x-Ra"><span class="TextButton-module_children__HwxUl"><span class="SvgIcon-module_wrapper__1fPqw SocialLink-module_iconImage__JSzvR"><svg width="16" height="16" fill="none" xmlns="http://www.w3.org/2000/svg" role="img" aria-hidden="true" class="SvgIcon-module_icon__sUHUn"><path fill-rule="evenodd" clip-rule="evenodd" d="M12.217 12.268A5.98 5.98 0 018 14c-.62 0-1.218-.094-1.78-.269.246-.4.606-1.045.738-1.563l.375-1.427c.193.375.766.691 1.373.691 1.808 0 3.111-1.664 3.111-3.733 0-1.985-1.62-3.467-3.698-3.467-2.593 0-3.966 1.738-3.966 3.63 0 .884.47 1.975 1.22 2.326.113.054.178.03.202-.08l.058-.233.11-.448a.179.179 0 00-.04-.173c-.246-.3-.444-.854-.444-1.368 0-1.323 1.003-2.602 2.711-2.602 1.477 0 2.509 1.002 2.509 2.44 0 1.62-.82 2.745-1.886 2.745-.588 0-1.033-.489-.89-1.086.062-.255.143-.517.222-.772.142-.46.277-.898.277-1.228 0-.46-.246-.845-.76-.845-.602 0-1.086.622-1.086 1.457 0 .528.177.889.177.889s-.592 2.514-.7 2.983c-.12.518-.075 1.247-.02 1.722A6.003 6.003 0 012 8a6 6 0 016.653-5.965A5.988 5.988 0 0113.99 8.01a5.981 5.981 0 01-1.773 4.258z" fill="currentColor"></path></svg><span style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal">Pinterest</span></span> <!-- -->Pinterest</span></span></a></li></ul></div></div></div><div class="GridRow-module_wrapper__Uub42 GridRow-module_extended__Bvagp"><div class="GridColumn-module_wrapper__soqyu GridColumn-module_hide_above_m__zwIrv GridColumn-module_extended_xl4_12__Ueyic GridColumn-module_extended_xl3_12__TsrxQ GridColumn-module_extended_xl2_12__ceos- GridColumn-module_extended_xl_12__7vx87 GridColumn-module_extended_l_12__gCRsq GridColumn-module_extended_m_8__bDZzO GridColumn-module_extended_s_4__ZU5Jo GridColumn-module_extended_xs_4__NH6tl GridColumn-module_extended_xxs_4__dHKOI"><p class="Footer-module_columnHeader__gcdjp Footer-module_scribdColumnHeader__HpvDx">Obtén nuestras aplicaciones gratuitas</p><ul class="mobile_icons wrapper__app_store_buttons"><li class="wrapper__store_button" data-e2e="app_store_btn"><a aria-label="Scribd - Descárgala desde App Store" class="app_link ios_btn" data-e2e="ios_btn" href="https://apps.apple.com/us/app/6448807714?mt=8&pt=298534"><div class="app_store_img"><img class="LazyImage-module_image__uh0sq" alt="Scribd - Descárgala desde App Store"/></div></a></li><li class="wrapper__store_button" data-e2e="app_store_btn"><a aria-label="Scribd - Consíguela en Google Play" class="app_link google_play_btn" data-e2e="google_play_btn" href="https://play.google.com/store/apps/details?id=com.scribd.app.reader0.docs"><div class="app_store_img play_store_link"><img class="LazyImage-module_image__uh0sq" alt="Scribd - Consíguela en Google Play"/></div></a></li></ul></div></div><div class="GridRow-module_wrapper__Uub42 GridRow-module_extended__Bvagp"><div class="GridColumn-module_wrapper__soqyu GridColumn-module_extended_xl4_12__Ueyic GridColumn-module_extended_xl3_12__TsrxQ GridColumn-module_extended_xl2_12__ceos- GridColumn-module_extended_xl_12__7vx87 GridColumn-module_extended_l_12__gCRsq GridColumn-module_extended_m_8__bDZzO GridColumn-module_extended_s_4__ZU5Jo GridColumn-module_extended_xs_4__NH6tl GridColumn-module_extended_xxs_4__dHKOI"><div class="Footer-module_horizontalDivider__Z6XJu"></div></div></div><div class="GridRow-module_wrapper__Uub42 GridRow-module_extended__Bvagp"><div class="GridColumn-module_wrapper__soqyu GridColumn-module_extended_xl4_7__-9AEI GridColumn-module_extended_xl3_7__B6ct2 GridColumn-module_extended_xl2_7__Nztja GridColumn-module_extended_xl_7__OFVFv GridColumn-module_extended_l_12__gCRsq GridColumn-module_extended_m_8__bDZzO GridColumn-module_extended_s_4__ZU5Jo GridColumn-module_extended_xs_4__NH6tl GridColumn-module_extended_xxs_4__dHKOI"><ul class="ContentTypeColumn-module_contentTypesList__WIKOq"><li><a aria-disabled="false" aria-label="Documentos" class="TextButton-module_wrapper__ZwW-w ContentTypeColumn-module_contentTypeLink__K3M9d" data-e2e="footer_content_type_column_documents_link" href="/docs"><span class="TextButton-module_content__6x-Ra"><span class="TextButton-module_children__HwxUl">Documentos</span></span></a></li></ul></div><div class="GridColumn-module_wrapper__soqyu GridColumn-module_hide_below_l__7M0-X GridColumn-module_extended_xl4_5__PuEUy GridColumn-module_extended_xl3_5__aTZFP GridColumn-module_extended_xl2_5__UvHIq GridColumn-module_extended_xl_5__qmwN8 GridColumn-module_extended_l_5__VLQLS GridColumn-module_extended_m_5__HSrx- GridColumn-module_extended_s_4__ZU5Jo GridColumn-module_extended_xs_4__NH6tl GridColumn-module_extended_xxs_4__dHKOI"><div class="Footer-module_bottomRightContainer__5MVkq"><div class="ScribdFooterLanguageMenu-module_wrapper__6nJjp"><div class="ScribdFooterLanguageMenu-module_languageCopy__IvHMZ">Idioma<!-- -->:</div><div class="DropdownMenu-module_wrapper_-3wi4F"><button aria-disabled="false" class="ButtonCore-module_wrapper_MkTb9s TextButton-module_wrapper_ZwW-wM TextButton-module_default_ekglbr DropdownTrigger-module_wrapper_-Xf-At ScribdFooterLanguageMenu-module_currentLanguage__-ZykZ" data-e2e="footer_current_language_button" id="footer_lang_btn_xl" aria-haspopup="menu" aria-expanded="false" data-state="closed" type="button"><span class="ButtonCore-module_content_8zyAJv"><span class="ButtonCore-module_children_8a9B71">Español<span class="SvgIcon-module_wrapper__1fPqw"><svg width="16" height="16" fill="none" xmlns="http://www.w3.org/2000/svg" role="img" aria-hidden="true" class="SvgIcon-module_icon__sUHUn"><path d="M8.24 11.66L4 7.41 5.41 6l2.83 2.83L11.07 6l1.42 1.41-4.25 4.25z" fill="currentColor"></path></svg></span></span></span></button></div></div><div class="Footer-module_bottomCopyright__WjBga" data-e2e="footer_copyright_text"><span>Copyright © 2026 Scribd Inc.</span></div></div></div></div><div class="GridRow-module_wrapper__Uub42 GridRow-module_extended__Bvagp"><div class="GridColumn-module_wrapper__soqyu GridColumn-module_hide_below_l__7M0-X GridColumn-module_standard_xl_12__x8-4j GridColumn-module_standard_l_12__ndEV7 GridColumn-module_standard_m_8__JIpAV GridColumn-module_standard_s_4__Yz20V GridColumn-module_standard_xs_4__QcV7o GridColumn-module_standard_xxs_4__7w6eo"><div class="Footer-module_copyrightAwareness__znGWg">Nos tomamos en serio los derechos de los contenidos. <a href=https://support.scribd.com/hc/en-us/articles/210129026-Frequently-Asked-Questions-about-Copyrights-and-the-DMCA>Obtén más información</a> en las preguntas frecuentes o <a href=https://support.scribd.com/hc/en-us/articles/210129146-REPORT-COPYRIGHT-INFRINGEMENTS-AND-ABUSE-HERE>denuncia una infracción aquí</a>.</div></div></div><div class="GridRow-module_wrapper__Uub42 GridRow-module_extended__Bvagp"><div class="GridColumn-module_wrapper__soqyu GridColumn-module_hide_above_l__UT1-z GridColumn-module_standard_xl_12__x8-4j GridColumn-module_standard_l_12__ndEV7 GridColumn-module_standard_m_8__JIpAV GridColumn-module_standard_s_4__Yz20V GridColumn-module_standard_xs_4__QcV7o GridColumn-module_standard_xxs_4__7w6eo"><div class="Footer-module_copyrightAwareness__znGWg">Nos tomamos en serio los derechos de los contenidos. <a href=https://support.scribd.com/hc/en-us/articles/210129026-Frequently-Asked-Questions-about-Copyrights-and-the-DMCA>Obtén más información</a> en las preguntas frecuentes o <a href=https://support.scribd.com/hc/en-us/articles/210129146-REPORT-COPYRIGHT-INFRINGEMENTS-AND-ABUSE-HERE>denuncia una infracción aquí</a>.</div></div><div class="GridColumn-module_wrapper__soqyu GridColumn-module_hide_above_l__UT1-z GridColumn-module_extended_xl4_12__Ueyic GridColumn-module_extended_xl3_12__TsrxQ GridColumn-module_extended_xl2_12__ceos- GridColumn-module_extended_xl_12__7vx87 GridColumn-module_extended_l_12__gCRsq GridColumn-module_extended_m_8__bDZzO GridColumn-module_extended_s_4__ZU5Jo GridColumn-module_extended_xs_4__NH6tl GridColumn-module_extended_xxs_4__dHKOI"><div class="ScribdFooterLanguageMenu-module_wrapper__6nJjp"><div class="ScribdFooterLanguageMenu-module_languageCopy__IvHMZ">Idioma<!-- -->:</div><div class="DropdownMenu-module_wrapper_-3wi4F"><button aria-disabled="false" class="ButtonCore-module_wrapper_MkTb9s TextButton-module_wrapper_ZwW-wM TextButton-module_default_ekglbr DropdownTrigger-module_wrapper_-Xf-At ScribdFooterLanguageMenu-module_currentLanguage__-ZykZ" data-e2e="footer_current_language_button" id="footer_lang_btn_l" aria-haspopup="menu" aria-expanded="false" data-state="closed" type="button"><span class="ButtonCore-module_content_8zyAJv"><span class="ButtonCore-module_children_8a9B71">Español<span class="SvgIcon-module_wrapper__1fPqw"><svg width="16" height="16" fill="none" xmlns="http://www.w3.org/2000/svg" role="img" aria-hidden="true" class="SvgIcon-module_icon__sUHUn"><path d="M8.24 11.66L4 7.41 5.41 6l2.83 2.83L11.07 6l1.42 1.41-4.25 4.25z" fill="currentColor"></path></svg></span></span></span></button></div></div></div></div><div class="GridRow-module_wrapper__Uub42 GridRow-module_extended__Bvagp"><div class="GridColumn-module_wrapper__soqyu GridColumn-module_hide_above_l__UT1-z GridColumn-module_extended_xl4_12__Ueyic GridColumn-module_extended_xl3_12__TsrxQ GridColumn-module_extended_xl2_12__ceos- GridColumn-module_extended_xl_12__7vx87 GridColumn-module_extended_l_12__gCRsq GridColumn-module_extended_m_8__bDZzO GridColumn-module_extended_s_4__ZU5Jo GridColumn-module_extended_xs_4__NH6tl GridColumn-module_extended_xxs_4__dHKOI"><div class="Footer-module_bottomCopyright__WjBga" data-e2e="footer_copyright_text"><span>Copyright © 2026 Scribd Inc.</span></div></div></div></div></footer></div><div data-afa-video-sticky-host="true" class="_1GGdEL"></div></div><script type="speculationrules">{"prefetch":[{"where":{"href_matches":["/","/doc/*","/docs/*","/document/*","/presentation/*","/what-is-scribd"]},"eagerness":"moderate"}]}</script></div> <script type="application/json" data-hypernova-key="doc_page" data-hypernova-id="861faa9f-61bf-4835-8f7f-01822c02ca5b"><!--{"assetEnvironment":"production","bodyProps":{"breadcrumbs":[],"sharing_buttons_props":{"description":"un regalo","id":436178951,"message":null,"private":false,"thumbnailUrl":"https://imgv2-2-f.scribdassets.com/img/document/436178951/original/5d15231805/1?v=1","title":"00131 Desarrollo Web Con Java Desde Cero","twitterHashtag":null,"url":"https://www.scribd.com/document/436178951/00131-Desarrollo-Web-Con-Java-Desde-Cero"},"show_bot_text":true,"bot_text":"###BOT_TEXT###","view_restricted_cta_test_enabled":false},"currentPage":{"isHamburgerMenuOpen":false,"isMegamenuTopBarVisible":true,"isStatsigEnabled":true,"navigationCategories":{"academic":{"totalCategoryCount":12,"categoryLinks":[{"dataName":"foreign-language-studies","name":"Estudios de idiomas extranjeros","url":"https://es.scribd.com/docs/Foreign-Language-Studies","children":[{"dataName":"chinese","name":"Chino","url":"https://es.scribd.com/docs/Foreign-Language-Studies/Chinese"},{"dataName":"esl","name":"Inglés como segunda lengua","url":"https://es.scribd.com/docs/Foreign-Language-Studies/ESL"}]},{"dataName":"science-mathematics","name":"Ciencia y matemáticas","url":"https://es.scribd.com/docs/Science-Mathematics","children":[{"dataName":"astronomy-space-sciences","name":"Astronomía y ciencias espaciales","url":"https://es.scribd.com/docs/Science-Mathematics/Astronomy-Space-Sciences"},{"dataName":"biology","name":"Biología","url":"https://es.scribd.com/docs/Science-Mathematics/Biology"}]},{"dataName":"study-aids-test-prep","name":"Estudio y preparación de exámenes","url":"https://es.scribd.com/docs/Study-Aids-Test-Prep","children":[{"dataName":"book-notes","name":"Libro de notas","url":"https://es.scribd.com/docs/Study-Aids-Test-Prep/Book-Notes"},{"dataName":"college-entrance-exams","name":"Exámenes de ingreso a la universidad","url":"https://es.scribd.com/docs/Study-Aids-Test-Prep/College-Entrance-Exams"}]},{"dataName":"teaching-methods-materials","name":"Métodos y materiales de enseñanza","url":"https://es.scribd.com/docs/Teaching-Methods-Materials","children":[{"dataName":"early-childhood-education","name":"Educación de la primera infancia","url":"https://es.scribd.com/docs/Teaching-Methods-Materials/Early-Childhood-Education"},{"dataName":"education-philosophy-theory","name":"Filosofía y teoría de la educación","url":"https://es.scribd.com/docs/Teaching-Methods-Materials/Education-Philosophy-Theory"}]}]},"professional":{"totalCategoryCount":21,"categoryLinks":[{"dataName":"business","name":"Negocios","url":"https://es.scribd.com/docs/Business","children":[{"dataName":"business-analytics","name":"Análisis de negocios","url":"https://es.scribd.com/docs/Business/Business-Analytics"},{"dataName":"human-resources-personnel-management","name":"Recursos humanos y gestión de personal","url":"https://es.scribd.com/docs/Business/Human-Resources-Personnel-Management"}]},{"dataName":"career-growth","name":"Profesión y crecimiento","url":"https://es.scribd.com/docs/Career-Growth","children":[{"dataName":"careers","name":"Profesiones","url":"https://es.scribd.com/docs/Career-Growth/Careers"},{"dataName":"job-hunting","name":"Búsqueda de empleo","url":"https://es.scribd.com/docs/Career-Growth/Job-Hunting"}]},{"dataName":"computers","name":"Informática","url":"https://es.scribd.com/docs/Computers","children":[{"dataName":"applications-software","name":"Aplicaciones y software","url":"https://es.scribd.com/docs/Computers/Applications-Software"},{"dataName":"cad-cam","name":"CAD-CAM","url":"https://es.scribd.com/docs/Computers/CAD-CAM"}]},{"dataName":"finance-money-management","name":"Finanzas y dinero","url":"https://es.scribd.com/docs/Finance-Money-Management","children":[{"dataName":"accounting-bookkeeping","name":"Contabilidad y teneduría de libros","url":"https://es.scribd.com/docs/Finance-Money-Management/Accounting-Bookkeeping"},{"dataName":"auditing","name":"Auditoría","url":"https://es.scribd.com/docs/Finance-Money-Management/Auditing"}]},{"dataName":"law","name":"Derecho","url":"https://es.scribd.com/docs/Law","children":[{"dataName":"business-financial","name":"Negocios y finanzas","url":"https://es.scribd.com/docs/Law/Business-Financial"},{"dataName":"contracts-agreements","name":"Contratos y acuerdos","url":"https://es.scribd.com/docs/Law/Contracts-Agreements"}]},{"dataName":"politics","name":"Política","url":"https://es.scribd.com/docs/Politics","children":[{"dataName":"american-government","name":"Gobierno americano","url":"https://es.scribd.com/docs/Politics/American-Government"},{"dataName":"international-relations","name":"Relaciones Internacionales","url":"https://es.scribd.com/docs/Politics/International-Relations"}]},{"dataName":"technology-engineering","name":"Tecnología","url":"https://es.scribd.com/docs/Technology-Engineering","children":[{"dataName":"automotive","name":"Automotriz","url":"https://es.scribd.com/docs/Technology-Engineering/Automotive"},{"dataName":"aviation-aeronautics","name":"Aviación y aeronáutica","url":"https://es.scribd.com/docs/Technology-Engineering/Aviation-Aeronautics"}]}]},"culture":{"totalCategoryCount":19,"categoryLinks":[{"dataName":"art","name":"Arte","url":"https://es.scribd.com/docs/Art","children":[{"dataName":"antiques-collectibles","name":"Antigüedades y coleccionables","url":"https://es.scribd.com/docs/Art/Antiques-Collectibles"},{"dataName":"architecture","name":"Arquitectura","url":"https://es.scribd.com/docs/Art/Architecture"}]},{"dataName":"biography-memoir","name":"Biografías y memorias","url":"https://es.scribd.com/docs/Biography-Memoir","children":[{"dataName":"artists-and-musicians","name":"Artistas y músicos","url":"https://es.scribd.com/docs/Biography-Memoir/Artists-and-Musicians"},{"dataName":"entertainers-and-the-rich-famous","name":"Artistas y celebridades","url":"https://es.scribd.com/docs/Biography-Memoir/Entertainers-and-the-Rich-Famous"}]},{"dataName":"comics-graphic-novels","name":"Cómics y novelas gráficas","url":"https://es.scribd.com/docs/Comics-Graphic-Novels"},{"dataName":"history","name":"Historia","url":"https://es.scribd.com/docs/History","children":[{"dataName":"ancient","name":"Antigüedad","url":"https://es.scribd.com/docs/History/Ancient"},{"dataName":"modern","name":"Moderno","url":"https://es.scribd.com/docs/History/Modern"}]},{"dataName":"philosophy","name":"Filosofía","url":"https://es.scribd.com/docs/Philosophy"},{"dataName":"language-arts-discipline","name":"Artes del Lenguaje y Comunicación","url":"https://es.scribd.com/docs/Language-Arts-Discipline","children":[{"dataName":"composition-creative-writing","name":"Redacción y escritura creativa","url":"https://es.scribd.com/docs/Language-Arts-Discipline/Composition-Creative-Writing"},{"dataName":"linguistics","name":"Lingüística","url":"https://es.scribd.com/docs/Language-Arts-Discipline/Linguistics"}]},{"dataName":"literary-criticism","name":"Crítica literaria","url":"https://es.scribd.com/docs/Literary-Criticism"},{"dataName":"social-science","name":"Ciencias sociales","url":"https://es.scribd.com/docs/Social-Science","children":[{"dataName":"anthropology","name":"Antropología","url":"https://es.scribd.com/docs/Social-Science/Anthropology"},{"dataName":"archaeology","name":"Arqueología","url":"https://es.scribd.com/docs/Social-Science/Archaeology"}]},{"dataName":"true-crime","name":"Crímenes verdaderos","url":"https://es.scribd.com/docs/True-Crime"}]},"hobbies_and_crafts":{"totalCategoryCount":12,"categoryLinks":[{"dataName":"cooking-food-wine","name":"Gastronomía, cocina y vino","url":"https://es.scribd.com/docs/Cooking-Food-Wine","children":[{"dataName":"beverages","name":"Bebidas","url":"https://es.scribd.com/docs/Cooking-Food-Wine/Beverages"},{"dataName":"courses-dishes","name":"Platos y guarniciones","url":"https://es.scribd.com/docs/Cooking-Food-Wine/Courses-Dishes"}]},{"dataName":"games-activities","name":"Juegos y actividades","url":"https://es.scribd.com/docs/Games-Activities","children":[{"dataName":"card-games","name":"Juegos de cartas","url":"https://es.scribd.com/docs/Games-Activities/Card-Games"},{"dataName":"fantasy-sports","name":"Deportes de fantasía","url":"https://es.scribd.com/docs/Games-Activities/Fantasy-Sports"}]},{"dataName":"home-garden","name":"Hogar, jardinería y bricolaje","url":"https://es.scribd.com/docs/Home-Garden","children":[{"dataName":"crafts-hobbies","name":"Manualidades y pasatiempos","url":"https://es.scribd.com/docs/Home-Garden/Crafts-Hobbies"},{"dataName":"gardening","name":"Jardinería","url":"https://es.scribd.com/docs/Home-Garden/Gardening"}]},{"dataName":"sports-recreation","name":"Deportes y actividades al aire libre","url":"https://es.scribd.com/docs/Sports-Recreation","children":[{"dataName":"baseball","name":"Béisbol","url":"https://es.scribd.com/docs/Sports-Recreation/Baseball"},{"dataName":"basketball","name":"Básquetbol","url":"https://es.scribd.com/docs/Sports-Recreation/Basketball"}]}]},"personal_growth":{"totalCategoryCount":12,"categoryLinks":[{"dataName":"lifestyle","name":"Estilo de vida","url":"https://es.scribd.com/docs/Lifestyle","children":[{"dataName":"beauty-grooming","name":"Belleza","url":"https://es.scribd.com/docs/Lifestyle/Beauty-Grooming"},{"dataName":"fashion","name":"Moda","url":"https://es.scribd.com/docs/Lifestyle/Fashion"}]},{"dataName":"religion-spirituality","name":"Religión y espiritualidad","url":"https://es.scribd.com/docs/Religion-Spirituality","children":[{"dataName":"buddhism","name":"Budismo","url":"https://es.scribd.com/docs/Religion-Spirituality/Buddhism"},{"dataName":"christianity","name":"Cristianismo","url":"https://es.scribd.com/docs/Religion-Spirituality/Christianity"}]},{"dataName":"self-improvement","name":"Relaciones personales, crianza y desarrollo personal","url":"https://es.scribd.com/docs/Self-Improvement","children":[{"dataName":"addiction","name":"Adicción","url":"https://es.scribd.com/docs/Self-Improvement/Addiction"},{"dataName":"mental-health","name":"Salud mental","url":"https://es.scribd.com/docs/Self-Improvement/Mental-Health"}]},{"dataName":"wellness","name":"Salud y bienestar","url":"https://es.scribd.com/docs/Wellness","children":[{"dataName":"body-mind-spirit","name":"Cuerpo, mente y espíritu","url":"https://es.scribd.com/docs/Wellness/Body-Mind-Spirit"},{"dataName":"diet-nutrition","name":"Dieta y nutrición","url":"https://es.scribd.com/docs/Wellness/Diet-Nutrition"}]}]}},"selectedMobileBottomTab":"document","serverTimestamp":"2026-01-27T14:05:32Z","statsigClientApiKey":"client-WIJd796Cwa4NdE0bYoaQFqBHKyK5Pj5Ct7uODQkwhKs","statsigEnvironmentTier":"production"},"enablePseudolocalization":false,"flashes":[],"global":{"config":{"facebook":{"app_id":"136494494209"}},"testAssignments":{"backupPaymentMethodsRollout":null,"personalized_archive_offer":"control","ask_ai_download":null,"docPageDownloadButtonV1":{"testName":"doc_page_dl_btn_v1","variant":"control"},"docPageStatsigWithLoggedOut":{"testName":"doc_page_statsig_with_logged_out","variant":"control"},"docPageStatsigWithoutLoggedOut":null,"postDownloadModalV3":null,"docPageToolbarSummarize":{"testName":"doc_page_toolbar_summarize","variant":"control"},"docPageMobileSummarize":{"testName":"doc_page_mobile_summarize","variant":"control"},"docPageDesktopAdvancedFind":{"testName":"doc_page_desktop_advanced_find_q1_2026","variant":"control"},"docPageGlobalNavVisV2":{"testName":"doc_page_global_nav_vis_v2","variant":"test"},"docPageWorkspacesMvp":{"testName":"doc_page_workspaces_mvp","variant":"control"}},"paths":{"assetPath":"aHR0cHM6Ly9zLWYuc2NyaWJkYXNzZXRzLmNvbS8=\n","actions":{"add_to_library":"L3NhdmVkL2FkZA==\n","archive_plans_url":"aHR0cHM6Ly9lcy5zY3JpYmQuY29tL2FyY2hpdmUvcGxhbnM/ZG9jPTQzNjE3\nODk1MSZtZXRhZGF0YT0lN0IlMjJjb250ZXh0JTIyJTNBJTIyYXJjaGl2ZV92\naWV3X3Jlc3RyaWN0ZWQlMjIlMkMlMjJwYWdlJTIyJTNBJTIycmVhZCUyMiUy\nQyUyMmFjdGlvbiUyMiUzQSUyMmRvd25sb2FkJTIyJTJDJTIybG9nZ2VkX2lu\nJTIyJTNBZmFsc2UlMkMlMjJwbGF0Zm9ybSUyMiUzQSUyMndlYiUyMiU3RA==\n","audiobooksLink":"aHR0cHM6Ly9lcy5zY3JpYmQuY29tL2F1ZGlvYm9va3M=\n","bestsellers_url":"aHR0cHM6Ly9lcy5zY3JpYmQuY29tL2Jlc3RzZWxsZXJz\n","book_annotations":"L2Jvb2tfYW5ub3RhdGlvbnMvNDM2MTc4OTUx\n","booksLink":"aHR0cHM6Ly9lcy5zY3JpYmQuY29tL2Jvb2tz\n","documentsLink":"aHR0cHM6Ly9lcy5zY3JpYmQuY29tL2RvY3M=\n","faqUrl":"aHR0cDovL3N1cHBvcnQuc2NyaWJkLmNvbS9oYy8=\n","homeLink":"aHR0cHM6Ly9lcy5zY3JpYmQuY29tLw==\n","library_url":"aHR0cHM6Ly9lcy5zY3JpYmQuY29tL3NhdmVk\n","load_recommenders":"L2RvYy1wYWdlL3JlY29tbWVuZGVycy80MzYxNzg5NTE=\n","payment_fix":"L2FjY291bnQvcGF5bWVudF9wcm9maWxlX3VwZGF0ZQ==\n","payment_fix_url":null,"personalization_path":"L2RvYy1wYWdlL3BlcnNvbmFsaXphdGlvbg==\n","personalization_afa_path":"L2RvYy1wYWdlL2FmYQ==\n","pingback":["aA==\n","dA==\n","dA==\n","cA==\n","cw==\n","Og==\n","Lw==\n","Lw==\n","ZQ==\n","cw==\n","Lg==\n","cw==\n","Yw==\n","cg==\n","aQ==\n","Yg==\n","ZA==\n","Lg==\n","Yw==\n","bw==\n","bQ==\n","Lw==\n","ZA==\n","bw==\n","Yw==\n","dQ==\n","bQ==\n","ZQ==\n","bg==\n","dA==\n","cw==\n","Lw==\n","NA==\n","Mw==\n","Ng==\n","MQ==\n","Nw==\n","OA==\n","OQ==\n","NQ==\n","MQ==\n","Lw==\n","cA==\n","aQ==\n","bg==\n","Zw==\n","Yg==\n","YQ==\n","Yw==\n","aw==\n"],"register_download_attempt":"L2RvY3VtZW50X2Rvd25sb2Fkcy9yZWdpc3Rlcl9kb3dubG9hZF9hdHRlbXB0\n","request_document_download":"L2RvY3VtZW50X2Rvd25sb2Fkcy9yZXF1ZXN0X2RvY3VtZW50X2Zvcl9kb3du\nbG9hZA==\n","remove_from_library":"L3NhdmVkL3JlbW92ZQ==\n","upload_url":"L3VwbG9hZC1kb2N1bWVudD9hcmNoaXZlX2RvYz00MzYxNzg5NTE=\n"},"props":{"download_receipt_modal":"L2RvYy1wYWdlL2Rvd25sb2FkLXJlY2VpcHQtbW9kYWwtcHJvcHMvNDM2MTc4\nOTUx\n","paused_user_download_modal":"L2RvYy1wYWdlL3BhdXNlZC11c2VyLWRvd25sb2FkLW1vZGFsLXByb3Bz\n","pmp_login_join_modal":"L2RvYy1wYWdlL3BtcC1sb2dpbi1qb2luLW1vZGFsLXByb3BzLzQzNjE3ODk1\nMQ==\n"}},"features":{"highlights":true,"isEligibleForAdsForAccess":false,"isEligibleForHouseAds":false,"isEligibleForPaidAds":false,"isEligibleForProgressiveProfileModal":false,"showDocChatExperience":null,"shouldShowRelatedKnowledgePage":false,"taxonomyV4UgcBrowsing":true,"docChatAvailable":false}},"i18n":{"currentLanguage":{"prefix":"es","lcid":"es","href":"/language?id=es","lang":"es-419","name":"Español"},"languages":[{"prefix":"en","lcid":"en","href":"/language?id=en","lang":"en_US","name":"English"},{"prefix":"es","lcid":"es","href":"/language?id=es","lang":"es-419","name":"Español"},{"prefix":"pt","lcid":"pt-br","href":"/language?id=pt-br","lang":"pt_BR","name":"Português"},{"prefix":"de","lcid":"de","href":"/language?id=de","lang":"de","name":"Deutsch"},{"prefix":"fr","lcid":"fr","href":"/language?id=fr","lang":"fr","name":"Français"},{"prefix":"ru","lcid":"ru","href":"/language?id=ru","lang":"ru_RU","name":"Русский"},{"prefix":"it","lcid":"it","href":"/language?id=it","lang":"it","name":"Italiano"},{"prefix":"ro","lcid":"ro","href":"/language?id=ro","lang":"ro_RO","name":"Română"},{"prefix":"id","lcid":"id","href":"/language?id=id","lang":"id_ID","name":"Bahasa Indonesia"}],"locale":"es-419"},"page":{"savedItems":{"436178951":false}},"personalization":{"trialDuration":null},"ratings":{"436178951":{"averageRating":0,"documentId":436178951,"downvoteCount":0,"ratingCount":0,"upvoteCount":0,"userRating":0}},"recommenders":{"ad_slot_recs":{"items":[{"id":421625407,"doc_uuid":"sbd/dON2d08NDg1TOKjue8O/J1E="},{"id":396768489,"doc_uuid":"sbd/W09Z0S84MZKNDZi0IltegP4="},{"id":501775300,"doc_uuid":"sbd/28AB8Ssl3Q0c6ineheu82R0="},{"id":562105552,"doc_uuid":"sbd/cFLL/L2rAtJAVtO5bTHfZUI="},{"id":486306622,"doc_uuid":"sbd/PqDKYkImyyYQhNYVLkD8Gsw="},{"id":64858311,"doc_uuid":"sbd/yAxh/2XxWoA4a7LtXBLKyQQ="},{"id":300978164,"doc_uuid":"sbd/rrnKVKcPhKmemqP4/4HiENU="},{"id":625471450,"doc_uuid":"sbd/lcHx0S36fVY5zqUQDoOOeng="},{"id":45631645,"doc_uuid":"sbd/OLEjyvrC/Or502B8jrbK8FI="},{"id":421057925,"doc_uuid":"sbd/MMpXSFqwq2VgCvSDktyNr2I="},{"id":325672105,"doc_uuid":"sbd/btS8xfvwYut7ejWFUBbpDW4="},{"id":781732476,"doc_uuid":"sbd/Q75QEtr4hLtoecRwVX6UAbs="},{"id":473488935,"doc_uuid":"sbd//eEfKWY6YNRfTRVUHnxNqhM="},{"id":532799874,"doc_uuid":"sbd/8d1ed5Uv8pdEx5Le4X75m8w="},{"id":425193471,"doc_uuid":"sbd/yvJgVH0uEO0Ec3g2GorCFV0="},{"id":597867822,"doc_uuid":"sbd/TqF3WYVsMeFlbTTfhHlCYtY="},{"id":539180212,"doc_uuid":"sbd/QiATZm5bVI4L8tb3ZYuhS/E="},{"id":305509034,"doc_uuid":"sbd/VjxLMMgUHMVBaWwF589ajag="},{"id":118430020,"doc_uuid":"sbd/6uLX4cbq5Zhb42zIZf8DuBg="},{"id":366546316,"doc_uuid":"sbd/4bsmE5HD2xPePOUwz0w/gUo="},{"id":64201336,"doc_uuid":"sbd/Hi51xQ8CgfsXoDxy2hD4ens="},{"id":433941959,"doc_uuid":"sbd/xrYxzbM39CzA4niBKFNvB3M="},{"id":365408663,"doc_uuid":"sbd/IGyMVQbnyfMwT2pumnGePqU="},{"id":316693529,"doc_uuid":"sbd/WyEGkv9kK1bzWOXqPrCUMw8="},{"id":424901680,"doc_uuid":"sbd/cLI3PbnwN4LyQfSvbtBV9EY="},{"id":683917817,"doc_uuid":"sbd/JoDX62W6gHQff505vXf7pJk="},{"id":556640477,"doc_uuid":"sbd/opdCAOt0bVA9MindRF1vi68="},{"id":393136399,"doc_uuid":"sbd/icMMzzpUiNU0cQzIm57QXeQ="},{"id":393480335,"doc_uuid":"sbd/7fcPrRY3T3SNLWJxOYN4xIE="},{"id":601916975,"doc_uuid":"sbd/50hQjbxBvZzaARU6fs0M4qI="},{"id":644340534,"doc_uuid":"sbd/gWXa9vBnGTk5vf88s6l/tsk="},{"id":757109957,"doc_uuid":"sbd/FQgbWBtkgrL3E71rTsauvV4="},{"id":561780456,"doc_uuid":"sbd/68hzRv2mAZAfqNv3sb2wCCI="},{"id":356957232,"doc_uuid":"sbd/6cFiRHcDfDee6CvHkMucymk="},{"id":682044537,"doc_uuid":"sbd/GVo2kxvkEoaz64UjqnXoCcs="},{"id":434461914,"doc_uuid":"sbd/ufFbTR8ea1r2nAIRTdKGRBo="},{"id":471147563,"doc_uuid":"sbd/7frn4pZwq/fmYbofvXeBXa8="},{"id":492503248,"doc_uuid":"sbd/OKoe/Bp8mOkk4ADUEuaUAyc="},{"id":651446178,"doc_uuid":"sbd/tXetMooQyspVwSqDfzcPThQ="},{"id":395003897,"doc_uuid":"sbd/vwVdzVo/X4D5qejzMqyUf6Q="},{"id":464646338,"doc_uuid":"sbd/pAIJpo2928Zoon/ffOMevo8="},{"id":693614829,"doc_uuid":"sbd/4dijPwbvkOMEN3gFAlzMv2Q="},{"id":723977647,"doc_uuid":"sbd/rqrBEQ45sfcpsoVU1EJjT3k="},{"id":901750148,"doc_uuid":"sbd/V3x3z7kWtxBQ8cp1JOHsTsg="},{"id":715724741,"doc_uuid":"sbd/9dDVfOGAueHUYryXu9RU60g="},{"id":408214662,"doc_uuid":"sbd/DjZqbpxLwA84is6tVKjiomE="},{"id":454235446,"doc_uuid":"sbd/OYoDelqePVkOdRpKB6qaF4g="},{"id":651720149,"doc_uuid":"sbd/Ohl27m0Ea5bWCkzy0ggyTag="},{"id":681792251,"doc_uuid":"sbd/MeX10cRWoprKhko1RZy0tqQ="},{"id":681788158,"doc_uuid":"sbd/h8CVstQstam6W2n4i0kcUS8="},{"id":681785752,"doc_uuid":"sbd/rSRo3GAB3hNYdRjgkJWxsTA="},{"id":640124549,"doc_uuid":"sbd/mzuV9U8nU9fCbTWsGP2k/pc="},{"id":711835491,"doc_uuid":"sbd/Qb0jMnxcMA4CrI39coUrDMI="},{"id":566302917,"doc_uuid":"sbd/lGslkDrpZYroOPMlYMcv/A4="},{"id":681792235,"doc_uuid":"sbd/f4/pF3MsNaKCn0Xw1HP2nQQ="},{"id":681785723,"doc_uuid":"sbd/4tj1wx/M5sk0fHrzl8Rb9SM="},{"id":681788144,"doc_uuid":"sbd/9pszVHFR8pJ3NB3LsA4OLoQ="},{"id":681788143,"doc_uuid":"sbd/0Ldon55fxCTVpxw3Ho/jvv4="},{"id":677628242,"doc_uuid":"sbd/vxdlORxiJOTVrBpj4amNgMk="},{"id":749630657,"doc_uuid":"sbd/wL41mqOjH9O1t4m0/dXXigc="}],"ids":[421625407,396768489,501775300,562105552,486306622,64858311,300978164,625471450,45631645,421057925,325672105,781732476,473488935,532799874,425193471,597867822,539180212,305509034,118430020,366546316,64201336,433941959,365408663,316693529,424901680,683917817,556640477,393136399,393480335,601916975,644340534,757109957,561780456,356957232,682044537,434461914,471147563,492503248,651446178,395003897,464646338,693614829,723977647,901750148,715724741,408214662,454235446,651720149,681792251,681788158,681785752,640124549,711835491,566302917,681792235,681785723,681788144,681788143,677628242,749630657],"title_link":null,"title":null,"track_opts":{"compilation_id":null,"module_id":"sbd/p0r0ZJEa9CS7QyRf3qmI6tw=","widget_name":"ad_slots","track_id":"ad_slots"}},"list_recommenders":{"items":[{"id":421625407,"doc_uuid":"sbd/efrMOlylCLNZPlR3kG4ubcI="},{"id":396768489,"doc_uuid":"sbd/c9lKNfDa5krs1KpdUEpG1g4="},{"id":501775300,"doc_uuid":"sbd/bC6k0WuV1WHWyazhDbFFuy8="},{"id":562105552,"doc_uuid":"sbd/LfZvD8YDdTV6HhaJCc6d09o="},{"id":486306622,"doc_uuid":"sbd/bOFvrJJzWO05ZJVsXTlNnuo="},{"id":64858311,"doc_uuid":"sbd/23TiVOpIs9TGP8UeLwkokZo="},{"id":300978164,"doc_uuid":"sbd/xgnj9UvrbSI5rJL9abWEHU4="},{"id":625471450,"doc_uuid":"sbd/wz6TrNqxOxC8usu5cyMn/WM="},{"id":45631645,"doc_uuid":"sbd/9AzbnqIEWu0OvWQfyI3ad7c="},{"id":421057925,"doc_uuid":"sbd/2ilZshKYDNMetdBTe6pA/V8="},{"id":325672105,"doc_uuid":"sbd/jwlY7A9psT/S4h3fnZ5vu6A="},{"id":781732476,"doc_uuid":"sbd/xQjjTOTRjWJT9rZmFZjJo2Y="},{"id":473488935,"doc_uuid":"sbd/jPIuEUYFdRqMhAvMSE3VWr0="},{"id":532799874,"doc_uuid":"sbd/tNgSBOAvasciUCzJS5BIleI="},{"id":425193471,"doc_uuid":"sbd/NifKUzEYLEjsX/FdkjjrRKM="},{"id":597867822,"doc_uuid":"sbd/6enuPHDPLzewD627fIermcc="},{"id":539180212,"doc_uuid":"sbd/B3F8nqo4NMVt/vjl0FzauFY="},{"id":305509034,"doc_uuid":"sbd/38BiC8VNHz9ifp9/yGvDKPs="},{"id":118430020,"doc_uuid":"sbd/0ABZRjQJFlVhju032Fy/Yxk="},{"id":366546316,"doc_uuid":"sbd/5lh5uPJTzcOowKNzfPHBF1A="},{"id":64201336,"doc_uuid":"sbd/7AanNve/jrxFokMWolRilag="},{"id":433941959,"doc_uuid":"sbd/8WTcfcmoM9lbfh9MtxWBXxA="},{"id":365408663,"doc_uuid":"sbd/cn64Fk9jdv5HudcVOkI0rOI="},{"id":316693529,"doc_uuid":"sbd/G80TnH9j70rjyRqKE7kSaMo="},{"id":424901680,"doc_uuid":"sbd/2CQJQWmZiU3vDzOCNC6ZhHg="},{"id":683917817,"doc_uuid":"sbd/5uzX9U9KxQmCqmTg7zum7Qw="},{"id":556640477,"doc_uuid":"sbd/pmIYVNRU23hvAYskAGp9ceI="},{"id":393136399,"doc_uuid":"sbd/eX6Hrp/b7X4dz2fLiiZO3Ds="},{"id":393480335,"doc_uuid":"sbd/Rt0zn17sxVJdRJ1ybDJHvuE="},{"id":601916975,"doc_uuid":"sbd//KuIbqSZx1JNdLigZ4XmJvg="},{"id":644340534,"doc_uuid":"sbd/76njIL4xvo/KLI9xdAgo3uY="},{"id":757109957,"doc_uuid":"sbd/YAOA8Xc8mC7FZ0xyKKi5Bi4="},{"id":561780456,"doc_uuid":"sbd/jqo9lA3As009Fv71850pL/0="},{"id":356957232,"doc_uuid":"sbd/bEw6DKRLnALx4FRhWID6tyo="},{"id":682044537,"doc_uuid":"sbd/MHlH3809AZWEK3hiJFyNyMo="},{"id":434461914,"doc_uuid":"sbd/fb9zhcv4ukeyI448tXC3bMc="},{"id":471147563,"doc_uuid":"sbd/DOz74HBNfuwKvMYFRm7o7DQ="},{"id":492503248,"doc_uuid":"sbd/ke8yMPkq5dn49u/sBkW5dyY="},{"id":651446178,"doc_uuid":"sbd/MHpImdONemd21s25arap7dg="},{"id":395003897,"doc_uuid":"sbd/3CSq6Eg90zYF4pxdIfUkdio="},{"id":464646338,"doc_uuid":"sbd/XcpvqK4Zc9q9WOb/i/eTwFI="},{"id":693614829,"doc_uuid":"sbd/UcfqCFKxjVGvWi3fholDwkY="},{"id":723977647,"doc_uuid":"sbd/FhMKtLIkgeaVcWLp9cMy8sE="},{"id":901750148,"doc_uuid":"sbd/xTZRjjs5AM03k1yGpeAfLds="},{"id":715724741,"doc_uuid":"sbd/p994ewwzTYM5qcZyIKsEnrI="},{"id":408214662,"doc_uuid":"sbd/tn2ZaTosSREJ9eOMqoVzWfs="},{"id":454235446,"doc_uuid":"sbd/3wbSc0dJzxlO2d1K6UowV4I="},{"id":651720149,"doc_uuid":"sbd/31v8OAWDXh/O9PdGErRHpjM="},{"id":681792251,"doc_uuid":"sbd/G2t74WSqNxhCVTGLyR6OoqU="},{"id":681788158,"doc_uuid":"sbd/zfC7ioiZixXkfQy2vNmLYuM="},{"id":681785752,"doc_uuid":"sbd/7Ydh1GwpcMGmQt/gKKhsqv8="},{"id":640124549,"doc_uuid":"sbd/BqZL/npMZSxgS9QGGPM8Wm0="},{"id":711835491,"doc_uuid":"sbd/Pj6zpnZNIdKneEf4w5qe458="},{"id":566302917,"doc_uuid":"sbd/xRKcArryf5mhMjrznTm8UaM="},{"id":681792235,"doc_uuid":"sbd/bAs6Fo3wmuNYIeQfglarVFQ="},{"id":681785723,"doc_uuid":"sbd/p81x96TgZT2fSXSOW5dneY4="},{"id":681788144,"doc_uuid":"sbd/s7IWD/HljBGYNk9Kw9/iSn4="},{"id":681788143,"doc_uuid":"sbd/PRX54WUGRuHINpjd5hqG88E="},{"id":677628242,"doc_uuid":"sbd/V0FaQTlCpL0azXylHp8huQc="},{"id":749630657,"doc_uuid":"sbd/VGoy0iDOSbyzPWx6HoykNkY="}],"ids":[421625407,396768489,501775300,562105552,486306622,64858311,300978164,625471450,45631645,421057925,325672105,781732476,473488935,532799874,425193471,597867822,539180212,305509034,118430020,366546316,64201336,433941959,365408663,316693529,424901680,683917817,556640477,393136399,393480335,601916975,644340534,757109957,561780456,356957232,682044537,434461914,471147563,492503248,651446178,395003897,464646338,693614829,723977647,901750148,715724741,408214662,454235446,651720149,681792251,681788158,681785752,640124549,711835491,566302917,681792235,681785723,681788144,681788143,677628242,749630657],"title_link":null,"title":null,"track_opts":{"compilation_id":null,"module_id":"sbd/lmVbKFhQH/r7wmgDLQAobrI=","widget_name":"recommender_list","track_id":"doc_page_user_experience_top"}},"documents":{"45631645":{"author":"creart40","author_url":"https://www.scribd.com/user/39659555/creart40","categories":[],"description":null,"id":45631645,"is_series":false,"in_library":false,"library_xhr_pending":false,"page_count":143,"retina_thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/45631645/298x396/b23e18f60f/1406221448?v=1","run_time":0,"short_title":"Guía Completa de Programación en PHP","static_rating":{"rating":5,"count":1,"up_count":1},"thumb_url":"https://imgv2-2-f.scribdassets.com/img/document/45631645/149x198/e2e8d6397a/1406221448?v=1","title":"Guía Completa de Programación en PHP","type":"document","url":"https://es.scribd.com/document/45631645/ProgramacionenPHP","views":"970"},"64201336":{"author":"ArT1110","author_url":"https://www.scribd.com/user/4405265/ArT1110","categories":[],"description":"","id":64201336,"is_series":false,"in_library":false,"library_xhr_pending":false,"page_count":198,"retina_thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/64201336/298x396/c5b965f93e/1726884410?v=1","run_time":0,"short_title":"Curso de Algoritmos y Estructura de Datos - UNIDAD I y II - The Oliztik","static_rating":{"rating":5,"count":2,"up_count":2},"thumb_url":"https://imgv2-2-f.scribdassets.com/img/document/64201336/149x198/1932fc06a6/1726884410?v=1","title":"Curso de Algoritmos y Estructura de Datos - UNIDAD I y II - The Oliztik","type":"document","url":"https://es.scribd.com/document/64201336/Curso-de-Algoritmos-y-Estructura-de-Datos-UNIDAD-I-y-II-The-Oliztik","views":"4,8K"},"64858311":{"author":"Mauricio Higueros","author_url":"https://www.scribd.com/user/87949034/Mauricio-Higueros","categories":[],"description":null,"id":64858311,"is_series":false,"in_library":false,"library_xhr_pending":false,"page_count":314,"retina_thumb_url":"https://imgv2-2-f.scribdassets.com/img/document/64858311/298x396/1a16b4e543/1569174708?v=1","run_time":0,"short_title":"Ingeniería Del Software en Entornos de Software Libre","static_rating":{"rating":5,"count":1,"up_count":1},"thumb_url":"https://imgv2-2-f.scribdassets.com/img/document/64858311/149x198/4bfdf53e2c/1569174708?v=1","title":"Ingeniería Del Software en Entornos de Software Libre","type":"document","url":"https://es.scribd.com/document/64858311/Ingenieria-del-Software-en-entornos-de-Software-Libre","views":"372"},"118430020":{"author":"german_kronberg","author_url":"https://www.scribd.com/user/195010110/german-kronberg","categories":[],"description":"Spring MVC Español \njava jee j2ee development desarrollo spring web mvc","id":118430020,"is_series":false,"in_library":false,"library_xhr_pending":false,"page_count":63,"retina_thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/118430020/298x396/5039e05efa/1543559713?v=1","run_time":0,"short_title":"Spring MVC Español","static_rating":{"rating":0,"count":0,"up_count":0},"thumb_url":"https://imgv2-2-f.scribdassets.com/img/document/118430020/149x198/2d19a03828/1543559713?v=1","title":"Spring MVC Español","type":"document","url":"https://es.scribd.com/document/118430020/Spring-MVC-Espanol","views":"1,2K"},"300978164":{"author":"Marcos Crisostomo","author_url":"https://www.scribd.com/user/231351991/Marcos-Crisostomo","categories":[],"description":"Framework Hibernate \nFramework Hibernate \nFramework Hibernate","id":300978164,"is_series":false,"in_library":false,"library_xhr_pending":false,"page_count":18,"retina_thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/300978164/298x396/490584f130/1456673250?v=1","run_time":0,"short_title":"Guía Rápida de Hibernate para Principiantes","static_rating":{"rating":0,"count":0,"up_count":0},"thumb_url":"https://imgv2-2-f.scribdassets.com/img/document/300978164/149x198/043f5eb9da/1456673250?v=1","title":"Guía Rápida de Hibernate para Principiantes","type":"document","url":"https://es.scribd.com/document/300978164/Framework-Hibernate","views":"242"},"305509034":{"author":"Oscar Ariño Zurilla","author_url":"https://www.scribd.com/user/58881125/Oscar-Arino-Zurilla","categories":[],"description":"Aplicaciones Web.","id":305509034,"is_series":false,"in_library":false,"library_xhr_pending":false,"page_count":131,"retina_thumb_url":"https://imgv2-2-f.scribdassets.com/img/document/305509034/298x396/e373c3b31e/1726421199?v=1","run_time":0,"short_title":"Desarrollo y Seguridad en Aplicaciones Web","static_rating":{"rating":5,"count":1,"up_count":1},"thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/305509034/149x198/7bb0e23d07/1726421199?v=1","title":"Desarrollo y Seguridad en Aplicaciones Web","type":"document","url":"https://es.scribd.com/document/305509034/Aplicaciones-Web","views":"717"},"316693529":{"author":"Anita Barboza Segovia","author_url":"https://www.scribd.com/user/237121373/Anita-Barboza-Segovia","categories":[],"description":"Uso de herramientas swing","id":316693529,"is_series":false,"in_library":false,"library_xhr_pending":false,"page_count":38,"retina_thumb_url":"https://imgv2-2-f.scribdassets.com/img/document/316693529/298x396/4939b77bfd/1466857240?v=1","run_time":0,"short_title":"Java Swings","static_rating":{"rating":0,"count":0,"up_count":0},"thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/316693529/149x198/e6e927eb18/1466857240?v=1","title":"Java Swings","type":"document","url":"https://es.scribd.com/document/316693529/Java-Swings","views":"302"},"325672105":{"author":"Alan Mamani","author_url":"https://www.scribd.com/user/57401906/Alan-Mamani","categories":[],"description":"MODELAMIENTO, DISEÑO E IMPLEMENTACION DE UNA BASE DE DATOS PARA EL PROCESO DE CONTROL DE ASISTENCIA Y EMISION DE PLANILLA UNICA DE REMUNERACIONES, PARA LA EMPRESA STARGROUP TI S.A.C.","id":325672105,"is_series":false,"in_library":false,"library_xhr_pending":false,"page_count":75,"retina_thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/325672105/298x396/cd973adae6/1542741647?v=1","run_time":0,"short_title":"Monografia Modelamiento de Base de Datos","static_rating":{"rating":0,"count":0,"up_count":0},"thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/325672105/149x198/3f8595d5a9/1542741647?v=1","title":"Monografia Modelamiento de Base de Datos","type":"document","url":"https://es.scribd.com/document/325672105/Monografia-Modelamiento-de-Base-de-Datos","views":"309"},"356957232":{"author":"Sara Anderson","author_url":"https://www.scribd.com/user/256314875/Sara-Anderson","categories":[],"description":"Java Basico","id":356957232,"is_series":false,"in_library":false,"library_xhr_pending":false,"page_count":195,"retina_thumb_url":"https://imgv2-2-f.scribdassets.com/img/document/356957232/298x396/363d9a1d1e/1686247750?v=1","run_time":0,"short_title":"Desarrollo Web Con Java Desde Cero","static_rating":{"rating":5,"count":1,"up_count":1},"thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/356957232/149x198/1a5c6626c1/1686247750?v=1","title":"Desarrollo Web Con Java Desde Cero","type":"document","url":"https://es.scribd.com/document/356957232/Desarrollo-Web-Con-Java-Desde-Cero","views":"1,3K"},"365408663":{"author":"erik","author_url":"https://www.scribd.com/user/4918185/erik","categories":[],"description":null,"id":365408663,"is_series":false,"in_library":false,"library_xhr_pending":false,"page_count":58,"retina_thumb_url":"https://imgv2-2-f.scribdassets.com/img/document/365408663/298x396/9c27734054/1511565556?v=1","run_time":0,"short_title":"Artesania Del Software PDF","static_rating":{"rating":0,"count":0,"up_count":0},"thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/365408663/149x198/319356d786/1511565556?v=1","title":"Artesania Del Software PDF","type":"document","url":"https://es.scribd.com/document/365408663/artesania-del-software-pdf","views":"382"},"366546316":{"author":"Jorge Luis Villavicencio Meza","author_url":"https://www.scribd.com/user/77333459/Jorge-Luis-Villavicencio-Meza","categories":[],"description":"Arquitectura de N Capas","id":366546316,"is_series":false,"in_library":false,"library_xhr_pending":false,"page_count":29,"retina_thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/366546316/298x396/3f65bb70ad/1665349751?v=1","run_time":0,"short_title":"Arquitectura de N Capas en Software","static_rating":{"rating":5,"count":1,"up_count":1},"thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/366546316/149x198/45e4b62b8f/1665349751?v=1","title":"Arquitectura de N Capas en Software","type":"document","url":"https://es.scribd.com/presentation/366546316/Arquitectura-de-N-Capas","views":"238"},"393136399":{"author":"Dario Acosta","author_url":"https://www.scribd.com/user/338875087/Dario-Acosta","categories":[],"description":"java","id":393136399,"is_series":false,"in_library":false,"library_xhr_pending":false,"page_count":55,"retina_thumb_url":"https://imgv2-2-f.scribdassets.com/img/document/393136399/298x396/68a2f2104b/1724441564?v=1","run_time":0,"short_title":"Guia Didactica Java - 1","static_rating":{"rating":5,"count":1,"up_count":1},"thumb_url":"https://imgv2-2-f.scribdassets.com/img/document/393136399/149x198/838b048b3d/1724441564?v=1","title":"Guia Didactica Java - 1","type":"document","url":"https://es.scribd.com/document/393136399/Guia-Didactica-Java-1","views":"342"},"393480335":{"author":"Jaime Barragan","author_url":"https://www.scribd.com/user/282420688/Jaime-Barragan","categories":[],"description":null,"id":393480335,"is_series":false,"in_library":false,"library_xhr_pending":false,"page_count":39,"retina_thumb_url":"https://imgv2-2-f.scribdassets.com/img/document/393480335/298x396/41c952b3e0/1542520114?v=1","run_time":0,"short_title":"Servicios de Red e Internet (2011) - DOC PDF","static_rating":{"rating":0,"count":0,"up_count":0},"thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/393480335/149x198/5eb630a070/1542520114?v=1","title":"Servicios de Red e Internet (2011) - DOC PDF","type":"document","url":"https://es.scribd.com/document/393480335/Servicios-de-Red-e-Internet-2011-DOC-pdf","views":"485"},"395003897":{"author":"Aldo Lazcano Francisco","author_url":"https://www.scribd.com/user/358958428/Aldo-Lazcano-Francisco","categories":[],"description":"Las calificaciones totales en el portafolio de evidencias al término de la semana 4 de 4 del periodo regular ordinario. \nPor un Generación 12.","id":395003897,"is_series":false,"in_library":false,"library_xhr_pending":false,"page_count":1,"retina_thumb_url":"https://imgv2-2-f.scribdassets.com/img/document/395003897/298x396/e944ecc6cf/1544044372?v=1","run_time":0,"short_title":"Guía del Portafolio de Evidencias SEP","static_rating":{"rating":0,"count":0,"up_count":0},"thumb_url":"https://imgv2-2-f.scribdassets.com/img/document/395003897/149x198/c974414a11/1544044372?v=1","title":"Guía del Portafolio de Evidencias SEP","type":"document","url":"https://es.scribd.com/document/395003897/Mi-Portafolio-de-Evidencias-del-Modulo-14-Prepa-en-linea-SEP-G-12","views":"725"},"396768489":{"author":"Programador Linares","author_url":"https://www.scribd.com/user/441445979/Programador-Linares","categories":[],"description":"SWING","id":396768489,"is_series":false,"in_library":false,"library_xhr_pending":false,"page_count":53,"retina_thumb_url":"https://imgv2-2-f.scribdassets.com/img/document/396768489/298x396/d7288f8e0c/1546565134?v=1","run_time":0,"short_title":"Introducción a Java Swing GUI","static_rating":{"rating":0,"count":0,"up_count":0},"thumb_url":"https://imgv2-2-f.scribdassets.com/img/document/396768489/149x198/798d73b9e7/1546565134?v=1","title":"Introducción a Java Swing GUI","type":"document","url":"https://es.scribd.com/document/396768489/Java-GUI-La-Libreria-Swing","views":"282"},"408214662":{"author":"AntoniChura","author_url":"https://www.scribd.com/user/282042243/AntoniChura","categories":[],"description":"asdaksjd asidojasidojqw dqiowdjoia zoxcn oqncoqiwn d23240923 sdoi cjc2 2e","id":408214662,"is_series":false,"in_library":false,"library_xhr_pending":false,"page_count":3,"retina_thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/408214662/298x396/0fd06f2e4d/1665839033?v=1","run_time":0,"short_title":"Justificacion Practica","static_rating":{"rating":1,"count":2,"up_count":0},"thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/408214662/149x198/29762a9671/1665839033?v=1","title":"Justificacion Practica","type":"document","url":"https://es.scribd.com/document/408214662/Justificacion-Practica","views":"543"},"421057925":{"author":"Marcelo Delgado","author_url":"https://www.scribd.com/user/285076310/Marcelo-Delgado","categories":[],"description":"java","id":421057925,"is_series":false,"in_library":false,"library_xhr_pending":false,"page_count":166,"retina_thumb_url":"https://imgv2-2-f.scribdassets.com/img/document/421057925/298x396/65b0a04687/1565180884?v=1","run_time":0,"short_title":"PDF M5 Java","static_rating":{"rating":0,"count":0,"up_count":0},"thumb_url":"https://imgv2-2-f.scribdassets.com/img/document/421057925/149x198/a763e2851c/1565180884?v=1","title":"PDF M5 Java","type":"document","url":"https://es.scribd.com/document/421057925/PDF-M5-JAVA","views":"577"},"421625407":{"author":"Luis Santacruz","author_url":"https://www.scribd.com/user/294564676/Luis-Santacruz","categories":[],"description":"Plan estudios","id":421625407,"is_series":false,"in_library":false,"library_xhr_pending":false,"page_count":1,"retina_thumb_url":"https://imgv2-2-f.scribdassets.com/img/document/421625407/298x396/6d933d5a61/1565638291?v=1","run_time":0,"short_title":"Ing Desarrollo Software","static_rating":{"rating":0,"count":0,"up_count":0},"thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/421625407/149x198/8c9d42e896/1565638291?v=1","title":"Ing Desarrollo Software","type":"document","url":"https://es.scribd.com/document/421625407/Ing-Desarrollo-Software","views":"340"},"424901680":{"author":"Jcruz Jca","author_url":"https://www.scribd.com/user/155344112/Jcruz-Jca","categories":[],"description":"PATRONES DE DISEÑO","id":424901680,"is_series":false,"in_library":false,"library_xhr_pending":false,"page_count":48,"retina_thumb_url":"https://imgv2-2-f.scribdassets.com/img/document/424901680/298x396/097fbf2b90/1567909010?v=1","run_time":0,"short_title":"Ámbito de Variables y Patrones de Diseño","static_rating":{"rating":0,"count":0,"up_count":0},"thumb_url":"https://imgv2-2-f.scribdassets.com/img/document/424901680/149x198/eba1c7d91c/1567909010?v=1","title":"Ámbito de Variables y Patrones de Diseño","type":"document","url":"https://es.scribd.com/presentation/424901680/Patrones-de-Diseno-Java","views":"177"},"425193471":{"author":"'Matias Sorrentino","author_url":"https://www.scribd.com/user/241735895/Matias-Sorrentino","categories":[],"description":"Jorge Sánchez Asenjo","id":425193471,"is_series":false,"in_library":false,"library_xhr_pending":false,"page_count":48,"retina_thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/425193471/298x396/faa9f48e2f/1750699842?v=1","run_time":0,"short_title":"Guía de HTML5 y CSS3 para Principiantes","static_rating":{"rating":1,"count":1,"up_count":0},"thumb_url":"https://imgv2-2-f.scribdassets.com/img/document/425193471/149x198/f4d5474f17/1750699842?v=1","title":"Guía de HTML5 y CSS3 para Principiantes","type":"document","url":"https://es.scribd.com/document/425193471/Desarrollo-Web-HTML5-CSS3-y-XML","views":"640"},"433941959":{"author":"Hijo Del Viento","author_url":"https://www.scribd.com/user/65922787/Hijo-Del-Viento","categories":[],"description":"Admnistracion de Bases de Datos","id":433941959,"is_series":false,"in_library":false,"library_xhr_pending":false,"page_count":9,"retina_thumb_url":"https://imgv2-2-f.scribdassets.com/img/document/433941959/298x396/2c80016d7d/1573170058?v=1","run_time":0,"short_title":"Administración de Bases de Datos","static_rating":{"rating":0,"count":0,"up_count":0},"thumb_url":"https://imgv2-2-f.scribdassets.com/img/document/433941959/149x198/122334f10b/1573170058?v=1","title":"Administración de Bases de Datos: Guía Completa","type":"document","url":"https://es.scribd.com/document/433941959/Admnistracion-de-Bases-de-Datos","views":"396"},"434461914":{"author":"Limber Cruz Maita","author_url":"https://www.scribd.com/user/286669935/Limber-Cruz-Maita","categories":[],"description":"MARKETING DIGITAL","id":434461914,"is_series":false,"in_library":false,"library_xhr_pending":false,"page_count":184,"retina_thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/434461914/298x396/91b51ade9d/1717620842?v=1","run_time":0,"short_title":"Estrategias y Claves para El Marketing Digital","static_rating":{"rating":4,"count":4,"up_count":3},"thumb_url":"https://imgv2-2-f.scribdassets.com/img/document/434461914/149x198/50ae9ca92a/1717620842?v=1","title":"Estrategias y Claves para El Marketing Digital","type":"document","url":"https://es.scribd.com/document/434461914/Estrategias-y-Claves-Para-El-Marketing-Digital","views":"1,3K"},"454235446":{"author":"Raul González","author_url":"https://www.scribd.com/user/342989143/Raul-Gonzalez","categories":[],"description":"Guía de personas más pudientes del Uruguay","id":454235446,"is_series":false,"in_library":false,"library_xhr_pending":false,"page_count":15,"retina_thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/454235446/298x396/aa38b50d8d/1585693182?v=1","run_time":0,"short_title":"Los 120 Mas Ricos de Uruguay","static_rating":{"rating":0,"count":0,"up_count":0},"thumb_url":"https://imgv2-2-f.scribdassets.com/img/document/454235446/149x198/40e4475ca3/1585693182?v=1","title":"Los 120 Mas Ricos de Uruguay","type":"document","url":"https://es.scribd.com/document/454235446/Los-120-Mas-Ricos-de-Uruguay","views":"4,5K"},"464646338":{"author":"Veronica July Bonifacio Condori","author_url":"https://www.scribd.com/user/514488407/Veronica-July-Bonifacio-Condori","categories":[],"description":null,"id":464646338,"is_series":false,"in_library":false,"library_xhr_pending":false,"page_count":322,"retina_thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/464646338/298x396/d31bdf5ca4/1716139513?v=1","run_time":0,"short_title":"Windows 10 - Guia Completa PDF","static_rating":{"rating":0,"count":0,"up_count":0},"thumb_url":"https://imgv2-2-f.scribdassets.com/img/document/464646338/149x198/7e5c576d6e/1716139513?v=1","title":"Windows 10 - Guia Completa PDF","type":"document","url":"https://es.scribd.com/document/464646338/Windows-10-Guia-Completa-pdf","views":"435"},"471147563":{"author":"ozrriel","author_url":"https://www.scribd.com/user/378773604/ozrriel","categories":[],"description":null,"id":471147563,"is_series":false,"in_library":false,"library_xhr_pending":false,"page_count":184,"retina_thumb_url":"https://imgv2-2-f.scribdassets.com/img/document/471147563/298x396/cb54f391b4/1716124374?v=1","run_time":0,"short_title":"Estrategias y Claves para El Marketing Digital, USERS - Lorena Hure PDF","static_rating":{"rating":0,"count":0,"up_count":0},"thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/471147563/149x198/eba47f5655/1716124374?v=1","title":"Estrategias y Claves para El Marketing Digital, USERS - Lorena Hure PDF","type":"document","url":"https://es.scribd.com/document/471147563/Estrategias-y-Claves-Para-el-Marketing-Digital-USERS-Lorena-Hure-pdf","views":"573"},"473488935":{"author":"Carlos .Lopez","author_url":"https://www.scribd.com/user/351329564/Carlos-Lopez","categories":[],"description":"","id":473488935,"is_series":false,"in_library":false,"library_xhr_pending":false,"page_count":790,"retina_thumb_url":"https://imgv2-2-f.scribdassets.com/img/document/473488935/298x396/5b3099a2e8/1712885924?v=1","run_time":0,"short_title":"Aprender PHP, MySQL y JavaScript Con Jquery, CSS y HTML5","static_rating":{"rating":4.5,"count":6,"up_count":5},"thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/473488935/149x198/a4724ac15e/1712885924?v=1","title":"Aprender PHP, MySQL y JavaScript Con Jquery, CSS y HTML5","type":"document","url":"https://es.scribd.com/document/473488935/Aprender-PHP-MySQL-y-JavaScript-con-jQuery-CSS-y-HTML5","views":"1,2K"},"486306622":{"author":"Angelita Bustillos","author_url":"https://www.scribd.com/user/70315948/Angelita-Bustillos","categories":[],"description":"","id":486306622,"is_series":false,"in_library":false,"library_xhr_pending":false,"page_count":13,"retina_thumb_url":"https://imgv2-2-f.scribdassets.com/img/document/486306622/298x396/d67fdbe3cc/1725870181?v=1","run_time":0,"short_title":"Principios Esenciales del Diseño Web","static_rating":{"rating":5,"count":1,"up_count":1},"thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/486306622/149x198/abf404acd3/1725870181?v=1","title":"Principios Esenciales del Diseño Web","type":"document","url":"https://es.scribd.com/presentation/486306622/Principios-de-diseno-web","views":"215"},"492503248":{"author":"Franco","author_url":"https://www.scribd.com/user/519433857/Franco","categories":[],"description":"Reparacion de PC Desde Cero","id":492503248,"is_series":false,"in_library":false,"library_xhr_pending":false,"page_count":195,"retina_thumb_url":"https://imgv2-2-f.scribdassets.com/img/document/492503248/298x396/623aa11536/1685058029?v=1","run_time":0,"short_title":"Reparacion de PC Desde Cero","static_rating":{"rating":5,"count":2,"up_count":2},"thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/492503248/149x198/e435dc4dd4/1685058029?v=1","title":"Reparacion de PC Desde Cero","type":"document","url":"https://es.scribd.com/document/492503248/Reparacion-de-PC-Desde-Cero","views":"1,6K"},"501775300":{"author":"Samotelmago","author_url":"https://www.scribd.com/user/518429591/Samotelmago","categories":[],"description":null,"id":501775300,"is_series":false,"in_library":false,"library_xhr_pending":false,"page_count":17,"retina_thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/501775300/298x396/7a75d04f5e/1617716434?v=1","run_time":0,"short_title":"Fundamentos de Programación Multiplataforma","static_rating":{"rating":0,"count":0,"up_count":0},"thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/501775300/149x198/353642efe2/1617716434?v=1","title":"Fundamentos de Programación Multiplataforma","type":"document","url":"https://es.scribd.com/document/501775300/Programacion-A-Guia-Didactica","views":"277"},"532799874":{"author":"Wes Mena","author_url":"https://www.scribd.com/user/518973012/Wes-Mena","categories":[],"description":null,"id":532799874,"is_series":false,"in_library":false,"library_xhr_pending":false,"page_count":56,"retina_thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/532799874/298x396/3e71044e57/1634335845?v=1","run_time":0,"short_title":"Introducción a Servicios Web y XML","static_rating":{"rating":0,"count":0,"up_count":0},"thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/532799874/149x198/ab9026e4de/1634335845?v=1","title":"Introducción a Servicios Web y XML","type":"document","url":"https://es.scribd.com/presentation/532799874/Servicios-Web","views":"107"},"539180212":{"author":"jesus cuevas","author_url":"https://www.scribd.com/user/372766966/jesus-cuevas","categories":[],"description":null,"id":539180212,"is_series":false,"in_library":false,"library_xhr_pending":false,"page_count":790,"retina_thumb_url":"https://imgv2-2-f.scribdassets.com/img/document/539180212/298x396/06b1953949/1636738540?v=1","run_time":0,"short_title":"Aprender PHP Mysql y Javascript Con Jquery Css y Html5 5epdf 4 PDF Free","static_rating":{"rating":0,"count":0,"up_count":0},"thumb_url":"https://imgv2-2-f.scribdassets.com/img/document/539180212/149x198/2a47d46f85/1636738540?v=1","title":"Aprender PHP Mysql y Javascript Con Jquery Css y Html5 5epdf 4 PDF Free","type":"document","url":"https://es.scribd.com/document/539180212/Pdfcoffee-com-Aprender-Php-Mysql-y-Javascript-Con-Jquery-Css-y-Html5-5epdf-4-PDF-Free","views":"409"},"556640477":{"author":"ABIGAIL Castro","author_url":"https://www.scribd.com/user/573613408/ABIGAIL-Castro","categories":[],"description":null,"id":556640477,"is_series":false,"in_library":false,"library_xhr_pending":false,"page_count":129,"retina_thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/556640477/298x396/b4e3c9e555/1731532136?v=1","run_time":0,"short_title":"Guía de Estudio","static_rating":{"rating":5,"count":2,"up_count":2},"thumb_url":"https://imgv2-2-f.scribdassets.com/img/document/556640477/149x198/bd3507e2f3/1731532136?v=1","title":"Guía de Estudio: Desarrollo Web 4to Año","type":"document","url":"https://es.scribd.com/document/556640477/Guia-de-Estudio-Programamcion-Aplicaciones-Web","views":"295"},"561780456":{"author":"Carlos Ayerbe Gonzalez","author_url":"https://www.scribd.com/user/397423119/Carlos-Ayerbe-Gonzalez","categories":[],"description":"Modulo1-NETCORE (2)","id":561780456,"is_series":false,"in_library":false,"library_xhr_pending":false,"page_count":12,"retina_thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/561780456/298x396/6d359e1d2b/1710583211?v=1","run_time":0,"short_title":"Introducción a .NET Core y Visual Studio","static_rating":{"rating":0,"count":0,"up_count":0},"thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/561780456/149x198/dadced2304/1710583211?v=1","title":"Introducción a .NET Core y Visual Studio","type":"document","url":"https://es.scribd.com/document/561780456/Modulo1-NETCORE-2","views":"96"},"562105552":{"author":"Samuel Campoy Nieves","author_url":"https://www.scribd.com/user/540075637/Samuel-Campoy-Nieves","categories":[],"description":null,"id":562105552,"is_series":false,"in_library":false,"library_xhr_pending":false,"page_count":66,"retina_thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/562105552/298x396/0443f11e66/1716019058?v=1","run_time":0,"short_title":"Acceso A Datos - Garceta-367-432","static_rating":{"rating":0,"count":0,"up_count":0},"thumb_url":"https://imgv2-2-f.scribdassets.com/img/document/562105552/149x198/31f2e6c252/1716019058?v=1","title":"Acceso A Datos - Garceta-367-432","type":"document","url":"https://es.scribd.com/document/562105552/Acceso-a-Datos-Garceta-367-432","views":"440"},"566302917":{"author":"DICXON ANDRES VILLEGAS CASTRO","author_url":"https://www.scribd.com/user/352690706/DICXON-ANDRES-VILLEGAS-CASTRO","categories":[],"description":"TEST 5 TECNOLOGIAS EMERGENTES Y TRANSFORMACIÓN DIGITAL","id":566302917,"is_series":false,"in_library":false,"library_xhr_pending":false,"page_count":1,"retina_thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/566302917/298x396/be260ae02c/1648097252?v=1","run_time":0,"short_title":"Test 5 Tecnologias Emergentes y Transformación Digital","static_rating":{"rating":0,"count":0,"up_count":0},"thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/566302917/149x198/d156685b2c/1648097252?v=1","title":"Test 5 Tecnologias Emergentes y Transformación Digital","type":"document","url":"https://es.scribd.com/document/566302917/Test-5-Tecnologias-Emergentes-y-Transformacion-Digital","views":"41"},"597867822":{"author":"NicProof","author_url":"https://www.scribd.com/user/286377470/NicProof","categories":[],"description":null,"id":597867822,"is_series":false,"in_library":false,"library_xhr_pending":false,"page_count":2,"retina_thumb_url":"https://imgv2-2-f.scribdassets.com/img/document/597867822/298x396/dac3df8c9b/1664628644?v=1","run_time":0,"short_title":"Html5 Cheatsheet Emezeta 01","static_rating":{"rating":0,"count":0,"up_count":0},"thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/597867822/149x198/e3b9e47975/1664628644?v=1","title":"Html5 Cheatsheet Emezeta 01","type":"document","url":"https://es.scribd.com/document/597867822/Html5-Cheatsheet-Emezeta-01","views":"1,0K"},"601916975":{"author":"samuel guevara","author_url":"https://www.scribd.com/user/542490516/samuel-guevara","categories":[],"description":"","id":601916975,"is_series":false,"in_library":false,"library_xhr_pending":false,"page_count":12,"retina_thumb_url":"https://imgv2-2-f.scribdassets.com/img/document/601916975/298x396/f9051422d3/1710579914?v=1","run_time":0,"short_title":"Programar en Java","static_rating":{"rating":0,"count":0,"up_count":0},"thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/601916975/149x198/8314c2eaa5/1710579914?v=1","title":"Programar en Java","type":"document","url":"https://es.scribd.com/document/601916975/programar-en-java","views":"139"},"625471450":{"author":"Andrés López del Río Serrano","author_url":"https://www.scribd.com/user/631667916/Andres-Lopez-del-Rio-Serrano","categories":[],"description":null,"id":625471450,"is_series":false,"in_library":false,"library_xhr_pending":false,"page_count":60,"retina_thumb_url":"https://imgv2-2-f.scribdassets.com/img/document/625471450/298x396/0dac81f975/1676275717?v=1","run_time":0,"short_title":"Tema 4 SOM","static_rating":{"rating":0,"count":0,"up_count":0},"thumb_url":"https://imgv2-2-f.scribdassets.com/img/document/625471450/149x198/8c7786cb87/1676275717?v=1","title":"Tema 4 SOM","type":"document","url":"https://es.scribd.com/document/625471450/Tema-4-SOM-1","views":"363"},"640124549":{"author":"Paul Llanque","author_url":"https://www.scribd.com/user/512179358/Paul-Llanque","categories":[],"description":"","id":640124549,"is_series":false,"in_library":false,"library_xhr_pending":false,"page_count":2,"retina_thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/640124549/298x396/c668114249/1716462685?v=1","run_time":0,"short_title":"PC2 Algoritmos","static_rating":{"rating":0,"count":0,"up_count":0},"thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/640124549/149x198/86480c469f/1716462685?v=1","title":"PC2 Algoritmos","type":"document","url":"https://es.scribd.com/document/640124549/PC2-Algoritmos","views":"76"},"644340534":{"author":"richard","author_url":"https://www.scribd.com/user/374275758/richard","categories":[],"description":"programacion de paginas web","id":644340534,"is_series":false,"in_library":false,"library_xhr_pending":false,"page_count":196,"retina_thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/644340534/298x396/4705183dc4/1683739329?v=1","run_time":0,"short_title":"Diseño Web Con HTML & CSS, USERS - Gustavo Carballeiro","static_rating":{"rating":0,"count":0,"up_count":0},"thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/644340534/149x198/a20bb3c4bd/1683739329?v=1","title":"Diseño Web Con HTML & CSS, USERS - Gustavo Carballeiro","type":"document","url":"https://es.scribd.com/document/644340534/Diseno-Web-Con-HTML-CSS-USERS-Gustavo-Carballeiro","views":"422"},"651446178":{"author":"Juandiego Becerra Echeverria","author_url":"https://www.scribd.com/user/425126932/Juandiego-Becerra-Echeverria","categories":[],"description":null,"id":651446178,"is_series":false,"in_library":false,"library_xhr_pending":false,"page_count":322,"retina_thumb_url":"https://imgv2-2-f.scribdassets.com/img/document/651446178/298x396/fe3686665a/1716439131?v=1","run_time":0,"short_title":"Users Windows 10 Avanzado","static_rating":{"rating":0,"count":0,"up_count":0},"thumb_url":"https://imgv2-2-f.scribdassets.com/img/document/651446178/149x198/455e790577/1716439131?v=1","title":"Users Windows 10 Avanzado","type":"document","url":"https://es.scribd.com/document/651446178/Scribd-vpdfs-com-Users-Windows-10-Avanzado","views":"475"},"651720149":{"author":"XIOMARA MORENA ALVARADO VEGAS","author_url":"https://www.scribd.com/user/651657471/XIOMARA-MORENA-ALVARADO-VEGAS","categories":[],"description":"","id":651720149,"is_series":false,"in_library":false,"library_xhr_pending":false,"page_count":3,"retina_thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/651720149/298x396/44b5ea59a4/1716025373?v=1","run_time":0,"short_title":"Cuadro Comparativo de Antibióticos en La Terapia Periodontal","static_rating":{"rating":0,"count":0,"up_count":0},"thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/651720149/149x198/290649e853/1716025373?v=1","title":"Cuadro Comparativo de Antibióticos en La Terapia Periodontal","type":"document","url":"https://es.scribd.com/document/651720149/CUADRO-COMPARATIVO-DE-ANTIBIOTICOS-EN-LA-TERAPIA-PERIODONTAL","views":"102"},"677628242":{"author":"José de Jesús Ramírez Hernández","author_url":"https://www.scribd.com/user/556744769/Jose-de-Jesus-Ramirez-Hernandez","categories":[],"description":"","id":677628242,"is_series":false,"in_library":false,"library_xhr_pending":false,"page_count":29,"retina_thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/677628242/298x396/5cdf9ae8ba/1716112990?v=1","run_time":0,"short_title":"Conceptos Basicos de Las Redes Lan","static_rating":{"rating":0,"count":0,"up_count":0},"thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/677628242/149x198/eaeb7dd3a7/1716112990?v=1","title":"Conceptos Basicos de Las Redes Lan","type":"document","url":"https://es.scribd.com/document/677628242/conceptos-basicos-de-las-redes-lan","views":"57"},"681785723":{"author":"Carlos","author_url":"https://www.scribd.com/user/362649955/Carlos","categories":[],"description":"","id":681785723,"is_series":false,"in_library":false,"library_xhr_pending":false,"page_count":2,"retina_thumb_url":"https://imgv2-2-f.scribdassets.com/img/document/681785723/298x396/9c8d373e87/1716447493?v=1","run_time":0,"short_title":"1ro - Inglés - EV1 ATRASADA","static_rating":{"rating":0,"count":0,"up_count":0},"thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/681785723/149x198/30b8b80e01/1716447493?v=1","title":"1ro - Inglés - EV1 ATRASADA","type":"document","url":"https://es.scribd.com/document/681785723/1ro-Ingles-EV1-ATRASADA","views":"33"},"681785752":{"author":"Carlos","author_url":"https://www.scribd.com/user/362649955/Carlos","categories":[],"description":"","id":681785752,"is_series":false,"in_library":false,"library_xhr_pending":false,"page_count":10,"retina_thumb_url":"https://imgv2-2-f.scribdassets.com/img/document/681785752/298x396/4f65e6fe08/1716171172?v=1","run_time":0,"short_title":"1ro - Inglés - 2da Parcial","static_rating":{"rating":0,"count":0,"up_count":0},"thumb_url":"https://imgv2-2-f.scribdassets.com/img/document/681785752/149x198/1f8f932f2f/1716171172?v=1","title":"1ro - Inglés - 2da Parcial","type":"document","url":"https://es.scribd.com/document/681785752/1ro-Ingles-2da-parcial","views":"46"},"681788143":{"author":"Carlos","author_url":"https://www.scribd.com/user/362649955/Carlos","categories":[],"description":"","id":681788143,"is_series":false,"in_library":false,"library_xhr_pending":false,"page_count":2,"retina_thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/681788143/298x396/1da229d166/1716205089?v=1","run_time":0,"short_title":"3ro - Inglés - EV3 Atrasada","static_rating":{"rating":0,"count":0,"up_count":0},"thumb_url":"https://imgv2-2-f.scribdassets.com/img/document/681788143/149x198/93fb5466c8/1716205089?v=1","title":"3ro - Inglés - EV3 Atrasada","type":"document","url":"https://es.scribd.com/document/681788143/3ro-Ingles-EV3-Atrasada","views":"39"},"681788144":{"author":"Carlos","author_url":"https://www.scribd.com/user/362649955/Carlos","categories":[],"description":"","id":681788144,"is_series":false,"in_library":false,"library_xhr_pending":false,"page_count":2,"retina_thumb_url":"https://imgv2-2-f.scribdassets.com/img/document/681788144/298x396/464d83997f/1716607646?v=1","run_time":0,"short_title":"3ro - Inglés - EV1-ATRASADA","static_rating":{"rating":0,"count":0,"up_count":0},"thumb_url":"https://imgv2-2-f.scribdassets.com/img/document/681788144/149x198/b8a4ebeec1/1716607646?v=1","title":"3ro - Inglés - EV1-ATRASADA","type":"document","url":"https://es.scribd.com/document/681788144/3ro-Ingles-EV1-ATRASADA","views":"38"},"681788158":{"author":"Carlos","author_url":"https://www.scribd.com/user/362649955/Carlos","categories":[],"description":"","id":681788158,"is_series":false,"in_library":false,"library_xhr_pending":false,"page_count":10,"retina_thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/681788158/298x396/363e494dfa/1716421207?v=1","run_time":0,"short_title":"3ro - Inglés - Parcial 3","static_rating":{"rating":0,"count":0,"up_count":0},"thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/681788158/149x198/6ea569f94c/1716421207?v=1","title":"3ro - Inglés - Parcial 3","type":"document","url":"https://es.scribd.com/document/681788158/3ro-Ingles-Parcial-3","views":"62"},"681792235":{"author":"Carlos","author_url":"https://www.scribd.com/user/362649955/Carlos","categories":[],"description":"","id":681792235,"is_series":false,"in_library":false,"library_xhr_pending":false,"page_count":2,"retina_thumb_url":"https://imgv2-2-f.scribdassets.com/img/document/681792235/298x396/3daabad4f9/1716039863?v=1","run_time":0,"short_title":"2do - Inglés - EV1 ATRASADA","static_rating":{"rating":0,"count":0,"up_count":0},"thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/681792235/149x198/05cfe27cea/1716039863?v=1","title":"2do - Inglés - EV1 ATRASADA","type":"document","url":"https://es.scribd.com/document/681792235/2do-Ingles-EV1-ATRASADA","views":"40"},"681792251":{"author":"Carlos","author_url":"https://www.scribd.com/user/362649955/Carlos","categories":[],"description":"","id":681792251,"is_series":false,"in_library":false,"library_xhr_pending":false,"page_count":10,"retina_thumb_url":"https://imgv2-2-f.scribdassets.com/img/document/681792251/298x396/3a00143a35/1716578219?v=1","run_time":0,"short_title":"2do - Inglés - 2da Parcial","static_rating":{"rating":0,"count":0,"up_count":0},"thumb_url":"https://imgv2-2-f.scribdassets.com/img/document/681792251/149x198/5bdee5ce07/1716578219?v=1","title":"2do - Inglés - 2da Parcial","type":"document","url":"https://es.scribd.com/document/681792251/2do-Ingles-2da-parcial","views":"45"},"682044537":{"author":"ISABEL GOMEZ","author_url":"https://www.scribd.com/user/580506477/ISABEL-GOMEZ","categories":[],"description":null,"id":682044537,"is_series":false,"in_library":false,"library_xhr_pending":false,"page_count":172,"retina_thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/682044537/298x396/177922e469/1716428510?v=1","run_time":0,"short_title":"2015 Reparación de PC Desde Cero (USERS)","static_rating":{"rating":0,"count":0,"up_count":0},"thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/682044537/149x198/81a8544638/1716428510?v=1","title":"2015 Reparación de PC Desde Cero (USERS)","type":"document","url":"https://es.scribd.com/document/682044537/2015-Reparacion-de-PC-Desde-Cero-USERS","views":"638"},"683917817":{"author":"inmiana","author_url":"https://www.scribd.com/user/261040385/inmiana","categories":[],"description":"Programación DAM","id":683917817,"is_series":false,"in_library":false,"library_xhr_pending":false,"page_count":24,"retina_thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/683917817/298x396/02d3977991/1710540481?v=1","run_time":0,"short_title":"Servicios en Red","static_rating":{"rating":0,"count":0,"up_count":0},"thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/683917817/149x198/fa545b1517/1710540481?v=1","title":"Servicios en Red: Protocolo y Aplicaciones","type":"document","url":"https://es.scribd.com/document/683917817/DAM-M09-T04-Pdf","views":"172"},"693614829":{"author":"f.bermejo000","author_url":"https://www.scribd.com/user/712459935/f-bermejo000","categories":[],"description":null,"id":693614829,"is_series":false,"in_library":false,"library_xhr_pending":false,"page_count":3,"retina_thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/693614829/298x396/3756af4379/1716516455?v=1","run_time":0,"short_title":"Presentacion Direcion","static_rating":{"rating":0,"count":0,"up_count":0},"thumb_url":"https://imgv2-2-f.scribdassets.com/img/document/693614829/149x198/47867ffaa3/1716516455?v=1","title":"Presentacion Direcion","type":"document","url":"https://es.scribd.com/document/693614829/Presentacion-direcion","views":"46"},"711835491":{"author":"Carla Pinao","author_url":"https://www.scribd.com/user/676512686/Carla-Pinao","categories":[],"description":null,"id":711835491,"is_series":false,"in_library":false,"library_xhr_pending":false,"page_count":3,"retina_thumb_url":"https://imgv2-2-f.scribdassets.com/img/document/711835491/298x396/15760e6ac0/1716534725?v=1","run_time":0,"short_title":"PC1 2021.1 2.0","static_rating":{"rating":0,"count":0,"up_count":0},"thumb_url":"https://imgv2-2-f.scribdassets.com/img/document/711835491/149x198/bde26b0ef8/1716534725?v=1","title":"PC1 2021.1 2.0","type":"document","url":"https://es.scribd.com/document/711835491/PC1-2021-1-2-0","views":"108"},"715724741":{"author":"Sebastián Encina","author_url":"https://www.scribd.com/user/11963990/Sebastian-Encina","categories":[],"description":"","id":715724741,"is_series":false,"in_library":false,"library_xhr_pending":false,"page_count":2,"retina_thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/715724741/298x396/f7ff01ee93/1716429760?v=1","run_time":0,"short_title":"Soldadura en Bridas Slip-On ASME B31.3","static_rating":{"rating":0,"count":0,"up_count":0},"thumb_url":"https://imgv2-2-f.scribdassets.com/img/document/715724741/149x198/bac2b811e5/1716429760?v=1","title":"Soldadura en Bridas Slip-On ASME B31.3","type":"document","url":"https://es.scribd.com/document/715724741/Soldadura-en-Bridas-Slip-On-ASME-B31-3","views":"868"},"723977647":{"author":"Alfredo Hernandez","author_url":"https://www.scribd.com/user/663877601/Alfredo-Hernandez","categories":[],"description":"Examen presentado Tecnico en Electronica Nivel 3 Leccion 1","id":723977647,"is_series":false,"in_library":false,"library_xhr_pending":false,"page_count":2,"retina_thumb_url":"https://imgv2-2-f.scribdassets.com/img/document/723977647/298x396/9454c5484f/1713365360?v=1","run_time":0,"short_title":"Tecnico en Electronica Nivel 3 Leccion 1 2024","static_rating":{"rating":0,"count":0,"up_count":0},"thumb_url":"https://imgv2-2-f.scribdassets.com/img/document/723977647/149x198/2248951a31/1713365360?v=1","title":"Tecnico en Electronica Nivel 3 Leccion 1 2024","type":"document","url":"https://es.scribd.com/document/723977647/Tecnico-en-Electronica-Nivel-3-Leccion-1-2024","views":"229"},"749630657":{"author":"nahiavepa","author_url":"https://www.scribd.com/user/765649175/nahiavepa","categories":[],"description":null,"id":749630657,"is_series":false,"in_library":false,"library_xhr_pending":false,"page_count":11,"retina_thumb_url":"https://imgv2-2-f.scribdassets.com/img/document/749630657/298x396/55d819ef5e/1720692107?v=1","run_time":0,"short_title":"Estrategias SEO para Documentos PDF","static_rating":{"rating":0,"count":0,"up_count":0},"thumb_url":"https://imgv2-2-f.scribdassets.com/img/document/749630657/149x198/41d74c70f4/1720692107?v=1","title":"Estrategias SEO para Documentos PDF","type":"document","url":"https://es.scribd.com/document/749630657/UD4-BAC","views":"23"},"757109957":{"author":"cethy","author_url":"https://www.scribd.com/user/8813158/cethy","categories":[],"description":null,"id":757109957,"is_series":false,"in_library":false,"library_xhr_pending":false,"page_count":299,"retina_thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/757109957/298x396/3d1726b582/1723090596?v=1","run_time":0,"short_title":"Guía Completa de Backend y Java","static_rating":{"rating":0,"count":0,"up_count":0},"thumb_url":"https://imgv2-2-f.scribdassets.com/img/document/757109957/149x198/479d33715c/1723090596?v=1","title":"Guía Completa de Backend y Java","type":"document","url":"https://es.scribd.com/document/757109957/Backend","views":"276"},"781732476":{"author":"blackchorimarock","author_url":"https://www.scribd.com/user/797139152/blackchorimarock","categories":[],"description":"Unidad 1842 del IFCD0210","id":781732476,"is_series":false,"in_library":false,"library_xhr_pending":false,"page_count":140,"retina_thumb_url":"https://imgv2-2-f.scribdassets.com/img/document/781732476/298x396/67a5f784aa/1755980485?v=1","run_time":0,"short_title":"Desarrollo y Reutilización de Componentes Software y Multimedia Mediante Lenguajes de Guion - UF1842","static_rating":{"rating":5,"count":1,"up_count":1},"thumb_url":"https://imgv2-2-f.scribdassets.com/img/document/781732476/149x198/91046bdc03/1755980485?v=1","title":"Desarrollo y Reutilización de Componentes Software y Multimedia Mediante Lenguajes de Guion - UF1842","type":"document","url":"https://es.scribd.com/document/781732476/Desarrollo-y-reutilizacion-de-componentes-software-y-multimedia-mediante-lenguajes-de-guion-UF1842","views":"383"},"901750148":{"author":"Huves Nunez","author_url":"https://www.scribd.com/user/466521274/Huves-Nunez","categories":[],"description":null,"id":901750148,"is_series":false,"in_library":false,"library_xhr_pending":false,"page_count":2,"retina_thumb_url":"https://imgv2-2-f.scribdassets.com/img/document/901750148/298x396/af864d2794/1755206004?v=1","run_time":0,"short_title":"Item 214.","static_rating":{"rating":0,"count":0,"up_count":0},"thumb_url":"https://imgv2-1-f.scribdassets.com/img/document/901750148/149x198/a645392655/1755206004?v=1","title":"Item 214.","type":"document","url":"https://es.scribd.com/document/901750148/Item-214","views":"43"}}},"renewalNagProps":null,"signupContext":null,"static":{"config":{"brand":"scribd","auth0":{"domain":"auth.scribd.com","clientId":"gyc7yrfzsvJfiwylseau8cx9uVaoaNSP","audience":"https://api.scribd.com/api/v3/"},"google":{"clientId":"491264573595-hs5hu9ijbfl9g6khnkn2retrfr6lcua7.apps.googleusercontent.com","sessionPath":"/open_id_connect/login"},"thirdPartyTags":{"googleAnalytics":{"account_id":"UA-443684-2","current_user":"false","facebook_user_context":"none"},"includeGoogleTagManager":true,"siftScience":{"user_id":null,"unique_browser_tracking_uuid":"17031e77-70e7-4910-a037-0f97a05fb603","sift_science_js_key":"cbcb9f556a"}}},"routes":{"accountPath":"L2FjY291bnQtc2V0dGluZ3M=\n","accountSettingsPath":"L2FjY291bnQtc2V0dGluZ3M=\n","androidStoreUrl":"aHR0cHM6Ly9wbGF5Lmdvb2dsZS5jb20vc3RvcmUvYXBwcy9kZXRhaWxzP2lk\nPWNvbS5zY3JpYmQuYXBwLnJlYWRlcjAuZG9jcw==\n","appPromoDeepLink":"aHR0cHM6Ly9zY3JpYmQucGFnZS5saW5rLz9hbXY9MTMuMTYmYXBuPWNvbS5z\nY3JpYmQuYXBwLnJlYWRlcjAuZG9jcyZpYmk9Y29tLnNjcmliZC5kb2NzJmlt\ndj0xMy4xNiZpc2k9NjQ0ODgwNzcxNCZsaW5rPWh0dHBzJTNBJTJGJTJGZXMu\nc2NyaWJkLmNvbSUyRmRvY3VtZW50JTJGNDM2MTc4OTUxJTJGMDAxMzEtRGVz\nYXJyb2xsby1XZWItQ29uLUphdmEtRGVzZGUtQ2VybyUzRnJlZmVycmVyJTNE\ndXRtX2NhbXBhaWduJTNEZG9jX3BhZ2UlMjZ1dG1fc291cmNlJTNEZG9jX3Bh\nZ2UlMjZ1dG1fbWVkaXVtJTNEd2ViJnN0PTAwMTMxJTIwRGVzYXJyb2xsbyUy\nMFdlYiUyMENvbiUyMEphdmElMjBEZXNkZSUyMENlcm8mc2k9aHR0cHM6Ly9p\nbWd2Mi0yLWYuc2NyaWJkYXNzZXRzLmNvbS9pbWcvZG9jdW1lbnQvNDM2MTc4\nOTUxL29yaWdpbmFsLzIxNngyODcvN2U3YTNlNzU0Yi8xP3Y9MQ==\n","audiobooksAllCategoriesPath":"L2F1ZGlvYm9va3MvY2F0ZWdvcmllcw==\n","audiobooksPath":"L2F1ZGlvYm9va3M=\n","archivePlansAskAiActionUrl":"aHR0cHM6Ly9lcy5zY3JpYmQuY29tL2FyY2hpdmUvcGxhbnM/ZG9jPTQzNjE3\nODk1MSZtZXRhZGF0YT0lN0IlMjJjb250ZXh0JTIyJTNBJTIyYXJjaGl2ZV92\naWV3X3Jlc3RyaWN0ZWQlMjIlMkMlMjJwYWdlJTIyJTNBJTIycmVhZCUyMiUy\nQyUyMmFjdGlvbiUyMiUzQSUyMmFza19haSUyMiUyQyUyMmxvZ2dlZF9pbiUy\nMiUzQWZhbHNlJTJDJTIycGxhdGZvcm0lMjIlM0ElMjJ3ZWIlMjIlN0Q=\n","archivePlansCopyActionUrl":"aHR0cHM6Ly9lcy5zY3JpYmQuY29tL2FyY2hpdmUvcGxhbnM/ZG9jPTQzNjE3\nODk1MSZtZXRhZGF0YT0lN0IlMjJjb250ZXh0JTIyJTNBJTIyYXJjaGl2ZV92\naWV3X3Jlc3RyaWN0ZWQlMjIlMkMlMjJwYWdlJTIyJTNBJTIycmVhZCUyMiUy\nQyUyMmFjdGlvbiUyMiUzQSUyMmNvcHklMjIlMkMlMjJsb2dnZWRfaW4lMjIl\nM0FmYWxzZSUyQyUyMnBsYXRmb3JtJTIyJTNBJTIyd2ViJTIyJTdE\n","archivePlansDownloadActionUrl":"aHR0cHM6Ly9lcy5zY3JpYmQuY29tL2FyY2hpdmUvcGxhbnM/ZG9jPTQzNjE3\nODk1MSZtZXRhZGF0YT0lN0IlMjJjb250ZXh0JTIyJTNBJTIyYXJjaGl2ZV92\naWV3X3Jlc3RyaWN0ZWQlMjIlMkMlMjJwYWdlJTIyJTNBJTIycmVhZCUyMiUy\nQyUyMmFjdGlvbiUyMiUzQSUyMmRvd25sb2FkJTIyJTJDJTIybG9nZ2VkX2lu\nJTIyJTNBZmFsc2UlMkMlMjJwbGF0Zm9ybSUyMiUzQSUyMndlYiUyMiU3RA==\n","bestsellersPath":"L2Jlc3RzZWxsZXJz\n","booksAllCategoriesPath":"L2Jvb2tzL2NhdGVnb3JpZXM=\n","booksPath":"L2Jvb2tz\n","documentsAllCategoriesPath":"L2RvY3MvY2F0ZWdvcmllcw==\n","documentsPath":"L2RvY3M=\n","facebookUrl":"aHR0cHM6Ly93d3cuZmFjZWJvb2suY29tL1NjcmliZC8=\n","homePath":"aHR0cHM6Ly9lcy5zY3JpYmQuY29tLw==\n","instagramUrl":"aHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9zY3JpYmQv\n","iosStoreUrl":"aHR0cHM6Ly9hcHBzLmFwcGxlLmNvbS91cy9hcHAvNjQ0ODgwNzcxND9tdD04\nJnB0PTI5ODUzNA==\n","languageModalPropsPath":"L2xhbmd1YWdlX21vZGFsX3Byb3Bz\n","logoutPath":"L2xvZ291dA==\n","magazinesAllCategoriesPath":"L21hZ2F6aW5lcy9jYXRlZ29yaWVz\n","magazinesPath":"L21hZ2F6aW5lcw==\n","myUploadsPath":"L3VwbG9hZHM=\n","oauthLoginUrl":"aHR0cHM6Ly9lcy5zY3JpYmQuY29tL29hdXRoL2xvZ2lu\n","oauthSignupUrl":"aHR0cHM6Ly9lcy5zY3JpYmQuY29tL29hdXRoL3NpZ251cA==\n","oauthStartTrialUrl":"aHR0cHM6Ly9lcy5zY3JpYmQuY29tL29hdXRoL3NpZ251cD9kb2NfaWQ9NDM2\nMTc4OTUx\n","originalsRoute":"aHR0cHM6Ly93d3cuZXZlcmFuZC5jb20vb3JpZ2luYWxz\n","paymentFixUrl":null,"pinterestUrl":"aHR0cHM6Ly93d3cucGludGVyZXN0LmNvbS9zY3JpYmQv\n","podcastsAllCategories":"aHR0cHM6Ly9lcy5zY3JpYmQuY29tL3BvZGNhc3RzL2NhdGVnb3JpZXM=\n","podcastsPath":"aHR0cHM6Ly9lcy5zY3JpYmQuY29tL3BvZGNhc3Rz\n","profilePath":"","progressiveProfileModalPropsPath":"L2RvYy1wYWdlL3Byb2dyZXNzaXZlLXByb2ZpbGUtbW9kYWwvNDM2MTc4OTUx\n","progressiveProfileModalDismissPath":"L3Byb2dyZXNzaXZlX3Byb2ZpbGVfbW9kYWwvZGlzbWlzc19tb2RhbA==\n","rate":"aHR0cHM6Ly9lcy5zY3JpYmQuY29tL3JhdGluZ3MuanNvbg==\n","readingHistoryDataPath":"L3lvdXItYWNjb3VudC9yZWFkaW5nX2hpc3RvcnlfZGF0YQ==\n","referralsUrl":"aHR0cHM6Ly9lcy5zY3JpYmQuY29tL3JlZmVycmFscw==\n","rootPath":"Lw==\n","rootUrl":"aHR0cHM6Ly9lcy5zY3JpYmQuY29tLw==\n","savedPath":"L3NhdmVk\n","searchPath":"L3NlYXJjaA==\n","sendAppDownloadUrl":"aHR0cHM6Ly9lcy5zY3JpYmQuY29tL3NlbmRfZG93bmxvYWRfbGluaw==\n","sheetMusicPath":"L3NoZWV0bXVzaWM=\n","statsPath":null,"subscribeUrl":"L2FyY2hpdmUvcG1wX2NoZWNrb3V0P2RvYz00MzYxNzg5NTEmZG9jX2lkPTQz\nNjE3ODk1MSZtZXRhZGF0YT0lN0IlMjJjb250ZXh0JTIyJTNBJTIycG1wJTIy\nJTJDJTIyYWN0aW9uJTIyJTNBJTIyc3RhcnRfdHJpYWwlMjIlMkMlMjJsb2dn\nZWRfaW4lMjIlM0FmYWxzZSUyQyUyMnBsYXRmb3JtJTIyJTNBJTIyd2ViJTIy\nJTJDJTIyYnJvd3Nlcl91dWlkJTIyJTNBJTIyMTcwMzFlNzctNzBlNy00OTEw\nLWEwMzctMGY5N2EwNWZiNjAzJTIyJTdE\n","supportPath":"aHR0cDovL3N1cHBvcnQuc2NyaWJkLmNvbQ==\n","transparencyUrl":"aHR0cHM6Ly9lcy5zY3JpYmQuY29tL3RyYW5zcGFyZW5jeQ==\n","twitterUrl":"aHR0cHM6Ly90d2l0dGVyLmNvbS9zY3JpYmQv\n","unpauseAccountUrl":"aHR0cHM6Ly9lcy5zY3JpYmQuY29tL2FjY291bnQvdW5wYXVzZT9mcm9tPWh0\ndHBzJTNBJTJGJTJGZXMuc2NyaWJkLmNvbSUyRmRvY3VtZW50JTJGNDM2MTc4\nOTUxJTJGMDAxMzEtRGVzYXJyb2xsby1XZWItQ29uLUphdmEtRGVzZGUtQ2Vy\nbw==\n","incentivizedUploadPath":"L3VwbG9hZC1kb2N1bWVudD9hcmNoaXZlX2RvYz00MzYxNzg5NTE=\n","uploadPath":"L3VwbG9hZC1kb2N1bWVudA==\n","webAnalyticsUrl":"aHR0cHM6Ly93YS5zY3JpYmQuY29t\n","whatIsScribdLandingPath":"L3doYXQtaXMtc2NyaWJk\n","whatIsEverandLandingPath":"L3doYXQtaXMtZXZlcmFuZA==\n","footerContentTypeRoutes":{"documents":"L2RvY3M=\n"},"aboutUrl":"aHR0cHM6Ly93d3cuc2NyaWJkLmNvbS9hYm91dA==\n","accessibilityUrl":"aHR0cHM6Ly9zdXBwb3J0LnNjcmliZC5jb20vaGMvZXMvYXJ0aWNsZXMvMjEw\nMTI5NTg2LUFjY2Vzc2liaWxpdHktTm90aWNl\n","adChoicesUrl":"aHR0cHM6Ly9zdXBwb3J0LnNjcmliZC5jb20vaGMvZW4tdXMvYXJ0aWNsZXMv\nMjEwMTI5MzY2\n","blogUrl":"aHR0cHM6Ly9ibG9nLnNjcmliZC5jb20v\n","careersUrl":"aHR0cHM6Ly93d3cuc2NyaWJkLmNvbS9jYXJlZXJz\n","contactUrl":"aHR0cHM6Ly93d3cuc2NyaWJkLmNvbS9jb250YWN0\n","copyrightUrl":"aHR0cHM6Ly9zdXBwb3J0LnNjcmliZC5jb20vaGMvZW4tdXMvc2VjdGlvbnMv\nMjAyMjQ2MDg2\n","everandBlogUrl":"aHR0cHM6Ly93d3cuZXZlcmFuZC5jb20vYmxvZw==\n","everandHostPath":"aHR0cHM6Ly93d3cuZXZlcmFuZC5jb20=\n","faqUrl":"aHR0cDovL3N1cHBvcnQuc2NyaWJkLmNvbS9oYy9lcw==\n","giftUrl":"aHR0cHM6Ly93d3cuc2NyaWJkLmNvbS9naWZ0\n","pressUrl":"aHR0cHM6Ly93d3cuc2NyaWJkLmNvbS9tZWRpYQ==\n","privacyUrl":"aHR0cHM6Ly93d3cuc2NyaWJkLmNvbS9wcml2YWN5\n","privacyRequestFormUrl":"aHR0cHM6Ly9zdXBwb3J0LnNjcmliZC5jb20vaGMvYXJ0aWNsZXMvMzYwMDM4\nMDE2OTMxLVByaXZhY3ktUmlnaHRzLVJlcXVlc3QtRm9ybQ==\n","publishersUrl":"aHR0cHM6Ly93d3cuc2NyaWJkLmNvbS9wdWJsaXNoZXJz\n","purchaseHelpUrl":"aHR0cHM6Ly9zdXBwb3J0LnNjcmliZC5jb20vaGMvZW4tdXMvc2VjdGlvbnMv\nMjAyMjQ2MzA2\n","redeemUrl":"aHR0cHM6Ly93d3cuc2NyaWJkLmNvbS9yZWRlZW0=\n","simpleCancelUrl":"L3lvdXItYWNjb3VudC9jYW5jZWwtbm93\n","termsUrl":"aHR0cHM6Ly9zdXBwb3J0LnNjcmliZC5jb20vaGMvZW4tdXMvYXJ0aWNsZXMv\nMjEwMTI5MzI2LUdlbmVyYWwtVGVybXMtb2YtVXNl\n"}},"toolbar":{"search_path":"L2RvY3VtZW50cy9zZWFyY2g/YXV0aF90b2tlbj1oV0YxanRCVzhMVWtVRXBw\nZDIxYWcxejdGelklM0QmYXV0aGVudGljaXR5X3Rva2VuPXBqVmdnenlyaGgz\nTWRoSTh2YmxpOV9IcTdrVzFuZFFNRHliV2tvY1UzQXhESUk0SVpHZDRUNXlW\nU0tkRVNsSm1QbE9rbHhMWDNNb3NOZjRmR0hqWURnJmV4cGlyZXM9MTc3MDEy\nNzUzMiZ3b3JkRG9jdW1lbnRJZD00MzYxNzg5NTEmd29yZFVwbG9hZElkPTQ0\nODIzMjEzNA==\n","topic_search_path":"L2RvYy1wYWdlL3RvcGljX3NlYXJjaA==\n"},"user":{"browserUuid":"17031e77-70e7-4910-a037-0f97a05fb603","canExtendSubscription":null,"country":null,"currentPlanType":null,"emailHash":null,"hasPublishedDocuments":false,"id":null,"initials":"","isAborted":null,"isAdmin":null,"isBot":true,"isDunning":false,"isEligibleForFreeTrial":true,"isLoggedIn":false,"isMobile":false,"isPaused":false,"isSubscriber":false,"isTrialing":false,"isUnderDunningLock":false,"fastlyCountryCode":null,"name":null,"personaIconRetinaUrl":null,"personaIconUrl":null,"region":null,"showSimpleCancelOption":false,"stripeBillingPauseEnabled":null,"visitorStatus":"non-user"},"wordDocument":{"ads_disabled":false,"archived":true,"author_name":"Ezzio Samillan","copyright_name":"© All Rights Reserved","description":"un regalo","documentHasThumbnails":false,"documentHasOutlines":false,"doc_topics":[],"document_qa":[],"edit_path":null,"embed_modal_props_path":"/doc-page/embed-modal-props/436178951","extensions":["pdf"],"extracted_title":"Desarrollo Web Con Java Desde Cero","flag_document_modal_props_path":"/doc-page/flag-document-modal-props/436178951","formats":[{"extension":"pdf","filesize":"25.6 MB"}],"generatedDescription":null,"hasFreeAccessFromUploader":false,"hasScrambledFonts":false,"id":436178951,"isBlessed":null,"image_url":"https://imgv2-2-f.scribdassets.com/img/document/436178951/149x198/308bf61955/1574339849?v=1","in_library":false,"isDocumentOwner":false,"isEnglish":false,"is_archive":true,"is_credit_restricted":false,"is_downloadable":true,"is_sheet_music":false,"is_view_restricted_archive":true,"isbn":null,"library_xhr_pending":false,"outlineData":[],"page_count":195,"page_dimensions":{"width":1048,"height":1325},"page_orientation":"portrait","publisher_info":{"is_author":false,"name":"Ezzio Samillan","url":"https://es.scribd.com/user/467101109/Ezzio-Samillan"},"relatedKnowledgePageLinks":[],"relatedKnowledgePagesEnabled":false,"reportContentModalPropsPath":"/doc-page/report-content-modal-props/436178951","retina_image_url":"https://imgv2-2-f.scribdassets.com/img/document/436178951/298x396/af5fe12fff/1574339849?v=1","secret_password":null,"short_title":"00131 Desarrollo Web Con Java Desde Cero","showFullDoc":false,"show_archive_paywall":true,"signup_context":null,"title":"00131 Desarrollo Web Con Java Desde Cero","translation":{"original":null,"translations":[]},"type":"view_restricted","url":"https://es.scribd.com/document/436178951/00131-Desarrollo-Web-Con-Java-Desde-Cero","views":"351","wordCount":0,"remainingCopyCredits":0},"X_Request_ID":"a96f3a48801ba6cfd471131164823fb8e2d55b51989296af2f82f6ceacb6f960"}--></script></div><script type="text/javascript" src="/options/exposed_to_client.js"></script><script type="application/javascript">window._translations = JSON.parse("{\"es-419\":{\"translation\":{\");\\n this\":{\"nestingSuffix = iOpts\":{\"nestingSuffix ? regexEscape(iOpts\":{\"nestingSuffix) : iOpts\":{}}}},\"account_settings\":{\"facebook_connect\":{\"facebook\":\"Facebook\"},\"payment_card\":{\"apple_sub\":\"Suscripciones de Apple\",\"card_num\":\"La tarjeta que termina en {{card_number}}\",\"fortumo_bill\":\"Factura móvil (con el servicio de Fortumo)\",\"google_play\":\"Suscripciones de Google Play\",\"gopay\":\"GoPay\",\"link_bank_account\":\"Link {{payment_method}}\",\"link_card\":\"Enlace que termina en {{card_number}}\",\"no_card\":\"No hay ninguna tarjeta registrada\",\"paypal\":\"PayPal: {{email}}\"},\"show\":{\"restart_membership\":\"Reiniciar suscripción\"},\"subscription_card\":{\"plan\":{\"annual\":\"Prima anual\",\"lite\":\"Lite\",\"monthly\":\"Prima mensual\"},\"unlocks_available\":\"{{count}} desbloqueo disponible\",\"unlocks_available_plural\":\"{{count}} desbloqueos disponibles\",\"unlocks_will_expire\":\"Los desbloqueos caducarán el {{date}}\"}},\"ai_assistant\":{\"ask_ai\":{\"cta_button_listen\":\"Escuchar\",\"cta_button_preview\":\"Vista previa\",\"cta_button_read\":\"Leer\",\"cta_button_sample\":\"Muestra\",\"cta_button_show_more\":\"Mostrar más\",\"cta_button_view_titles\":\"Ver títulos\",\"disclaimer_ask_ai_may_make_mistakes\":\"Ask v1.0 puede mostrar información errónea.\",\"error_messages\":\"Lo sentimos, algo salió mal. Vuelve a intentarlo más tarde.\",\"feedback_bad_response\":\"Respuesta incorrecta\",\"feedback_good_response\":\"Respuesta correcta\",\"feedback_header\":\"Cuéntanos más sobre tu calificación\",\"feedback_success_description\":\"Gracias por ayudarnos a mejorar nuestras respuestas.\",\"feedback_success_header\":\"Gracias por tus comentarios\",\"feedback_tags_harmful_offensive\":\"Ofensivo o dañino\",\"feedback_tags_incorrect\":\"Incorrecto o impreciso\",\"feedback_tags_not_helpful\":\"No fue útil\",\"feedback_tags_not_what_meant\":\"No era lo que quería\",\"feedback_tags_other\":\"Otro\",\"feedback_tags_too_long\":\"Tardó demasiado\",\"greetings_subheading\":\"Pídeme recomendaciones de libros o audiolibros, en función de las lecturas que te gustan, tus categorías favoritas o con una trama o ambientación específica.\",\"save_button_remove_from_saved\":\"Eliminar de guardados\",\"save_button_save_for_later\":\"Guardar para más tarde\",\"shared_highlight_can_help\":\"¡Puedo ayudarte!\",\"shared_highlight_looking_for\":\"¿Buscas\",\"shared_highlight_your_next_read\":\"tu próxima lectura?\",\"suggestions_audiobooks_relationship\":\"Estoy buscando buenos audiolibros que me ayuden a mejorar mi relación con mi novia.\",\"suggestions_audiobooks_shoe_dog\":\"Estoy buscando el audiolibro Shoe Dog by Phil Knight.\",\"suggestions_audiobooks_successful_entrepreneurs\":\"Comparte audiolibros inspiradores sobre empresarios exitosos como The Spanx Story\",\"suggestions_books_balance_technology_as_mom\":\"Como mamá de niños de menos de 9 años, necesito un libro sobre cómo alcanzar un equilibrio entre la tecnología y el tiempo de pantalla de los niños.\",\"suggestions_books_big_little_lies\":\"¿Libros de suspenso doméstico similares a Big Little Lies de Liane Moriarty?\",\"suggestions_books_children_books_science\":\"¿Libros infantiles sobre ciencia que sean apropiados para un niño de 6 años?\",\"suggestions_books_climate_change\":\"¿Puedes sugerir los 3 libros principales sobre cambio climático que debería leer?\",\"suggestions_books_cookbooks\":\"¿Libros de cocina populares para dietas saludables?\",\"suggestions_books_creativity_inc\":\"¿Algún libro similar a Creativity Inc de Ed Catmull?\",\"suggestions_books_fiction_books\":\"¿Hay libros de ficción sobre personas con esquizofrenia?\",\"suggestions_books_financial_independence\":\"¿Libros sobre independencia financiera como Pathfinders de JL Collins?\",\"suggestions_books_finding_love_againa\":\"Quiero leer una buena historia sobre encontrar el amor de nuevo después de los contratiempos de la vida.\",\"suggestions_books_glad_my_mom_died\":\"¿Tienen I’m Glad My Mom Died?\",\"suggestions_books_inspire_me_with_books\":\"Quiero inspirarme, ¿qué libros me recomiendan?\",\"suggestions_books_leadership_skills\":\"¿Buenos libros sobre habilidades de liderazgo para mujeres similares a Career Forward de Puma?\",\"suggestions_books_light_funnny_lift_mood\":\"¿Algún libro fácil de llevar y divertido para mejorar mi estado de ánimo?\",\"suggestions_books_make_me_cry_ugly\":\"Busco libros que me harán llorar mucho\",\"suggestions_books_medicine_and_disease\":\"¿Tienes libros sobre medicina y enfermedades similares a Being Mortal de Gawande?\",\"suggestions_books_memoirs_not_business_leaders\":\"¿Buscas buenas autobiografías, pero no sobre líderes de negocios?\",\"suggestions_books_memoirs_successful_athletes\":\"Comparte autobiografías sobre atletas exitosos que inspirarían a los niños jóvenes a esforzarse\",\"suggestions_books_millionaire_next_door\":\"¿Libros como The Millionaire Next Door que sean buenos?\",\"suggestions_books_no_weak_female_characters\":\"No me gustan los libros con personajes femeninos débiles. ¿Pueden sugerir novelas con mujeres fuertes y empoderadas?\",\"suggestions_books_real_estate_investor\":\"Quiero aprender cómo convertirme en inversor inmobiliario: ¿qué libros debería leer?\",\"suggestions_books_self_help_books\":\"Quiero libros de autosuperación no escritos por Dale Carnegie.\",\"suggestions_books_sets_india\":\"¿Puedes recomendar libros ambientados en la India?\",\"suggestions_books_story_at_sea\":\"¿Libros en los que la historia sucede en el mar?\",\"suggestions_books_suggestions_about_cats\":\"Mi hija tiene 12 años y también le gustan los gatos. ¿Alguna sugerencia?\",\"suggestions_books_underdog_sports_teams\":\"¿Estás interesado en libros sobre equipos deportivos perdedores similares a The Boys in the Boat de Brown?\",\"suggestions_books_walter_isaacson\":\"¿Tienes libros de Walter Isaacson?\",\"suggestions_books_written_by_sarah_maas\":\"Muéstrame libros escritos por Sarah Maas\",\"suggestions_deeply_emotional_memoir\":\"Quiero una autobiografía profundamente conmovedora que explore cómo superar la adversidad, ¿alguna idea?\",\"suggestions_fiction_novels_medival_europe\":\"¿Puedes recomendar alguna novela de ciencia ficción ambientada en la Europa medieval?\",\"suggestions_funny_romance_books\":\"Necesito alegrarme, ¿puedes recomendar algunos libros románticos superdivertidos para reírme?\",\"suggestions_good_audiobook_set_rome\":\"Busco un buen audiolibro ambientado en la Roma antigua\",\"suggestions_mystery_novel_female_detective\":\"¿Puedes recomendar una novela de misterio de la década de 1920 con una mujer detective como protagonista?\",\"suggestions_romance_lovers_plot\":\"¿Me dices un libro romántico picante con una trama en la que los enemigos se convierten en amantes?\",\"suggestions_romance_novel_world_war\":\"¿Puedes recomendar una novela romántica ambientada en la Segunda Guerra Mundial?\",\"suggestions_self_improvement_audiobooks\":\"Busco inspiración para dejar de procrastinar. ¿Puedes recomendarme algunos audiolibros de mejora personal sobre este tema?\",\"suggestions_similar_achilles_madeline_miller\":\"Disfruté Song of Achilles de Madeline Miller. ¿Me sugieres otra versión de un mito o una leyenda?\",\"suggestions_similar_author_fantasy_series_george_rr_martin\":\"Recomienda una serie de fantasía similar a A Song of Ice and Fire de George RR Martin.\",\"suggestions_similar_author_psychological_thrillers_gillian_flynn\":\"Me encantan las novelas de misterio psicológico de Gillian Flynn. ¿Qué autores similares debería tener en cuenta?\",\"suggestions_similar_books_chris_voss\":\"Me gustó Never Split the Difference de Chris Voss, ¿me recomiendas libros parecidos?\",\"suggestions_similar_books_crawdads_sing\":\"Me encantó Where the Crawdads Sing de Delia Owens, ¿qué otro debería leer?\",\"suggestions_similar_books_female_main_character\":\"Estoy buscando libros ambientados en Europa con una mujer como protagonista.\",\"suggestions_similar_books_lord_of_rings\":\"Me encantó El Señor de los Anillos. ¿Me puedes recomendar un libro similar?\",\"suggestions_similar_books_many_lives_mama_love\":\"¿Libros similares a The Many Lives of Mama Love?\",\"suggestions_similar_books_marie_kondo\":\"Soy fan de Marie Kondo y de su enfoque a simplificar la vida. ¿Qué libros de autores parecidos me recomendarías?\",\"suggestions_similar_plot_twists\":\"No me gustan los finales previsibles, ¿puedes encontrar algunos libros con buenos giros de la trama para mí?\",\"suggestions_thriller_unexpected_plot_twists\":\"Estoy buscando una novela de suspenso con giros imprevistos en la trama y un ambiente oscuro\",\"suggestions_true_story_book_recommendations\":\"¿Alguna recomendación de libro de historia real?\",\"text_input_ask_follow_up\":\"Pide un seguimiento\",\"text_input_discover_next_read\":\"Descubre tu próxima lectura\",\"text_input_label\":\"Enviar mensaje\",\"thumbs_down_other_header\":\"Cuéntanos más\",\"thumbs_down_submit_button\":\"Enviar comentarios\"},\"ask_ai_modal\":{\"ad_free\":\"Lectura sin anuncios\",\"copy_and_paste\":\"Copia y pega texto e imágenes desde cualquier documento\",\"download_documents\":\"Descarga documentos\",\"free_trial\":\"Consigue esta función con una prueba gratuita\",\"start_free_trial\":\"Empezar prueba gratuita de {{numberOfDays}} días\",\"start_free_trial_unlimited_access_html\":\"Empieza tu prueba gratuita de 30 días para \\u003cstrong\\u003eobtener acceso ilimitado a Ask AI,\\u003c/strong\\u003e además de:\",\"summary\":\"Consultar a la IA te da respuestas instantáneas y te ayuda a resumir los contenidos del documento más rápido\"}},\"bestsellers\":{\"promo\":{\"enjoy_bestselling_titles_when_subscribed\":\"Suscríbete y disfruta los títulos más vendidos\"}},\"books\":{\"epub\":{\"banners\":{\"enjoying_preview_update_payment\":\"El próximo desbloqueo estará disponible después de que actualices la información de pago.\",\"enjoying_preview_update_payment_upgrade\":\"Actualiza la información de pago para cambiar a Plus\"}}},\"browse\":{\"promo\":{\"everand_also_available_on_mobile_devices\":\"Everand también está disponible para sus dispositivos móviles.\"}},\"category\":{\"documents\":\"Documentos de {{category}}\"},\"change_plans_page\":{\"plan_module\":{\"most_popular\":\"Más popular\"}},\"chrome\":{\"flash\":{\"close_notification\":\"Notificación de cierre\"},\"renewal_nag\":{\"click_here_to_become_a_member\":\"Haga clic aquí para hacerse miembro\",\"click_here_to_renew_it\":\"Haga clic aquí para renovarla\",\"click_here_to_resume_it\":\"Haga clic aquí para continuar\",\"click_here_to_update_it\":\"Haga clic aquí para actualizarlo\",\"resume_membership\":\"Continuar membresía\",\"update_payment\":\"Actualizar pago\",\"you_canceled_your_free_trial\":\"Canceló su prueba gratis.\",\"your_credit_card_information_is_invalid_\":\"La información de su tarjeta de crédito no es válida. ¡Actualice y reciba un mes gratis de regalo!\",\"your_membership_is_on_hold\":\"Su suscripción está suspendida debido a un problema con su último pago.\",\"your_membership_is_paused_until_paused_until_date\":\"Su suscripción está pausada hasta el {{paused_until_date}}.\",\"your_paypal_information_is_invalid\":\"Su información de Paypal no es válida.\",\"your_scribd_gift_membership_has_ended\":\"Su obsequio de Scribd ha finalizado.\",\"your_scribd_membership_has_expired\":\"Su suscripción de Scribd ha caducado.\",\"your_scribd_membership_was_canceled\":\"Su suscripción de Scribd se canceló.\"}},\"common\":{\"later\":\"Omitir por ahora\",\"update_payment\":\"Actualizar pago\"},\"content_lengths\":{\"listening_minutes\":\"{{minutes}} min de escucha\",\"reading_minutes\":\"{{minutes}} min de lectura\"},\"content_preview\":{\"available_on\":\"Disponible a partir de {{date}}\",\"flags\":{\"expiring_soon\":\"Dejará de estar disponible pronto\",\"geo_restricted\":\"No disponible\",\"not_available\":\"No disponible\",\"sample\":\"Muestra\",\"throttled\":\"Disponible pronto\"},\"formats\":{\"also_available_list_view\":\"También disponible en \\u003ca href={{url}} class=\'also_available\'\\u003e {{content_type}} \\u003c/a\\u003e\"},\"geo_restricted\":\"No disponible en tu país\",\"reviews\":{\"delete_rating_and_review\":\"¿Eliminar esta calificación y estos comentarios?\",\"delete_warning\":\"Esta acción no se puede deshacer.\",\"rating_and_review_deleted\":\"Calificación y comentarios eliminados\"},\"save\":{\"add\":\"Guardar para después\",\"remove\":\"Eliminar de Elementos guardados\"},\"share\":\"Compartir\",\"social_media_share\":{\"email\":\"Correo electrónico\",\"pinterest\":\"Pinterest\",\"twitter\":\"Twitter\"},\"social_media_share_modal\":{\"linked_copied\":\"Enlace copiado\"},\"unavailable\":\"No disponible actualmente\",\"view_titles_in_series\":\"Ver títulos en serie\"},\"content_types\":{\"article\":\"Artículo\",\"audiobook\":\"Audiolibro\",\"audiobook_series\":\"Serie de audiolibros\",\"audiobooks\":\"Audiolibros\",\"books\":\"Libros\",\"document\":\"Documento\",\"documents\":\"Documentos\",\"ebook\":\"Libro electrónico\",\"ebook_series\":\"Serie de libros electrónicos\",\"ebooks\":\"Ebooks\",\"magazine\":\"Revista\",\"magazines\":\"Revistas\",\"podcast\":\"Podcast\",\"podcast_episode\":\"Episodio de podcast\",\"podcasts\":\"Podcasts\",\"sheet_music\":\"Partituras\",\"song\":\"Canción\",\"topics\":\"Temas\"},\"doc_download_modal\":{\"resume_now_billed_html\":\"Reanuda tu suscripción ahora para descargar {{title}}. Si la reanudas ahora, \\u003cem\\u003ese te cobrará {{price}} de inmediato\\u003c/em\\u003e.\",\"subscription_is_currently_paused\":\"En este momento, se pausó tu suscripción hasta el {{date}}.\"},\"doc_page\":{\"account_creation\":{\"get_instant_access_with_free_account\":\"Obtén acceso al instante a este documento y a millones más con una cuenta gratis.\",\"to_continue_reading_please_sign_in\":\"Para continuar leyendo, inicie sesión\"},\"ad_label\":{\"ad_info\":{\"description\":\"Usamos anuncios para que el contenido siga siendo gratuito y accesible para todos. Puedes quitarlos si te \\u003ca href=\'{{signupUrl}}\'\\u003eregistras\\u003c/a\\u003e para una suscripción de Scribd.\",\"dunning_description\":\"Usamos anuncios para que el contenido siga siendo gratuito y accesible para todos. Para eliminarlos, \\u003ca href=\'{{updateUrl}}\'\\u003eactualiza tu pago\\u003c/a\\u003e.\"}},\"after_download_modal\":{\"explore_and_download\":\"Explora y descarga\"},\"ai_actions\":{\"advanced_document_search\":\"Búsqueda avanzada de documentos\",\"answers_from_doc\":\"Respuestas de este documento\",\"ask_question\":\"Haz una pregunta\",\"define\":\"Definir\",\"define_this_text\":\"Definir los términos de este texto\",\"explain\":\"Explicar\",\"explain_this_text\":\"Explicar este texto\",\"get_ai_abstract\":\"Obtener resumen de la IA\",\"highlights_glance\":\"Ofrece un resumen de lo destacado\",\"key_insights\":\"Información clave\",\"page_num\":\"Página {{pageNum}}\",\"painted_door_modal\":{\"feature_not_ready\":\"Esta función aún no está lista.\",\"we_are_working_hard\":\"Trabajamos sin descanso para introducir herramientas avanzadas de lectura, de resumen y de análisis de documentos para mejorar su experiencia. Esperamos compartirlas pronto con usted.\"},\"rewrite_for_audience\":\"Volver a escribir para la audiencia\",\"summarize\":\"Resumir\",\"summarize_document\":\"Resumir documento\",\"summarize_this_text\":\"Resumir este texto\",\"try_advanced_search\":\"Probar búsqueda avanzada\",\"use_advanced_search\":\"Usar búsqueda avanzada\"},\"ai_enhanced_tag\":{\"ai_enhanced\":\"Mejorado por IA\",\"ai_enhanced_document\":\"Documento mejorado con IA\",\"ai_translated_document\":\"Documento traducido con IA\",\"description\":\"Descripción mejorada con IA\",\"description_tooltip\":\"Aprovechamos la tecnología de la IA y optimizamos la descripción para mejorar la claridad.\",\"title\":\"Título mejorado con IA\",\"title_and_description\":\"Título y descripción mejorados con IA\",\"title_and_description_tooltip\":\"Aprovechamos la tecnología de la IA y optimizamos el título y la descripción para mejorar la claridad.\",\"title_tooltip\":\"Aprovechamos la tecnología de la IA y optimizamos el título para mejorar la claridad.\"},\"annotation_popover\":{\"add_note\":\"Agregar nota\",\"delete_highlight\":\"Eliminar destacado\",\"explore_documents_on\":\"Explorar documentos en \\\"{{query}}\\\"\",\"highlight\":\"Destacar\",\"new_note\":\"Nueva nota\",\"search_for\":\"Buscar \\\"{{query}}\\\"\",\"search_scribd_for\":\"Buscar \\\"{{query}}\\\" en Scribd\",\"share_quote\":\"Compartir cita\"},\"annotations\":{\"annotations\":\"Anotaciones\",\"delete_modal_description\":\"Esto borrará tu nota.\",\"delete_modal_title\":\"¿Borrar nota?\",\"hide_annotations\":\"Ocultar anotaciones\",\"hide_highlights\":\"Ocultar destacados\",\"highlights\":\"Destacados\",\"show_annotations\":\"Mostrar anotaciones\",\"show_highlights\":\"Mostrar destacados\",\"sign_in_to_see_annotations\":\"Inicie sesión para ver las anotaciones\",\"sign_in_to_see_highlights\":\"Inicie sesión para ver lo más destacado\",\"this_document_does_not_have_annotations\":\"Este documento no tiene ninguna anotación aún\",\"this_document_does_not_have_highlights\":\"Este documento no tiene ningún destacado aún\"},\"app_promo_interstitial\":{\"continue_for_free\":\"Continuar de forma gratuita\"},\"blur_promo\":{\"become_member_for_full_access\":\"Conviértete en miembro de Scribd para tener acceso completo.\",\"read_and_download_full_documents\":\"Lee y descarga documentos completos.\",\"skip_ad\":\"Omitir anuncio\",\"subscribe_now\":\"Suscríbase ahora\",\"subscribe_with_a_free_trial\":\"Suscribirse con una prueba gratuita\",\"trial_duration\":{\"start_your_trial\":\"Comienza tu prueba gratuita de {{trialDuration}} días\"},\"unlock_next_pages_after_an_ad\":\"Desbloquea {{count}} página después de un anuncio\",\"unlock_next_pages_after_an_ad_plural\":\"Desbloquea las próximas {{count}} páginas después de un anuncio\",\"unlock_this_document\":\"Desbloquea este documento\",\"unlock_this_document_after_an_ad\":\"Desbloquea este documento después de un anuncio\",\"unlock_this_page_after_an_ad\":\"Desbloquea esta página después de un anuncio\",\"upload_a_doc_to_download_or_sub\":\"Carga un documento para descargarlo o suscríbete para leerlo y descargarlo.\",\"upload_to_download\":\"Cargar para descargar\"},\"description_modal\":{\"description\":\"Descripción\"},\"doc_chat\":{\"summarize_this_doc\":\"Resumir este documento\"},\"doc_chat_additional_feedback\":{\"heading\":\"Proporcionar comentarios adicionales\",\"placeholder\":\"¿Cuál es su opinión sobre la respuesta? ¿Cómo se podría mejorar?\"},\"doc_chat_disclaimer\":\"Esta función utiliza tecnología de OpenAI y puede cometer errores. Revisa la información importante.\",\"doc_chat_down_vote_feedback\":{\"not_factually_correct\":\"No es objetivamente correcto\",\"offensive_unsafe\":\"Ofensivo/inseguro\",\"other\":\"Otro\",\"submit\":\"Enviar comentarios\"},\"doc_chat_error_message\":{\"something_went_wrong\":\"Mm, algo no salió bien. Intenta volver a cargar la página.\"},\"doc_chat_error_messages\":{\"default\":\"Tenemos mucho tráfico. Prueba enviar un mensaje después de esperar un momento.\",\"ingestion_failed\":\"Se produjo un error. Inténtalo de nuevo más tarde.\",\"ingestion_rejected\":\"Este documento no es compatible con Ask AI. Prueba con un documento diferente.\"},\"doc_chat_feedback\":{\"down_vote_question_heading\":\"¿Por qué eligió esta calificación?\",\"thank_you_response\":\"Tus comentarios son valiosos y nos ayudan a mejorar las respuestas de nuestra IA.\",\"thank_you_response_heading\":\"Muchas gracias por los comentarios\"},\"doc_chat_greeting\":{\"header\":\"Obtén respuestas al instante\",\"subheader\":\"Haz cualquier pregunta sobre este documento o elige una de las sugerencias abajo.\"},\"doc_chat_header\":{\"close\":\"Cerrar\",\"open_settings\":\"Abrir configuración\"},\"doc_chat_ingestion\":{\"analyzing_information\":\"Analizando la información\",\"title\":\"Espera un momento; estamos escaneando el documento.\",\"working_on_your_request\":\"Trabajando en tu solicitud\"},\"doc_chat_input\":{\"placeholder\":\"Seleccionar una sugerencia o escribir una pregunta\",\"suggestions\":\"Sugerencias\"},\"doc_chat_messages\":{\"sources\":\"Fuentes\"},\"doc_chat_settings\":{\"clear_history\":\"Borrar historial\",\"faq\":\"Preguntas frecuentes\"},\"doc_chat_usage\":{\"exceed_warning\":\"Has alcanzado tu límite mensual de {{count}} indicaciones. Gracias por involucrarte tan activamente con DocTalk beta. Tu límite de indicaciones se reiniciará el mes próximo.\",\"limit_reminder\":\"Impresionante, has alcanzado {{count}} indicaciones. Como parte de nuestro programa DocTalk beta, te quedan {{left}} indicaciones restantes. Apreciamos tus comentarios para perfeccionar esta función.\"},\"doc_search\":{\"advanced_find\":\"Búsqueda Avanzada\",\"collapse_search_results_drawer\":\"Contraer panel de resultados de búsqueda\",\"error_occurred_try_again\":\"Ocurrió un error con la búsqueda. Vuelve a intentarlo.\",\"expand_search_results_drawer\":\"Expandir panel de resultados de búsqueda\",\"find\":\"Buscar\",\"find_answers_inside_any_document\":\"Encuentre respuestas dentro de cualquier documento.\",\"get_advanced_find\":\"Obtén la Búsqueda Avanzada con una prueba gratuita\",\"go_deeper\":\"Vaya más allá. Explore documentos extensos sin perder el contexto.\",\"no_matches_found\":\"No se pudo encontrar ninguna coincidencia para la búsqueda. Intenta buscar una palabra o frase clave distinta.\",\"page\":\"Página\",\"related_match\":\"Coincidencia relacionada\",\"relevance\":\"Relevancia\",\"save_time\":\"Ahorre tiempo. Vaya directo a la sección más importante.\",\"search_smarter\":\"Busque de forma más inteligente. Obtenga resultados incluso al escribir palabras incompletas o con errores.\",\"try_advanced_find\":\"Prueba la Búsqueda Avanzada\",\"try_free_for_trial_days\":\"Prueba gratis por {{trialDuration}} días\"},\"document_outline\":{\"document_outline\":\"Esquema del documento\",\"document_thumbnails\":\"Miniaturas del documento\",\"outline\":\"Esquema\",\"page_view\":\"Vista de página\"},\"download_as_formats_or_read_online\":\"Descarga como {{formats}} o lee en línea desde Scribd\",\"download_modal\":{\"explore_top_category_documents_next\":\"Explorar los mejores documentos de {{category}} a continuación\",\"no_category_explore_these_top\":\"Explora a continuación los principales documentos relacionados\"},\"download_to_read_ad_free\":\"Descarga para leer sin publicidad\",\"embed_modal\":{\"custom_page\":\"Página personalizada\",\"title\":\"Insertar documento\"},\"fallback_ad\":{\"millions_of_documents_ad_free\":\"Millones de documentos sin anuncios a tu alcance\"},\"fixed_viewport_bottom_components\":{\"check_out_these_free_titles\":\"Echa un vistazo a estos títulos gratuitos\"},\"flash\":{\"rating_not_saved_try_again\":\"No se ha guardado la clasificación, inténtelo de nuevo.\"},\"get_scribd_without_ads\":\"Obtén Scribd sin anuncios.\",\"incentivized_upload\":{\"to_access_this_document_trial_duration\":\"Para acceder a este documento, carga uno de los tuyos o suscribete, los primeros {{trialDuration}} días son gratis. Puedes cancelar en cualquier momento.\",\"to_access_this_document_trial_duration_plural\":\"Para acceder a este documento, carga {{count}} de los tuyos o suscríbete, los primeros {{trialDuration}} días son gratis. Puedes cancelar en cualquier momento.\"},\"key_topics\":{\"ask_ai_query\":\"Mostrarme todas las referencias en este documento a {{keyTopic}}.\",\"keyword_match_results\":\"Coincidencia de palabras clave\",\"more\":\"más\",\"powered_by_ai\":\"Con tecnología de IA\",\"topics_covered\":\"Temas abordados\",\"topics_results\":\"Temas\",\"view_all\":\"Ver todo\"},\"metadata\":{\"description\":{\"copyright_awareness\":\"Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, \\u003ca href={{href}}\\u003ereclámalo aquí\\u003c/a\\u003e.\",\"original_description\":\"Descripción original\"},\"license\":\"Licencia\",\"overview\":\"Resumen\"},\"mobile_metadata\":{\"collapse_full_title\":\"Ocultar el título completo\",\"expand_full_title\":\"Mostrar el título completo\"},\"modals\":{\"mobile_share\":{\"share_document\":\"Compartir el documento\"},\"more_options\":{\"is_this_document_useful\":\"¿Es útil este documento?\"}},\"more_options\":\"Más opciones\",\"mouse_menu\":{\"copy_page_text\":\"Copiar texto de la página\",\"copy_text\":\"Copiar texto\",\"copy_text_unavailable\":\"Copiar texto no disponible\",\"copy_text_unavailable_on_this_page\":\"Copiar texto no está disponible en esta página\"},\"note\":\"Nota\",\"page\":{\"preferred_language_set_to_url_params_language_settings_changed\":\"Idioma preferido establecido en {{url_params_language_settings_changed}}\"},\"page_view\":{\"no_thumbnails_available\":\"No hay miniaturas disponibles.\"},\"ratings\":{\"mark_as_not_useful\":\"Marcar este documento como no útil\",\"mark_as_useful\":\"Marcar este documento como útil\",\"no_ratings\":\"0 calificaciones\",\"no_ratings_yet\":\"Aún no hay calificaciones\",\"num_votes\":\"({{count, locale}} voto)\",\"num_votes_plural\":\"({{count, locale}} votos)\",\"page_count\":\"{{count, locale}} página\",\"page_count_plural\":\"{{count, locale}} páginas\",\"percent_found_document_not_useful\":\"A un {{percentage}}% le pareció que este documento no es útil\",\"percent_found_document_useful\":\"{{percentage}}% encontró este documento útil\",\"press_again_undo\":\"Pulsa de nuevo para deshacer.\",\"sign_up_to_rate_this_title\":\"Regístrate para calificar este título\",\"you_marked_as_useful\":\"Marcaste este documento como útil\"},\"read_this_document_in_other_languages\":\"Lee este documento en otros idiomas\",\"recommender_list\":{\"might_also_like\":\"También podría gustarte\",\"show_more\":\"Mostrar más\"},\"related_documents\":\"Documentos relacionados\",\"report_content_modal\":{\"button_name\":\"Reportar\",\"category_error_flash\":\"Selecciona una categoría para enviar tu denuncia\",\"copyright_awareness\":\"Si usted es el titular de los derechos de autor de este documento, o está autorizado para actuar en su nombre, utilice el \\u003ca href={{reportLink}}\\u003eformulario de notificación DMCA\\u003c/a\\u003e para denunciar infracciones.\",\"copyright_infringement\":\"Infracción de los derechos de autor\",\"cta\":{\"cancel\":\"Cancelar\",\"submit\":\"Enviar\"},\"document_has_been_reported\":\"El documento ha sido reportado.\",\"illegal_content\":\"Contenido ilegal\",\"illegal_content_awareness\":\"Si considera que este documento incluye información ilegal, como abuso sexual infantil, explotación infantil, terrorismo u otra actividad ilícita, \\u003ca href={{ reportLink }}\\u003ecomuníquese con nuestro equipo de Operaciones de Atención al Cliente.\\u003c/a\\u003e\",\"problem_submitting_report\":\"Se produjo un problema al enviar tu reporte. Por favor, inténtalo de nuevo.\",\"report_an_issue\":\"Informar un problema\",\"reports_are_used\":\"Los informes sirven para mejorar nuestros sistemas y no se usan para moderar el contenido.\",\"select_an_option\":\"Selecciona una opción…\",\"sub_type\":{\"academic_dishonesty\":\"Deshonestidad académica\",\"child_privacy\":\"Privacidad infantil\",\"child_sexual_abuse\":\"Abuso sexual infantil\",\"dangerous_products_services\":\"Productos o servicios peligrosos\",\"general_privacy\":\"Privacidad general\",\"inciting_violence_or_hatred\":\"Incitación a la violencia o al odio\",\"minor_exploitation\":\"Explotación de menores\",\"non_violent_offenses\":\"Delitos no violentos\",\"other\":\"Otro\",\"self_harm\":\"Autolesiones\",\"sexual_offenses\":\"Delitos sexuales\",\"sexually_explicit\":\"Sexualmente explícito\",\"shocking_or_disturbing\":\"Impactante o perturbador\",\"spreading_false_information\":\"Difundir información falsa\",\"terrorism\":\"Terrorismo\",\"threatening_behavior\":\"Comportamiento amenazante\",\"violent_offenses\":\"Delitos violentos\"},\"subcategory_error_flash\":\"Selecciona una subcategoría para enviar tu denuncia\",\"title\":\"Denunciar contenido\",\"type\":{\"dangerous_and_derogatory\":\"Peligroso y despectivo\",\"dangerous_and_derogatory_tooltip\":\"Contenido que fomente comportamientos dañinos, amenazantes o que inciten al odio.\",\"deceptive_and_fraudulent\":\"Engañoso y fraudulento\",\"deceptive_and_fraudulent_tooltip\":\"Contenido que intencionalmente engañe, confunda o participe en actividades fraudulentas.\",\"explicit\":\"Explícito\",\"explicit_tooltip\":\"Contenido que sea gráfico, ofensivo o perturbador.\",\"illegal\":\"Ilegal\",\"illegal_tooltip\":\"Contenido que infrinja la ley o promueva actividades ilegales.\",\"low_quality\":\"Baja calidad\",\"low_quality_tooltip\":\"Contenido que no cumple con los estándares mínimos de claridad, relevancia o integridad.\",\"privacy\":\"Privacidad\",\"privacy_tooltip\":\"Contenido que usa indebidamente la información personal.\",\"spam\":\"Spam\",\"spam_tooltip\":\"Contenido no solicitado y repetitivo que interrumpe la experiencia.\"}},\"share\":{\"copy_link\":\"Copiar enlace\",\"link_copied\":\"¡Enlace copiado!\",\"share_on_facebook\":\"Compartir en Facebook\",\"share_on_linkedin\":\"Compartir en LinkedIn\",\"share_via_email\":\"Compartir por mail\",\"unable_to_copy_link\":\"No se pudo copiar el enlace\"},\"share_drawer\":{\"copy_link\":\"Copiar dirección de enlace\"},\"share_quote\":{\"page_number\":\"Página {{page}}\"},\"sharing_buttons\":{\"link_copied_private_document\":\"¡Enlace copiado! \\u003cspan class=\\\"link_copied_private_doc\\\"\\u003eNota: Compartir un enlace público a un documento marcado como privado permitirá que otros lo vean.\\u003c/span\\u003e\",\"not_supported_for_private_documents\":\"Esta opción no es compatible con los documentos privados. Si quiere compartirlos, seleccione Copiar enlace y envíe el enlace a otros.\"},\"this_document_available_in_languages\":\"Este documento está disponible en los siguientes idiomas:\",\"toast\":{\"copying_text_disabled\":\"Copiar texto de este documento está desactivado.\",\"copying_text_success\":\"Texto copiado al portapapeles.\"},\"toolbar\":{\"document_search\":{\"find\":\"Buscar\",\"find_in_document\":\"Buscar en el documento\"},\"download\":\"Descargar\",\"find_in_pdf\":\"Buscar en PDF\",\"visually_hidden_share\":\"Compartir\"},\"translate\":\"Traducir\",\"translate_document\":\"Traduce el documento\",\"url_safety\":{\"learn_more\":\"Obtén más información sobre nuestras iniciativas para garantizar la seguridad del contenido\",\"stay_on_scribd\":\"Permanecer en Scribd\",\"this_link_leads_to_an_external\":\"Este enlace te redirigirá a un sitio externo. No conocemos ni avalamos su contenido y no nos responsabilizamos de su seguridad. Haz clic en el enlace para continuar solo si confías en este sitio.\",\"to_improve_the_safety\":\"A fin de mejorar la seguridad de nuestra comunidad, debes tener una cuenta para poder acceder a los enlaces externos.\",\"youre_leaving_scribd\":\"Estás saliendo de Scribd\"},\"view_original_document_in_language\":\"Ver documento original en {{language}}\"},\"everand\":{\"bestsellers\":{\"promo\":{\"enjoy_bestselling_audiobook_titles_when_subscribed\":\"Suscríbete y disfruta los audiolibros más vendidos\",\"enjoy_bestselling_titles_when_subscribed\":\"Suscríbete para disfrutar de los libros electrónicos más vendidos\"}},\"browse_page\":{\"promo\":{\"books_audiobooks_cancel_anytime\":\"Accede a millones de ebooks y audiolibros por solo {{price}} al mes. Cancela cuando quieras. ¡Empieza tu prueba gratis hoy!\",\"instant_access_and_cancel_anytime\":\"Descubre millones de libros electrónicos, audiolibros y mucho más por solo {{price}} al mes. Puedes cancelar la suscripción cuando quieras.\"}},\"lists\":{\"faq_message_html\":\"Hemos realizado cambios importantes en la experiencia de la lista. Para obtener más información, \\u003ca href={{faqUrl}} target=\\\"_blank\\\"\\u003erevisa las preguntas frecuentes\\u003c/a\\u003e.\"},\"megamenu\":{\"what_is_scribd_btn\":{\"what_is_scribd\":\"¿Qué es Everand?\"}},\"modal\":{\"opt_in\":{\"continue_to_everand\":\"Continuar en Everand\",\"upcoming_releases_curated_lists_to_your_inbox\":\"Entérate de los próximos lanzamientos y descubre versiones originales exclusivas. Además, recibe listas seleccionadas y ofertas especiales directamente en tu bandeja de entrada.\"},\"progressive_profile\":{\"send_me_email_updates\":\"Recibir notificaciones por correo electrónico de Everand\",\"welcome_to_everand\":\"¡Te damos la bienvenida a Everand!\"},\"upsell\":{\"get_the_most_out_of_everand\":\"Aprovecha Everand al máximo\",\"unlock_full_access_discover_millions\":\"Desbloquea el acceso completo a la biblioteca digital más increíble del mundo. Descubre millones de libros electrónicos, audiolibros, revistas y más.\"}},\"shared\":{\"cross_link_message\":\"De Everand\",\"footer\":{\"about_scribd\":\"Acerca de Everand\",\"everand_-_download_on_the_app_store\":\"Everand - Descárgala desde App Store\",\"everand_-_get_it_on_google_play\":\"Everand - Consíguela en Google Play\",\"everand_-_get_it_on_kindle_fire\":\"Everand para Kindle Fire\",\"scan_to_download\":\"Escanear para descargar\"},\"social_buttons\":{\"scribd_on_facebook_aria_label\":\"Everand en Facebook\",\"scribd_on_instagram_aria_label\":\"Everand en Instagram\",\"scribd_on_pinterest_aria_label\":\"Everand en Pinterest\",\"scribd_on_twitter_aria_label\":\"Everand en Twitter\"}}},\"everand_pay_now_modal\":{\"0_unlocks_remain\":\"Quedan 0 desbloqueos en tu prueba\",\"downgrade_cta\":\"Cambiar a Standard\",\"downgrade_plus\":\"Baja a Plus\",\"get_unlocks_today\":\"Obtén {{count}} desbloqueo hoy; se renueva mensualmente\",\"get_unlocks_today_plural\":\"Obtén {{count}} desbloqueos hoy; se renueva mensualmente\",\"plus_trial_desc\":\"Suscríbete ahora para obtener más desbloqueos y continuar disfrutando de nuestros libros electrónicos y audiolibros más vendidos.\",\"standard_trial_desc\":\"Obtén 3 desbloqueos al mes con el plan Plus o continúa con un desbloqueo al mes con el plan Standard.\",\"subheading\":{\"deluxe_version\":\"Suscríbete al plan Deluxe para obtener acceso inmediato a 5 desbloqueos.\",\"plus_version\":\"Obtén 5 desbloqueos por mes con el plan Deluxe, o continúa con 3 desbloqueos por mes en el plan Plus.\",\"switch_deluxe_plus\":\"Cambia a Plus o Deluxe para obtener más desbloqueos o continúa con 1 desbloqueo por mes en el plan Estándar.\"},\"subscribe_deluxe\":\"Suscríbete a Deluxe\",\"subscription_disclaimer_plus_tax_html\":\"Tu plan {{plan}} con {{count}} desbloqueo por mes se renovará automáticamente por {{price}} (más impuestos) al mes, facturado por {{local_entity}}, hasta que canceles. Cancela en cualquier momento en la \\u003ca class=\'account\' href=\'{{account_url}}\' target=\'_blank\'\\u003eConfiguración de la cuenta\\u003c/a\\u003e. Consulta los \\u003ca class=\'terms\' href=\'{{terms_url}}\' target=\'_blank\'\\u003etérminos de uso\\u003c/a\\u003e y la \\u003ca class=\'privacy\' href=\'{{privacy_url}}\' target=\'_blank\'\\u003epolítica de privacidad\\u003c/a\\u003e de Scribd para obtener más información.\",\"subscription_disclaimer_plus_tax_html_plural\":\"Tu plan {{plan}} con {{count}} desbloqueos por mes se renovará automáticamente por {{price}} (más impuestos) al mes, facturado por {{local_entity}}, hasta que canceles. Cancela en cualquier momento en la \\u003ca class=\'account\' href=\'{{account_url}}\' target=\'_blank\'\\u003eConfiguración de la cuenta\\u003c/a\\u003e. Consulta los \\u003ca class=\'terms\' href=\'{{terms_url}}\' target=\'_blank\'\\u003etérminos de uso\\u003c/a\\u003e y la \\u003ca class=\'privacy\' href=\'{{privacy_url}}\' target=\'_blank\'\\u003epolítica de privacidad\\u003c/a\\u003e de Scribd para obtener más información.\",\"title\":\"Empieza tu suscripción para desbloquear el título\",\"unlocks_and_price\":\"{{count}} desbloqueo {{precio}}\",\"unlocks_and_price_plural\":\"{{count}} desbloqueos {{precio}}\",\"upgrade_deluxe\":\"Mejora a Deluxe\",\"upgrade_to_get_unlocks\":\"Cambia de plan para obtener {{unlocks}} desbloqueos hoy; se renueva mensualmente\"},\"everand_unlock_modal\":{\"get_the_best_experience\":\"Obtén la mejor experiencia de Everand en la aplicación. Escanea el código para descargarla.\"},\"explore\":{\"download_app_banner\":{\"everand_is_best_in_the_app\":\"Everand es mejor en la app\"}},\"get_app_modal\":{\"link_sent_email\":\"¡Enlace enviado! Revise su correo electrónico.\"},\"helpers\":{\"document_meta_tags\":{\"scribd_is_the_world_s_largest_social\":\"Scribd es red social de lectura y publicación más importante del mundo.\"}},\"home\":{\"logged_in\":{\"content_quickview\":{\"also_available_as_an_audiobook\":\"También disponible como audiolibro\",\"also_available_as_an_ebook\":\"También disponible como ebook\",\"byline\":{\"narrated_by\":\"narrado por\"},\"close\":\"Cerrar\",\"count_titles\":\"{{count}} título\",\"count_titles_plural\":\"{{count}} títulos\",\"go_to_content_type_version\":\"Ir a la versión {{content_type}}\",\"loading\":\"Cargando...\",\"more_about_this_episode\":\"Más información sobre este episodio\",\"more_about_this_issue\":\"Más sobre este tema\",\"more_about_this_series\":\"Más sobre este serie\",\"more_about_this_summary\":\"Más sobre este resumen\",\"oops_something_went_wrong\":\"¡Ups! Algo salió mal\",\"view_all_articles\":\"Ver todos los artículos\",\"view_all_episodes\":\"Ver todos los episodios\",\"view_the_full_title_details\":\"Ver todos los detalles del título\"}}},\"landing_pages\":{\"feed\":{\"view_more_info\":\"Ver más información\"}},\"megamenu\":{\"documents\":{\"all_documents\":\"Todos los documentos\"},\"hambur_menu\":{\"get_our_free_apps\":\"Obtén nuestras aplicaciones gratuitas\"},\"hamburger_menu\":{\"close_menu\":\"Cerrar Menú\",\"sign_in_to_your_everand_account\":\"Inicia sesión en tu cuenta de Everand\",\"sign_in_to_your_scribd_account\":\"Inicia sesión en tu cuenta de Scribd\",\"welcome\":\"¡Te damos la bienvenida!\"},\"language\":{\"cancel\":\"Cancelar\",\"change_language\":\"Cambiar idioma\"},\"language_links\":{\"learn_more\":\"Más información\"},\"language_picker_dropdown\":{\"language\":\"Idioma\",\"preferred_language\":\"Idioma preferido\"},\"logged_out\":{\"user_menu\":{\"welcome_to_everand\":\"¡Te damos la bienvenida a Everand!\",\"welcome_to_scribd\":\"¡Te damos la bienvenida a Scribd!\"}},\"navigation\":{\"categories\":\"Categorías destacadas\",\"explore_content_type\":\"Explora {{content_type}}\",\"opens_navigation_menu\":\"Abrir el menú de navegación\"},\"search_bar\":{\"clear_search\":\"Borrar búsqueda\",\"close_suggestions\":\"Cerrar sugerencias\",\"no_results_found\":\"No hay resultados de búsqueda.\",\"num_results_are_available\":\"{{num_results}} resultado(s) disponible(s). Usa las teclas de las flechas hacia arriba y abajo para navegar.\",\"recent_searches\":\"Búsquedas recientes\",\"search\":\"Buscar\"},\"top_bar\":{\"upload\":\"Cargar\"},\"upload\":{\"upload_header\":\"Cargar\"},\"user_menu\":{\"document_stats\":\"Estadísticas del documento\",\"document_uploads\":\"Cargas de documentos\",\"faq_and_support\":\"Preguntas frecuentes y ayuda\",\"hi_name\":\"¡Hola, {{name}}!\",\"invite_friends\":\"Invitar a amigos\",\"language\":\"Idioma ({{current_language}})\",\"public_profile\":\"Perfil público\",\"read_for_free\":\"Lee gratis\",\"visually_hidden_user_settings\":\"Configuración de usuario\",\"your_account\":\"Tu cuenta\"},\"what_is_scribd_btn\":{\"what_is_scribd\":\"¿Qué es Scribd?\"}},\"modals\":{\"add_to_list\":{\"save\":\"Guardar en la lista\",\"title\":\"Agregar a la lista\"},\"confirm_delete_review\":{\"title\":\"¿Deseas eliminar tu reseña y calificación?\"},\"confirm_unsave_item\":{\"content\":\"¿Confirmas que quieres eliminar este título de la biblioteca de guardados y de las listas guardadas?\",\"header\":\"Eliminar título\",\"title\":\"¿Quieres eliminar el título de la biblioteca de guardados y de las listas guardadas?\"},\"confirm_unsave_item_in_list\":{\"remove_from_your_lists\":\"¿Eliminar de tus listas?\",\"removing_from_saved\":\"Eliminar de Guardado también borrará el título de tus listas.\",\"removing_this_title_from_saved\":\"Si eliminas este título de \\\"Guardados\\\", también se eliminará de tus listas.\",\"title\":\"Este título también está en una lista.\"},\"create_list\":{\"create_list\":\"Crear una lista\",\"failed_to_create_try_again\":\"No se pudo crear la lista. Vuelve a intentarlo.\",\"input_description\":{\"privacy_type\":\"Nadie excepto tú puede ver esta lista. Se inhabilitará el uso compartido.\"},\"input_label\":{\"name\":\"¿Qué nombre te gustaría ponerle a esta lista?\",\"privacy_type\":\"Hacer que la lista sea privada\"},\"title\":\"Lista nueva\",\"validation_errors\":{\"name\":\"Ingresa un nombre a la lista\"}},\"language_picker\":{\"language_options\":\"Opciones de idioma\",\"select_preferred_language\":\"Selecciona tu idioma preferido\",\"translate_and_tailor\":\"Traduciremos la navegación del sitio y adaptaremos tus recomendaciones personales siempre que sea posible para que coincidan con tu selección de idioma preferido.\",\"translate_to_match\":\"Traduciremos la navegación del sitio para que coincida con tu selección de idioma preferido.\"},\"lockshockroadblock\":{\"problem_with_your_last_payment\":\"Problema con tu último pago\",\"update_your_payment_to_continue\":\"Actualiza tu pago para continuar\",\"we_had_an_issue_with_your_last_payment\":\"Tuvimos un problema con tu último pago. Actualiza tu información de pago para continuar.\",\"your_membership_is_on_hold\":\"Tu membresía está en pausa debido a un problema con tu último pago.\"}},\"onboarding_modal\":{\"cta\":{\"get_started\":\"Comenzar\",\"next\":\"Siguiente\",\"see_whats\":\"Ver novedades\",\"start_reading\":\"¡Comenzar a leer!\"},\"subtitle\":{\"all_unlocks_renew\":\"Cada desbloqueo te da acceso a un título de nuestro catálogo prémium. Los desbloqueos se renuevan mensualmente y los que no se usaron no se acumulan.\",\"lets_go\":\"Repasemos algunas cosas que cambiaron.\",\"look_for_titles\":\"¿Te quedaste sin desbloqueos? ¡No hay problema! Solo busca la etiqueta \\\"ilimitado\\\" para seguir leyendo.\",\"not_sure_if\":\"¿No sabes si quieres desbloquear un libro electrónico o audiolibro prémium? Guárdalo para más adelante u obtén una vista previa para verlo más en detalle.\",\"scan_the_code_to_download\":\"Tus historias favoritas te acompañan dondequiera que vayas, incluso sin conexión. Escanea el código para descargar la aplicación.\",\"weve_already_unlocked\":\"Disfruta de los libros que ya leíste, sin necesidad de desbloquearlos.\",\"your_favorite_stories\":\"Tus historias favoritas te acompañan dondequiera que vayas, incluso sin conexión.\",\"your_world_of\":\"Tu mundo de historias comienza aquí.\"},\"title\":{\"anytime_anywhere\":\"En cualquier momento, en cualquier lugar\",\"no_need_to\":\"No es necesario usar desbloqueos en títulos que ya leíste\",\"out_of_unlocks\":\"Siempre hay más para disfrutar\",\"preview_any\":\"Obtén una vista previa de cualquier título primero\",\"use_your_unlocks\":\"Desbloquea títulos prémium\",\"welcome_everand\":\"¡Bienvenido a Everand!\",\"your_library\":\"Tu biblioteca ahora es más grande\"}},\"page_gate_modal\":{\"check_you_email\":{\"check_your_email\":\"Revisa tu correo electrónico\"},\"check_your_email\":{\"change_email\":\"¿No es el correo electrónico correcto?\",\"didnt_receive\":\"¿No has recibido un correo electrónico? Revisa tu carpeta de correo no deseado o\",\"email_not_verified_verify_to_continue\":\"Correo electrónico no verificado. Verifica tu correo electrónico para continuar.\",\"i_have_verified_my_email\":\"Verifiqué mi correo electrónico\",\"logout_login_url\":\"Usa otra dirección de correo electrónico\",\"send_again\":\"te lo enviamos de nuevo.\",\"to_protect_your_account_html\":\"Para proteger tu cuenta, enviamos un correo electrónico de verificación a \\u003cstrong\\u003e{{email}}\\u003c/strong\\u003e. Haz clic en el enlace de ese correo electrónico para verificar tu identidad. Para obtener más información, visita nuestra sección de \\u003ca href=\\\"{{support_url}}\\\" class=\\\"faq_link\\\" target=\\\"_blank\\\"\\u003epreguntas frecuentes\\u003c/a\\u003e.\",\"verify_email_before_continuing\":\"Verifica tu correo electrónico antes de continuar.\"}},\"pause_nag_banner\":{\"scribd\":{\"subscription_paused\":\"Tu suscripción se pausó hasta el {{date}}. Para descargar documentos y acceder sin estar en línea, reanúdala antes de tiempo visitando\"}},\"pdfs\":{\"doc_search\":{\"page\":\"página\"},\"lightboxes\":{\"download_lightbox\":{\"download_document\":\"Descargar documento\",\"resume_membership\":\"Continuar membresía\",\"resuming\":\"Resuming\"},\"embed_lightbox\":{\"autosize\":\"Autosize\",\"beginning_of_document\":\"Beginning of document\",\"copy_link\":\"Copiar dirección\",\"custom\":\"Personalizar\",\"customization_options_available_below\":\"Opciones de personalización disponibles a continuación\",\"embed_this_in_your_website\":\"Embed this in your website\",\"format\":\"Format\",\"fullscreen\":\"Pantalla completa\",\"generate_a_link\":\"Generar un enlace\",\"height\":\"Altura: \",\"html\":\"HTML\",\"link_options\":\"Opciones de enlace\",\"link_to_the\":\"Enlazar al\",\"options\":\"Options\",\"preview\":\"Vista previa\",\"scroll\":\"Desplazar\",\"size\":\"Size\",\"slideshow\":\"Presentación de diapositivas\",\"start_at_page\":\"Start at page:\",\"style\":\"Style:\",\"sup_sup_the_code_will_be_updated\":\"\\u003csup\\u003e*\\u003c/sup\\u003e The code will be updated based on your changes.\",\"width\":\"Ancho: \",\"wordpress\":\"Wordpress\"},\"print_lightbox\":{\"cancel\":\"Cancelar\",\"download_and_print\":\"Descargar e imprimir\",\"in_order_to_print_this_document_\":\"Para poder imprimir éste documento en Scribd, primero tiene que descargarlo.\",\"print_document\":\"Imprimir Documento\"}},\"redesign_elements\":{\"actions\":{\"embed\":\"Insertar\",\"print\":\"Imprimir\",\"share\":\"Compartir\"},\"metadata_section\":{\"full_description\":\"Descripción completa\",\"related_titles\":\"Títulos relacionados\"}},\"show\":{\"sign_in_to_flag_this_title\":\"Sign in to flag this title\"},\"sidebar\":{\"available_formats\":\"Formatos disponibles\",\"copyright_no_colon\":\"Derechos de autor\",\"isbn_no_colon\":\"ISBN\",\"uploaded_by\":\"Cargado por\",\"written_by\":\"Escrito por\"},\"toolbar\":{\"exit_fullscreen\":\"Salir de pantalla completa\",\"fullscreen\":\"pantalla completa\",\"showing_strong_1_strong_result_for_query\":\"Mostrando \\u003cstrong\\u003e1\\u003c/strong\\u003e resultado para\",\"showing_strong_num_results_strong_results_for_query\":\"Mostrando \\u003cstrong\\u003e{{num_results}}\\u003c/strong\\u003e resultados para\",\"you_are_on_page_props_current_page\":\"Está en la página {{props_current_page}}\",\"zoom_in\":\"Acercar\",\"zoom_out\":\"Alejarse\"},\"upvote\":{\"not_useful\":\"No útil\",\"this_document_is\":\"Este documento es...\",\"useful\":\"Útil\"}},\"plan_selection_page\":{\"plan_card\":{\"a_selection\":\"Más de 200 000 libros electrónicos y audiolibros, incluida una selección de nuestros títulos más populares\",\"billed_monthly\":\"Se factura mensualmente después del período de prueba.\",\"docs_presentations\":\"Más de 195 millones de documentos y presentaciones en Scribd y Slideshare sin publicidad\",\"magazines_etc\":\"Revistas, pódcasts y partituras\",\"plus\":\"Plus:\",\"subscribe_plus\":\"Suscríbete a Plus\",\"subscribe_standard\":\"Suscríbete a Standard\",\"titles_per_month\":\"{{titles}} títulos al mes de nuestro catálogo Plus que incluye una mayor cantidad de lanzamientos recientes y títulos más vendidos\",\"unlimited\":\"Acceso ilimitado a:\"}},\"plans\":{\"unlock_dropdown\":{\"unlocks\":\"{{count}} desbloqueo\",\"unlocks_plural\":\"{{count}} desbloqueos\",\"unlocks_renew\":\"Los desbloqueos se renuevan el {{refresh_date}}\",\"unlocks_renew_after_payment_information\":\"Los desbloqueos se renuevan después de que la información de pago se actualiza.\",\"view_unlock_history\":\"Ver historial de desbloqueo\"},\"unlock_modal\":{\"after_unlocking_this_title\":\"Después de desbloquear este título, te quedará {{count}} desbloqueo hasta el {{refresh_date}}.\",\"after_unlocking_this_title_plural\":\"Después de desbloquear este título, te quedarán {{count}} desbloqueos hasta el {{refresh_date}}.\",\"unlock_this_title\":\"Desbloquea este título\",\"you_have_unlocks_available\":\"Te queda {{count}} desbloqueo disponible.\",\"you_have_unlocks_available_plural\":\"Te quedan {{count}} desbloqueos disponibles.\"}},\"privacy_policy_modal\":{\"accept\":\"Aceptar y continuar\",\"details_below\":\"Puedes leer los detalles a continuación. Al aceptar, confirma que estás de acuerdo con la política de privacidad actualizada.\",\"thank_you\":\"¡Gracias!\",\"title\":\"Actualizamos nuestra política de privacidad.\",\"try_again\":\"Ocurrió un problema. Inténtalo de nuevo.\",\"updated_privacy_policy\":\"Actualizamos nuestra política de privacidad para poder cumplir con las normas de privacidad mundiales variables y darte a conocer las formas limitadas en las que usamos tu información.\",\"view_policy\":\"Ver política de privacidad actualizada\"},\"receipt\":{\"download\":{\"download_iframe\":\"Descargar iframe\",\"downloading\":\"Descargando\"}},\"recs\":{\"overflow_menu\":{\"congrats_marked_as_read\":\"¡Felicitaciones! Este título está marcado como «Terminado».\",\"dont_show_again\":\"No mostrar de nuevo\",\"mark_as_finished\":\"Marcar como «Terminado»\",\"mark_as_unfinished\":\"Marcar como «No terminado»\",\"removed_from_your_suggestions\":\"Se eliminó de tus sugerencias.\",\"suggest_more_like_this\":\"Sugerir más como este\",\"title_marked_as_unfinished\":\"Este título está marcado como «Sin terminar».\",\"undo_suggest_more\":\"Deshacer sugerir más como esto\",\"we_wont_suggest_more_like_this\":\"¡Entendido! No volveremos a sugerir contenido similar.\",\"we_wont_suggest_this_again\":\"Entendido. No volveremos a sugerir esto.\",\"well_suggest_more_like_this\":\"¡Estupendo! Te sugeriremos más como este.\"}},\"saved\":{\"add_to_list_modal\":{\"failed_to_add_document_to_collection\":\"No se pudo agregar el documento a la colección\",\"failed_to_load_try_again\":\"No se pudo cargar. Intente nuevamente.\"},\"all_lists_modal\":{\"lists\":\"Listas\",\"title_count\":\"1 título\",\"title_count_plural\":\"{{count}} títulos\"},\"delete_a_list_modal\":{\"cancel\":\"Cancelar\",\"delete\":\"Eliminar\",\"delete_collection_name_from_lists\":\"¿Eliminar {{collectionName}} de las listas?\",\"delete_list\":\"¿Eliminar la lista?\",\"do_not_ask_me_again\":\"No volver a preguntar\",\"failed_to_delete_list\":\"Error al eliminar la lista\",\"please_note_this_will_not_delete\":\"Atención: esto no eliminará los títulos que estén en la sección de \\\"Guardados\\\".\",\"successfully_deleted_list\":\"Lista eliminada correctamente\"},\"list_item_controls\":{\"create_list\":\"Crear una lista\"},\"list_modal\":{\"organize_your_saved_titles\":\"Organiza tus títulos guardados. Añade títulos a tu lista personalizada.\"},\"saved_item_action\":{\"added_to_collection\":\"Agregado a {{collection}}\"}},\"scribd\":{\"doc_page\":{\"explore_knowledge_pages\":\"Explora las páginas sobre conocimientos en las que puedes usar la IA para agregar los documentos de Scribd más pertinentes, destacando así las fuentes con mayor autoridad y actualización.\",\"learn_more\":\"Más información\",\"related_knowledge_pages\":\"Páginas sobre conocimientos relacionadas\"},\"knowledge\":{\"knowledge_pages\":\"Páginas sobre conocimientos\"},\"logged_out_homepage\":{\"welcome_to_scribd\":{\"welcome_to_scribd\":\"Te damos la bienvenida a Scribd\"}},\"modal\":{\"opt_in\":{\"continue_to_scribd\":\"Continuar en Scribd\",\"special_offers_new_content_to_your_inbox\":\"Descubre ofertas especiales, contenido nuevo y recomendaciones de nuestros productos prémium que te enviaremos directamente a tu bandeja de entrada.\"},\"progressive_profile\":{\"explore_documents\":\"Explore [más de {{documentsCount}} millones] de documentos sobre cualquier tema y especialidad, compartidos por una comunidad global de pensadores.\",\"get_ad_free_access\":\"Obtenga acceso sin anuncios y descargue cualquier documento que desee sobre cualquier tema y especialidad con una prueba gratuita de 30 días.\",\"join_our_mailing_list\":\"Únase a nuestra lista de correo para recibir recomendaciones personalizadas e información sobre nuevos productos\",\"send_me_email_updates\":\"Recibir notificaciones por correo electrónico de Scribd\",\"welcome_to_scribd\":\"¡Te damos la bienvenida a Scribd!\"},\"upsell\":{\"get_the_most_out_of_scribd\":\"Aprovecha Scribd al máximo\",\"unlock_full_access_download_documents\":\"Desbloquea el acceso completo a la biblioteca digital más increíble del mundo. Descarga documentos y léelos sin conexión en la aplicación.\"}},\"navigation_category\":{\"academic\":\"Académico\",\"culture\":\"Cultura\",\"hobbies_and_crafts\":\"Pasatiempos y Manualidades\",\"personal_growth\":\"Crecimiento personal\",\"professional\":\"Profesional\"},\"shared\":{\"cross_link_message\":\"De Scribd\"}},\"search\":{\"filters\":{\"filters\":\"Filtros\"},\"list_view\":{\"on_date\":\"en {{date}}\",\"songbook_title\":\"Del cancionero\"},\"pagination\":{\"next\":\"siguiente\",\"previous\":\"anterior\"},\"results\":{\"reading_list\":\"Lista de lecturas\",\"top_result\":\"Resultado principal\"},\"similar\":{\"find_similar\":\"Encontrar similar\"}},\"shared\":{\"account_creation\":{\"add_note_sign_in\":\"Inicia sesión para agregar una nota\",\"add_note_sign_up\":\"Regístrate para agregar una nota\",\"already_have_an_account\":\"¿Ya tiene una cuenta?\",\"annotate_document_sign_in\":\"Por favor, inicia sesión para hacer anotaciones en este documento\",\"annotate_document_sign_up\":\"Regístrate para hacer anotaciones en este documento\",\"annotate_sign_in\":\"Inicia sesión para hacer anotaciones\",\"back_to_sign_in\":\"Volver al inicio de sesión\",\"continue_reading_sign_in\":\"Inicia sesión para continuar leyendo\",\"continue_reading_sign_up\":\"Regístrate para continuar leyendo\",\"create_bookmark_sign_in\":\"Para crear un favorito, inicia sesión\",\"create_bookmark_sign_up\":\"Regístrate para marcar favoritos\",\"creating_your_account\":\"Creando tu cuenta...\",\"disclaimer\":\"Al registrarse en Scribd, acepta nuestros \\u003ca href=\\\"{{terms_href}}\\\" target=\\\"_blank\\\" tabIndex=\\\"0\\\"\\u003eTérminos del Servicio {{opens_in_new_window}}\\u003c/a\\u003e y nuestra \\u003ca href=\\\"{{privacy_href}}\\\" target=\\\"_blank\\\" tabIndex=\\\"0\\\"\\u003ePolítica de privacidad {{opens_in_new_window}}\\u003c/a\\u003e\",\"download_document_sign_in\":\"Inicia sesión para descargar este documento\",\"download_document_sign_up\":\"Regístrate para descargar este documento\",\"errors\":{\"email_invalid\":\"Esta dirección de correo electrónico no es válida o está bloqueada. Ingresa otra.\",\"email_registered\":\"Este correo electrónico ya está registrado con Scribd. Ingrese su contraseña para iniciar sesión.\",\"email_taken\":\"Este correo electrónico ya está en uso, intente de nuevo.\",\"invalid_character_in_name_please_remove\":\"Carácter no válido en el nombre. Quite los caracteres especiales\",\"no_valid_email_modal_desc\":\"Tu dirección de correo electrónico no aparece o no es válida. Para mantener la seguridad de tu cuenta, proporciona una dirección de correo electrónico válida.\",\"no_valid_email_modal_title\":\"Actualiza tu correo electrónico\",\"password_10_chars\":\"Ingresa una contraseña que contenga al menos 10 caracteres\",\"please_enter_a_name\":\"Introduzca un nombre\",\"please_enter_a_valid_email\":\"Introduzca un correo electrónico válido\",\"that_doesn_t_appear_to_be_a\":\"Esa no parece ser una dirección de correo electrónico válida. Intenta nuevamente.\"},\"facebook\":{\"error\":\"Lo lamentamos. No podemos conectarlo con Facebook esta vez.\",\"sign_in\":\"Iniciar sesión en Facebook\",\"sign_up\":\"Registrarte con Facebook\"},\"fail\":\"No se cumplen los requisitos.\",\"flag_document_sign_in\":\"Inicia sesión para marcar este documento\",\"flag_document_sign_up\":\"Regístrate para marcar este documento\",\"forgot\":{\"enter_email\":\"Introduzca su correo electrónico y le enviaremos un correo electrónico con un enlace para restablecer su contraseña\",\"weve_sent_email_html\":\"Hemos enviado un correo electrónico a \\u003cstrong\\u003e{{escape_validated_email}} \\u003c/strong\\u003e con instrucciones para restablecer su contraseña. Si no aparece pronto, revise su carpeta de spam y luego lea esto \\u003ca href=\\\"https://support.scribd.com/hc/articles/210134406-What-do-I-do-if-I-ve-lost-or-forgotten-my-password-\\\"\\u003e Artículo del Centro de ayuda \\u003c/a\\u003e\"},\"forgot_password\":\"¿Olvidó su contraseña?\",\"give_gift_sign_in\":\"Para dar este obsequio, inicia sesión\",\"give_gift_sign_up\":\"Regístrate para dar este obsequio\",\"google\":{\"error\":\"No se pudo iniciar sesión en Google\"},\"highlight_document_sign_in\":\"Inicia sesión para destacar este documento\",\"highlight_document_sign_up\":\"Regístrate para destacar este documento\",\"join_today_to_start_reading\":\"Suscríbete hoy mismo para empezar a leer\",\"logging_you_in\":\"Iniciando sesión...\",\"not_you\":\"¿No es usted?\",\"now_bringing_you_back\":\"Ahora lo llevamos de regreso a...\",\"pass\":\"Aprobar.\",\"password_must_be_at_least_ten_characters\":\"Debe tener al menos 10 caracteres\",\"password_not_been_breached\":\"La contraseña no tuvo una falla de seguridad\",\"password_strength\":\"Seguridad de la contraseña\",\"password_strength_colon\":\"Seguridad de la contraseña: \",\"password_strength_good\":\"Buena\",\"password_strength_moderate\":\"Moderada\",\"password_strength_strong\":\"Fuerte\",\"password_strength_weak\":\"Débil\",\"people_browsing_scribd_html\":\"\\u003cspan\\u003e{{count, locale}} persona\\u003c/span\\u003e usando Scribd en este momento\",\"people_browsing_scribd_html_plural\":\"\\u003cspan\\u003e{{count, locale}} personas\\u003c/span\\u003e buscando en Scribd ahora\",\"rate_document_sign_in\":\"Inicia sesión para calificar este documento\",\"rate_document_sign_up\":\"Regístrate para calificar este documento\",\"recaptcha_disclaimer\":\"Este sitio está protegido por reCAPTCHA y la \\u003ca href=\\\"{{privacy_href}}\\\" target=\\\"_blank\\\"\\u003ePolítica de privacidad {{opens_in_new_window}}\\u003c/a\\u003e y los \\u003ca href=\\\"{{policy_href}}\\\" target=\\\"_blank\\\"\\u003eTérminos del Servicio {{opens_in_new_window}}\\u003c/a\\u003e de Google aplican.\",\"redeem_offer_sign_in\":\"Inicia sesión para canjear esta oferta\",\"redeem_offer_sign_up\":\"Regístrate para canjear esta oferta\",\"remember_me\":\"Recordarme\",\"reset_password\":\"Restablecer contraseña\",\"save_document_sign_in\":\"Inicia sesión para guardar este documento\",\"save_document_sign_up\":\"Regístrate para guardar este documento\",\"send_me_updates_from_scribd\":\"Enviarme actualizaciones de Scribd\",\"share_quote_sign_in\":\"Inicia sesión para compartir esta cita\",\"share_quote_sign_up\":\"Regístrate para compartir esta cita\",\"sign_in\":\"Iniciar sesión\",\"sign_in_add_note\":\"Para agregar una nota, inicia sesión\",\"sign_in_bookmark\":\"Para marcar como favorito, inicia sesión\",\"sign_in_create_list\":\"Para crear una lista, inicia sesión\",\"sign_in_download\":\"Para descargar, inicia sesión\",\"sign_in_follow\":\"Para seguir, inicia sesión\",\"sign_in_give_gift\":\"Para dar este regalo, inicia sesión\",\"sign_in_highlight\":\"Para destacar, inicia sesión\",\"sign_in_rate\":\"Para calificar, inicia sesión\",\"sign_in_redeem\":\"Para canjear, inicia sesión\",\"sign_in_review\":\"Para revisar, inicia sesión\",\"sign_in_save\":\"Para guardar, inicia sesión\",\"sign_in_share_quote\":\"Para compartir esta cita, inicia sesión\",\"sign_in_start_months\":\"Para comenzar tu {{count}} mes gratuito, inicia sesión\",\"sign_in_start_months_plural\":\"Para comenzar tus {{count}} meses gratuitos, inicia sesión\",\"sign_in_successful\":\"Inicio de sesión correcto\",\"sign_in_to_scribd\":\"Iniciar sesión en Scribd\",\"sign_in_upload\":\"Para cargar, inicia sesión\",\"sign_in_with_email\":\"Iniciar sesión con correo electrónico\",\"sign_up\":\"Registrarte\",\"sign_up_add_note_this_title\":\"Regístrate para agregar una nota a este título.\",\"sign_up_annotate\":\"Regístrate para hacer anotaciones.\",\"sign_up_continue_reading_this_title\":\"Regístrate para continuar leyendo este título.\",\"sign_up_create_bookmark_this_title\":\"Regístrate para marcar favoritos.\",\"sign_up_create_list_this_title\":\"Regístrate para crear una lista.\",\"sign_up_download_this_title\":\"Regístrate para descargar este título.\",\"sign_up_follow_magazine_this_title\":\"Regístrate para seguir esta revista.\",\"sign_up_free_months_this_title\":\"Regístrate para comenzar tu {{count}} mes gratuito.\",\"sign_up_free_months_this_title_plural\":\"Regístraste para comenzar tus {{count}} meses gratuitos.\",\"sign_up_give_gift_this_title\":\"Regístrate para hacer este regalo.\",\"sign_up_highlight_this_title\":\"Regístrate para destacar.\",\"sign_up_or_sign_in\":\"Regístrate o inicia sesión\",\"sign_up_save\":\"Para guardar, crea una cuenta de Scribd\",\"sign_up_save_this_title\":\"Regístrate para guardar este título.\",\"sign_up_share_quote_this_title\":\"Regístrate para compartir una cita de este título.\",\"sign_up_successful\":\"Te registraste correctamente\",\"sign_up_to_rate_title\":\"Regístrate para calificar este título\",\"sign_up_to_review_title\":\"Regístrate para revisar este título\",\"sign_up_with_email\":\"Registrarte con correo electrónico\",\"signup_to_redeem_offer\":\"Regístrate para canjear la oferta\",\"start_free_months_sign_in\":\"Inicia sesión para comenzar tu {{count}} mes gratis\",\"start_free_months_sign_in_plural\":\"Inicia sesión para comenzar tus {{count}} meses gratis\",\"start_free_months_sign_up\":\"Regístrate para comenzar tu {{count}} mes gratis\",\"start_free_months_sign_up_plural\":\"Regístrate para comenzar tus {{count}} meses gratis\",\"upload_document_sign_in\":\"Inicia sesión para cargar un documento\",\"upload_document_sign_up\":\"Regístrate para cargar un documento\",\"use_another_email_address\":\"Use otra dirección de correo electrónico\"},\"account_settings\":{\"your_account_lowercase\":\"Tu cuenta\"},\"actions\":{\"read_continue\":\"Seguir leyendo\",\"read_preview\":\"Leer la vista previa\"},\"ad_blocker_modal\":{\"i_disabled_my_ad_blocker\":\"Ya desactivé mi bloqueador de publicidad\",\"it_looks_like_youre_using_and_ad_blocker\":\"Parece que está utilizando un bloqueador de publicidad.\",\"show_me_how\":\"Mostrarme cómo\",\"to_listen_to_titels_on_everand_disble_ad_blocker_or_use_mobile_app\":\"Para escuchar títulos en Everand, por favor, desactive su bloqueador de publicidad o use nuestra aplicación móvil.\",\"to_read_titles_on_everand_disable_ad_blocker_or_use_mobile_app\":\"Para leer títulos en Everand, por favor, desactive su bloqueador de publicidad o use nuestra aplicación móvil.\"},\"buttons\":{\"continue\":\"Continuar\"},\"byline\":{\"and\":\"y\",\"by\":\"Por\",\"narrated_by\":\"Narrado por\",\"published_by\":\"Publicado por\",\"written_by\":\"Escrito por\"},\"carousels\":{\"go_to_next_items\":\"Ir a siguientes elementos\",\"go_to_previous_items\":\"Ir a elementos anteriores\",\"skip_carousel\":\"Saltar el carrusel\"},\"checkout\":{\"plan_annual\":\"{{plan}} Anual\",\"plan_monthly\":\"{{plan}} Mensual\"},\"common\":{\"ad\":\"anuncio\",\"add_a_new_payment_method\":\"Agregar un nuevo método de pago\",\"added_by\":\"Agregado por\",\"back\":\"Volver\",\"back_to_top\":\"Volver arriba\",\"cancel\":\"Cancelar\",\"cancel_anytime\":\"Cancela en cualquier momento.\",\"close\":\"Cerrar\",\"close_dialog\":\"Cerrar diálogo\",\"current_of_total\":\"{{current}} de {{total}}\",\"current_plan\":\"Plan actual\",\"delete\":\"Borrar\",\"description\":\"Descripción\",\"do_not_ask_me_again\":\"No preguntarme de nuevo\",\"download\":\"Descargar\",\"download_now\":\"Descargar ahora\",\"edit\":\"Editar\",\"email_address\":\"Correo electrónico\",\"error\":\"Error\",\"errors\":{\"could_not_complete_request\":\"No pudimos completar su solicitud\",\"failed_to_delete_review\":\"La reseña no se eliminó. Inténtalo de nuevo.\",\"failed_to_load\":\"No se pudo cargar. Inténtalo de nuevo.\",\"failed_to_remove_title\":\"No se pudo eliminar el título\",\"failed_to_save_review\":\"Tu reseña no se guardó. Inténtalo de nuevo.\",\"failed_to_save_review_vote\":\"Tu voto no se guardó. Inténtalo de nuevo.\",\"failed_to_save_title\":\"No se pudo guardar el título\",\"please_try_again_later\":\"Intente nuevamente más tarde.\"},\"forms\":{\"at_least_10_characters\":\"(de al menos 10 caracteres)\",\"cancel\":\"Cancelar\",\"email\":\"Correo electrónico\",\"error\":\"Error\",\"invalid\":\"No válido\",\"invalid_email\":\"Introduzca un correo electrónico válido\",\"name\":\"Nombre\",\"optional\":\"(opcional)\",\"password\":\"Contraseña\",\"please_enter_a_password\":\"Ingrese una contraseña\",\"please_enter_an_email\":\"Introduzca un correo electrónico\",\"required\":\"(requerido)\"},\"hide\":\"Ocultar\",\"included_in_your_subscription\":\"Incluido en tu suscripción\",\"info\":\"Información\",\"issue\":\"Edición de publicación\",\"key_insights\":\"Información clave de\",\"learn_more\":\"Descubre más\",\"length\":\"Longitud\",\"library\":{\"add_to_list\":{\"success_message\":\"Agregado a {{collection_name}}\"},\"add_with_title\":\"Guardar {{title}} para después\",\"remove_with_title\":\"Eliminar {{title}} de guardado\",\"sign_up_to_save\":\"Regístrate para guardar este título\"},\"listen_free_for_30_days\":\"Escuchar gratis durante {{trialDuration}} días\",\"listen_now\":\"Escuchar ahora\",\"listen_on_everand\":\"Escúchalo en Everand\",\"load_more\":\"Cargar más\",\"more\":\"Más\",\"more_about_this_title\":\"Más información sobre este título\",\"new_to_scribd\":\"¿Es nuevo en Scribd?\",\"next_page\":\"Página siguiente\",\"notice\":\"Aviso\",\"opens_in_a_new_window\":\"se abre en una nueva ventana\",\"or\":\"O\",\"pause\":\"Pausar\",\"play_preview\":\"Reproducir vista previa\",\"play_sample\":\"Reproducir muestra\",\"preferred_language_set_to_language\":\"Idioma preferido establecido en {{language}}\",\"previous_page\":\"Página anterior\",\"progress\":{\"listened\":\"escuchado\",\"read\":\"leído\"},\"rating\":\"clasificación\",\"ratings\":\"valoraciones\",\"read_count\":\"{{count}} lectura\",\"read_count_plural\":\"{{count}} lecturas\",\"read_less\":\"Lee menos\",\"read_more\":\"Leer más\",\"read_now\":\"Leer ahora\",\"read_on_everand\":\"Léelo en Everand\",\"read_on_scribd\":\"Léelo en Scribd\",\"read_preview\":\"Leer vista previa\",\"recommended\":\"Recomendado\",\"remove\":\"Eliminar\",\"remove_from_saved\":\"Eliminar de Elementos guardados\",\"removed_from_saved\":\"Eliminado de Guardado\",\"removed_from_your_saved_list\":\"Se ha eliminado de tu lista guardada.\",\"restart_subscription\":\"Reiniciar suscripción\",\"resume_subscription\":\"Reanudar suscripción\",\"save\":\"Guardar\",\"save_for_later\":\"Guardar para después\",\"saved\":\"Guardado\",\"selected\":\"(seleccionado)\",\"send_email\":\"Enviar correo electrónico\",\"share_on\":{\"email\":\"Compartir por correo electrónico\",\"email_mail_client\":\"Compartir con correo electrónico, abre el cliente de correo\",\"facebook\":\"Compartir en Facebook\",\"facebook_new_window\":\"Compartir en Facebook, abre una nueva ventana\",\"linkedin\":\"Compartir en LinkedIn\",\"linkedin_new_window\":\"Compartir en LinkedIn, abre una nueva ventana\",\"pinterest\":\"Compartir en Pinterest\",\"pinterest_new_window\":\"Compartir en Pinterest, abre una nueva ventana\",\"twitter\":\"Compartir en Twitter\",\"twitter_new_window\":\"Compartir en Twitter, abre una nueva ventana\"},\"show\":\"Mostrar\",\"sign_in\":\"Iniciar sesión\",\"sign_out\":\"Cerrar sesión\",\"sign_up\":\"Registrarte\",\"songbook\":\"Cancionero\",\"start_your_subscription\":\"Comienza tu suscripción\",\"success\":\"Éxito\",\"success_exclamation\":\"¡Éxito!\",\"title_author_separator\":\"de\",\"undo\":\"Deshacer\",\"undo_title_removed_from_saved\":\"Deshacer la eliminación de {{title}} de Guardado\",\"update\":\"Actualizar\",\"uploaded_by\":\"Cargado por\",\"visually_hidden_next_item\":\"Siguiente artículo\",\"visually_hidden_previous_item\":\"Artículo anterior\",\"welcome_back\":\"Le damos la bienvenida de nuevo\",\"welcome_back_exclamation\":\"¡Le damos la bienvenida de nuevo!\",\"worlds_fascinating_library\":\"La biblioteca más fascinante del mundo\"},\"competitor_matrix\":{\"last_updated_aug\":\"Actualizado por última vez el 5 de agosto de 2021\",\"million_ebooks\":\"Más de 1 000 000 de libros electrónicos\",\"million_magazine_news_articles\":\"Más de 1 000 000 de revistas y artículos de noticias\",\"no\":\"No\",\"thousands_audiobooks\":\"Más de 200 000 audiolibros\",\"title\":\"Descubre por qué los lectores eligen Scribd\",\"yes\":\"Sí\"},\"content_lengths\":{\"articles_with_count\":\"{{count, locale}} artículo\",\"articles_with_count_plural\":\"{{count, locale}} artículos\",\"hour_with_count\":\"{{count, locale}} hora\",\"hour_with_count_plural\":\"{{count, locale}} horas\",\"minute_with_count\":\"{{count, locale}} minuto\",\"minute_with_count_plural\":\"{{count, locale}} minutos\",\"page_with_count\":\"{{count, locale}} página\",\"page_with_count_plural\":\"{{count, locale}} páginas\",\"songs_with_count\":\"{{count, locale}} canción\",\"songs_with_count_plural\":\"{{count, locale}} canciones\"},\"content_preview\":{\"leaving_everand\":\"Dejará de estar en Everand el {{date}}\",\"newly_added_to_everand_only_on_our_new_plans\":\"Recién agregados a Everand: solo en nuestros nuevos planes.\"},\"content_types\":{\"series\":\"Serie\"},\"cta\":{\"preview\":\"Vista previa\"},\"doc_download_modal\":{\"check_out_these\":\"Échale un vistazo a estos otros grandes títulos\",\"continue_reading_ad_free_or_upgrade\":\"Sigue leyendo sin publicidad con tu prueba o actualiza a una suscripción para descargar cientos de documentos.\",\"current_payment\":\"Método de pago actual\",\"download_as\":\"Descargar como:\",\"download_document\":\"Descarga tu documento\",\"download_hundreds_of_documents\":\"Descarga cientos de documentos. Lee sin publicidad. Accede a Scribd, Slideshare y Everand.\",\"download_iframe\":\"Descargar iframe\",\"download_started\":\"La descarga ha comenzado\",\"enrolling_in_automatic_payments_annual_with_tax_html\":\"Si haces clic en el botón “{{buttonCopy}}”, aceptas nuestros \\u003ca href=\\\"{{termsUrl}}\\\" target=\\\"_blank\\\"\\u003etérminos de uso\\u003c/a\\u003e, nuestra \\u003ca href=\\\"{{privacyUrl}}\\\" target=\\\"_blank\\\"\\u003edeclaración de privacidad\\u003c/a\\u003e, que eres mayor de 18 años y que {{localEntity}} continuará automáticamente con tu suscripción al finalizar la prueba gratuita y cobrará la tarifa de la suscripción (actualmente {{price}} más impuestos al año) a tu método de pago hasta que la canceles. Puedes cancelarla en cualquier momento para evitar cargos futuros. Para cancelar, consulta nuestras \\u003ca href=\'{{howToCancelSubscriptionUrl}}\' target=\\\"_blank\\\"\\u003einstrucciones de cancelación\\u003c/a\\u003e.\",\"enrolling_in_automatic_payments_annual_without_tax_html\":\"Si haces clic en el botón “{{buttonCopy}}”, aceptas nuestros \\u003ca href=\\\"{{termsUrl}}\\\" target=\\\"_blank\\\"\\u003etérminos de uso\\u003c/a\\u003e, nuestra \\u003ca href=\\\"{{privacyUrl}}\\\" target=\\\"_blank\\\"\\u003edeclaración de privacidad\\u003c/a\\u003e, que eres mayor de 18 años y que {{localEntity}} continuará automáticamente con tu suscripción al finalizar la prueba gratuita y cobrará la tarifa de la suscripción (actualmente {{price}} al año) a tu método de pago hasta que la canceles. Puedes cancelarla en cualquier momento para evitar cargos futuros. Para cancelar, consulta nuestras \\u003ca href=\'{{howToCancelSubscriptionUrl}}\' target=\\\"_blank\\\"\\u003einstrucciones de cancelación\\u003c/a\\u003e.\",\"enrolling_in_automatic_payments_monthly_with_tax_html\":\"Si haces clic en el botón “{{buttonCopy}}”, aceptas nuestros \\u003ca href=\\\"{{termsUrl}}\\\" target=\\\"_blank\\\"\\u003etérminos de uso\\u003c/a\\u003e, nuestra \\u003ca href=\\\"{{privacyUrl}}\\\" target=\\\"_blank\\\"\\u003edeclaración de privacidad\\u003c/a\\u003e, que eres mayor de 18 años y que {{localEntity}} continuará automáticamente con tu suscripción al finalizar la prueba gratuita y cobrará la tarifa de la suscripción (actualmente {{price}} más impuestos al mes) a tu método de pago hasta que la canceles. Puedes cancelarla en cualquier momento para evitar cargos futuros. Para cancelar, consulta nuestras \\u003ca href=\'{{howToCancelSubscriptionUrl}}\' target=\\\"_blank\\\"\\u003einstrucciones de cancelación\\u003c/a\\u003e.\",\"enrolling_in_automatic_payments_monthly_without_tax_html\":\"Si haces clic en el botón “{{buttonCopy}}”, aceptas nuestros \\u003ca href=\\\"{{termsUrl}}\\\" target=\\\"_blank\\\"\\u003etérminos de uso\\u003c/a\\u003e, nuestra \\u003ca href=\\\"{{privacyUrl}}\\\" target=\\\"_blank\\\"\\u003edeclaración de privacidad\\u003c/a\\u003e, que eres mayor de 18 años y que {{localEntity}} continuará automáticamente con tu suscripción al finalizar la prueba gratuita y cobrará la tarifa de la suscripción (actualmente {{price}} al mes) a tu método de pago hasta que la canceles. Puedes cancelarla en cualquier momento para evitar cargos futuros. Para cancelar, consulta nuestras \\u003ca href=\'{{howToCancelSubscriptionUrl}}\' target=\\\"_blank\\\"\\u003einstrucciones de cancelación\\u003c/a\\u003e.\",\"membership_paused_html\":\"Actualmente, tu membresía está pausada hasta el {{resumeMembershipDate}}. ¿Te gustaría reanudar tu membresía ahora para descargar \\u003cem\\u003e{{title}}\\u003c/em\\u003e?\",\"not_available\":\"Este documento no está disponible para descargar\",\"starting_date\":\"A partir del {{date}}\",\"subscribe\":\"Suscribirse\",\"subscription_payment_processed\":\"Se procesó el pago de la suscripción\",\"there_was_an_issue_processing_html\":\"Se produjo un problema al procesar tu solicitud. \\u003ca href=\\\"{{supportPath}}\\\" target=\\\"_blank\\\"\\u003ePonte en contacto con Atención al Cliente\\u003c/a\\u003e para continuar.\",\"there_was_an_issue_with_payment_html\":\"Se produjo un problema con tu método de pago. \\u003ca href=\\\"{{resubscribePath}}\\\"\\u003eActualizar detalles de pago\\u003c/a\\u003e para continuar.\",\"upgrade_your_trial\":\"Actualiza tu prueba\",\"uploaded\":\"Cargado por\",\"you_will_be_billed\":\"Se te cobrará un importe de {{amount}} hoy\",\"zero_of_count_downloads_remaining_in_your_trial\":\"Le quedan 0 de {{count}} descargas gratuitas en su versión de prueba\"},\"doc_page\":{\"download_document\":\"Descarga tu documento\",\"download_unavailable\":\"Descarga no disponible\"},\"doc_preview\":{\"views\":\"{{formatted_views}} vistas\"},\"end_of_preview\":{\"view_plan_options\":\"Ver opciones de planes\"},\"errors\":{\"action_incomplete_heading\":\"Acción incompleta\",\"action_incomplete_message\":\"¡Ups! Lo sentimos, pero en este momento no podemos completar la acción que solicitaste. Agradecemos tu paciencia mientras encontramos una solución.\",\"something_went_wrong\":\"Algo salió mal. Inténtalo de nuevo.\"},\"everand\":{\"cta\":{\"download_free_days\":\"Descargar gratis durante {{trialDuration}} días\",\"read_free_for_30_days\":\"Prueba gratis durante 30 días\"}},\"everand_banner\":{\"visit_everand\":\"Visita Everand.\"},\"footer\":{\"about\":\"Sobre Nosotros\",\"about_scribd_inc\":\"Acerca de Scribd, Inc.\",\"accessibility\":\"Accesibilidad\",\"cancel_contract\":\"Cancele contratos aquí\",\"contact_us\":\"Contáctanos\",\"cookie_preferences\":\"Preferencias de cookies\",\"copyright\":\"Copyright\",\"copyright_awareness\":\"Nos tomamos en serio los derechos de los contenidos. \\u003ca href={{learnMoreLink}}\\u003eObtén más información\\u003c/a\\u003e en las preguntas frecuentes o \\u003ca href={{reportLink}}\\u003edenuncia una infracción aquí\\u003c/a\\u003e.\",\"copyright_copy_current_year_scribd\":\"Copyright \\u0026copy; {{currentYear}} Scribd Inc.\",\"footer_menu\":\"Menú pie de pagina\",\"gifts\":\"Obsequios\",\"help_faq\":\"Ayuda / Preguntas frecuentes\",\"join_our_team_exclamation\":\"¡Únete a nuestro equipo!\",\"legal\":\"Legal\",\"our_blog\":\"Blog\",\"privacy\":\"Privacidad\",\"publishers\":\"Editores\",\"purchase_help\":\"Compras\",\"redeem_gift_card\":\"Tarjeta de regalos\",\"scribd_-_download_on_the_app_store\":\"Scribd - Descárgala desde App Store\",\"scribd_-_get_it_on_google_play\":\"Scribd - Consíguela en Google Play\",\"scribd_-_get_it_on_kindle_fire\":\"Scribd para Kindle Fire\",\"social\":\"Social\",\"support\":\"Centro de Ayuda\",\"terms\":\"Términos\",\"your_privacy_preferences\":\"Tus opciones de privacidad\"},\"get_app_modal\":{\"an_error_occurred_please_try_again\":\"Se produjo un error. Intente nuevamente\",\"an_error_occurred_please_try_an\":\"Se produjo un error. Intenta con un correo electrónico.\",\"enter_your_email\":\"Introduzca su correo electrónico\",\"enter_your_phone_or_email\":\"Introduce tu teléfono o correo electrónico\",\"get_the_app_to_read\":\"Obtén la aplicación para leer en cualquier momento y en cualquier lugar.\",\"get_the_app_to_read_and_listen\":\"Lee o escucha lo que quieras, donde quieras.\",\"link_sent_please_check_your_mobile\":\"¡Enlace enviado! Compruebe en su dispositivo móvil.\",\"listen_offline_with_app\":\"Escucha sin conexión con la aplicación\",\"phone_or_email\":\"Teléfono o correo electrónico\",\"please_enter_a_valid_email\":\"Introduzca un correo electrónico válido\",\"please_enter_a_valid_phone_number\":\"Introduzca un número de teléfono o correo electrónico válido\",\"please_enter_a_valid_phone_number_or_email\":\"Introduce un número de teléfono o correo electrónico válidos\",\"read_offline_with_app\":\"Descarga nuestra aplicación\",\"send\":\"Enviar\"},\"listen_button\":{\"listen_continue\":\"Seguir escuchando\",\"listen_start\":\"Empezar a escuchar\"},\"lists\":{\"curated_by\":\"Seleccionado por\",\"view_total_titles\":\"Ver {{count}} título\",\"view_total_titles_plural\":\"Ver {{count}} títulos\"},\"loading_button\":{\"tooltip_content\":{\"loading\":\"Cargando...\"}},\"login\":{\"join_lightbox\":{\"email\":\"Correo electrónico\",\"we_couldn_t_complete_your_request\":\"No pudimos completar su solicitud\"}},\"mobile_bottom_navigation_tabs\":{\"active\":\", activo\",\"home\":\"Inicio\",\"quick_navigation\":\"Navegación rápida\"},\"modal\":{\"open\":\"Abierto\",\"opt_in\":{\"stay_in_the_loop\":\"Mantente al día\"},\"upsell\":{\"cancel_anytime\":\"Cancela cuando quieras\",\"continue_with_free_trial\":\"Continuar con la prueba gratuita de {{trialDuration}} días\",\"continue_with_limited_access\":\"Continuar con acceso limitado\",\"or\":\"o\"}},\"modal_redirect\":{\"redirecting\":\"Redirigiendo\",\"subscribe_to_continue_reading_copy\":\"Suscríbete para seguir leyendo\"},\"navigation\":{\"sidebar\":{\"selected\":\", seleccionado\"},\"upload\":\"Cargar\"},\"plan_card\":{\"per_month\":\"/mes\"},\"plan_type\":{\"standard_monthly\":\"Standard se factura mensualmente\"},\"plans\":{\"get_more_unlocks\":\"Obtén más desbloqueos\",\"moving_to_plus\":\"Pasará a Plus el {{date}}\",\"next_unlock_available\":\"El próximo desbloqueo estará disponible el {{refresh_date}}\",\"no_unlocks_available\":\"0 desbloqueos disponibles\",\"num_unlocks_available\":\"{{count}} desbloqueo disponible.\",\"num_unlocks_available_plural\":\"{{count}} desbloqueos disponibles.\",\"num_unlocks_available_renew_monthly\":\"{{count}} desbloqueo disponible. Los desbloqueos se renuevan mensualmente el {{refresh_date}} y no se traspasan.\",\"num_unlocks_available_renew_monthly_plural\":\"{{count}} desbloqueos disponibles. Los desbloqueos se renuevan mensualmente el {{refresh_date}} y no se traspasan.\",\"renew_and_upgrade\":\"Renueva y actualiza a Plus para desbloquear este título.\",\"renew_get_next_unlock\":\"Renueva la suscripción para obtener el próximo desbloqueo el {{refresh_date}}.\",\"resume_and_upgrade\":\"Reanude y actualice a Plus para desbloquear este título.\",\"switch_back_to_plus_to_get_your_next_unlock\":\"Vuelve a Plus para obtener el próximo desbloqueo el {{renew_date}}.\",\"unlimited\":\"Ilimitado\",\"unlock_title\":\"Desbloquear título\",\"unlocked\":\"Desbloqueado\",\"unlocks_available_expire_on_date_html\":\"{{count}} desbloqueo disponible. Los desbloqueos no utilizados caducan el {{expire_date}}.\",\"unlocks_available_expire_on_date_html_plural\":\"{{count}} desbloqueos disponibles. Los desbloqueos no utilizados caducan el {{expire_date}}.\",\"unused_unlocks_expire_on_date\":\"Los desbloqueos sin usar caducan el {{expire_date}}.\",\"upgrade_to_unlock\":\"Actualiza a Plus para desbloquear\",\"you_have_unlocked_title\":\"Desbloqueaste este título.\",\"youve_unlocked_this_title\":\"Desbloqueaste este título.\"},\"play_sample_button\":{\"pause\":\"Pausa\",\"play_sample\":\"Reproducir muestra\"},\"podcast_episode\":{\"from\":\"De\"},\"podcast_series\":{\"num_episodes\":\"{{ count }} episodio\",\"num_episodes_plural\":\"{{ count }} episodios\",\"num_podcast_episodes\":\"{{count, locale}} episodio de podcast\",\"num_podcast_episodes_plural\":\"{{count, locale}} episodios de podcast\"},\"react\":{\"button_menu\":{\"close_menu\":\"Cerrar Menú\"},\"save_button\":{\"failed_to_remove_title\":\"No se pudo eliminar el título\",\"failed_to_save_title\":\"No se pudo guardar el título\",\"remove_short_title_from_saved\":\"Eliminar {{short_title}} de Guardados\",\"save_short_title_for_later\":\"Guardar {{short_title}} para más tarde\",\"sign_up_to_save\":\"Regístrese para guardar este título\"},\"sharing_buttons\":{\"check_out_props_share_title_on_scribd\":\"Mire {{props_share_title}} en Scribd\",\"i_m_reading_props_document_collection_name_on_scribd_props_document_collection_url\":\"Estoy leyendo {{props_document_collection_name}} en Scribd: {{props_document_collection_url}}\",\"read_props_document_collection_name_on_scribd\":\"Leer {{props_document_collection_name}} en Scribd\",\"share_on_facebook_opens_a_new\":\"Compartir en Facebook, abre una nueva ventana\",\"share_on_linkedin_opens_a_new\":\"Compartir en Linkedin, abre una nueva ventana\",\"share_on_twitter_opens_a_new\":\"Compartir en Twitter, abre una nueva ventana\",\"share_with_email_opens_mail_client\":\"Compartir por correo electrónico, abre un cliente de correo electrónico\",\"sharing_options\":\"Opciones para compartir\"}},\"reading_progress\":{\"base\":{\"we_ve_moved_you_to_where_you\":\"Lo llevamos hasta donde leyó en su {{progress_device_name}}\"}},\"remove_saved_confirm_modal\":{\"removing_from_saved_will_also_delete\":\"Si eliminas el título de los Guardados, también se eliminará de tus listas.\",\"this_title_is_also_in_a_list\":\"Este título también está en una lista.\"},\"renew_upgrade_modal\":{\"please_renew_your_subscription_first_in\":\"Debes renovar la suscripción para poder actualizar a Plus y desbloquear este título.\",\"renew_and_upgrade_to_unlock\":\"Renueva y actualiza para desbloquear este título\",\"renew_subscription\":\"Renovar suscripción\"},\"resume_membership\":\"Reanudar suscripción\",\"save_button\":{\"save\":\"Guardar\",\"saved\":\"Guardado\"},\"sign_in_to_continue\":\"Inicie sesión para continuar.\",\"skip_link\":{\"skip_content\":\"Saltar contenido\"},\"social_buttons\":{\"scribd_on_facebook_aria_label\":\"Scribd en Facebook\",\"scribd_on_instagram_aria_label\":\"Scribd en Instagram\",\"scribd_on_pinterest_aria_label\":\"Scribd en Pinterest\",\"scribd_on_twitter_aria_label\":\"Scribd en Twitter\"},\"star_ratings\":{\"clear_rating\":\"Borrar calificación\",\"i_didnt_like_it_at_all\":\"No me gustó nada\",\"i_didnt_like_it_that_much\":\"No me gustó tanto.\",\"i_liked_it\":\"Me gustó.\",\"i_loved_it\":\"Me encantó.\",\"i_thought_it_was_ok\":\"Creo que está bien.\",\"no_ratings\":\"0 calificaciones\",\"rate_as_rating_out_of_5\":\"Calificar como {{value}} de 5\",\"rating_rating_to_display_out_of_5_stars\":\"Calificación: {{ratingToDisplay}} de 5 estrellas\",\"ratings\":\"clasificación\",\"ratings_plural\":\"clasificaciones\",\"saved\":\"¡Guardado!\",\"selected\":\"(seleccionado)\",\"user_rating_star_rating_saved\":\"{{userRating}} calificación con estrellas guardada\"},\"start_exploring\":\"Comenzar a explorar\",\"text_links\":{\"all_categories\":\"Todas las categorías\",\"related_authors\":\"Autores relacionados\",\"view_all_categories_in_category\":\"Ver todas las categorías en {{category}}\",\"view_fewer\":\"Ver menos\",\"view_more\":\"Ver más\"},\"time_remaining\":{\"hours\":\"Queda {{count}} hora\",\"hours_plural\":\"Quedan {{count}} horas\",\"minutes\":\"Queda {{count}} minuto\",\"minutes_plural\":\"Quedan {{count}} minutos\",\"pages\":\"{{count}} página restante\",\"pages_plural\":\"{{count}} páginas restantes\"},\"trial\":{\"cancel_anytime\":\"Cancela cuando quieras.\"},\"trial_duration\":{\"first_days_free\":\"Los primeros {{trialDuration}} días son gratis.\",\"read_free_days\":\"Prueba gratis por {{trialDuration}} días\",\"start_trial_days\":\"Comienza tus {{trialDuration}} dias gratis\"}},\"slideshare\":{\"accessibility\":{\"logo\":\"Slideshare, una empresa de Scribd\"},\"checkout\":{\"hero_banner_title\":\"Tu presentación de Slideshare\"},\"join\":{\"ad_free_sign_up_sub_title\":\"Obtendrás acceso instantáneo a millones de presentaciones, documentos, libros electrónicos, audiolibros, revistas, podcasts y más. Te mandaremos un recordatorio antes de que la prueba termine.\",\"ad_free_sign_up_title\":\"Si deseas disfrutar de Slideshare sin anuncios, regístrate para una prueba gratis de Scribd de {{trialDuration}} días\",\"already_have_scribd_account\":\"¿Ya tienes una cuenta de Scribd?\",\"create_account\":\"Crea una cuenta de Scribd para continuar\",\"get_instant_access\":\"Obtén acceso instantáneo a millones de documentos, libros electrónicos, audiolibros, revistas, podcasts y más. Todo en una suscripción.\",\"need_account_sign_in_slideshare\":\"Puedes usar esta cuenta para acceder a Slideshare y a Scribd.\",\"to_continue_reading\":\"Para seguir leyendo en Slideshare, regístrate y obtén una prueba gratis de Scribd de {{trialDuration}} días\",\"trial_duration\":\"Si deseas descargar un archivo en Slideshare, regístrate para obtener una prueba gratis de Scribd de {{trialDuration}} días\"},\"login\":{\"sign_in\":\"Inicia sesión en tu cuenta de Scribd para continuar\"}},\"unified_checkout\":{\"change_plans\":{\"upgrade_to_plus\":\"Actualizar a Plus\"},\"payment_options\":{\"current_payment\":\"Método de pago actual\"}},\"webpack\":{\"doc_page\":{\"src\":{\"App\":{\"Page\":{\"BlurPromo\":{\"BlurPromo\":{\"become_a_scribd_member_to_read\":\"Conviértase en miembro de Scribd para leer y descargar documentos completos.\",\"cancel_anytime\":\"Cancele cuando quiera\",\"continue_for_free\":\"Seguir gratis\",\"continue_reading_with_trial\":\"Seguir leyendo con la versión de prueba\",\"update_payment\":\"Actualizar la información de pago\",\"update_payment_for_full_access\":\"Actualice la información de pago para obtener acceso total.\"}},\"Body\":{\"Body\":{\"share_this_document\":\"Compartir este documento\"},\"FixedViewportBottomComponents\":{\"CollapseButton\":{\"CollapseButton\":{\"click_to_collapse_related_titles\":\"Haga clic para contraer títulos relacionados\",\"click_to_expand_related_titles\":\"Haga clic para expandir títulos relacionados\"}}},\"Metadata\":{\"Extra\":{\"Extra\":{\"original_title_no_colon\":\"Título original\"}}},\"Toolbar\":{\"Toolbar\":{\"jump_to_page\":\"Saltar a página\"}}},\"annotations\":{\"AnnotationPopover\":{\"AnnotationPopover\":{\"annotation_text_page_annotation_page_nread_more\":\"\\\"{{annotation_text}}…\\\" (página {{annotation_page}})\\\\nLeer más:\"}},\"NoteEditor\":{\"NoteEditor\":{\"cancel\":\"Cancelar\",\"note_note_group_notes_indexof_active_note_id_1_of_note_group_notes_length\":\"Nota {{note_group_notes_indexof_active_note_id_1}} de {{note_group_notes_length}}\",\"save\":\"Guardar\",\"write_a_note\":\"Escribir una nota...\"}}},\"modals\":{\"Description\":{\"Description\":{\"document_information\":\"Información del documento\"}},\"ShareQuote\":{\"ShareQuote\":{\"share_quote\":\"Compartir cita\"}}}}},\"body\":{\"sidebar\":{\"on_created_at\":\"el {{created_at}}\"}},\"shared\":{\"actions\":{\"modals\":{\"redirecting\":\"Redireccionando...\",\"unable_to_unpause_account_please_try\":\"No se pudo reanudar la cuenta. Intente de nuevo.\"}},\"base_page\":{\"an_error_occurred_please_try_again\":\"Se produjo un error, intente nuevamente\"},\"components\":{\"modals\":{\"Download\":{\"Receipt\":{\"Receipt\":{\"uploaded_by_this_props_document_author_name\":\"Cargado por {{this_props_document_author_name}}\"}}}}},\"download_button\":{\"button\":{\"download\":\"Descargar\"}},\"store\":{\"actions\":{\"modals\":{\"subscribe_to_continue_reading\":\"Suscríbase para continuar leyendo\"}}}}}}}}},\"en-US\":{\"translation\":{\");\\n this\":{\"nestingSuffix = iOpts\":{\"nestingSuffix ? regexEscape(iOpts\":{\"nestingSuffix) : iOpts\":{}}}},\"account_settings\":{\"facebook_connect\":{\"facebook\":\"Facebook\"},\"payment_card\":{\"apple_sub\":\"Apple Subscriptions\",\"card_num\":\"Card ending in {{card_number}}\",\"fortumo_bill\":\"Mobile Bill (Serviced by Fortumo)\",\"google_play\":\"Google Play Subscriptions\",\"gopay\":\"GoPay\",\"link_bank_account\":\"Link {{payment_method}}\",\"link_card\":\"Link ending in {{card_number}}\",\"no_card\":\"No card on file\",\"paypal\":\"PayPal: {{email}}\"},\"show\":{\"restart_membership\":\"Restart subscription\"},\"subscription_card\":{\"plan\":{\"annual\":\"Premium Annual\",\"lite\":\"Lite\",\"monthly\":\"Premium Monthly\"},\"unlocks_available\":\"{{count}} unlock available\",\"unlocks_available_plural\":\"{{count}} unlocks available\",\"unlocks_will_expire\":\"Unlocks will expire on {{date}}\"}},\"ai_assistant\":{\"ask_ai\":{\"cta_button_listen\":\"Listen\",\"cta_button_preview\":\"Preview\",\"cta_button_read\":\"Read\",\"cta_button_sample\":\"Sample\",\"cta_button_show_more\":\"Show more\",\"cta_button_view_titles\":\"View titles\",\"disclaimer_ask_ai_may_make_mistakes\":\"Ask v1.0 may make mistakes.\",\"error_messages\":\"Hmm, something went wrong. Please try again later.\",\"feedback_bad_response\":\"Bad Response\",\"feedback_good_response\":\"Good Response\",\"feedback_header\":\"Tell us more about your rating?\",\"feedback_success_description\":\"Your feedback is crucial in helping us improve our responses.\",\"feedback_success_header\":\"Thank you for your feedback\",\"feedback_tags_harmful_offensive\":\"Harmful or offensive\",\"feedback_tags_incorrect\":\"Incorrect or inaccurate\",\"feedback_tags_not_helpful\":\"Not helpful\",\"feedback_tags_not_what_meant\":\"Not what I meant\",\"feedback_tags_other\":\"Other\",\"feedback_tags_too_long\":\"Took too long\",\"greetings_subheading\":\"Ask me to recommend books or audiobooks - similar to reads you love, favorite categories, or with a specific plot or setting.\",\"save_button_remove_from_saved\":\"Remove from Saved\",\"save_button_save_for_later\":\"Save for later\",\"shared_highlight_can_help\":\"I can help!\",\"shared_highlight_looking_for\":\"Looking for\",\"shared_highlight_your_next_read\":\"your next read?\",\"suggestions_audiobooks_relationship\":\"I\'m seeking good audiobooks to help me improve my relationship with my girlfriend?\",\"suggestions_audiobooks_shoe_dog\":\"I’m looking for the audiobook Shoe Dog by Phil Knight?\",\"suggestions_audiobooks_successful_entrepreneurs\":\"Share inspirational audiobooks about successful entrepreneurs like The Spanx Story?\",\"suggestions_books_balance_technology_as_mom\":\"As a mom with kids below age 9, I need a book on how to balance technology and screen time for kids?\",\"suggestions_books_big_little_lies\":\"Domestic suspense books similar to Big Little Lies by Liane Moriarty?\",\"suggestions_books_children_books_science\":\"Children books about science that are appropriate for a 6 year old?\",\"suggestions_books_climate_change\":\"Can you suggest the top 3 books about climate change that I should read?\",\"suggestions_books_cookbooks\":\"Popular cookbooks for healthy diets?\",\"suggestions_books_creativity_inc\":\"Any books similar to Creativity Inc by Ed Catmull?\",\"suggestions_books_fiction_books\":\"Are there any fiction books about people with schizophrenia?\",\"suggestions_books_financial_independence\":\"Books about financial independence like Pathfinders by JL Collins?\",\"suggestions_books_finding_love_againa\":\"I want to read a good story about finding love again after life setbacks?\",\"suggestions_books_glad_my_mom_died\":\"Do you have I’m Glad My Mom Died?\",\"suggestions_books_inspire_me_with_books\":\"I want to be inspired, what books do you recommend?\",\"suggestions_books_leadership_skills\":\"Good books on leadership skills for women similar to Career Forward by Puma?\",\"suggestions_books_light_funnny_lift_mood\":\"Any light and funny books to lift my mood?\",\"suggestions_books_make_me_cry_ugly\":\"Looking for books that will make me ugly cry?\",\"suggestions_books_medicine_and_disease\":\"Do you have books about medicine and disease similar to Being Mortal by Gawande?\",\"suggestions_books_memoirs_not_business_leaders\":\"Looking for good memoirs but not about business leaders?\",\"suggestions_books_memoirs_successful_athletes\":\"Share memoirs about successful athletes that would inspire young kids to work hard?\",\"suggestions_books_millionaire_next_door\":\"Books like The Millionaire Next Door that are good?\",\"suggestions_books_no_weak_female_characters\":\"I don’t like books with weak female characters. Can you suggest novels with strong, empowered women?\",\"suggestions_books_real_estate_investor\":\"I want to learn how to be a real estate investor - what books should I read?\",\"suggestions_books_self_help_books\":\"I want self-help books not written by Dale Carnegie?\",\"suggestions_books_sets_india\":\"Can you recommend books set in India?\",\"suggestions_books_story_at_sea\":\"Books where the story happens at sea?\",\"suggestions_books_suggestions_about_cats\":\"My daughter is 12 yrs old and also loves cats. Any suggestions?\",\"suggestions_books_underdog_sports_teams\":\"Interested in books about underdog sports teams similar to The Boys in the Boat by Brown?\",\"suggestions_books_walter_isaacson\":\"Do you have books by Walter Isaacson?\",\"suggestions_books_written_by_sarah_maas\":\"Show me books written by Sarah Maas?\",\"suggestions_deeply_emotional_memoir\":\"I want a deeply emotional memoir that explores overcoming adversity - any ideas?\",\"suggestions_fiction_novels_medival_europe\":\"Can you recommend any fiction novels set in Medieval Europe?\",\"suggestions_funny_romance_books\":\"I need some cheering up, can you recommend some super funny laugh-out-loud romance books for me?\",\"suggestions_good_audiobook_set_rome\":\"Looking for a good audiobook set in ancient Rome?\",\"suggestions_mystery_novel_female_detective\":\"Can you recommend a mystery novel set in the 1920s that features a female detective?\",\"suggestions_romance_lovers_plot\":\"Give me a spicy romance book with an enemies to lovers plot?\",\"suggestions_romance_novel_world_war\":\"Can you recommend a romance novel set during World War II?\",\"suggestions_self_improvement_audiobooks\":\"I’m looking for inspiration to stop procrastinating. Can you recommend some self-improvement audiobooks on this topic?\",\"suggestions_similar_achilles_madeline_miller\":\"I enjoyed Song of Achilles by Madeline Miller. Suggest another retelling of a myth or legend?\",\"suggestions_similar_author_fantasy_series_george_rr_martin\":\"Recommend a fantasy series similar to A Song of Ice and Fire by George RR Martin?\",\"suggestions_similar_author_psychological_thrillers_gillian_flynn\":\"Love psychological thrillers by Gillian Flynn - what similar authors should I check out?\",\"suggestions_similar_books_chris_voss\":\"I liked Never Split the Difference by Chris Voss, recommend similar books to me?\",\"suggestions_similar_books_crawdads_sing\":\"I loved Where the Crawdads Sing by Delia Owens - what else should I read?\",\"suggestions_similar_books_female_main_character\":\"I\'m looking for books set in Europe with a female main character?\",\"suggestions_similar_books_lord_of_rings\":\"I loved Lord of the Rings, can you recommend something similar?\",\"suggestions_similar_books_many_lives_mama_love\":\"Books similar to The Many Lives of Mama Love?\",\"suggestions_similar_books_marie_kondo\":\"I\'m a fan of Marie Kondo and her approach to simplifying life. What books by similar authors would you recommend?\",\"suggestions_similar_plot_twists\":\"I don’t like predictable endings, can you find a couple of books with good plot twists for me?\",\"suggestions_thriller_unexpected_plot_twists\":\"I’m looking for a thriller with unexpected plot twists and a dark setting?\",\"suggestions_true_story_book_recommendations\":\"Any true story book recommendations?\",\"text_input_ask_follow_up\":\"Ask a follow-up\",\"text_input_discover_next_read\":\"Discover your next read\",\"text_input_label\":\"Send Message\",\"thumbs_down_other_header\":\"Provide additional feedback\",\"thumbs_down_submit_button\":\"Submit Feedback\"},\"ask_ai_modal\":{\"ad_free\":\"Ad-free reading\",\"copy_and_paste\":\"Copy \\u0026 paste text and images from any document\",\"download_documents\":\"Download documents\",\"free_trial\":\"Get this feature with a free trial\",\"start_free_trial\":\"Start {{numberOfDays}} day free trial\",\"start_free_trial_unlimited_access_html\":\"Start a 30 day free trial to \\u003cstrong\\u003eget unlimited access to Ask AI,\\u003c/strong\\u003e plus:\",\"summary\":\"Ask AI gives you instant answers and helps you summarize the contents of the document faster\"}},\"bestsellers\":{\"promo\":{\"enjoy_bestselling_titles_when_subscribed\":\"Enjoy bestselling titles when you subscribe\"}},\"books\":{\"epub\":{\"banners\":{\"enjoying_preview_update_payment\":\"Your next unlock will be available after you update your payment information.\",\"enjoying_preview_update_payment_upgrade\":\"Update payment information to upgrade to Plus\"}}},\"browse\":{\"promo\":{\"everand_also_available_on_mobile_devices\":\"Everand is also available for your mobile devices.\"}},\"category\":{\"documents\":\"{{category}} Documents\"},\"change_plans_page\":{\"plan_module\":{\"most_popular\":\"Most Popular\"}},\"chrome\":{\"flash\":{\"close_notification\":\"Close notification\"},\"renewal_nag\":{\"click_here_to_become_a_member\":\"Click here to become a member\",\"click_here_to_renew_it\":\"Click here to renew it\",\"click_here_to_resume_it\":\"Click here to resume it\",\"click_here_to_update_it\":\"Click here to update it\",\"resume_membership\":\"Resume membership\",\"update_payment\":\"Update Payment\",\"you_canceled_your_free_trial\":\"You canceled your free trial.\",\"your_credit_card_information_is_invalid_\":\"Your credit card information is invalid.\",\"your_membership_is_on_hold\":\"Your membership is on hold because of a problem with your last payment.\",\"your_membership_is_paused_until_paused_until_date\":\"Your membership is paused until {{paused_until_date}}.\",\"your_paypal_information_is_invalid\":\"Your Paypal information is invalid.\",\"your_scribd_gift_membership_has_ended\":\"Your Scribd gift membership has ended.\",\"your_scribd_membership_has_expired\":\"Your Scribd membership has expired.\",\"your_scribd_membership_was_canceled\":\"Your Scribd membership was canceled.\"}},\"common\":{\"later\":\"Later\",\"update_payment\":\"Update payment\"},\"content_lengths\":{\"listening_minutes\":\"{{minutes}} min listen\",\"reading_minutes\":\"{{minutes}} min read\"},\"content_preview\":{\"available_on\":\"Available on {{date}}\",\"flags\":{\"expiring_soon\":\"Leaving soon\",\"geo_restricted\":\"Unavailable\",\"not_available\":\"Unavailable\",\"sample\":\"Sample\",\"throttled\":\"Available soon\"},\"formats\":{\"also_available_list_view\":\"Also available as \\u003ca href={{url}} class=\'also_available\'\\u003e{{content_type}}\\u003c/a\\u003e\"},\"geo_restricted\":\"Unavailable in your country\",\"reviews\":{\"delete_rating_and_review\":\"Delete this rating and review?\",\"delete_warning\":\"This action cannot be undone.\",\"rating_and_review_deleted\":\"Rating and review deleted\"},\"save\":{\"add\":\"Save for later\",\"remove\":\"Remove from Saved\"},\"share\":\"Share\",\"social_media_share\":{\"email\":\"Email\",\"pinterest\":\"Pinterest\",\"twitter\":\"Twitter\"},\"social_media_share_modal\":{\"linked_copied\":\"Link copied\"},\"unavailable\":\"Currently unavailable\",\"view_titles_in_series\":\"View titles in series\"},\"content_types\":{\"article\":\"Article\",\"audiobook\":\"Audiobook\",\"audiobook_series\":\"Audiobook series\",\"audiobooks\":\"Audiobooks\",\"books\":\"Books\",\"document\":\"Document\",\"documents\":\"Documents\",\"ebook\":\"Ebook\",\"ebook_series\":\"Ebook series\",\"ebooks\":\"Ebooks\",\"magazine\":\"Magazine\",\"magazines\":\"Magazines\",\"podcast\":\"Podcast\",\"podcast_episode\":\"Podcast episode\",\"podcasts\":\"Podcasts\",\"sheet_music\":\"Sheet music\",\"song\":\"Song\",\"topics\":\"Topics\"},\"doc_download_modal\":{\"resume_now_billed_html\":\"Resume your subscription now to download {{title}}. By resuming now, \\u003cem\\u003eyou will be billed {{price}} immediately\\u003c/em\\u003e. \",\"subscription_is_currently_paused\":\"Your subscription is currently paused until {{date}}.\"},\"doc_page\":{\"account_creation\":{\"get_instant_access_with_free_account\":\"Get instant access to this document and millions more with a free account.\",\"to_continue_reading_please_sign_in\":\"To continue reading, please sign in\"},\"ad_label\":{\"ad_info\":{\"description\":\"We use ads to keep content free and accessible for everyone. You can remove them by \\u003ca href=\'{{signupUrl}}\'\\u003esigning up\\u003c/a\\u003e for a Scribd subscription.\",\"dunning_description\":\"We use ads to keep content free and accessible for everyone. You can remove them by \\u003ca href=\'{{updateUrl}}\'\\u003eupdating your payment\\u003c/a\\u003e.\"}},\"after_download_modal\":{\"explore_and_download\":\"Explore and download\"},\"ai_actions\":{\"advanced_document_search\":\"Advanced document search\",\"answers_from_doc\":\"Answers from this document\",\"ask_question\":\"Ask a question\",\"define\":\"Define\",\"define_this_text\":\"Define the terms in this text\",\"explain\":\"Explain\",\"explain_this_text\":\"Explain this text\",\"get_ai_abstract\":\"Get AI Abstract\",\"highlights_glance\":\"Highlights at a glance\",\"key_insights\":\"Key Insights\",\"page_num\":\"Page {{pageNum}}\",\"painted_door_modal\":{\"feature_not_ready\":\"This feature is not quite ready\",\"we_are_working_hard\":\"We\'re working hard to introduce advanced reading, summarization, and document analysis tools to improve your experience. We hope to share them with you soon.\"},\"rewrite_for_audience\":\"Rewrite for audience\",\"summarize\":\"Summarize\",\"summarize_document\":\"Summarize document\",\"summarize_this_text\":\"Summarize this text\",\"try_advanced_search\":\"Try advanced search\",\"use_advanced_search\":\"Use advanced search\"},\"ai_enhanced_tag\":{\"ai_enhanced\":\"AI-enhanced\",\"ai_enhanced_document\":\"AI-enhanced document\",\"ai_translated_document\":\"AI-translated document\",\"description\":\"AI-enhanced description\",\"description_tooltip\":\"Leveraging AI technology, we\'ve optimized the description for improved clarity.\",\"title\":\"AI-enhanced title\",\"title_and_description\":\"AI-enhanced title and description\",\"title_and_description_tooltip\":\"Leveraging AI technology, we\'ve optimized the title and description for improved clarity.\",\"title_tooltip\":\"Leveraging AI technology, we\'ve optimized the title for improved clarity.\"},\"annotation_popover\":{\"add_note\":\"Add note\",\"delete_highlight\":\"Delete highlight\",\"explore_documents_on\":\"Explore documents on \\\"{{query}}\\\"\",\"highlight\":\"Highlight\",\"new_note\":\"New note\",\"search_for\":\"Search for \\\"{{query}}\\\"\",\"search_scribd_for\":\"Search Scribd for \\\"{{query}}\\\"\",\"share_quote\":\"Share quote\"},\"annotations\":{\"annotations\":\"Annotations\",\"delete_modal_description\":\"This will delete your note.\",\"delete_modal_title\":\"Delete Note?\",\"hide_annotations\":\"Hide annotations\",\"hide_highlights\":\"Hide highlights\",\"highlights\":\"Highlights\",\"show_annotations\":\"Show annotations\",\"show_highlights\":\"Show highlights\",\"sign_in_to_see_annotations\":\"Sign in to see annotations\",\"sign_in_to_see_highlights\":\"Sign in to see highlights\",\"this_document_does_not_have_annotations\":\"This document does not have any annotations yet\",\"this_document_does_not_have_highlights\":\"This document does not have any highlights yet\"},\"app_promo_interstitial\":{\"continue_for_free\":\"Continue for free\"},\"blur_promo\":{\"become_member_for_full_access\":\"Become a Scribd member for full access.\",\"read_and_download_full_documents\":\"Read and download full documents.\",\"skip_ad\":\"Skip ad\",\"subscribe_now\":\"Subscribe Now\",\"subscribe_with_a_free_trial\":\"Subscribe with a free trial\",\"trial_duration\":{\"start_your_trial\":\"Start your {{trialDuration}} day free trial\"},\"unlock_next_pages_after_an_ad\":\"Unlock the next {{count}} page after an ad\",\"unlock_next_pages_after_an_ad_plural\":\"Unlock the next {{count}} pages after an ad\",\"unlock_this_document\":\"Unlock this document\",\"unlock_this_document_after_an_ad\":\"Unlock this document after an ad\",\"unlock_this_page_after_an_ad\":\"Unlock this page after an ad\",\"upload_a_doc_to_download_or_sub\":\"Upload a document to download this document or subscribe to read and download.\",\"upload_to_download\":\"Upload to download\"},\"description_modal\":{\"description\":\"Description\"},\"doc_chat\":{\"summarize_this_doc\":\"Summarize this document\"},\"doc_chat_additional_feedback\":{\"heading\":\"Provide additional feedback\",\"placeholder\":\"What are your thoughts on the response? How could it be improved?\"},\"doc_chat_disclaimer\":\"This feature is powered by OpenAI and may make mistakes. Check important info.\",\"doc_chat_down_vote_feedback\":{\"not_factually_correct\":\"Not factually correct\",\"offensive_unsafe\":\"Offensive/Unsafe\",\"other\":\"Other\",\"submit\":\"Submit Feedback\"},\"doc_chat_error_message\":{\"something_went_wrong\":\"Hmm, something went wrong. Please try reloading the page.\"},\"doc_chat_error_messages\":{\"default\":\"We are experiencing high traffic. Please try sending a message after a brief wait.\",\"ingestion_failed\":\"Something went wrong. Please try again later.\",\"ingestion_rejected\":\"This document isn’t compatible with Ask AI. Please try a different document.\"},\"doc_chat_feedback\":{\"down_vote_question_heading\":\"Why did you choose this rating?\",\"thank_you_response\":\"Your feedback is valuable and helps us improve our AI responses.\",\"thank_you_response_heading\":\"Thanks so much for your feedback\"},\"doc_chat_greeting\":{\"header\":\"Get instant answers\",\"subheader\":\"Ask anything related to this document or choose one of the suggestions below.\"},\"doc_chat_header\":{\"close\":\"Close\",\"open_settings\":\"Open settings\"},\"doc_chat_ingestion\":{\"analyzing_information\":\"Analyzing information\",\"title\":\"Just a moment, scanning the document.\",\"working_on_your_request\":\"Working on your request\"},\"doc_chat_input\":{\"placeholder\":\"Select a suggestion or type a question\",\"suggestions\":\"Suggestions\"},\"doc_chat_messages\":{\"sources\":\"Sources\"},\"doc_chat_settings\":{\"clear_history\":\"Clear History\",\"faq\":\"FAQ\"},\"doc_chat_usage\":{\"exceed_warning\":\"You’ve reached your monthly limit of {{count}} prompts. Thank you for being so actively engaged with DocTalk beta. Your prompt limit will reset next month!\",\"limit_reminder\":\"Wow, you’ve reached {{count}} prompts! As part of our DocTalk beta program, you have {{left}} prompts left. Your feedback is appreciated as we refine this feature.\"},\"doc_search\":{\"advanced_find\":\"Advanced Find\",\"collapse_search_results_drawer\":\"Collapse search results drawer\",\"error_occurred_try_again\":\"An error occurred with your search. Please try again.\",\"expand_search_results_drawer\":\"Expand search results drawer\",\"find\":\"Find\",\"find_answers_inside_any_document\":\"Find answers inside any document.\",\"get_advanced_find\":\"Get Advanced Find with a free trial\",\"go_deeper\":\"Go deeper. Explore long documents without losing context.\",\"no_matches_found\":\"We could not find any matches for your search. Try searching a different keyword or phrase.\",\"page\":\"Page\",\"related_match\":\"Related match\",\"relevance\":\"Relevance\",\"save_time\":\"Save time. Jump straight to the section that matters.\",\"search_smarter\":\"Search smarter. Get results even with partial words or typos.\",\"try_advanced_find\":\"Try Advanced Find\",\"try_free_for_trial_days\":\"Try free for {{trialDuration}} days\"},\"document_outline\":{\"document_outline\":\"Document outline\",\"document_thumbnails\":\"Document thumbnails\",\"outline\":\"Outline\",\"page_view\":\"Page view\"},\"download_as_formats_or_read_online\":\"Download as {{formats}} or read online on Scribd\",\"download_modal\":{\"explore_top_category_documents_next\":\"Explore top {{category}} documents next\",\"no_category_explore_these_top\":\"Explore these top related documents next\"},\"download_to_read_ad_free\":\"Download to read ad-free\",\"embed_modal\":{\"custom_page\":\"Custom page\",\"title\":\"Embed document\"},\"fallback_ad\":{\"millions_of_documents_ad_free\":\"Millions of documents at your fingertips, ad-free\"},\"fixed_viewport_bottom_components\":{\"check_out_these_free_titles\":\"Check out these free titles\"},\"flash\":{\"rating_not_saved_try_again\":\"Rating not saved, please try again\"},\"get_scribd_without_ads\":\"Get Scribd without ads.\",\"incentivized_upload\":{\"to_access_this_document_trial_duration\":\"To access this document, upload one of yours, or subscribe with a {{trialDuration}} day free trial. Cancel anytime.\",\"to_access_this_document_trial_duration_plural\":\"To access this document, upload {{count}} of yours, or subscribe with a {{trialDuration}} day free trial. Cancel anytime.\"},\"key_topics\":{\"ask_ai_query\":\"Show me all of the references in this document to {{keyTopic}}.\",\"keyword_match_results\":\"Keyword match\",\"more\":\"more\",\"powered_by_ai\":\"Powered by AI\",\"topics_covered\":\"Topics covered\",\"topics_results\":\"Topics\",\"view_all\":\"View all\"},\"metadata\":{\"description\":{\"copyright_awareness\":\"We take content rights seriously. If you suspect this is your content, \\u003ca href={{href}}\\u003eclaim it here\\u003c/a\\u003e.\",\"original_description\":\"Original Description\"},\"license\":\"License\",\"overview\":\"Overview\"},\"mobile_metadata\":{\"collapse_full_title\":\"Hide full title\",\"expand_full_title\":\"Show full title\"},\"modals\":{\"mobile_share\":{\"share_document\":\"Share document\"},\"more_options\":{\"is_this_document_useful\":\"Is this document useful?\"}},\"more_options\":\"More options\",\"mouse_menu\":{\"copy_page_text\":\"Copy page text\",\"copy_text\":\"Copy text\",\"copy_text_unavailable\":\"Copy text unavailable\",\"copy_text_unavailable_on_this_page\":\"Copy text unavailable on this page\"},\"note\":\"Note\",\"page\":{\"preferred_language_set_to_url_params_language_settings_changed\":\"Preferred language set to {{url_params_language_settings_changed}}\"},\"page_view\":{\"no_thumbnails_available\":\"No thumbnails available\"},\"ratings\":{\"mark_as_not_useful\":\"Mark this document as not useful\",\"mark_as_useful\":\"Mark this document as useful\",\"no_ratings\":\"0 ratings\",\"no_ratings_yet\":\"No ratings yet\",\"num_votes\":\"({{count, locale}} vote)\",\"num_votes_plural\":\"({{count, locale}} votes)\",\"page_count\":\"{{count, locale}} page\",\"page_count_plural\":\"{{count, locale}} pages\",\"percent_found_document_not_useful\":\"{{percentage}}% found this document not useful\",\"percent_found_document_useful\":\"{{percentage}}% found this document useful\",\"press_again_undo\":\"Press again to undo.\",\"sign_up_to_rate_this_title\":\"Sign up to rate this title\",\"you_marked_as_useful\":\"You marked this document as useful\"},\"read_this_document_in_other_languages\":\"Read this document in other languages\",\"recommender_list\":{\"might_also_like\":\"You might also like\",\"show_more\":\"Show more\"},\"related_documents\":\"Related documents\",\"report_content_modal\":{\"button_name\":\"Report\",\"category_error_flash\":\"Select a category to submit your report\",\"copyright_awareness\":\"If you are the copyright owner of this document or someone authorized to act on a copyright owner’s behalf, please use the \\u003ca href={{reportLink}}\\u003eDMCA form\\u003c/a\\u003e to report infringement.\",\"copyright_infringement\":\"Copyright infringement\",\"cta\":{\"cancel\":\"Cancel\",\"submit\":\"Submit\"},\"document_has_been_reported\":\"Document has been reported.\",\"illegal_content\":\"Illegal content\",\"illegal_content_awareness\":\"If you believe this document contains illegal material, such as child sexual abuse, exploitation, terrorism, or other unlawful activity, please \\u003ca href={{ reportLink }}\\u003econtact our Customer Operations team.\\u003c/a\\u003e\",\"problem_submitting_report\":\"We encountered a problem submitting your report. Please try again.\",\"report_an_issue\":\"Report an issue\",\"reports_are_used\":\"Reports are used to improve our systems and are not used for content moderation.\",\"select_an_option\":\"Select an option...\",\"sub_type\":{\"academic_dishonesty\":\"Academic Dishonesty\",\"child_privacy\":\"Child Privacy\",\"child_sexual_abuse\":\"Child Sexual Abuse\",\"dangerous_products_services\":\"Dangerous Products/Services\",\"general_privacy\":\"General Privacy\",\"inciting_violence_or_hatred\":\"Inciting Violence or Hatred\",\"minor_exploitation\":\"Minor Exploitation\",\"non_violent_offenses\":\"Non-violent Offenses\",\"other\":\"Other\",\"self_harm\":\"Self-harm\",\"sexual_offenses\":\"Sexual Offenses\",\"sexually_explicit\":\"Sexually Explicit\",\"shocking_or_disturbing\":\"Shocking or Disturbing\",\"spreading_false_information\":\"Spreading False Information\",\"terrorism\":\"Terrorism\",\"threatening_behavior\":\"Threatening Behavior\",\"violent_offenses\":\"Violent Offenses\"},\"subcategory_error_flash\":\"Select a sub-category to submit your report\",\"title\":\"Report Content\",\"type\":{\"dangerous_and_derogatory\":\"Dangerous \\u0026 Derogatory\",\"dangerous_and_derogatory_tooltip\":\"Content that encourages harmful, threatening, or hateful behavior.\",\"deceptive_and_fraudulent\":\"Deceptive \\u0026 Fraudulent\",\"deceptive_and_fraudulent_tooltip\":\"Content that intentionally misleads, deceives, or engages in fraudulent activities.\",\"explicit\":\"Explicit\",\"explicit_tooltip\":\"Content that is graphic, offensive, or disturbing.\",\"illegal\":\"Illegal\",\"illegal_tooltip\":\"Content that breaks the law or promotes illegal activities.\",\"low_quality\":\"Low quality\",\"low_quality_tooltip\":\"Content that fails to meet minimum standards for clarity, relevance, or completeness.\",\"privacy\":\"Privacy\",\"privacy_tooltip\":\"Content that misuses personal information.\",\"spam\":\"Spam\",\"spam_tooltip\":\"Unsolicited and repetitive content that disrupts your experience.\"}},\"share\":{\"copy_link\":\"Copy link\",\"link_copied\":\"Link copied!\",\"share_on_facebook\":\"Share on Facebook\",\"share_on_linkedin\":\"Share on LinkedIn\",\"share_via_email\":\"Share via email\",\"unable_to_copy_link\":\"Unable to copy link\"},\"share_drawer\":{\"copy_link\":\"Copy Link\"},\"share_quote\":{\"page_number\":\"Page {{page}}\"},\"sharing_buttons\":{\"link_copied_private_document\":\"Link Copied! \\u003cspan class=\\\"link_copied_private_doc\\\"\\u003eNote: Sharing a public link to a document marked private will allow others to view it.\\u003c/span\\u003e\",\"not_supported_for_private_documents\":\"This feature is not supported for private documents. If you want to share, select Copy Link, and send the link to others.\"},\"this_document_available_in_languages\":\"This document is available in the following languages:\",\"toast\":{\"copying_text_disabled\":\"Copying text from this document is disabled.\",\"copying_text_success\":\"Text copied to clipboard.\"},\"toolbar\":{\"document_search\":{\"find\":\"Find\",\"find_in_document\":\"Find in document\"},\"download\":\"Download\",\"find_in_pdf\":\"Find in PDF\",\"visually_hidden_share\":\"Share\"},\"translate\":\"Translate\",\"translate_document\":\"Translate Document\",\"url_safety\":{\"learn_more\":\"Learn more about our content safety efforts\",\"stay_on_scribd\":\"Stay on Scribd\",\"this_link_leads_to_an_external\":\"This link leads to an external site. We do not know or endorse its content, and are not responsible for its safety. Click the link to proceed only if you trust this site.\",\"to_improve_the_safety\":\"To improve the safety of our community, you must have an account to follow external links.\",\"youre_leaving_scribd\":\"You’re leaving Scribd\"},\"view_original_document_in_language\":\"View original document in {{language}}\"},\"everand\":{\"bestsellers\":{\"promo\":{\"enjoy_bestselling_audiobook_titles_when_subscribed\":\"Enjoy bestselling audiobooks when you subscribe\",\"enjoy_bestselling_titles_when_subscribed\":\"Enjoy bestselling ebooks when you subscribe\"}},\"browse_page\":{\"promo\":{\"books_audiobooks_cancel_anytime\":\"Discover millions of ebooks, audiobooks, and so much more, from {{price}}/month. Cancel anytime.\",\"instant_access_and_cancel_anytime\":\"Discover millions of ebooks, audiobooks, and so much more for just {{price}}/month. Cancel anytime.\"}},\"lists\":{\"faq_message_html\":\"We\'ve made important changes to the list experience. To learn more, \\u003ca href={{faqUrl}} target=\\\"_blank\\\"\\u003evisit the FAQs\\u003c/a\\u003e.\"},\"megamenu\":{\"what_is_scribd_btn\":{\"what_is_scribd\":\"What is Everand?\"}},\"modal\":{\"opt_in\":{\"continue_to_everand\":\"Continue to Everand\",\"upcoming_releases_curated_lists_to_your_inbox\":\"Find out about upcoming releases and exclusive originals, plus get curated lists and special offers sent directly to your inbox.\"},\"progressive_profile\":{\"send_me_email_updates\":\"Send me email updates from Everand\",\"welcome_to_everand\":\"Welcome to Everand!\"},\"upsell\":{\"get_the_most_out_of_everand\":\"Get the most out of Everand\",\"unlock_full_access_discover_millions\":\"Unlock full access to the world\'s most fascinating digital library. Discover millions of ebooks, audiobooks, magazines, and more.\"}},\"shared\":{\"cross_link_message\":\"From Everand\",\"footer\":{\"about_scribd\":\"About Everand\",\"everand_-_download_on_the_app_store\":\"Everand - Download on the App Store\",\"everand_-_get_it_on_google_play\":\"Everand - Get it on Google Play\",\"everand_-_get_it_on_kindle_fire\":\"Everand for Kindle Fire\",\"scan_to_download\":\"Scan to download\"},\"social_buttons\":{\"scribd_on_facebook_aria_label\":\"Everand on Facebook\",\"scribd_on_instagram_aria_label\":\"Everand on Instagram\",\"scribd_on_pinterest_aria_label\":\"Everand on Pinterest\",\"scribd_on_twitter_aria_label\":\"Everand on Twitter\"}}},\"everand_pay_now_modal\":{\"0_unlocks_remain\":\"0 unlocks remaining in your trial\",\"downgrade_cta\":\"Downgrade to Standard\",\"downgrade_plus\":\"Downgrade to Plus\",\"get_unlocks_today\":\"Get {{count}} unlock today, renews monthly\",\"get_unlocks_today_plural\":\"Get {{count}} unlocks today, renews monthly\",\"plus_trial_desc\":\"Subscribe today to get more unlocks and continue enjoying our bestselling ebooks and audiobooks.\",\"standard_trial_desc\":\"Get 3 unlocks per month with the Plus plan, or continue with 1 unlock per month on the Standard plan.\",\"subheading\":{\"deluxe_version\":\"Subscribe to the Deluxe plan for immediate access to 5 unlocks.\",\"plus_version\":\"Get 5 unlocks per month with the Deluxe plan, or continue with 3 unlocks per month on the Plus plan.\",\"switch_deluxe_plus\":\"Switch to Plus or Deluxe to get more unlocks, or continue with 1 unlock per month on the Standard plan.\"},\"subscribe_deluxe\":\"Subscribe to Deluxe\",\"subscription_disclaimer_plus_tax_html\":\"Your {{plan}} plan of {{count}} unlock per month automatically renews for {{price}}/month (plus tax), billed by {{local_entity}}, until you cancel. Cancel anytime in your \\u003ca class=\'account\' href=\'{{account_url}}\' target=\'_blank\'\\u003eAccount Settings\\u003c/a\\u003e. See Scribd’s \\u003ca class=\'terms\' href=\'{{terms_url}}\' target=\'_blank\'\\u003eterms of use\\u003c/a\\u003e and \\u003ca class=\'privacy\' href=\'{{privacy_url}}\' target=\'_blank\'\\u003eprivacy policy\\u003c/a\\u003e for more information.\",\"subscription_disclaimer_plus_tax_html_plural\":\"Your {{plan}} plan of {{count}} unlocks per month automatically renews for {{price}}/month (plus tax), billed by {{local_entity}}, until you cancel. Cancel anytime in your \\u003ca class=\'account\' href=\'{{account_url}}\' target=\'_blank\'\\u003eAccount Settings\\u003c/a\\u003e. See Scribd’s \\u003ca class=\'terms\' href=\'{{terms_url}}\' target=\'_blank\'\\u003eterms of use\\u003c/a\\u003e and \\u003ca class=\'privacy\' href=\'{{privacy_url}}\' target=\'_blank\'\\u003eprivacy policy\\u003c/a\\u003e for more information.\",\"title\":\"Start subscription to unlock title\",\"unlocks_and_price\":\"{{count}} unlock • {{price}}\",\"unlocks_and_price_plural\":\"{{count}} unlocks • {{price}}\",\"upgrade_deluxe\":\"Upgrade to Deluxe\",\"upgrade_to_get_unlocks\":\"Upgrade to get {{unlocks}} unlocks today, renews monthly\"},\"everand_unlock_modal\":{\"get_the_best_experience\":\"Get the best Everand experience in the app. Scan the code to download.\"},\"explore\":{\"download_app_banner\":{\"everand_is_best_in_the_app\":\"Everand is best in the app\"}},\"get_app_modal\":{\"link_sent_email\":\"Link sent! Please check your email.\"},\"helpers\":{\"document_meta_tags\":{\"scribd_is_the_world_s_largest_social\":\"Scribd is the world\'s largest social reading and publishing site.\"}},\"home\":{\"logged_in\":{\"content_quickview\":{\"also_available_as_an_audiobook\":\"Also available as an audiobook\",\"also_available_as_an_ebook\":\"Also available as an ebook\",\"byline\":{\"narrated_by\":\"narrated by\"},\"close\":\"Close\",\"count_titles\":\"{{count}} title\",\"count_titles_plural\":\"{{count}} titles\",\"go_to_content_type_version\":\"Go to {{content_type}} version\",\"loading\":\"Loading...\",\"more_about_this_episode\":\"More about this episode\",\"more_about_this_issue\":\"More about this issue\",\"more_about_this_series\":\"More about this series\",\"more_about_this_summary\":\"More about this summary\",\"oops_something_went_wrong\":\"Oops, something went wrong\",\"view_all_articles\":\"View all articles\",\"view_all_episodes\":\"View all episodes\",\"view_the_full_title_details\":\"View the full title details\"}}},\"landing_pages\":{\"feed\":{\"view_more_info\":\"View more info\"}},\"megamenu\":{\"documents\":{\"all_documents\":\"All Documents\"},\"hambur_menu\":{\"get_our_free_apps\":\"Get our free apps\"},\"hamburger_menu\":{\"close_menu\":\"Close menu\",\"sign_in_to_your_everand_account\":\"Sign in to your Everand account\",\"sign_in_to_your_scribd_account\":\"Sign in to your Scribd account\",\"welcome\":\"Welcome!\"},\"language\":{\"cancel\":\"Cancel\",\"change_language\":\"Change Language\"},\"language_links\":{\"learn_more\":\"Learn more\"},\"language_picker_dropdown\":{\"language\":\"Language\",\"preferred_language\":\"Preferred Language\"},\"logged_out\":{\"user_menu\":{\"welcome_to_everand\":\"Welcome to Everand!\",\"welcome_to_scribd\":\"Welcome to Scribd!\"}},\"navigation\":{\"categories\":\"Categories\",\"explore_content_type\":\"Explore {{content_type}}\",\"opens_navigation_menu\":\"Open navigation menu\"},\"search_bar\":{\"clear_search\":\"Clear search\",\"close_suggestions\":\"Close suggestions\",\"no_results_found\":\"No search results.\",\"num_results_are_available\":\"{{num_results}} result(s) are available, use up and down arrow keys to navigate.\",\"recent_searches\":\"Recent searches\",\"search\":\"Search\"},\"top_bar\":{\"upload\":\"Upload\"},\"upload\":{\"upload_header\":\"Upload\"},\"user_menu\":{\"document_stats\":\"Document stats\",\"document_uploads\":\"Document uploads\",\"faq_and_support\":\"FAQ and support\",\"hi_name\":\"Hi {{name}}!\",\"invite_friends\":\"Invite friends\",\"language\":\"Language ({{current_language}})\",\"public_profile\":\"Public profile\",\"read_for_free\":\"Read for free\",\"visually_hidden_user_settings\":\"User Settings\",\"your_account\":\"Your account\"},\"what_is_scribd_btn\":{\"what_is_scribd\":\"What is Scribd?\"}},\"modals\":{\"add_to_list\":{\"save\":\"Save to list\",\"title\":\"Add to list\"},\"confirm_delete_review\":{\"title\":\"Delete your review and rating?\"},\"confirm_unsave_item\":{\"content\":\"Are you sure you want to remove this title from Saved Library and any saved lists?\",\"header\":\"Remove title\",\"title\":\"Remove title from Saved Library and any saved lists?\"},\"confirm_unsave_item_in_list\":{\"remove_from_your_lists\":\"Remove from your lists?\",\"removing_from_saved\":\"Removing from Saved will also delete the title from your lists.\",\"removing_this_title_from_saved\":\"Removing this title from Saved will also remove it from your lists.\",\"title\":\"This title is also in a list.\"},\"create_list\":{\"create_list\":\"Create list\",\"failed_to_create_try_again\":\"Failed to create list, please try again\",\"input_description\":{\"privacy_type\":\"No one except you can view this list. Sharing will be disabled.\"},\"input_label\":{\"name\":\"What would you like to name this list?\",\"privacy_type\":\"Make list private\"},\"title\":\"New List\",\"validation_errors\":{\"name\":\"Please enter a list name\"}},\"language_picker\":{\"language_options\":\"Language Options\",\"select_preferred_language\":\"Select your preferred language\",\"translate_and_tailor\":\"We’ll translate site navigation and tailor your personal recommendations where possible to match your preferred language selection.\",\"translate_to_match\":\"We’ll translate site navigation to match your preferred language selection.\"},\"lockshockroadblock\":{\"problem_with_your_last_payment\":\"Problem with your last payment\",\"update_your_payment_to_continue\":\"Update your payment to continue\",\"we_had_an_issue_with_your_last_payment\":\"We had an issue with your last payment. Update your payment info to continue.\",\"your_membership_is_on_hold\":\"Your membership is on hold because of a problem with your last payment.\"}},\"onboarding_modal\":{\"cta\":{\"get_started\":\"Get started\",\"next\":\"Next\",\"see_whats\":\"See what’s new\",\"start_reading\":\"Start reading!\"},\"subtitle\":{\"all_unlocks_renew\":\"Each unlock gives you access to a title from our premium catalog. Unlocks renew monthly. Unused unlocks do not roll over. \",\"lets_go\":\"Let’s go over a few things that have changed.\",\"look_for_titles\":\"Out of unlocks? No problem! Just look for the “unlimited” label to keep on reading.\",\"not_sure_if\":\"Not sure if you’re ready to unlock a premium ebook or audiobook? Save it for later or preview it for a closer look.\",\"scan_the_code_to_download\":\"Your favorite stories go wherever you do, even offline. Scan the code to get the app.\",\"weve_already_unlocked\":\"Enjoy the books you’ve already read — no unlocks needed.\",\"your_favorite_stories\":\"Your favorite stories go wherever you do, even offline.\",\"your_world_of\":\"Your world of stories starts here.\"},\"title\":{\"anytime_anywhere\":\"Anytime, anywhere\",\"no_need_to\":\"No need to use unlocks on titles you’ve already read\",\"out_of_unlocks\":\"Always more to enjoy\",\"preview_any\":\"Preview any title first\",\"use_your_unlocks\":\"Unlock premium titles\",\"welcome_everand\":\"Welcome to Everand!\",\"your_library\":\"Your library just got bigger\"}},\"page_gate_modal\":{\"check_you_email\":{\"check_your_email\":\"Check your email\"},\"check_your_email\":{\"change_email\":\"Not the correct email?\",\"didnt_receive\":\"Didn\'t receive an email? Check your spam folder, or\",\"email_not_verified_verify_to_continue\":\"Email not verified. Please verify your email to continue.\",\"i_have_verified_my_email\":\"I\'ve verified my email\",\"logout_login_url\":\"Use a different email address\",\"send_again\":\"send again.\",\"to_protect_your_account_html\":\"To protect your account, we\'ve sent a verification email to \\u003cstrong\\u003e{{email}}\\u003c/strong\\u003e. Please click the link in that email to verify your identity. To learn more, please visit our \\u003ca href=\\\"{{support_url}}\\\" class=\\\"faq_link\\\" target=\\\"_blank\\\"\\u003eFAQs\\u003c/a\\u003e.\",\"verify_email_before_continuing\":\"Please verify your email before continuing.\"}},\"pause_nag_banner\":{\"scribd\":{\"subscription_paused\":\"Your subscription is paused until {{date}}. To download documents and access offline, resume early by visiting\"}},\"pdfs\":{\"doc_search\":{\"page\":\"page\"},\"lightboxes\":{\"download_lightbox\":{\"download_document\":\"Download document\",\"resume_membership\":\"Resume Membership\",\"resuming\":\"Resuming\"},\"embed_lightbox\":{\"autosize\":\"Autosize\",\"beginning_of_document\":\"Beginning of document\",\"copy_link\":\"Copy Link\",\"custom\":\"Custom\",\"customization_options_available_below\":\"Customization options available below\",\"embed_this_in_your_website\":\"Embed this in your website\",\"format\":\"Format\",\"fullscreen\":\"Fullscreen\",\"generate_a_link\":\"Generate a Link\",\"height\":\"Height: \",\"html\":\"HTML\",\"link_options\":\"Link Options\",\"link_to_the\":\"Link to the\",\"options\":\"Options\",\"preview\":\"Preview\",\"scroll\":\"Scroll\",\"size\":\"Size\",\"slideshow\":\"Slideshow\",\"start_at_page\":\"Start at page:\",\"style\":\"Style:\",\"sup_sup_the_code_will_be_updated\":\"\\u003csup\\u003e*\\u003c/sup\\u003e The code will be updated based on your changes.\",\"width\":\"Width: \",\"wordpress\":\"Wordpress\"},\"print_lightbox\":{\"cancel\":\"Cancel\",\"download_and_print\":\"Download and print\",\"in_order_to_print_this_document_\":\"In order to print this document from Scribd, you\'ll first need to download it.\",\"print_document\":\"Print document\"}},\"redesign_elements\":{\"actions\":{\"embed\":\"Embed\",\"print\":\"Print\",\"share\":\"Share\"},\"metadata_section\":{\"full_description\":\"Full description\",\"related_titles\":\"Related titles\"}},\"show\":{\"sign_in_to_flag_this_title\":\"Sign in to flag this title\"},\"sidebar\":{\"available_formats\":\"Available Formats\",\"copyright_no_colon\":\"Copyright\",\"isbn_no_colon\":\"ISBN\",\"uploaded_by\":\"Uploaded by\",\"written_by\":\"Written by\"},\"toolbar\":{\"exit_fullscreen\":\"Exit fullscreen\",\"fullscreen\":\"Fullscreen\",\"showing_strong_1_strong_result_for_query\":\"Showing \\u003cstrong\\u003e1\\u003c/strong\\u003e result for\",\"showing_strong_num_results_strong_results_for_query\":\"Showing \\u003cstrong\\u003e{{num_results}}\\u003c/strong\\u003e results for\",\"you_are_on_page_props_current_page\":\"You are on page {{props_current_page}}\",\"zoom_in\":\"Zoom in\",\"zoom_out\":\"Zoom out\"},\"upvote\":{\"not_useful\":\"Not useful\",\"this_document_is\":\"This document is...\",\"useful\":\"Useful\"}},\"plan_selection_page\":{\"plan_card\":{\"a_selection\":\"200,000+ ebooks and audiobooks, including a selection of our most popular titles\",\"billed_monthly\":\"Billed monthly after trial.\",\"docs_presentations\":\"195M+ documents and presentations on Scribd and Slideshare ad-free\",\"magazines_etc\":\"Magazines, podcasts and sheet music\",\"plus\":\"Plus:\",\"subscribe_plus\":\"Subscribe to Plus\",\"subscribe_standard\":\"Subscribe to Standard\",\"titles_per_month\":\"{{titles}} titles per month from our Plus catalog that includes even more bestsellers and new releases\",\"unlimited\":\"Unlimited access to:\"}},\"plans\":{\"unlock_dropdown\":{\"unlocks\":\"{{count}} unlock\",\"unlocks_plural\":\"{{count}} unlocks\",\"unlocks_renew\":\"Unlocks renew {{refresh_date}}\",\"unlocks_renew_after_payment_information\":\"Unlocks renew after payment information is updated.\",\"view_unlock_history\":\"View unlock history\"},\"unlock_modal\":{\"after_unlocking_this_title\":\"After unlocking this title, you\'ll have {{count}} unlock left until {{refresh_date}}.\",\"after_unlocking_this_title_plural\":\"After unlocking this title, you\'ll have {{count}} unlocks left until {{refresh_date}}.\",\"unlock_this_title\":\"Unlock this title\",\"you_have_unlocks_available\":\"You have {{count}} unlock available.\",\"you_have_unlocks_available_plural\":\"You have {{count}} unlocks available.\"}},\"privacy_policy_modal\":{\"accept\":\"Accept and continue\",\"details_below\":\"You can read the details below. By accepting, you agree to the updated privacy policy.\",\"thank_you\":\"Thank you!\",\"title\":\"We\'ve updated our privacy policy.\",\"try_again\":\"We’ve encountered a problem, please try again.\",\"updated_privacy_policy\":\"We’ve updated our privacy policy so that we are compliant with changing global privacy regulations and to provide you with insight into the limited ways in which we use your data. \",\"view_policy\":\"View updated privacy policy\"},\"receipt\":{\"download\":{\"download_iframe\":\"Download iframe\",\"downloading\":\"Downloading\"}},\"recs\":{\"overflow_menu\":{\"congrats_marked_as_read\":\"Congrats! This title is marked as finished.\",\"dont_show_again\":\"Don\'t show again\",\"mark_as_finished\":\"Mark as finished\",\"mark_as_unfinished\":\"Mark as unfinished\",\"removed_from_your_suggestions\":\"Removed from your suggestions.\",\"suggest_more_like_this\":\"Suggest more like this\",\"title_marked_as_unfinished\":\"This title is marked as unfinished.\",\"undo_suggest_more\":\"Undo suggest more like this\",\"we_wont_suggest_more_like_this\":\"Got it! We won’t suggest more like this.\",\"we_wont_suggest_this_again\":\"Got it! We won\'t suggest this again.\",\"well_suggest_more_like_this\":\"Awesome! We\'ll suggest more like this.\"}},\"saved\":{\"add_to_list_modal\":{\"failed_to_add_document_to_collection\":\"Failed to add document to collection\",\"failed_to_load_try_again\":\"Failed to load, try again.\"},\"all_lists_modal\":{\"lists\":\"Lists\",\"title_count\":\"1 title\",\"title_count_plural\":\"{{count}} titles\"},\"delete_a_list_modal\":{\"cancel\":\"Cancel\",\"delete\":\"Delete\",\"delete_collection_name_from_lists\":\"Delete {{collectionName}} from lists?\",\"delete_list\":\"Delete List?\",\"do_not_ask_me_again\":\"Do not ask me again\",\"failed_to_delete_list\":\"Failed to delete list\",\"please_note_this_will_not_delete\":\"Please note: This will not delete titles from Saved.\",\"successfully_deleted_list\":\"Successfully deleted list\"},\"list_item_controls\":{\"create_list\":\"Create List\"},\"list_modal\":{\"organize_your_saved_titles\":\"Organize your saved titles. Add titles to your custom list.\"},\"saved_item_action\":{\"added_to_collection\":\"Added to {{collection}}\"}},\"scribd\":{\"doc_page\":{\"explore_knowledge_pages\":\"Explore knowledge pages where we use AI to aggregate the most relevant Scribd documents, highlighting the most authoritative and up-to-date sources.\",\"learn_more\":\"Learn more\",\"related_knowledge_pages\":\"Related knowledge pages\"},\"knowledge\":{\"knowledge_pages\":\"Knowledge pages\"},\"logged_out_homepage\":{\"welcome_to_scribd\":{\"welcome_to_scribd\":\"Welcome to Scribd\"}},\"modal\":{\"opt_in\":{\"continue_to_scribd\":\"Continue to Scribd\",\"special_offers_new_content_to_your_inbox\":\"Find out about special offers, new content, plus recommendations from our premium products sent directly to your inbox.\"},\"progressive_profile\":{\"explore_documents\":\"Explore [{{documentsCount}}M+] documents across every topic and niche, shared by a global community of thinkers.\",\"get_ad_free_access\":\"Get ad-free access and download any document you want across every topic and niche with a 30-day free trial.\",\"join_our_mailing_list\":\"Join our mailing list to receive personalized recommendations and new product updates\",\"send_me_email_updates\":\"Send me email updates from Scribd\",\"welcome_to_scribd\":\"Welcome to Scribd!\"},\"upsell\":{\"get_the_most_out_of_scribd\":\"Get the most out of Scribd\",\"unlock_full_access_download_documents\":\"Unlock full access to the world’s most fascinating digital library. Download documents and read offline on the app.\"}},\"navigation_category\":{\"academic\":\"Academic\",\"culture\":\"Culture\",\"hobbies_and_crafts\":\"Hobbies \\u0026 Crafts\",\"personal_growth\":\"Personal Growth\",\"professional\":\"Professional\"},\"shared\":{\"cross_link_message\":\"From Scribd\"}},\"search\":{\"filters\":{\"filters\":\"Filters\"},\"list_view\":{\"on_date\":\"on {{date}}\",\"songbook_title\":\"From songbook\"},\"pagination\":{\"next\":\"next\",\"previous\":\"previous\"},\"results\":{\"reading_list\":\"Reading List\",\"top_result\":\"Top Result\"},\"similar\":{\"find_similar\":\"Find similar\"}},\"shared\":{\"account_creation\":{\"add_note_sign_in\":\"To add a note, please sign in\",\"add_note_sign_up\":\"To add a note, please sign up\",\"already_have_an_account\":\"Already have an account?\",\"annotate_document_sign_in\":\"To annotate this document, please sign in\",\"annotate_document_sign_up\":\"To annotate this document, please sign up\",\"annotate_sign_in\":\"To annotate, please sign in\",\"back_to_sign_in\":\"Back to sign in\",\"continue_reading_sign_in\":\"To continue reading, please sign in\",\"continue_reading_sign_up\":\"To continue reading, please sign up\",\"create_bookmark_sign_in\":\"To create a bookmark, please sign in\",\"create_bookmark_sign_up\":\"To create a bookmark, please sign up\",\"creating_your_account\":\"Creating your account...\",\"disclaimer\":\"By signing up with Scribd, you agree to our \\u003ca href=\\\"{{terms_href}}\\\" target=\\\"_blank\\\" tabIndex=\\\"0\\\"\\u003eTerms of Service {{opens_in_new_window}}\\u003c/a\\u003e and \\u003ca href=\\\"{{privacy_href}}\\\" target=\\\"_blank\\\" tabIndex=\\\"0\\\"\\u003ePrivacy Policy {{opens_in_new_window}}\\u003c/a\\u003e\",\"download_document_sign_in\":\"To download this document, please sign in\",\"download_document_sign_up\":\"To download this document, please sign up\",\"errors\":{\"email_invalid\":\"This email address is invalid or blocked. Please enter another email.\",\"email_registered\":\"This email address is already registered with Scribd. Please enter your password to sign in.\",\"email_taken\":\"That email is taken by another user, please try again.\",\"invalid_character_in_name_please_remove\":\"Invalid character in name. Please remove any special characters\",\"no_valid_email_modal_desc\":\"Your email address is missing or invalid. To keep your account secure, please provide a valid email address.\",\"no_valid_email_modal_title\":\"Update your email\",\"password_10_chars\":\"Please enter a password that is at least 10 characters\",\"please_enter_a_name\":\"Please enter a name\",\"please_enter_a_valid_email\":\"Please enter a valid email\",\"that_doesn_t_appear_to_be_a\":\"That doesn\'t appear to be a valid email address. Please try again.\"},\"facebook\":{\"error\":\"Sorry, we are unable to log you in via Facebook at this time.\",\"sign_in\":\"Continue with Facebook\",\"sign_up\":\"Sign up with Facebook\"},\"fail\":\"Fail.\",\"flag_document_sign_in\":\"To flag this document, please sign in\",\"flag_document_sign_up\":\"To flag this document, please sign up\",\"forgot\":{\"enter_email\":\"Enter your email address and we\'ll send you an email with a link to reset your password.\",\"weve_sent_email_html\":\"We\'ve sent an email to \\u003cstrong\\u003e{{escape_validated_email}}\\u003c/strong\\u003e with instructions to reset your password. If it doesn\'t show up soon, check your spam folder and then read this \\u003ca href=\\\"https://support.scribd.com/hc/articles/210134406-What-do-I-do-if-I-ve-lost-or-forgotten-my-password-\\\"\\u003eHelp Center article\\u003c/a\\u003e.\"},\"forgot_password\":\"Forgot password?\",\"give_gift_sign_in\":\"To give this gift, please sign in\",\"give_gift_sign_up\":\"To give this gift, please sign up\",\"google\":{\"error\":\"Google sign in failed\"},\"highlight_document_sign_in\":\"To highlight this document, please sign in\",\"highlight_document_sign_up\":\"To highlight this document, please sign up\",\"join_today_to_start_reading\":\"Join today to start reading\",\"logging_you_in\":\"Logging you in...\",\"not_you\":\"Not you?\",\"now_bringing_you_back\":\"Now bringing you back...\",\"pass\":\"Pass.\",\"password_must_be_at_least_ten_characters\":\"At least 10 characters\",\"password_not_been_breached\":\"Password has not been breached\",\"password_strength\":\"Password strength\",\"password_strength_colon\":\"Password strength: \",\"password_strength_good\":\"Good\",\"password_strength_moderate\":\"Moderate\",\"password_strength_strong\":\"Strong\",\"password_strength_weak\":\"Weak\",\"people_browsing_scribd_html\":\"\\u003cspan\\u003e{{count, locale}} person\\u003c/span\\u003e browsing Scribd right now\",\"people_browsing_scribd_html_plural\":\"\\u003cspan\\u003e{{count, locale}} people\\u003c/span\\u003e browsing Scribd right now\",\"rate_document_sign_in\":\"To rate this document, please sign in\",\"rate_document_sign_up\":\"To rate this document, please sign up\",\"recaptcha_disclaimer\":\"This site is protected by reCAPTCHA and the Google \\u003ca href=\\\"{{privacy_href}}\\\" target=\\\"_blank\\\"\\u003ePrivacy Policy {{opens_in_new_window}}\\u003c/a\\u003e and \\u003ca href=\\\"{{policy_href}}\\\" target=\\\"_blank\\\"\\u003eTerms of Service {{opens_in_new_window}}\\u003c/a\\u003e apply.\",\"redeem_offer_sign_in\":\"To redeem this offer, please sign in\",\"redeem_offer_sign_up\":\"To redeem this offer, please sign up\",\"remember_me\":\"Remember me\",\"reset_password\":\"Reset password\",\"save_document_sign_in\":\"To save this document, please sign in\",\"save_document_sign_up\":\"To save this document, please sign up\",\"send_me_updates_from_scribd\":\"Send me updates from Scribd\",\"share_quote_sign_in\":\"To share this quote, please sign in\",\"share_quote_sign_up\":\"To share this quote, please sign up\",\"sign_in\":\"Sign in\",\"sign_in_add_note\":\"To add a note, please sign in\",\"sign_in_bookmark\":\"To create a bookmark, please sign in\",\"sign_in_create_list\":\"To create a list, please sign in\",\"sign_in_download\":\"To download, please sign in\",\"sign_in_follow\":\"To follow, please sign in\",\"sign_in_give_gift\":\"To give this gift, please sign in\",\"sign_in_highlight\":\"To highlight, please sign in\",\"sign_in_rate\":\"To rate, please sign in\",\"sign_in_redeem\":\"To redeem, please sign in\",\"sign_in_review\":\"To review, please sign in\",\"sign_in_save\":\"To save, please sign in\",\"sign_in_share_quote\":\"To share this quote, please sign in\",\"sign_in_start_months\":\"To start your free {{count}} month, please sign in\",\"sign_in_start_months_plural\":\"To start your free {{count}} months, please sign in\",\"sign_in_successful\":\"Sign in successful\",\"sign_in_to_scribd\":\"Sign in to Scribd\",\"sign_in_upload\":\"To upload, please sign in\",\"sign_in_with_email\":\"Sign in with email\",\"sign_up\":\"Sign up\",\"sign_up_add_note_this_title\":\"Sign up to add a note to this title.\",\"sign_up_annotate\":\"Sign up to annotate.\",\"sign_up_continue_reading_this_title\":\"Sign up to continue reading this title.\",\"sign_up_create_bookmark_this_title\":\"Sign up to create a bookmark.\",\"sign_up_create_list_this_title\":\"Sign up to create a list.\",\"sign_up_download_this_title\":\"Sign up to download this title.\",\"sign_up_follow_magazine_this_title\":\"Sign up to follow this magazine.\",\"sign_up_free_months_this_title\":\"Sign up to start your free {{count}} month.\",\"sign_up_free_months_this_title_plural\":\"Sign up to start your free {{count}} months.\",\"sign_up_give_gift_this_title\":\"Sign up to give this gift.\",\"sign_up_highlight_this_title\":\"Sign up to highlight.\",\"sign_up_or_sign_in\":\"Sign up or sign in\",\"sign_up_save\":\"To save, please create a Scribd account\",\"sign_up_save_this_title\":\"Sign up to save this title.\",\"sign_up_share_quote_this_title\":\"Sign up to share a quote from this title.\",\"sign_up_successful\":\"Sign up successful\",\"sign_up_to_rate_title\":\"Sign up to rate this title\",\"sign_up_to_review_title\":\"Sign up to review this title\",\"sign_up_with_email\":\"Sign up with email\",\"signup_to_redeem_offer\":\"Sign up to redeem offer\",\"start_free_months_sign_in\":\"To start your free {{count}} month, please sign in\",\"start_free_months_sign_in_plural\":\"To start your free {{count}} months, please sign in\",\"start_free_months_sign_up\":\"To start your free {{count}} month, please sign up\",\"start_free_months_sign_up_plural\":\"To start your free {{count}} months, please sign up\",\"upload_document_sign_in\":\"To upload a document, please sign in\",\"upload_document_sign_up\":\"To upload a document, please sign up\",\"use_another_email_address\":\"Use another email address\"},\"account_settings\":{\"your_account_lowercase\":\"your account\"},\"actions\":{\"read_continue\":\"Continue reading\",\"read_preview\":\"Read preview\"},\"ad_blocker_modal\":{\"i_disabled_my_ad_blocker\":\"I disabled my ad-blocker\",\"it_looks_like_youre_using_and_ad_blocker\":\"It looks like you\'re using an ad-blocker.\",\"show_me_how\":\"Show me how\",\"to_listen_to_titels_on_everand_disble_ad_blocker_or_use_mobile_app\":\"To listen to titles on Everand, please disable your ad-blocker or use our mobile app.\",\"to_read_titles_on_everand_disable_ad_blocker_or_use_mobile_app\":\"To read titles on Everand, please disable your ad-blocker or use our mobile app.\"},\"buttons\":{\"continue\":\"Continue\"},\"byline\":{\"and\":\"and\",\"by\":\"By\",\"narrated_by\":\"Narrated by\",\"published_by\":\"Published by\",\"written_by\":\"Written by\"},\"carousels\":{\"go_to_next_items\":\"Go to next items\",\"go_to_previous_items\":\"Go to previous items\",\"skip_carousel\":\"Skip carousel\"},\"checkout\":{\"plan_annual\":\"{{plan}} Annual\",\"plan_monthly\":\"{{plan}} Monthly\"},\"common\":{\"ad\":\"ad\",\"add_a_new_payment_method\":\"Add a new payment method\",\"added_by\":\"Added by\",\"back\":\"Back\",\"back_to_top\":\"Back to top\",\"cancel\":\"Cancel\",\"cancel_anytime\":\"Cancel anytime.\",\"close\":\"Close\",\"close_dialog\":\"Close dialog\",\"current_of_total\":\"{{current}} of {{total}}\",\"current_plan\":\"Current Plan\",\"delete\":\"Delete\",\"description\":\"Description\",\"do_not_ask_me_again\":\"Do not ask me again\",\"download\":\"Download\",\"download_now\":\"Download now\",\"edit\":\"Edit\",\"email_address\":\"Email address\",\"error\":\"Error\",\"errors\":{\"could_not_complete_request\":\"We couldn\'t complete your request\",\"failed_to_delete_review\":\"Review was not deleted. Please try again.\",\"failed_to_load\":\"Failed to load, try again\",\"failed_to_remove_title\":\"Failed to remove title\",\"failed_to_save_review\":\"Your review was not saved. Please try again.\",\"failed_to_save_review_vote\":\"Your vote was not saved. Please try again.\",\"failed_to_save_title\":\"Failed to save title\",\"please_try_again_later\":\"Please try again later.\"},\"forms\":{\"at_least_10_characters\":\"(at least 10 characters)\",\"cancel\":\"Cancel\",\"email\":\"Email\",\"error\":\"Error\",\"invalid\":\"Invalid\",\"invalid_email\":\"Please enter a valid email\",\"name\":\"Name\",\"optional\":\"(optional)\",\"password\":\"Password\",\"please_enter_a_password\":\"Please enter a password\",\"please_enter_an_email\":\"Please enter an email\",\"required\":\"(required)\"},\"hide\":\"Hide\",\"included_in_your_subscription\":\"Included in your subscription\",\"info\":\"Information\",\"issue\":\"Issue\",\"key_insights\":\"Key insights from\",\"learn_more\":\"Learn more\",\"length\":\"Length\",\"library\":{\"add_to_list\":{\"success_message\":\"Added to {{collection_name}}\"},\"add_with_title\":\"Save {{title}} for later\",\"remove_with_title\":\"Remove {{title}} from saved\",\"sign_up_to_save\":\"Sign up to save this title\"},\"listen_free_for_30_days\":\"Listen free for {{trialDuration}} days\",\"listen_now\":\"Listen now\",\"listen_on_everand\":\"Listen on Everand\",\"load_more\":\"Load more\",\"more\":\"More\",\"more_about_this_title\":\"More about this title\",\"new_to_scribd\":\"New to Scribd?\",\"next_page\":\"Next page\",\"notice\":\"Notice\",\"opens_in_a_new_window\":\"opens in a new window\",\"or\":\"or\",\"pause\":\"Pause\",\"play_preview\":\"Play preview\",\"play_sample\":\"Play sample\",\"preferred_language_set_to_language\":\"Preferred language set to {{language}}\",\"previous_page\":\"Previous page\",\"progress\":{\"listened\":\"listened\",\"read\":\"read\"},\"rating\":\"rating\",\"ratings\":\"ratings\",\"read_count\":\"{{count}} read\",\"read_count_plural\":\"{{count}} reads\",\"read_less\":\"Read less\",\"read_more\":\"Read more\",\"read_now\":\"Read now\",\"read_on_everand\":\"Read on Everand\",\"read_on_scribd\":\"Read on Scribd\",\"read_preview\":\"Read preview\",\"recommended\":\"Recommended\",\"remove\":\"Remove\",\"remove_from_saved\":\"Remove from Saved\",\"removed_from_saved\":\"Removed from Saved\",\"removed_from_your_saved_list\":\"Removed from your saved list.\",\"restart_subscription\":\"Restart subscription\",\"resume_subscription\":\"Resume subscription\",\"save\":\"Save\",\"save_for_later\":\"Save for later\",\"saved\":\"Saved\",\"selected\":\"(selected)\",\"send_email\":\"Send email\",\"share_on\":{\"email\":\"Share via email\",\"email_mail_client\":\"Share with email, opens mail client\",\"facebook\":\"Share on Facebook\",\"facebook_new_window\":\"Share on Facebook, opens a new window\",\"linkedin\":\"Share on LinkedIn\",\"linkedin_new_window\":\"Share on LinkedIn, opens a new window\",\"pinterest\":\"Share on Pinterest\",\"pinterest_new_window\":\"Share on Pinterest, opens a new window\",\"twitter\":\"Share on Twitter\",\"twitter_new_window\":\"Share on Twitter, opens a new window\"},\"show\":\"Show\",\"sign_in\":\"Sign in\",\"sign_out\":\"Sign out\",\"sign_up\":\"Sign up\",\"songbook\":\"Songbook\",\"start_your_subscription\":\"Start your subscription\",\"success\":\"Success\",\"success_exclamation\":\"Success!\",\"title_author_separator\":\"by\",\"undo\":\"Undo\",\"undo_title_removed_from_saved\":\"Undo {{title}} removed from Saved\",\"update\":\"Update\",\"uploaded_by\":\"Uploaded by\",\"visually_hidden_next_item\":\"Next item\",\"visually_hidden_previous_item\":\"Previous item\",\"welcome_back\":\"Welcome back\",\"welcome_back_exclamation\":\"Welcome back!\",\"worlds_fascinating_library\":\"The world\'s most fascinating library\"},\"competitor_matrix\":{\"last_updated_aug\":\"Last updated on August 5, 2021\",\"million_ebooks\":\"1,000,000+ ebooks\",\"million_magazine_news_articles\":\"1,000,000+ magazine \\u0026 news articles\",\"no\":\"No\",\"thousands_audiobooks\":\"200,000+ audiobooks\",\"title\":\"See why readers choose Scribd\",\"yes\":\"Yes\"},\"content_lengths\":{\"articles_with_count\":\"{{count, locale}} article\",\"articles_with_count_plural\":\"{{count, locale}} articles\",\"hour_with_count\":\"{{count, locale}} hour\",\"hour_with_count_plural\":\"{{count, locale}} hours\",\"minute_with_count\":\"{{count, locale}} minute\",\"minute_with_count_plural\":\"{{count, locale}} minutes\",\"page_with_count\":\"{{count, locale}} page\",\"page_with_count_plural\":\"{{count, locale}} pages\",\"songs_with_count\":\"{{count, locale}} song\",\"songs_with_count_plural\":\"{{count, locale}} songs\"},\"content_preview\":{\"leaving_everand\":\"Leaving Everand on {{date}}\",\"newly_added_to_everand_only_on_our_new_plans\":\"Newly added to Everand — only on our new plans\"},\"content_types\":{\"series\":\"Series\"},\"cta\":{\"preview\":\"Preview\"},\"doc_download_modal\":{\"check_out_these\":\"Check out these other great titles\",\"continue_reading_ad_free_or_upgrade\":\"Continue reading ad-free with your trial or upgrade to a subscription to download hundreds of documents.\",\"current_payment\":\"Current payment method\",\"download_as\":\"Download as:\",\"download_document\":\"Download document\",\"download_hundreds_of_documents\":\"Download hundreds of documents. Read ad-free. Access to Scribd, Slideshare, and Everand.\",\"download_iframe\":\"Download iframe\",\"download_started\":\"Your download has started\",\"enrolling_in_automatic_payments_annual_with_tax_html\":\"By clicking the “{{buttonCopy}}” button, you agree to our \\u003ca href=\\\"{{termsUrl}}\\\" target=\\\"_blank\\\"\\u003eTerms of Use\\u003c/a\\u003e, \\u003ca href=\\\"{{privacyUrl}}\\\" target=\\\"_blank\\\"\\u003ePrivacy Statement\\u003c/a\\u003e, that you are over 18, and that {{localEntity}} will automatically continue your subscription starting at the end of your free trial and charge the subscription fee (currently {{price}} + tax per year) to your payment method until you cancel. You may cancel at any time to avoid future charges. To cancel, please visit our \\u003ca href=\'{{howToCancelSubscriptionUrl}}\' target=\\\"_blank\\\"\\u003eCancel Instructions\\u003c/a\\u003e.\",\"enrolling_in_automatic_payments_annual_without_tax_html\":\"By clicking the “{{buttonCopy}}” button, you agree to our \\u003ca href=\\\"{{termsUrl}}\\\" target=\\\"_blank\\\"\\u003eTerms of Use\\u003c/a\\u003e, \\u003ca href=\\\"{{privacyUrl}}\\\" target=\\\"_blank\\\"\\u003ePrivacy Statement\\u003c/a\\u003e, that you are over 18, and that {{localEntity}} will automatically continue your subscription starting at the end of your free trial and charge the subscription fee (currently {{price}}/year) to your payment method until you cancel. You may cancel at any time to avoid future charges. To cancel, please visit our \\u003ca href=\'{{howToCancelSubscriptionUrl}}\' target=\\\"_blank\\\"\\u003eCancel Instructions\\u003c/a\\u003e.\",\"enrolling_in_automatic_payments_monthly_with_tax_html\":\"By clicking the “{{buttonCopy}}” button, you agree to our \\u003ca href=\\\"{{termsUrl}}\\\" target=\\\"_blank\\\"\\u003eTerms of Use\\u003c/a\\u003e, \\u003ca href=\\\"{{privacyUrl}}\\\" target=\\\"_blank\\\"\\u003ePrivacy Statement\\u003c/a\\u003e, that you are over 18, and that {{localEntity}} will automatically continue your subscription starting at the end of your free trial and charge the subscription fee (currently {{price}} + tax per month) to your payment method until you cancel. You may cancel at any time to avoid future charges. To cancel, please visit our \\u003ca href=\'{{howToCancelSubscriptionUrl}}\' target=\\\"_blank\\\"\\u003eCancel Instructions\\u003c/a\\u003e.\",\"enrolling_in_automatic_payments_monthly_without_tax_html\":\"By clicking the “{{buttonCopy}}” button, you agree to our \\u003ca href=\\\"{{termsUrl}}\\\" target=\\\"_blank\\\"\\u003eTerms of Use\\u003c/a\\u003e, \\u003ca href=\\\"{{privacyUrl}}\\\" target=\\\"_blank\\\"\\u003ePrivacy Statement\\u003c/a\\u003e, that you are over 18, and that {{localEntity}} will automatically continue your subscription starting at the end of your free trial and charge the subscription fee (currently {{price}}/month) to your payment method until you cancel. You may cancel at any time to avoid future charges. To cancel, please visit our \\u003ca href=\'{{howToCancelSubscriptionUrl}}\' target=\\\"_blank\\\"\\u003eCancel Instructions\\u003c/a\\u003e.\",\"membership_paused_html\":\"Your membership is currently paused until {{resumeMembershipDate}}. Would you like to resume your membership now to download \\u003cem\\u003e{{title}}\\u003c/em\\u003e?\",\"not_available\":\"This document is not available for download\",\"starting_date\":\"Starting {{date}}\",\"subscribe\":\"Subscribe\",\"subscription_payment_processed\":\"Subscription payment processed\",\"there_was_an_issue_processing_html\":\"There was an issue processing your request. \\u003ca href=\\\"{{supportPath}}\\\" target=\\\"_blank\\\"\\u003eContact customer service\\u003c/a\\u003e to continue.\",\"there_was_an_issue_with_payment_html\":\"There was an issue with your payment method. \\u003ca href=\\\"{{resubscribePath}}\\\"\\u003eUpdate payment details\\u003c/a\\u003e to continue.\",\"upgrade_your_trial\":\"Upgrade your trial\",\"uploaded\":\"Uploaded By\",\"you_will_be_billed\":\"You will be billed {{amount}} today\",\"zero_of_count_downloads_remaining_in_your_trial\":\"0 of {{count}} free downloads remaining in your trial\"},\"doc_page\":{\"download_document\":\"Download document\",\"download_unavailable\":\"Download unavailable\"},\"doc_preview\":{\"views\":\"{{formatted_views}} views\"},\"end_of_preview\":{\"view_plan_options\":\"View plan options\"},\"errors\":{\"action_incomplete_heading\":\"Action Incomplete\",\"action_incomplete_message\":\"Oops! We\'re sorry, but we couldn\'t complete the action you requested at this time. We appreciate your patience as we come up with a solution.\",\"something_went_wrong\":\"Something went wrong, please try again.\"},\"everand\":{\"cta\":{\"download_free_days\":\"Download free for {{trialDuration}} days\",\"read_free_for_30_days\":\"Read free for 30 days\"}},\"everand_banner\":{\"visit_everand\":\"Visit Everand.\"},\"footer\":{\"about\":\"About\",\"about_scribd_inc\":\"About Scribd, Inc.\",\"accessibility\":\"Accessibility\",\"cancel_contract\":\"Cancel contracts here\",\"contact_us\":\"Contact us\",\"cookie_preferences\":\"Cookie Preferences\",\"copyright\":\"Copyright\",\"copyright_awareness\":\"We take content rights seriously. \\u003ca href={{learnMoreLink}}\\u003eLearn more\\u003c/a\\u003e in our FAQs or \\u003ca href={{reportLink}}\\u003ereport infringement here\\u003c/a\\u003e.\",\"copyright_copy_current_year_scribd\":\"Copyright \\u0026copy; {{currentYear}} Scribd Inc.\",\"footer_menu\":\"Footer menu\",\"gifts\":\"Gifts\",\"help_faq\":\"Help / FAQ\",\"join_our_team_exclamation\":\"Join our team!\",\"legal\":\"Legal\",\"our_blog\":\"Our blog\",\"privacy\":\"Privacy\",\"publishers\":\"Publishers\",\"purchase_help\":\"Purchase help\",\"redeem_gift_card\":\"Redeem gift card\",\"scribd_-_download_on_the_app_store\":\"Scribd - Download on the App Store\",\"scribd_-_get_it_on_google_play\":\"Scribd - Get it on Google Play\",\"scribd_-_get_it_on_kindle_fire\":\"Scribd for Kindle Fire\",\"social\":\"Social\",\"support\":\"Support\",\"terms\":\"Terms\",\"your_privacy_preferences\":\"Your Privacy Choices\"},\"get_app_modal\":{\"an_error_occurred_please_try_again\":\"An error occurred please try again\",\"an_error_occurred_please_try_an\":\"An error occurred please try an email\",\"enter_your_email\":\"Enter your email\",\"enter_your_phone_or_email\":\"Enter your phone or email\",\"get_the_app_to_read\":\"Get the app to read anytime, anywhere.\",\"get_the_app_to_read_and_listen\":\"Get the app to read and listen anytime, anywhere.\",\"link_sent_please_check_your_mobile\":\"Link sent! Please check your mobile device\",\"listen_offline_with_app\":\"Listen offline with the app\",\"phone_or_email\":\"Phone or email\",\"please_enter_a_valid_email\":\"Please enter a valid email\",\"please_enter_a_valid_phone_number\":\"Please enter a valid phone number\",\"please_enter_a_valid_phone_number_or_email\":\"Please enter a valid phone number or email\",\"read_offline_with_app\":\"Read offline with the app\",\"send\":\"Send\"},\"listen_button\":{\"listen_continue\":\"Continue listening\",\"listen_start\":\"Start listening\"},\"lists\":{\"curated_by\":\"Curated by\",\"view_total_titles\":\"View {{count}} title\",\"view_total_titles_plural\":\"View {{count}} titles\"},\"loading_button\":{\"tooltip_content\":{\"loading\":\"Loading...\"}},\"login\":{\"join_lightbox\":{\"email\":\"Email\",\"we_couldn_t_complete_your_request\":\"We couldn\'t complete your request\"}},\"mobile_bottom_navigation_tabs\":{\"active\":\", active\",\"home\":\"Home\",\"quick_navigation\":\"Quick navigation\"},\"modal\":{\"open\":\"Open\",\"opt_in\":{\"stay_in_the_loop\":\"Stay in the loop\"},\"upsell\":{\"cancel_anytime\":\"Cancel anytime\",\"continue_with_free_trial\":\"Continue with {{trialDuration}}-day free trial\",\"continue_with_limited_access\":\"Continue with limited access\",\"or\":\"or\"}},\"modal_redirect\":{\"redirecting\":\"Redirecting\",\"subscribe_to_continue_reading_copy\":\"Subscribe to continue reading\"},\"navigation\":{\"sidebar\":{\"selected\":\", selected\"},\"upload\":\"Upload\"},\"plan_card\":{\"per_month\":\"/month\"},\"plan_type\":{\"standard_monthly\":\"Standard Monthly\"},\"plans\":{\"get_more_unlocks\":\"Get more unlocks\",\"moving_to_plus\":\"Moving to Plus on {{date}}\",\"next_unlock_available\":\"Your next unlock will be available on {{refresh_date}}\",\"no_unlocks_available\":\"0 unlocks available\",\"num_unlocks_available\":\"{{count}} unlock available.\",\"num_unlocks_available_plural\":\"{{count}} unlocks available.\",\"num_unlocks_available_renew_monthly\":\"{{count}} unlock available. Unlocks renew monthly on {{refresh_date}} and do not carry over.\",\"num_unlocks_available_renew_monthly_plural\":\"{{count}} unlocks available. Unlocks renew monthly on {{refresh_date}} and do not carry over.\",\"renew_and_upgrade\":\"Renew and upgrade to Plus to unlock this title.\",\"renew_get_next_unlock\":\"Renew your subscription to get your next unlock on {{refresh_date}}.\",\"resume_and_upgrade\":\"Resume and upgrade to Plus to unlock this title.\",\"switch_back_to_plus_to_get_your_next_unlock\":\"Switch back to Plus to get your next unlock on {{renew_date}}.\",\"unlimited\":\"Unlimited\",\"unlock_title\":\"Unlock title\",\"unlocked\":\"Unlocked\",\"unlocks_available_expire_on_date_html\":\"{{count}} unlock available. Unused unlocks expire on {{expire_date}}.\",\"unlocks_available_expire_on_date_html_plural\":\"{{count}} unlocks available. Unused unlocks expire on {{expire_date}}.\",\"unused_unlocks_expire_on_date\":\"Unused unlocks expire on {{expire_date}}.\",\"upgrade_to_unlock\":\"Upgrade to Plus to unlock\",\"you_have_unlocked_title\":\"You\'ve unlocked this title.\",\"youve_unlocked_this_title\":\"You’ve unlocked this title.\"},\"play_sample_button\":{\"pause\":\"Pause\",\"play_sample\":\"Play sample\"},\"podcast_episode\":{\"from\":\"From\"},\"podcast_series\":{\"num_episodes\":\"{{ count }} episode\",\"num_episodes_plural\":\"{{ count }} episodes\",\"num_podcast_episodes\":\"{{count, locale}} podcast episode\",\"num_podcast_episodes_plural\":\"{{count, locale}} podcast episodes\"},\"react\":{\"button_menu\":{\"close_menu\":\"Close menu\"},\"save_button\":{\"failed_to_remove_title\":\"Failed to remove title\",\"failed_to_save_title\":\"Failed to save title\",\"remove_short_title_from_saved\":\"Remove {{short_title}} from Saved\",\"save_short_title_for_later\":\"Save {{short_title}} For Later\",\"sign_up_to_save\":\"Sign up to save this title\"},\"sharing_buttons\":{\"check_out_props_share_title_on_scribd\":\"Check out {{props_share_title}} on Scribd\",\"i_m_reading_props_document_collection_name_on_scribd_props_document_collection_url\":\"I’m reading {{props_document_collection_name}} on Scribd: {{props_document_collection_url}}\",\"read_props_document_collection_name_on_scribd\":\"Read {{props_document_collection_name}} on Scribd\",\"share_on_facebook_opens_a_new\":\"Share on Facebook, opens a new window\",\"share_on_linkedin_opens_a_new\":\"Share on LinkedIn, opens a new window\",\"share_on_twitter_opens_a_new\":\"Share on Twitter, opens a new window\",\"share_with_email_opens_mail_client\":\"Share with Email, opens mail client\",\"sharing_options\":\"Sharing Options\"}},\"reading_progress\":{\"base\":{\"we_ve_moved_you_to_where_you\":\"We\'ve moved you to where you read on your {{progress_device_name}}\"}},\"remove_saved_confirm_modal\":{\"removing_from_saved_will_also_delete\":\"Removing from Saved will also delete the title from your lists.\",\"this_title_is_also_in_a_list\":\"This title is also in a list.\"},\"renew_upgrade_modal\":{\"please_renew_your_subscription_first_in\":\"Please renew your subscription first in order to upgrade to Plus to unlock this title.\",\"renew_and_upgrade_to_unlock\":\"Renew and upgrade to unlock this title\",\"renew_subscription\":\"Renew subscription\"},\"resume_membership\":\"Resume subscription\",\"save_button\":{\"save\":\"Save\",\"saved\":\"Saved\"},\"sign_in_to_continue\":\"Sign in to continue\",\"skip_link\":{\"skip_content\":\"Skip content\"},\"social_buttons\":{\"scribd_on_facebook_aria_label\":\"Scribd on Facebook\",\"scribd_on_instagram_aria_label\":\"Scribd on Instagram\",\"scribd_on_pinterest_aria_label\":\"Scribd on Pinterest\",\"scribd_on_twitter_aria_label\":\"Scribd on Twitter\"},\"star_ratings\":{\"clear_rating\":\"Clear rating\",\"i_didnt_like_it_at_all\":\"I didn\'t like it at all\",\"i_didnt_like_it_that_much\":\"I didn\'t like it that much\",\"i_liked_it\":\"I liked it\",\"i_loved_it\":\"I loved it\",\"i_thought_it_was_ok\":\"I thought it was OK\",\"no_ratings\":\"0 ratings\",\"rate_as_rating_out_of_5\":\"Rate as {{value}} out of 5\",\"rating_rating_to_display_out_of_5_stars\":\"Rating: {{ratingToDisplay}} out of 5 stars\",\"ratings\":\"rating\",\"ratings_plural\":\"ratings\",\"saved\":\"Saved!\",\"selected\":\"(selected)\",\"user_rating_star_rating_saved\":\"{{userRating}} star rating saved\"},\"start_exploring\":\"Start exploring\",\"text_links\":{\"all_categories\":\"All categories\",\"related_authors\":\"Related authors\",\"view_all_categories_in_category\":\"View all categories in {{category}}\",\"view_fewer\":\"View fewer\",\"view_more\":\"View More\"},\"time_remaining\":{\"hours\":\"{{count}} hr left\",\"hours_plural\":\"{{count}} hrs left\",\"minutes\":\"{{count}} min left\",\"minutes_plural\":\"{{count}} mins left\",\"pages\":\"{{count}} page left\",\"pages_plural\":\"{{count}} pages left\"},\"trial\":{\"cancel_anytime\":\"Cancel anytime.\"},\"trial_duration\":{\"first_days_free\":\"Your first {{trialDuration}} days are free.\",\"read_free_days\":\"Read free for {{trialDuration}} days\",\"start_trial_days\":\"Start your free {{trialDuration}} days\"}},\"slideshare\":{\"accessibility\":{\"logo\":\"Slideshare, a Scribd company\"},\"checkout\":{\"hero_banner_title\":\"Your Slideshare presentation\"},\"join\":{\"ad_free_sign_up_sub_title\":\"You’ll get instant access to millions of presentations, documents, ebooks, audiobooks, magazines, podcasts and more. We’ll remind you before your trial ends.\",\"ad_free_sign_up_title\":\"To enjoy Slideshare ad-free, sign up for a free {{trialDuration}}-day Scribd trial\",\"already_have_scribd_account\":\"Already have a Scribd account?\",\"create_account\":\"Create a Scribd account to continue\",\"get_instant_access\":\"Get instant access to millions of documents, ebooks, audiobooks, magazines, podcasts, and more. All in one subscription.\",\"need_account_sign_in_slideshare\":\"You can use this account to access Slideshare and Scribd.\",\"to_continue_reading\":\"To continue reading on Slideshare, sign up for a {{trialDuration}} day free Scribd trial\",\"trial_duration\":\"To download on Slideshare, sign up for a {{trialDuration}} day free Scribd trial\"},\"login\":{\"sign_in\":\"Sign in with your Scribd account to continue\"}},\"unified_checkout\":{\"change_plans\":{\"upgrade_to_plus\":\"Upgrade to Plus\"},\"payment_options\":{\"current_payment\":\"Current payment method\"}},\"webpack\":{\"doc_page\":{\"src\":{\"App\":{\"Page\":{\"BlurPromo\":{\"BlurPromo\":{\"become_a_scribd_member_to_read\":\"Become a Scribd member to read and download full documents.\",\"cancel_anytime\":\"Cancel anytime\",\"continue_for_free\":\"Continue for Free\",\"continue_reading_with_trial\":\"Continue Reading with Trial\",\"update_payment\":\"Update Payment\",\"update_payment_for_full_access\":\"Update payment for full access.\"}},\"Body\":{\"Body\":{\"share_this_document\":\"Share this document\"},\"FixedViewportBottomComponents\":{\"CollapseButton\":{\"CollapseButton\":{\"click_to_collapse_related_titles\":\"Click to collapse Related Titles\",\"click_to_expand_related_titles\":\"Click to expand Related Titles\"}}},\"Metadata\":{\"Extra\":{\"Extra\":{\"original_title_no_colon\":\"Original Title\"}}},\"Toolbar\":{\"Toolbar\":{\"jump_to_page\":\"Jump to Page\"}}},\"annotations\":{\"AnnotationPopover\":{\"AnnotationPopover\":{\"annotation_text_page_annotation_page_nread_more\":\"\\\"{{annotation_text}}…\\\" (page {{annotation_page}})\\\\nRead more:\"}},\"NoteEditor\":{\"NoteEditor\":{\"cancel\":\"Cancel\",\"note_note_group_notes_indexof_active_note_id_1_of_note_group_notes_length\":\"Note {{note_group_notes_indexof_active_note_id_1}} of {{note_group_notes_length}}\",\"save\":\"Save\",\"write_a_note\":\"Write a note…\"}}},\"modals\":{\"Description\":{\"Description\":{\"document_information\":\"Document Information\"}},\"ShareQuote\":{\"ShareQuote\":{\"share_quote\":\"Share Quote\"}}}}},\"body\":{\"sidebar\":{\"on_created_at\":\"on {{created_at}}\"}},\"shared\":{\"actions\":{\"modals\":{\"redirecting\":\"Redirecting...\",\"unable_to_unpause_account_please_try\":\"Unable to unpause account. Please try again\"}},\"base_page\":{\"an_error_occurred_please_try_again\":\"An error occurred please try again\"},\"components\":{\"modals\":{\"Download\":{\"Receipt\":{\"Receipt\":{\"uploaded_by_this_props_document_author_name\":\"Uploaded by {{this_props_document_author_name}}\"}}}}},\"download_button\":{\"button\":{\"download\":\"Download\"}},\"store\":{\"actions\":{\"modals\":{\"subscribe_to_continue_reading\":\"Subscribe to Continue Reading\"}}}}}}}}}}");Scribd.e2e_enabled = false;</script><script type="application/javascript">function prefetchResource(u){var x = new XMLHttpRequest();x.open("GET", u, true);x.send()};</script></body></html>