Miniaplicativo Java - Java applet

Um miniaplicativo Java que foi criado como material de demonstração suplementar para uma publicação científica
Um miniaplicativo Java que usa aceleração de hardware 3D para visualizar arquivos 3D em formato .pdb baixados de um servidor
Usando o miniaplicativo para animação não trivial que ilustra o tópico biofísico (íons que se movem aleatoriamente passam por portas de tensão)
Usando um miniaplicativo Java para visualização intensiva de computação do conjunto Mandelbrot
A velocidade de execução dos applets é suficiente para, por exemplo, fazer jogos de computador não triviais que jogam xadrez .
NASA World Wind (código aberto) é um miniaplicativo de segunda geração que faz uso intenso de OpenGL e download de dados sob demanda para fornecer um mapa 3D detalhado do mundo.
Acesso da Web ao console do servidor no nível do hardware com a ajuda de um miniaplicativo Java
Demonstração de processamento de imagem usando transformada de Fourier bidimensional

Os miniaplicativos Java eram pequenos aplicativos escritos na linguagem de programação Java , ou outra linguagem de programação que compila para bytecode Java e entregue aos usuários na forma de bytecode Java . O usuário iniciou o miniaplicativo Java de uma página da web e o miniaplicativo foi executado em uma máquina virtual Java (JVM) em um processo separado do próprio navegador da web . Applet Java Um poderia aparecer em um quadro da página web, uma nova janela do aplicativo, Sun 's appletviewer , ou uma ferramenta stand-alone para testar applets.

Os miniaplicativos Java foram introduzidos na primeira versão da linguagem Java, que foi lançada em 1995. A partir de 2013, os principais navegadores da web começaram a descontinuar o suporte para os miniaplicativos de tecnologia subjacentes usados ​​para serem executados , com os miniaplicativos tornando-se completamente incapazes de serem executados em 2015 –2017. Os miniaplicativos Java foram descontinuados desde Java 9 em 2017.

Os miniaplicativos Java geralmente eram escritos em Java, mas outras linguagens como Jython , JRuby , Pascal , Scala ou Eiffel (via SmartEiffel ) também podiam ser usadas.

Os miniaplicativos Java são executados em velocidades muito rápidas e, até 2011, eram muitas vezes mais rápidos do que o JavaScript . Ao contrário do JavaScript, os miniaplicativos Java tinham acesso à aceleração de hardware 3D , tornando-os adequados para visualizações não triviais e de computação intensiva. Como os navegadores ganharam suporte para gráficos acelerados por hardware graças à tecnologia canvas (ou especificamente WebGL no caso de gráficos 3D), bem como JavaScript compilado just-in-time , a diferença de velocidade se tornou menos perceptível.

Como o bytecode Java é multiplataforma (ou independente da plataforma), os miniaplicativos Java podem ser executados por navegadores (ou outros clientes ) para muitas plataformas, incluindo Microsoft Windows , FreeBSD , Unix , macOS e Linux . Eles não podem ser executados em dispositivos móveis modernos, que não suportam a execução de bytecode padrão do Oracle JVM. Os dispositivos Android podem executar código escrito em Java compilado para o Android Runtime .

Visão geral

Os miniaplicativos são usados ​​para fornecer recursos interativos para aplicativos da web que não podem ser fornecidos apenas pelo HTML . Eles podem capturar a entrada do mouse e também ter controles como botões ou caixas de seleção . Em resposta às ações do usuário, um miniaplicativo pode alterar o conteúdo gráfico fornecido. Isso torna os miniaplicativos adequados para demonstração, visualização e ensino. Existem coleções de miniaplicativos online para estudar vários assuntos, desde a física até a fisiologia do coração.

Um miniaplicativo também pode ser apenas uma área de texto; fornecer, por exemplo, uma interface de linha de comando de plataforma cruzada para algum sistema remoto. Se necessário, um miniaplicativo pode deixar a área dedicada e ser executado como uma janela separada. No entanto, os miniaplicativos têm muito pouco controle sobre o conteúdo da página da web fora da área dedicada do miniaplicativo, portanto, são menos úteis para melhorar a aparência do site em geral, ao contrário de outros tipos de extensões de navegador (embora miniaplicativos como noticiários ou editores WYSIWYG também sejam conhecidos). Os miniaplicativos também podem reproduzir mídia em formatos que não são nativamente suportados pelo navegador.

