Arquiteturas de Aplicações Web Leonardo Gresta Paulino Murta [email protected]ff.br Aplicações Convencionais vs. Web • Aplicações convencionais – Escritas usando uma linguagem de programação (ex.: Java) • Sites de conteúdo estáHco – Escritos usando uma linguagem de marcação (ex.: HTML) • Aplicações Web – Escritas usando uma mistura de linguagem de marcação (ex.: HTML) com linguagem de programação (ex.: Java) – Conteúdo dinâmico Leo Murta Arquiteturas Web 2 Estratégias para gerar conteúdo dinâmico Marcação Programação Leo Murta Arquiteturas Web 3 Exemplo de “marcação” na “programação” (Servlet) import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class AloMundo extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { PrintWriter out = response.getWriter(); response.setContentType("text/html"); out.println("<HTML><BODY>"); out.println("<P>Servlet Alo Mundo...</P>"); for (int i = 0; i < 10; i++) { out.println(i + "<BR>"); } out.println("</BODY></HTML>"); } } Leo Murta Arquiteturas Web 4 Exemplo de “programação” na “marcação” (JSP) <HTML> <BODY> <P>JSP Alo Mundo...</P> <% for (int i = 0; i < 10; i++) { %> <%= i %><BR> <% } %> </BODY> </HTML> Leo Murta Arquiteturas Web 5 Servlet x JSP • Servlet: – Java é a linguagem principal – Indicado para implementar regras de negócio e manipulação de dados • JSP: – HTML é a linguagem principal – Indicado para interface com o usuário Leo Murta Arquiteturas Web 6 Dificuldade • Conciliar os dois mundos – Ferramentas disHntas (IDE vs. Editor) – Habilidades disHntas (Programador vs. Web Designer) • IDE Java – Boa para escrever código Java – Ruim para escrever HTML • Editor HTML – Bom para escrever HTML – Ruim para escrever código Java Leo Murta Arquiteturas Web 7 Necessidade • Organizar a forma de trabalho com essas tecnologias • Especial relevância – para sistemas grandes e complexos – com equipes mul8disciplinares Leo Murta Arquiteturas Web 8 Aplicações Web • Grande variedade de Hpos de aplicação e domínios • Grande variedade de requisitos não-­‐ funcionais – Blog pessoal – Site de um curso – Ferramenta de busca – Rede social – Home-­‐banking – E-­‐commerce Leo Murta – Desempenho – Escalabilidade – Robustez – Segurança – Disponibilidade – Portabilidade Arquiteturas Web 9 Arquiteturas Web • Visam separação de responsabilidades entre os componentes da aplicação Web – Atendem os requisitos não-­‐funcionais esperados pela aplicação – A um custo do seu aumento de complexidade • Qual a arquitetura que melhor resolve o problema no curto, médio e longo prazo? – Curto prazo: desenvolvimento – Médio prazo: produção – Longo prazo: manutenção Leo Murta Arquiteturas Web 10 Arquiteturas Web • As principais arquiteturas separam as responsabilidades em camadas • Cada camada pode estar em uma ou mais máquinas diferentes • O número de camadas (contado do lado servidor) varia em função da complexidade a ser lidada Leo Murta Arquiteturas Web 11 Arquiteturas Web • Sistemas cliente-­‐servidor tradicionais têm somente 1 camada no lado servidor – Armazenamento • Arquiteturas em 2 camadas têm separação das enHdades em – Apresentação – Armazenamento • Arquiteturas em 3 camadas têm separação das enHdades em – Apresentação – Aplicação – Armazenamento Leo Murta Arquiteturas Web 12 Arquitetura em 1 camada Servidor Cliente Armazenamento SGBD Leo Murta Arquiteturas Web 13 Arquitetura em 2 camadas Servidor Cliente Apresentação <html> ... </html> Leo Murta Arquiteturas Web Armazenamento SGBD 14 Arquitetura em 3 camadas Servidor Cliente Aplicação Apres. Armaz. CompraProduto <html> ... </html> SGBD Pedido Item 1 1..* 0..* 1 Especificacao Produto 1 Leo Murta Arquiteturas Web 0..* 15 Regras de negócio Servidor Cliente ? Armazenamento SGBD Onde estão as REGRAS DE NEGÓCIO? Leo Murta Arquiteturas Web 16 Regras de negócio Servidor Cliente Apresentação <html> ... </html> ? Armazenamento SGBD Onde estão as REGRAS DE NEGÓCIO? Leo Murta Arquiteturas Web 17 Regras de negócio Servidor Cliente Aplicação Apres. Armaz. CompraProduto <html> ... </html> SGBD Pedido Item 1 1..* 0..* 1 REGRAS DE NEGÓCIO Leo Murta Especificacao Arquiteturas Web Produto 1 0..* 18 Por que Java? Java Community Process (JCP) Especificações (JSR) Implementações Implementação de referência Leo Murta Demais implementações Teste de compaHbilidade Arquiteturas Web Ferramentas IDEs Ferramentas de apoio 19 Por que Java? (alguns membros do JCP) VMWare Apache Boeing Sybase CA Sun Eclipse Sony Fujitsu Java SAP Google Samsung Hitachi RedHat IBM Oracle Intel Novell Motorola Nokia Leo Murta NEC Arquiteturas Web 20 Arquiteturas Web em Java • Java permite a adoção de diferentes arquiteturas web • Dentre as mais famosas estão – Model2 (mais simples) – Java EE (mais complexa) Leo Murta Arquiteturas Web 21 Arquitetura Model2 em Java Servidores exemplo GlassFish Cliente Apresentação <html> ... </html> Browser (formularios + Applet) Aplicação Java Leo Murta Aplicação CompraProduto JSP (página de resposta) Servlet (regras de negócio) JDBC (acesso a dados) Arquiteturas Web Java DB Armazenamento SGBD SGBD (dados) 22 Arquitetura Model2 em Java (elementos fundamentais) • JSP – Páginas HTML com código Java embuHdo • Servlet – Classes Java que rodam em servidores • JDBC – API de acesso a banco de dados em Java Leo Murta Arquiteturas Web 23 Arquitetura Model2 em Java (cenário jpico) Servidor Cliente Apresentação Aplicação Servlet CompraProduto <html> ... </html> Armazenamento JDBC SGBD JSP Leo Murta Arquiteturas Web 24 Arquitetura Model2 em Java (cenário jpico) 1. Cliente solicita um Servlet usualmente após o preenchimento de um formulário HTML 2. Servidor interpreta o Servlet na camada de aplicação 3. Se necessário, a camada de aplicação se comunica com a camada de armazenamento através de JDBC 4. Camada de aplicação redireciona o fluxo para a camada de apresentação 5. Servidor constrói uma página de resposta usando JSP 6. Servidor retorna a página de resposta. Leo Murta Arquiteturas Web 25 Arquitetura Java EE Servidores exemplo GlassFish Cliente Apresentação <html> ... </html> Browser (formularios + Applet) Aplicação Java Leo Murta Aplicação CompraProduto JSF (interface dinâmica) EJB (regras de negócio) JPA (entidades) Arquiteturas Web Java DB Armazenamento SGBD SGBD (dados) 26 Arquitetura Java EE (elementos fundamentais) • JSF – Framework de apresentação que faz uso disciplinado de Servlet e JSP • EJB – Componentes de negócio • JPA – EnHdades persistentes Leo Murta Arquiteturas Web 27 Arquitetura Java EE (cenário jpico) Servidor Cliente Apresentação Armazenamento Aplicação EJB Servlet CompraProduto <html> ... </html> Pedido 1 1 Especificacao Produto 1 SGBD 1..* 0..* JSF Leo Murta Item SGBD 0..* JPA Arquiteturas Web 28 Arquitetura Java EE (cenário jpico) 1. Cliente solicita um Servlet usualmente após o preenchimento de um formulário HTML 2. Servidor interpreta o Servlet e redireciona o fluxo para um EJB na camada de aplicação 3. Se necessário, a camada de aplicação faz uso de outros EJBs ou se comunica com a camada de armazenamento através de enHdades JPA 4. Camada de aplicação redireciona o fluxo para a camada de apresentação 5. Servidor constrói uma página de resposta usando JSF 6. Servidor retorna a página de resposta Leo Murta Arquiteturas Web 29 Containers • Infraestrutura capaz de oferecer serviços básicos para códigos Java – Segurança – Transação – Lookup e injeção de dependências e recursos – ConecHvidade remota – Gestão do ciclo de vida Leo Murta Arquiteturas Web 30 Containers Fonte: livro Java EE 7 Tutorial Leo Murta Arquiteturas Web 31 Containers • Container Web – Interface entre componentes web (Servlets, JSP ou JSF) e o servidor Java EE • Container EJB – Interface entre componentes EJB e o servidor Java EE • Container Cliente – Interface entre aplicações Java e o servidor Java EE Leo Murta Arquiteturas Web 32 Comunicação cliente-­‐servidor Servidor Cliente Protocolo HTTP Leo Murta Arquiteturas Web 33 Protocolo HTTP • O protocolo HTTP fornece um mecanismo simples de requisição-­‐resposta – Sem manutenção de estado – Independente do Hpo do conteúdo • Partes de uma mensagem HTTP – Requisição (método + URL)/Resposta (código) – Cabeçalho (pares chave-­‐valor) – Corpo da mensagem Leo Murta Arquiteturas Web 34 Protocolo HTTP Fonte: livro Java EE 7: The Big Picture Leo Murta Arquiteturas Web 35 • GET Protocolo HTTP (Alguns métodos de requisição) – Consulta dados do servidor – Permite passagem de parâmetros, que aparecem na URL – Não deve alterar o estado do servidor • POST – Insere dados no servidor, sem limite de tamanho – ÚHl para enviar dados sensíveis, pois não ficam visíveis na URL – Pode alterar o estado do servidor • PUT – Atualiza dados no servidor • DELETE – Remove dados do servidor Leo Murta Arquiteturas Web 36 Protocolo HTTP (Alguns códigos de resposta) • • • • • • • • 200 OK 401 Not Authorized 403 Forbidden 404 Not Found 408 Request Timeout 429 Too Many Requests 500 Internal Server Error 503 Service Unavailable Leo Murta Arquiteturas Web 37 Protocolo HTTP (URL) • Uma URL é um conjunto de informações de idenHficação de recurso: hxp://www.xpto.com:8080/pub/exemplo.jsp?p1=v1&p2=v2 protocolo domínio porta caminho Leo Murta Arquiteturas Web recurso parâmetros e argumentos 38 Arquiteturas de Aplicações Web Leonardo Gresta Paulino Murta [email protected]ff.br