







Los applets de Java son pequeñas aplicaciones escritas en el lenguaje de programación Java , u otro lenguaje de programación que se compile a código de bytes de Java , y que se entregan a los usuarios en forma de código de bytes de Java .
En el momento de su introducción, el uso previsto era que el usuario iniciara el applet desde una página web y que este se ejecutara dentro de una máquina virtual Java (JVM) en un proceso independiente del navegador web . Un applet de Java podía aparecer en un marco de la página web, en una nueva ventana de aplicación, en un programa de Sun llamado appletviewer [ 6 ] o como una herramienta independiente para probar applets.
Los applets de Java se introdujeron en la primera versión del lenguaje Java, que se lanzó en 1995. A partir de 2013, los principales navegadores web comenzaron a eliminar gradualmente el soporte para NPAPI , la tecnología subyacente que usaban los applets para ejecutarse, y los applets se volvieron completamente inutilizables para ejecutarse entre 2015 y 2017. Los applets de Java fueron declarados obsoletos por Java 9 en 2017, [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] declarados obsoletos para su eliminación por Java 17 en 2021, [ 12 ] y eliminados por Java 26 en 2026. [ 13 ] [ 14 ]
Los applets de Java generalmente se escribían en Java, pero también se podían usar otros lenguajes como Jython , JRuby , Pascal , [ 15 ] Scala , NetRexx o Eiffel (a través de SmartEiffel ).
A diferencia de las primeras versiones de JavaScript, los applets de Java tenían acceso a la aceleración de hardware 3D , lo que los hacía idóneos para visualizaciones complejas y de gran capacidad de cálculo. Desde la introducción de los applets, JavaScript ha incorporado soporte para gráficos acelerados por hardware mediante la tecnología canvas (o específicamente WebGL , y posteriormente WebGPU en el caso de gráficos 3D), [ 16 ] [ 17 ] así como la compilación justo a tiempo . [ 18 ]
Dado que el código de bytes de Java es multiplataforma (o independiente de la plataforma), los applets de Java pueden ser ejecutados por clientes en diversas plataformas, como Microsoft Windows , FreeBSD , Unix , macOS y Linux . No pueden ejecutarse en dispositivos móviles, ya que estos no admiten la ejecución del código de bytes estándar de la JVM de Oracle. Los dispositivos Android pueden ejecutar código escrito en Java compilado para el entorno de ejecución de Android .
Descripción general
Los applets se utilizan para proporcionar funciones interactivas a las aplicaciones web que no se pueden ofrecer solo con HTML . Pueden capturar la entrada del ratón y también incluyen controles como botones o casillas de verificación . En respuesta a las acciones del usuario, un applet puede modificar el contenido gráfico. Esto hace que los applets sean ideales para demostraciones, visualizaciones y enseñanza. Existen colecciones de applets en línea para el estudio de diversas materias, desde física hasta fisiología cardíaca.
Un applet también puede ser solo un área de texto, proporcionando, por ejemplo, una interfaz de línea de comandos multiplataforma para un sistema remoto. Si es necesario, un applet puede salir de su área dedicada y ejecutarse como una ventana independiente. Sin embargo, los applets tienen muy poco control sobre el contenido de la página web fuera de su área dedicada, por lo que son menos útiles para mejorar la apariencia del sitio en general, a diferencia de otros tipos de extensiones de navegador (aunque también se conocen applets como teletipos de noticias o editores WYSIWYG ). Los applets también pueden reproducir contenido multimedia en formatos que el navegador no admite de forma nativa.
Las páginas codificadas en HTML pueden incluir parámetros que se pasan al applet. Por ello, el mismo applet puede tener un aspecto diferente según los parámetros que se le hayan pasado.
Dado que los applets existían antes de HTML5 , y que la interfaz DOM de CSS y JavaScript era estándar, también se usaban ampliamente para efectos sencillos como el efecto de pasar el ratón por encima y los botones de navegación. Este enfoque, que planteaba graves problemas de accesibilidad y un uso indebido de los recursos del sistema, ya no se utiliza y se desaconsejaba encarecidamente incluso en su momento.
Información técnica
La mayoría de los navegadores ejecutaban los applets de Java en un entorno aislado , lo que impedía que los applets accedieran a datos locales como el sistema de archivos . [ 19 ] El código del applet se descargaba de un servidor web , después de lo cual el navegador incrustaba el applet en una página web o abría una nueva ventana que mostraba la interfaz de usuario del applet .
Las primeras implementaciones implicaban la descarga de cada applet clase por clase. Si bien las clases son archivos pequeños, suelen ser muchos, por lo que los applets se ganaron la reputación de ser componentes de carga lenta. Sin embargo, desde que .jarse introdujeron los archivos, un applet generalmente se entrega como un único archivo con un tamaño similar al de una imagen (de cientos de kilobytes a varios megabytes).
Las bibliotecas y los entornos de ejecución del sistema Java son compatibles con versiones anteriores, lo que permite escribir código que se ejecute tanto en las versiones actuales como en las futuras de la máquina virtual Java.
Tecnologías similares
Muchos desarrolladores de Java, blogs y revistas recomendaron que se utilizara la tecnología Java Web Start en lugar de applets. [ 20 ] Java Web Start permitía lanzar código de applet sin modificar, que luego se ejecutaba en una ventana separada (no dentro del navegador que lo invocaba).
A veces se compara informalmente un servlet de Java con un applet del lado del servidor, pero es diferente en su lenguaje, funciones y en cada una de las características descritas aquí sobre los applets.
Incrustar en una página web
El applet se mostraría en la página web utilizando el appletelemento HTML obsoleto, [ 21 ] o el objectelemento recomendado. [ 22 ] El embedelemento se puede usar [ 23 ] con los navegadores de la familia Mozilla ( embedestaba obsoleto en HTML 4 pero está incluido en HTML 5). Esto especifica la fuente y la ubicación del applet. Las etiquetas objecty embedtambién pueden descargar e instalar la máquina virtual Java (si es necesario) o al menos conducir a la página del complemento. Las etiquetas applety objecttambién admiten la carga de los applets serializados que comienzan en algún estado particular (en lugar del inicial). Las etiquetas también especifican el mensaje que aparece en lugar del applet si el navegador no puede ejecutarlo por alguna razón.
Sin embargo, a pesar de objectser oficialmente una etiqueta recomendada en 2010, su compatibilidad objectaún no era uniforme entre los navegadores, y Sun seguía recomendando la appletetiqueta anterior para su implementación en entornos multinavegador, [ 24 ] ya que seguía siendo la única compatible de forma consistente con los navegadores más populares. Para admitir varios navegadores, el uso de la objectetiqueta para incrustar un applet requeriría JavaScript (que reconoce el navegador y ajusta la etiqueta), el uso de etiquetas adicionales específicas del navegador o la entrega de una salida adaptada desde el servidor.
El complemento de navegador Java dependía de NPAPI , para el cual casi todos los proveedores de navegadores web han dejado de brindar soporte o no implementan, debido a su antigüedad y problemas de seguridad. En enero de 2016, Oracle anunció que los entornos de ejecución de Java basados en JDK 9 dejarían de admitir el complemento de navegador. [ 25 ]
Ventajas
Un applet de Java podría tener cualquiera o todas las siguientes ventajas: [ 26 ]
- Fue sencillo hacerlo funcionar en FreeBSD, Linux, Microsoft Windows y macOS ; es decir, lograr que fuera multiplataforma. La mayoría de los navegadores web admitieron applets durante la primera década del siglo XXI; sin embargo, desde entonces, la mayoría de los navegadores han dejado de ofrecer soporte para applets por motivos de seguridad.
- El mismo miniaplicativo funcionaría en todas las versiones de Java instaladas simultáneamente, en lugar de solo en la última versión del complemento . Sin embargo, si un miniaplicativo requiere una versión posterior del Entorno de Ejecución de Java (JRE), el cliente se vería obligado a esperar durante la descarga.
- La mayoría de los navegadores web almacenaban en caché los applets para que se cargaran rápidamente al volver a una página web. Los applets también mejoraban con el uso: tras ejecutar el primer applet, la JVM ya estaba en funcionamiento y los applets posteriores se iniciaban rápidamente (la JVM debía reiniciarse cada vez que se iniciaba el navegador). Las versiones 1.5 y posteriores de JRE reiniciaban la JVM al navegar entre páginas, como medida de seguridad, lo que eliminaba esa mejora de rendimiento.
- Trasladaba el trabajo del servidor al cliente , lo que hacía que la solución web fuera más escalable en función del número de usuarios/clientes.
- Si un programa independiente (como Google Earth ) se comunica con un servidor web, este servidor normalmente necesita ser compatible con todas las versiones anteriores para los usuarios que no hayan actualizado su software cliente. En cambio, un navegador carga (y almacena en caché) la última versión del applet, por lo que no es necesario que sea compatible con versiones anteriores.
- El applet admitía de forma nativa el cambio de estado del usuario, como la posición de las figuras en el tablero de ajedrez.
- Los desarrolladores podían crear y depurar un applet directamente, simplemente creando una rutina principal (ya sea en la clase del applet o en una clase aparte) y llamando a los métodos init() y start() del applet, lo que permitía desarrollarlo en su entorno de desarrollo Java SE preferido . Solo era necesario volver a probar el applet en el programa AppletViewer o en un navegador web para asegurarse de que cumplía con las restricciones de seguridad.
- Un applet no confiable no tiene acceso a la máquina local y solo puede acceder al servidor de origen. Esto hace que los applets sean mucho más seguros que los ejecutables nativos a los que reemplazarían. Sin embargo, un applet firmado podría tener acceso completo a la máquina en la que se ejecuta, si el usuario lo autoriza.
- Los applets de Java eran rápidos, con un rendimiento similar al del software instalado de forma nativa.
Desventajas
Los applets de Java presentaban las siguientes desventajas en comparación con otras tecnologías web del lado del cliente:
- Los applets de Java dependían del Entorno de Ejecución de Java (JRE), un paquete de software complejo y pesado. Además, normalmente requerían un complemento para el navegador web. Algunas organizaciones solo permiten la instalación de software por parte de un administrador. En consecuencia, los usuarios no podían ver los applets a menos que uno fuera lo suficientemente importante como para justificar contactar al administrador y solicitar la instalación del JRE y el complemento.
- If an applet requires a newer JRE than available on the system, the user running it the first time will need to wait for the large JRE download to complete.
- Mobile browsers on iOS or Android, never run Java applets at all.[27] Even before the deprecation of applets on all platforms, desktop browsers phased out Java applet support concurrently with the rise of mobile operating systems.
- There was no standard to make the content of applets available to screen readers. Therefore, applets harmed the accessibility of a web site to users with special needs.
- As with any client-side scripting, security restrictions made it difficult or even impossible for some untrusted applets to achieve their desired goals. Only by editing the java.policy file in the JAVA JRE installation could one grant access to the local filesystem or system clipboard, or to network sources other than the one that served the applet to the browser.
- Most users did not care about the difference between untrusted and trusted applets, so this distinction did not help much with security. The ability to run untrusted applets was eventually removed entirely to fix this, before all applets were removed.
Compatibility-related lawsuits
Sun made considerable efforts to ensure compatibility is maintained between Java versions as they evolve, enforcing Java portability by law if required. Oracle seems to be continuing the same strategy.
1997: Sun vs Microsoft
The 1997 lawsuit,[28] was filed after Microsoft created a modified Java Virtual Machine of their own, which shipped with Internet Explorer. Microsoft added about 50 methods and 50 fields[28] into the classes within the java.awt, java.lang, and java.io packages. Other modifications included removal of RMI capability and replacement of Java Native Interface from JNI to RNI, a different standard. RMI was removed because it only easily supports Java to Java communications and competes with Microsoft DCOM technology. Applets that relied on these changes or just inadvertently used them worked only within Microsoft's Java system. Sun sued for breach of trademark, as the point of Java was that there should be no proprietary extensions and that code should work everywhere. Microsoft agreed to pay Sun $20 million, and Sun agreed to grant Microsoft limited license to use Java without modifications only and for a limited time.[29]
2002: Sun vs Microsoft
Microsoft continuó distribuyendo su propia máquina virtual Java sin modificar. Con el paso de los años, se volvió extremadamente obsoleta, pero seguía siendo la predeterminada para Internet Explorer. Un estudio posterior reveló que los applets de esa época a menudo contenían sus propias clases que reflejaban Swing y otras características más recientes de forma limitada. [ 30 ] En 2002, Sun presentó una demanda antimonopolio , alegando que los intentos de Microsoft de monopolizar ilegalmente habían perjudicado la plataforma Java. Sun exigió que Microsoft distribuyera la implementación binaria actual de la tecnología Java de Sun como parte de Windows, que la distribuyera como una actualización recomendada para los sistemas operativos de escritorio de Microsoft más antiguos y que detuviera la distribución de la Máquina Virtual de Microsoft (ya que su tiempo de licencia, acordado en la demanda anterior, había expirado). [ 29 ] Microsoft pagó 700 millones de dólares por cuestiones antimonopolio pendientes, otros 900 millones de dólares por cuestiones de patentes y una regalía de 350 millones de dólares para usar el software de Sun en el futuro. [ 31 ]
Seguridad
Había dos tipos de applets con modelos de seguridad muy diferentes: applets firmados y applets sin firmar. [ 32 ] A partir de Java SE 7 Update 21 (abril de 2013), se recomienda que los applets y las aplicaciones Web-Start se firmen con un certificado de confianza, y aparecen mensajes de advertencia al ejecutar applets sin firmar. [ 33 ] Además, a partir de Java 7 Update 51, los applets sin firmar se bloquearon de forma predeterminada; se podían ejecutar creando una excepción en el Panel de control de Java. [ 34 ]
No firmado
Las limitaciones en los applets sin firmar se consideraban "draconianas": no tienen acceso al sistema de archivos local y el acceso web se limita al sitio de descarga del applet; además, existen muchas otras restricciones importantes. Por ejemplo, no pueden acceder a todas las propiedades del sistema, usar su propio cargador de clases , llamar a código nativo , ejecutar comandos externos en un sistema local ni redefinir clases pertenecientes a paquetes principales incluidos como parte de una versión de Java. Si bien pueden ejecutarse en un marco independiente, dicho marco contiene una cabecera que indica que se trata de un applet no confiable. Una llamada inicial exitosa al método prohibido no crea automáticamente una brecha de seguridad, ya que un controlador de acceso verifica toda la pila del código que realiza la llamada para asegurarse de que no provenga de una ubicación incorrecta.
Como ocurre con cualquier sistema complejo, desde el lanzamiento de Java se han descubierto y corregido numerosos problemas de seguridad. Algunos de ellos (como el fallo de seguridad en la serialización de Calendar) persistieron durante muchos años sin que nadie se percatara. Otros se han detectado en malware en circulación.
Algunos estudios mencionan que los applets pueden provocar fallos en el navegador o un consumo excesivo de recursos de la CPU , pero estos problemas se clasifican como molestias y no como verdaderas vulnerabilidades de seguridad. Sin embargo, los applets sin firmar pueden participar en ataques combinados que explotan múltiples errores de configuración graves en otras partes del sistema. Un applet sin firmar también puede ser más peligroso si se ejecuta directamente en el servidor donde está alojado, ya que, si bien el código fuente le permite comunicarse con el servidor, ejecutarlo dentro de él puede eludir el cortafuegos. Un applet también podría intentar ataques de denegación de servicio (DoS) contra el servidor, pero generalmente quienes administran el sitio web también administran el applet, lo que hace que esto sea poco probable. Las comunidades pueden solucionar este problema mediante la revisión del código fuente o ejecutando los applets en un dominio dedicado.
El applet sin firmar también puede intentar descargar malware alojado en el servidor de origen. Sin embargo, solo podría almacenar dicho archivo en una carpeta temporal (ya que se trata de datos transitorios) y no tiene forma de completar el ataque ejecutándolo. Se intentó utilizar applets para propagar exploits de Phoenix y Siberia de esta manera, pero estos exploits no utilizan Java internamente y también se distribuyeron de otras formas.
Firmado
Un applet firmado [ 35 ] contiene una firma que el navegador debe verificar mediante un servidor de autoridad de certificación independiente y remoto . La generación de esta firma requiere herramientas especializadas e interacción con los responsables del servidor de la autoridad. Una vez verificada la firma y aprobada por el usuario de la máquina actual, el applet firmado puede obtener más permisos, equiparándose a un programa independiente. El motivo es que el autor del applet es conocido y responsable de cualquier daño intencional. Este enfoque permite utilizar applets para muchas tareas que no son posibles mediante scripts del lado del cliente. Sin embargo, también implica una mayor responsabilidad por parte del usuario, quien debe decidir en quién confiar. Entre las preocupaciones relacionadas se incluyen la falta de respuesta del servidor de la autoridad, la evaluación errónea de la identidad del firmante al emitir certificados y la posibilidad de que los editores de applets conocidos sigan realizando acciones que el usuario no apruebe. Por lo tanto, los applets firmados que aparecieron a partir de Java 1.1 podrían presentar mayores problemas de seguridad.
Firmado por el autor
Los applets autofirmados, es decir, aquellos firmados por el propio desarrollador, pueden suponer un riesgo de seguridad. Los complementos de Java emiten una advertencia al solicitar autorización para un applet autofirmado, ya que su funcionamiento y seguridad solo están garantizados por el desarrollador y no han sido confirmados de forma independiente. Estos certificados autofirmados suelen utilizarse únicamente durante el desarrollo previo al lanzamiento, cuando la confirmación de seguridad por parte de terceros no es importante. Sin embargo, la mayoría de los desarrolladores de applets buscan la firma de terceros para garantizar que los usuarios confíen en la seguridad del applet.
Los problemas de seguridad de Java no son fundamentalmente diferentes de problemas similares de cualquier plataforma de scripting del lado del cliente [ 36 ] . En particular, todos los problemas relacionados con los applets firmados también se aplican a los componentes ActiveX de Microsoft .
Desde 2014, los applets autofirmados y sin firmar ya no son compatibles con los complementos Java ni con Java Web Start. Por lo tanto, los desarrolladores que deseen implementar applets Java no tienen más remedio que adquirir certificados de confianza de fuentes comerciales.
Alternativas
Existen tecnologías alternativas (por ejemplo, WebAssembly [ 37 ] y JavaScript ) que satisfacen la totalidad o gran parte de las posibilidades que ofrecía un applet. JavaScript podía coexistir con applets en la misma página, ayudar a lanzarlos (por ejemplo, en un marco independiente o proporcionando soluciones alternativas de la plataforma) y, posteriormente, ser llamado desde el código del applet. A medida que JavaScript mejoraba sus funcionalidades y rendimiento, el soporte y el uso de applets disminuyeron, hasta su eventual eliminación.
Véase también
Referencias
- ↑ "Sitio web del visualizador de proteínas 3D (Openastexviewer) bajo licencia LGPL" . Archivado del original el 1 de agosto de 2009. Consultado el 21 de septiembre de 2009 .
- ↑ "Generación de un potencial de acción en células cardíacas mediante un applet interactivo de Java. Excitable media. movies excitable media Fitzhug nagumo beeler reuter luo rudy model mathematical cell modeling" . Thevirtualheart.org . Consultado el 22 de marzo de 2022 .
- ↑ "Sitio web del applet del conjunto de Mandelbrot bajo licencia GPL" . Archivado del original el 8 de mayo de 2013. Consultado el 29 de julio de 2013 .
- ↑ "Página principal del applet de ajedrez bajo BSD" . Archivado del original el 7 de septiembre de 2009.
- ↑ "La próxima generación en tecnología de complementos Java para applets" . Archivado del original el 4 de abril de 2009. Consultado el 25 de septiembre de 2009 .
- ↑ "appletviewer — Java SE 8" . Oracle . Consultado el 5 de diciembre de 2023 .
- ↑ "Notas de la versión de Java 9" . Oracle.com .
- ↑ "JEP 289: Desaprobar la API de Applet" . Openjdk.java.net . Consultado el 22 de marzo de 2022 .
- ↑ "Blog JPG: Transición a una web sin complementos" . Blogs.oracle.com .
- ↑ "Blog de JPG: Más actualizaciones sobre 'Transición a una web sin complementos'"" . Blogs.oracle.com .
- ↑ "Actualización de la hoja de ruta del cliente Java" (PDF) . Oracle.com . Consultado el 22 de marzo de 2022 .
- ↑ "JEP 398: Desaprobar la API de Applet para su eliminación" . openjdk.org . Consultado el 31 de octubre de 2025 .
- ↑ "Hasta luego y gracias por todos los applets – Inside.java" . inside.java . Consultado el 15 de diciembre de 2025 .
- ↑ "JEP 504: Eliminar la API de Applet" . openjdk.org . Consultado el 31 de octubre de 2025 .
- ↑ "FPC JVM – Wiki de Free Pascal" . Wiki.freepascal.org . Consultado el 22 de marzo de 2022 .
- ↑ "canvas – HTML" . Red de desarrolladores de Mozilla . Consultado el 15 de agosto de 2015 .
- ↑ "WebGL – Interfaces de API web" . Mozilla Developer Network . Consultado el 15 de agosto de 2015 .
- ↑ "Elementos de diseño – Chrome V8" . Consultado el 15 de agosto de 2015 .
- ↑ McGraw, Gary; Felten, Edward (1999). "Lo que el código Java no confiable no puede hacer" . Securingjava.com . Consultado el 26 de diciembre de 2021 .
- ↑ Srinivas, Raghavan N. (6 de julio de 2001). "Java Web Start al rescate" . JavaWorld . Recuperado el 13 de julio de 2020 .
- ↑ "Objetos, imágenes y applets en documentos HTML" . W3.org . Consultado el 22 de marzo de 2022 .
- ↑ "Objetos, imágenes y applets en documentos HTML" . W3.org . Consultado el 22 de marzo de 2022 .
- ↑ "Descargas de Java para todos los sistemas operativos" . Java.com. 14 de agosto de 2012. Consultado el 14 de junio de 2013 .
- ↑ "Posición de Sun sobre las etiquetas de applets y objetos" . Archivado del original el 9 de junio de 2010. Consultado el 14 de enero de 2010 .
- ↑ "Oracle deja de dar soporte al complemento de navegador Java y se prepara para su desaparición" . Ars Technica . 28 de enero de 2016. Consultado el 15 de abril de 2016 .
- ↑ Descripción general oficial de Oracle sobre la tecnología de applets de Java
- ↑ "¿Cómo consigo Java para dispositivos móviles?" . Java.com . 30 de julio de 2014.
- 1 2 Zukowski, John (1 de octubre de 1997). "¿Qué significa la demanda de Sun contra Microsoft para los desarrolladores de Java?" . JavaWorld . Recuperado el 13 de julio de 2020 .
- 1 2 "Página del periódico Sun dedicada a las demandas contra Microsoft" . Archivado del original el 19 de agosto de 2009.
- ↑ Kenai.com (2011) Archivado el 23 de agosto de 2011 en Wayback Machine . Problemas más comunes encontrados en el código de los applets revisados.
- ↑ "Microsoft y Sun Microsystems firman un amplio acuerdo de cooperación; resuelven litigios pendientes: el acuerdo de diez años establece un nuevo marco para la cooperación en la industria; reduce costos y complejidad para los clientes" . Microsoft . 25 de febrero de 2010. Archivado del original el 25 de febrero de 2010. Consultado el 22 de marzo de 2022 .
- ↑ "Qué pueden y no pueden hacer los applets (Tutoriales de Java > Implementación > Applets de Java)" . Docs.oracle.com . Consultado el 22 de marzo de 2022 .
- ↑ "Java Applet & Web Start – Firma de código" . Oracle . Consultado el 28 de febrero de 2014 .
- ↑ "¿Qué debo hacer cuando veo una advertencia de seguridad de Java?" . Oracle . Consultado el 28 de febrero de 2014 .
- ↑ "Seguridad de applets Java | Seguridad de la plataforma Java 2 | InformIT" . Informit.com . Consultado el 22 de marzo de 2022 .
- ↑ "Para ser justos, actualmente muchos más usuarios de la World Wide Web utilizan el producto de Netscape que el de Microsoft, aunque la brecha parece estar reduciéndose" . Wiley.com . Consultado el 17 de marzo de 2017 .
- ↑ "Mozilla intenta hacer Java como debería haber sido: con una especificación WASI para todos los dispositivos, ordenadores y sistemas operativos" . Theregister.com . Consultado el 6 de octubre de 2020 .
Enlaces externos
- Última versión de la máquina virtual Java de Sun Microsystems (incluye complementos para navegadores que permiten ejecutar applets de Java en la mayoría de los navegadores web).
- Información sobre cómo escribir applets de Oracle
- Miniaplicaciones de demostración de Sun Microsystems ( JDK 1.4 – incluye código fuente)
- Java (lenguaje de programación)
- Java (plataforma de software)
- Web 1.0