As páginas codificadas em HTML podem incorporar parâmetros dentro delas que são passados ​​para o miniaplicativo. Por causa disso, o mesmo miniaplicativo pode ter uma aparência diferente dependendo dos parâmetros que foram passados.

Como os miniaplicativos estavam disponíveis antes do HTML5 , o CSS moderno e a interface DOM do JavaScript eram padrão, eles também eram amplamente usados ​​para efeitos triviais, como mouseover e botões de navegação. Essa abordagem, que representava grandes problemas para acessibilidade e uso indevido de recursos do sistema, não está mais em uso e foi fortemente desencorajada até mesmo na época.

Informação técnica

A maioria dos navegadores executou miniaplicativos Java em uma caixa de proteção , evitando que miniaplicativos acessem dados locais como a área de transferência ou sistema de arquivos . O código do miniaplicativo é baixado de um servidor da web , após o qual o navegador incorpora o miniaplicativo em uma página da web ou abre uma nova janela mostrando a interface do usuário do miniaplicativo .

Um miniaplicativo Java estende a classe java.applet.Appletou, no caso de um miniaplicativo Swingjavax.swing.JApplet ,. A classe que deve sobrescrever os métodos da classe do miniaplicativo para configurar uma interface de usuário dentro de si ( Applet) é um descendente do Panelqual é um descendente de Container. Como o miniaplicativo herda do contêiner, ele tem em grande parte as mesmas possibilidades de interface do usuário que um aplicativo Java comum, incluindo regiões com visualização específica do usuário.

As primeiras implementações envolveram o download de um miniaplicativo classe por classe. Embora as classes sejam arquivos pequenos, geralmente há muitos deles, portanto, os miniaplicativos ganharam a reputação de componentes de carregamento lento. No entanto, desde que .jarsforam introduzidos, um miniaplicativo é normalmente entregue como um único arquivo que tem um tamanho semelhante a um arquivo de imagem (centenas de kilobytes a vários megabytes).

As bibliotecas e tempos de execução do sistema Java são compatíveis com versões anteriores, permitindo escrever código que é executado nas versões atuais e futuras da máquina virtual Java.

Tecnologias semelhantes

Muitos desenvolvedores Java, blogs e revistas estão recomendando que a tecnologia Java Web Start seja usada no lugar dos miniaplicativos. O Java Web Start permite o lançamento de código de miniaplicativo não modificado, que então é executado em uma janela separada (não dentro do navegador de chamada).

Um Java Servlet às vezes é comparado informalmente a ser "como" um miniaplicativo do lado do servidor, mas é diferente em sua linguagem, funções e em cada uma das características descritas aqui sobre miniaplicativos.

Incorporação em uma página da web

O miniaplicativo pode ser exibido na página da web usando o appletelemento HTML obsoleto ou o objectelemento recomendado . O embedelemento pode ser usado com navegadores da família Mozilla ( embedfoi descontinuado no HTML 4, mas está incluído no HTML 5). Isso especifica a origem e o local do miniaplicativo. Ambas as tags objecte embedtambém podem baixar e instalar a máquina virtual Java (se necessário) ou pelo menos levar à página do plug-in. applete as objecttags também suportam o carregamento de miniaplicativos serializados que começam em algum estado particular (ao invés do inicial). As tags também especificam a mensagem que aparece no lugar do miniaplicativo se o navegador não puder executá-lo por qualquer motivo.

No entanto, apesar de objectser oficialmente uma tag recomendada, a partir de 2010, o suporte da objecttag ainda não era consistente entre os navegadores e a Sun continuou recomendando a applettag mais antiga para implantação em ambientes de multibrowser, pois permaneceu a única tag consistentemente suportada pelos navegadores mais populares . Para suportar vários navegadores, a objecttag atualmente requer JavaScript (que reconhece o navegador e ajusta a tag), uso de tags adicionais específicas do navegador ou entrega de saída adaptada do lado do servidor. A applettag obsoleta foi criticada.

O plug-in do navegador Java depende do NPAPI , para o qual quase todos os fornecedores de navegadores da web omitiram o suporte devido à sua idade e problemas de segurança. Em janeiro de 2016, a Oracle anunciou que os ambientes de tempo de execução Java baseados em JDK 9 irão descontinuar o plug-in do navegador.

Vantagens

