qual é a diferença entre um portlet e um servlet?

96

Sou solicitado a trabalhar em portlets e portais.

Eu quero saber a diferença entre um portlet e um servlet?

Como / onde um portlet difere (pode ser funcionalmente) de um servlet?

Rajesh
fonte

Respostas:

65

Os portlets são parte do padrão JSR-168 que regula os contêineres e componentes do portal. Este é um padrão diferente dos padrões para contêineres da web (e servlets). Embora existam fortes paralelos entre esses dois padrões, eles diferem em contêineres, APIs, ciclo de vida, configuração, implantação, etc.

A principal diferença entre portlet e servlet pode ser que, embora o servlet sempre responda a um único tipo de ação - solicitação , o portlet (devido à natureza de seu ciclo de vida e ligações de contêiner mais fortes) deve responder a dois tipos de ações: renderizar e solicitar . É claro que existem mais coisas, mas eu descobri que essa é a principal diferença entre os dois quando estudei o desenvolvimento do portal.

topchef
fonte
1
Atualização: Portlets 1 é JSR 168 , Portlets 2 é JSR 286 e Portlet 3 é JSR 362 .
Basil Bourque
137

Aprimorado da fonte : Servlets Vs Portlets

Semelhanças

  1. Servlets e portlets são componentes baseados na web que usam Java para sua implementação.

  2. Os portlets são gerenciados por um contêiner de portlet, assim como o servlet é gerenciado por um contêiner de servlet.

  3. Tanto o conteúdo estático quanto o dinâmico podem ser gerados por portlets e servlets.

  4. O ciclo de vida de portlets e servlets é controlado pelo contêiner

  5. O modelo cliente / servidor é usado para servlets e portlets

  6. O pacote e a implementação são essencialmente os mesmos, WAR / EARs.

  7. A Sessão do Aplicativo existe em containers Servlet e Portlet. É uma das formas de compartilhar dados (comunicação interna entre portlets) desde a fase de renderização até a fase de ação (ou quaisquer fases inferiores) nos contêineres de portlets.

  8. Servlets e portlets usam ambientes de servidor / VM semelhantes que os suportam. Embora, algumas configurações adicionais podem ser necessárias no caso de portlets para torná-lo funcionar

  9. As ferramentas build / DI são semelhantes para ambos - Ant, Maven, Gradle, etc, são todos suportados. Principalmente :) - Isso mudou um pouco com o Liferay 7.


Dissimilaridades

  1. Os servlets podem renderizar páginas da web completas, enquanto os portlets renderizam fragmentos html. Esses fragmentos são agregados pelo portal em uma página da web completa.

  2. O tipo de conteúdo dos portlets JSR 168 pode ser apenas cHTML, XHTML, WML. Não oferece suporte a outros tipos de conteúdo.

  3. Os portlets não têm permissão para gerar código HTML que contenha tags como corpo, quadro, conjunto de quadros, cabeçalho, html ou título.

  4. Um portlet, ao contrário de um servlet, não tem URL anexado a ele, portanto, não pode ser acessado diretamente. O acesso é apenas por meio da página do portal que contém o portlet.

  5. Os portlets podem receber controles para manipular seus estados de janela ou modos de portlet.

  6. Várias instâncias de um único portlet podem ser colocadas na mesma página.

  7. Os portlets suportam configuração e customização persistentes, informações de perfil.

  8. Os portlets podem ter dois tipos de solicitação a saber. processar solicitação e solicitação de ação.

  9. Os portlets têm dois escopos dentro da sessão; escopo do aplicativo para comunicação entre portlets e escopo do portlet para comunicação intra portlet.

  10. O portlet não pode definir a codificação do conjunto de caracteres da resposta nem pode definir os cabeçalhos de resposta HTTP.

  11. Os portlets não têm acesso para solicitar URL. Portanto, ele não pode acessar os parâmetros de consulta anexados ao URL. Os portlets não podem definir cookies.

  12. Métodos típicos de Portlet API são doView(), doEdit(), doHelp()e processAction()enquanto as de servlet são service(), doPost(), doGet().

  13. Especificações do Servlet - JSR 369 (Servlet 4.0), JSR 340 (Servlet 3.1), JSR 315 (Servlet 3.0), JSR 154 (Servlet 2.5 e 2.4). Especificações de portlet - JSR 168 (Portlet Spec v1.0), JSR 286 (Portlet Spec v2.0), JSR 362 (Portlet Spec v3.0)

  14. A implantação de Portlets envolve uma abordagem diferente de um aplicativo Servlet. Alguns provedores (Liferay / Alfresco / WebSphere) suportam implantação a quente de portlets sem a necessidade de reiniciar o servidor, o que não é possível no caso de servlets sem modularizar o aplicativo usando bibliotecas especiais como OSGi.