Um miniaplicativo Java pode ter qualquer uma ou todas as seguintes vantagens:

  • É simples fazê-lo funcionar no FreeBSD, Linux, Microsoft Windows e macOS - ou seja, torná-lo multiplataforma. Os miniaplicativos eram suportados pela maioria dos navegadores da web durante a primeira década do século 21; desde então, entretanto, a maioria dos navegadores abandonou o suporte a miniaplicativos por motivos de segurança.
  • O mesmo miniaplicativo pode funcionar em "todas" as versões instaladas do Java ao mesmo tempo, em vez de apenas na versão de plug-in mais recente. No entanto, se um miniaplicativo exigir uma versão posterior do Java Runtime Environment (JRE), o cliente será forçado a esperar durante o grande download.
  • A maioria dos navegadores da web armazena em cache applets para que sejam carregados rapidamente ao retornar a uma página da web. Os miniaplicativos também melhoram com o uso: após a execução de um primeiro miniaplicativo, o JVM já está em execução e é iniciado rapidamente (o JVM precisará ser reiniciado sempre que o navegador for reiniciado). O JRE versões 1.5 e superiores param a JVM e reiniciam-na quando o navegador navega de uma página HTML contendo um miniaplicativo para outra contendo um miniaplicativo.
  • Ele pode mover o trabalho do servidor para o cliente , tornando a solução web mais escalonável com o número de usuários / clientes.
  • Se um programa autônomo (como o Google Earth ) se comunica com um servidor da web, esse servidor normalmente precisa oferecer suporte a todas as versões anteriores para usuários que não mantiveram seu software cliente atualizado. Em contraste, um navegador configurado corretamente carrega (e armazena em cache) a versão mais recente do miniaplicativo, portanto, não há necessidade de oferecer suporte a versões legadas.
  • O miniaplicativo suporta naturalmente a mudança de estado do usuário, como a posição das figuras no tabuleiro de xadrez.
  • Os desenvolvedores podem desenvolver e depurar um miniaplicativo diretamente simplesmente criando uma rotina principal (na classe do miniaplicativo ou em uma classe separada) e chamando init () e start () no miniaplicativo, permitindo assim o desenvolvimento em seu ambiente de desenvolvimento Java SE favorito . Depois disso, tudo o que se precisa fazer é testar novamente o miniaplicativo no programa AppletViewer ou em um navegador da web para garantir que ele esteja em conformidade com as restrições de segurança.
  • Um miniaplicativo não confiável não tem acesso à máquina local e só pode acessar o servidor de onde veio. Isso torna esse miniaplicativo muito mais seguro de executar do que um executável autônomo que ele poderia substituir. No entanto, um miniaplicativo assinado pode ter acesso total à máquina em que está sendo executado, se o usuário concordar.
  • Os miniaplicativos Java são rápidos - e podem até ter desempenho semelhante ao software instalado originalmente.

Desvantagens

Um miniaplicativo Java pode ter qualquer uma das seguintes desvantagens em comparação com outras tecnologias da web do lado do cliente:

  • Os miniaplicativos Java dependem de um Java Runtime Environment (JRE), que é um pacote de software razoavelmente complexo e pesado. Normalmente, também requer um plug-in para o navegador da web. Algumas organizações permitem apenas software instalado por um administrador. Como resultado, alguns usuários só podem visualizar miniaplicativos que sejam importantes o suficiente para justificar o contato do administrador para solicitar a instalação do JRE e do plug-in.
  • Se um miniaplicativo exigir um JRE mais recente do que o disponível no sistema, ou um JRE específico, o usuário que o executa pela primeira vez precisará aguardar a conclusão do grande download do JRE.
  • Navegadores móveis em iOS ou Android não executam miniaplicativos Java. Os navegadores de desktop eliminaram o suporte a miniaplicativos Java simultaneamente com o surgimento dos sistemas operacionais móveis.
  • Ao contrário da applettag mais antiga , a objecttag precisa de soluções alternativas para escrever um documento HTML para vários navegadores.
  • Não existe um padrão para disponibilizar o conteúdo dos miniaplicativos para leitores de tela. Portanto, os miniaplicativos podem prejudicar a acessibilidade de um site para usuários com necessidades especiais.
  • Como acontece com qualquer script do lado do cliente, as restrições de segurança podem tornar difícil ou mesmo impossível para um miniaplicativo não confiável atingir os objetivos desejados. No entanto, simplesmente editando o arquivo java.policy na instalação JAVA JRE, pode-se conceder acesso ao sistema de arquivos local ou área de transferência do sistema, por exemplo, ou a outras fontes de rede diferentes da fonte de rede que serviu o miniaplicativo para o navegador.
  • A maioria dos usuários não é experiente o suficiente para distinguir entre miniaplicativos confiáveis ​​e não confiáveis, nem se preocupa em aprender, então essa distinção não ajudou muito com a segurança - muitos usuários ignoraram o aviso de "não confiável" quando os navegadores estavam dispostos a executar tais miniaplicativos. (A capacidade de executar miniaplicativos não confiáveis ​​foi removida por completo para corrigir isso.)

Ações judiciais relacionadas à compatibilidade

A Sun fez esforços consideráveis ​​para garantir que a compatibilidade seja mantida entre as versões do Java à medida que elas evoluem, garantindo a portabilidade do Java por lei, se necessário. A Oracle parece estar dando continuidade à mesma estratégia.

1997: Sun vs Microsoft

O processo de 1997 foi aberto depois que a Microsoft criou uma Java Virtual Machine modificada própria , que acompanha o Internet Explorer. A Microsoft adicionou cerca de 50 métodos e 50 campos às classes dos pacotes java.awt, java.lang e java.io. Outras modificações incluíram a remoção da capacidade RMI e substituição da interface nativa Java de JNI para RNI , um padrão diferente. O RMI foi removido porque suporta facilmente comunicações de Java para Java e compete com a tecnologia Microsoft DCOM . Os miniaplicativos que dependiam dessas mudanças ou apenas as usavam inadvertidamente funcionavam apenas no sistema Java da Microsoft. A Sun entrou com uma ação por violação de marca registrada , já que o objetivo do Java era que não deveria haver extensões proprietárias e que o código deveria funcionar em qualquer lugar. A Microsoft concordou em pagar à Sun $ 20 milhões, e a Sun concordou em conceder à Microsoft uma licença limitada para usar o Java sem modificações apenas e por um período limitado.

2002: Sun vs Microsoft

A Microsoft continuou a enviar sua própria máquina virtual Java não modificada. Com o passar dos anos, ele se tornou extremamente desatualizado, mas ainda era o padrão do Internet Explorer. Um estudo posterior revelou que os miniaplicativos dessa época geralmente contêm suas próprias classes que espelham o Swing e outros recursos mais recentes de forma limitada. Em 2002, a Sun abriu um processo antitruste , alegando que as tentativas da Microsoft de monopolização ilegal prejudicaram a plataforma Java. A Sun exigiu que a Microsoft distribuísse a implementação binária atual da Sun da tecnologia Java como parte do Windows, distribuí-la como uma atualização recomendada para sistemas operacionais de desktop da Microsoft mais antigos e interromper a distribuição da Máquina Virtual da Microsoft (conforme seu tempo de licenciamento, acordado no processo anterior, tinha expirado). A Microsoft pagou US $ 700 milhões por questões antitruste pendentes, outros US $ 900 milhões por questões de patentes e uma taxa de royalties de US $ 350 milhões para usar o software da Sun no futuro.

Segurança

Existem dois tipos de miniaplicativos com modelos de segurança muito diferentes: miniaplicativos assinados e miniaplicativos não assinados. A partir do Java SE 7 Update 21 (abril de 2013), os miniaplicativos e aplicativos Web-Start são incentivados a serem assinados com um certificado confiável, e mensagens de aviso aparecem ao executar miniaplicativos não assinados. A partir do Java 7 Update 51, miniaplicativos não assinados são bloqueados por padrão; eles podem ser executados criando uma exceção no painel de controle Java.

Sem sinal

Limites em miniaplicativos não assinados são entendidos como "draconianos": eles não têm acesso ao sistema de arquivos local e acesso à web limitado ao site de download do miniaplicativo; existem também muitas outras restrições importantes. Por exemplo, eles não podem acessar todas as propriedades do sistema, usar seu próprio carregador de classes , chamar código nativo , executar comandos externos em um sistema local ou redefinir classes pertencentes a pacotes principais incluídos como parte de uma versão Java. Embora possam ser executados em um quadro autônomo, esse quadro contém um cabeçalho, indicando que este é um miniaplicativo não confiável. A chamada inicial bem-sucedida do método proibido não cria automaticamente uma brecha de segurança, pois um controlador de acesso verifica toda a pilha do código de chamada para ter certeza de que a chamada não está vindo de um local impróprio.