Editar (de comentários)

Um contêiner de Portlet é construído em um contêiner de Servlet. Em última análise, pode-se dizer que o portlet é executado em um contêiner de servlet. Mas, ao desenvolver aplicativos, visualizamos um contêiner de portlet separadamente do contêiner Servlet / Java EE.

Ashok Goli
fonte
Portanto, um aplicativo de portal é executado em um contêiner servlet / JEE e se comunica com um contêiner de portlet separadamente? A máquina do cliente (navegador) não está ciente do contêiner ou dos portlets como eu o entendo, além da aparência na página que é tratada via JavaScript e atualizações parciais da página.
Andy
2
Um contêiner de Portlet é construído em um contêiner de Servlet. Você pode dizer que um contêiner de Portlet é um contêiner de Servlet avançado com muitos 'recursos'. Mas, para responder à sua pergunta sem rodeios, sim. Ao desenvolver aplicativos, visualizamos um contêiner de portlet separadamente do contêiner Servlet / JEE.
Ashok Goli
4
A maneira mais simples de pensar nisso é que um servlet renderiza uma página da web inteira e um portlet renderiza uma parte retangular específica (subseção) de uma página da web. Por exemplo, a barra de publicidade no lado direito de uma página de notícias pode ser renderizada como um portlet. Mas você não implementaria um único campo de edição como um portlet, porque isso é muito granular. Basicamente, se você dividir uma página da Web em suas principais áreas seccionais, essas são boas candidatas para transformar em portlets.
@ClayFerguson "um portlet renderiza uma parte retangular específica (subseção) de uma página da web", então é como um quadro, ou um <div> ...
Tom Brito
@TomBrito - Parcialmente verdadeiro. É como um frame ou div, que tem seus próprios ciclos de vida e pode compartilhar dados com outros frames ou divs.
Ashok Goli
8

Tanto os portlets quanto os servlets recebem uma solicitação http e retornam uma resposta, que normalmente é algum HTML que pode ser renderizado por um navegador. Um portlet é usado no contexto de um "Portal", a ideia é que uma única página vista pelo usuário tem muitas partes, pense em tiles, cada um vindo de um portlet diferente.

Agora, você pode obter esse efeito "lado a lado" de servets normais (consulte Struts + Tiles para um exemplo de como) o bit extra dos portlets é que os portlets estão em um ambiente mais rico fornecido pelo Portal, APIs extras são fornecidas para que o que é exibido por qualquer portlet pode ser configurado por usuários individuais de acordo com suas preferências, e os portlets podem se comunicar entre si - pressione um botão em um, algo acontece em outro.

djna
fonte
6

Os servlets têm uma definição java (aplicativos que tratam de solicitações HTTP GET / POST), enquanto os portlets têm uma definição de interface de usuário. Um componente que executa uma função específica semelhante aos widgets do Windows Vista ou vários componentes usados ​​no stackoverflow aqui. Eles não precisam necessariamente ser apoiados por servlets no lado do servidor. Mas o padrão do Portlet foi desenvolvido junto com o java. O'Reilly tem um bom tutorial .

whatnick
fonte
4

Essencialmente, os servlets fornecem conteúdo que normalmente ocupa a página inteira em um navegador (a menos que você esteja usando quadros) e os portlets fornecem conteúdo que é encapsulado por uma janela. Com os portlets, você pode ter vários portlets lado a lado e cada um pode fornecer conteúdo e funcionalidade diferentes uns dos outros. Um portlet pode fornecer a interação completa para um tipo de aplicativo, enquanto outro portlet pode fornecer conteúdo para outro tipo de aplicativo. O portal pode fornecer algumas funcionalidades de manutenção e ponto de entrada único seguro para todos os portlets em uma página. Quanto aos detalhes (semelhanças / diferenças) entre eles, continue lendo. Aqui estão algumas semelhanças:

Liyakath
fonte