Como acontece com qualquer sistema complexo, muitos problemas de segurança foram descobertos e corrigidos desde o lançamento do Java. Alguns deles (como o bug de segurança de serialização do Calendário) persistiram por muitos anos sem ninguém saber. Outros foram descobertos em uso por malware à solta.

Alguns estudos mencionam miniaplicativos travando o navegador ou usando recursos da CPU em excesso , mas são classificados como incômodos e não como verdadeiras falhas de segurança. No entanto, miniaplicativos não assinados podem estar envolvidos em ataques combinados que exploram uma combinação de vários erros graves de configuração em outras partes do sistema. Um miniaplicativo não assinado também pode ser mais perigoso ser executado diretamente no servidor onde está hospedado porque, embora a base de código permita que ele se comunique com o servidor, a execução dentro dele pode contornar o firewall. Um miniaplicativo também pode tentar ataques DoS no servidor onde está hospedado, mas geralmente as pessoas que gerenciam o site também gerenciam o miniaplicativo, tornando isso irracional. As comunidades podem resolver esse problema por meio da revisão do código-fonte ou da execução de miniaplicativos em um domínio dedicado.

O miniaplicativo não assinado também pode tentar baixar malware hospedado no servidor de origem. No entanto, ele só pode armazenar esse arquivo em uma pasta temporária (pois são dados temporários) e não tem como concluir o ataque executando-o. Houve tentativas de usar miniaplicativos para espalhar exploits do Phoenix e da Sibéria dessa maneira, mas esses exploits não usam Java internamente e também foram distribuídos de várias outras maneiras.

Assinado

Um miniaplicativo assinado contém uma assinatura que o navegador deve verificar por meio de um servidor de autoridade de certificação independente em execução remota . A produção dessa assinatura envolve ferramentas especializadas e interação com os mantenedores do servidor de autoridade. Depois que a assinatura é verificada e o usuário da máquina atual também aprova, um miniaplicativo assinado pode obter mais direitos, tornando-se equivalente a um programa autônomo comum. A justificativa é que o autor do miniaplicativo agora é conhecido e será responsável por qualquer dano deliberado. Essa abordagem permite que os miniaplicativos sejam usados ​​para muitas tarefas que, de outra forma, não seriam possíveis pelo script do lado do cliente. No entanto, essa abordagem exige mais responsabilidade do usuário, decidindo em quem ele confia. As preocupações relacionadas incluem um servidor de autoridade não responsivo, avaliação incorreta da identidade do assinante ao emitir certificados e editores de miniaplicativos conhecidos ainda fazendo algo que o usuário não aprovaria. Conseqüentemente, os miniaplicativos assinados que surgiram do Java 1.1 podem, na verdade, ter mais preocupações com a segurança.

Autoassinado

Os miniaplicativos autoassinados, que são miniaplicativos assinados pelo próprio desenvolvedor, podem representar um risco de segurança; Os plug-ins java fornecem um aviso ao solicitar autorização para um miniaplicativo autoassinado, pois a função e a segurança do miniaplicativo são garantidas apenas pelo próprio desenvolvedor e não foram confirmadas independentemente. Esses certificados autoassinados geralmente são usados ​​apenas durante o desenvolvimento, antes do lançamento, onde a confirmação de segurança de terceiros não é importante, mas a maioria dos desenvolvedores de miniaplicativos buscará assinaturas de terceiros para garantir que os usuários confiem na segurança do miniaplicativo.

Os problemas de segurança do Java não são fundamentalmente diferentes de problemas semelhantes de qualquer plataforma de script do lado do cliente. Em particular, todos os problemas relacionados a miniaplicativos assinados também se aplicam aos componentes Microsoft ActiveX .

A partir de 2014, miniaplicativos autoassinados e não assinados não são mais aceitos pelos plug-ins Java ou Java Web Start comumente disponíveis. Conseqüentemente, os desenvolvedores que desejam implantar miniaplicativos Java não têm alternativa a não ser adquirir certificados confiáveis ​​de fontes comerciais.

Alternativas

Existem tecnologias alternativas (por exemplo, WebAssembly e JavaScript ) que satisfazem todo ou mais o escopo do que é possível com um miniaplicativo. JavaScript pode coexistir com miniaplicativos na mesma página, auxiliar na inicialização de miniaplicativos (por exemplo, em um quadro separado ou fornecer soluções alternativas de plataforma) e, posteriormente, ser chamado a partir do código do miniaplicativo. JavaFX é uma extensão da plataforma Java e também pode ser visto como uma alternativa.

Veja também

Referências

links externos