Prévia do material em texto
1. View: responsável pela renderização da interface grá�ca da aplicação. 2. Controller: responsável por receber e tratar os eventos da View. 3. Model: responsável pela implementação da lógica de negócios. INTRODUÇÃO AO JAVA ENTERPRISE EDITION UNIDADE 1 JJAAVVAA SSEERRVVEERR FFAACCEESS ((JJSSFF)) TTÓÓPPIICCOO 33 11 IINNTTRROODDUUÇÇÃÃOO O Java Server Faces (JSF) é o framework padrão da plataforma Java para a construção de aplicações web com JEE. Ele de�ne e implementa um modelo de componentes visuais para WEB, utilizando uma arquitetura MVC (model-view- controller). Esta arquitetura propõe a divisão das responsabilidades de uma aplicação em três camadas distintas (Figura 32): FIGURA 32 - ARQUITETURA MVC Unidade 1 - Tópico 3 Livro Digital - Programação para Web II https://livrodigital.uniasselvi.com.br/ADS27_programacao_para_web_ii... 1 of 30 26/06/2024, 16:25 O JSF funciona baseado em objetos que são mantidos em memória no servidor e que �cam responsáveis pela geração do HTML que será enviado ao navegador. Esta estratégia permite que os valores contidos nos componentes mantenham seu estado, permitindo sua recuperação mesmo após várias requisições. O objetivo desta arquitetura é a limitação imposta pela característica stateless do HTTP. A Figura 33, retirada de SOFTPLAN (2015), exempli�ca o funcionamento do JSF. Imagine um cliente que faz uma primeira requisição para uma aplicação web em um AS. O JSF utiliza um arquivo no formato xHTML para descrever uma interface da aplicação. Quando o recurso representado por esse arquivo é solicitado, uma árvore de componentes é gerada no servidor e um HTML é enviado ao cliente. Para as próximas requisições a este recurso pelo mesmo cliente, o servidor utiliza a árvore já em memória para montar o HTML. Este processo faz parte do ciclo de vida do JSF. FIGURA 33 - ARQUITETURA DO JSF FONTE: SOFTPLAN, 2015 22 CCRRIIAAÇÇÃÃOO DDAA PPRRIIMMEEIIRRAA AAPPLLIICCAAÇÇÃÃOO Vamos agora demonstrar como criar uma pequena aplicação utilizando as capacidades básicas do JSF. Abra o Eclipse e selecione um projeto do tipo Dynamic Web Project, conforme a Figura 34. FIGURA 34 - CRIAÇÃO DO PROJETO NO ECLIPSE Unidade 1 - Tópico 3 Livro Digital - Programação para Web II https://livrodigital.uniasselvi.com.br/ADS27_programacao_para_web_ii... 3 of 30 26/06/2024, 16:25 Fonte: O autor. De volta a tela principal de con�guração, prossiga clicando no botão Next até encontrar a tela mostrada na Figura 37. Esta é a tela de con�guração da implementação para o JPA. Sugerimos con�gurar exatamente como mostrado na �gura, pois embora não iremos utilizar JPA no primeiro exemplo, a con�guração do mesmo neste momento nos poupará esforço futuro. Não se esqueça de con�gurar também a conexão com o MySQL. FIGURA 36 - APIS UTILIZADAS Unidade 1 - Tópico 3 Livro Digital - Programação para Web II https://livrodigital.uniasselvi.com.br/ADS27_programacao_para_web_ii... 5 of 30 26/06/2024, 16:25 Fonte: O autor. Prossiga pressionando o botão Next até se deparar com a tela mostrada na Figura 38. Esta tela con�gura a geração automática do arquivo beans.xml, necessário para se utilizar CDI. Mantenha a con�guração como na �gura e pressione o botão Finish. FIGURA 38 - CONFIGURAÇÃO DO CDI FONTE: O autor Pronto! A partir de agora utilizaremos este projeto para nossos exemplos. Para conferir se a criação foi feita corretamente, basta expandir o projeto recém-criado no Eclipse. A estrutura de diretórios deve �car semelhante à mostrada na Figura 39. FIGURA 39 - ESTRUTURA DO PROJETO Unidade 1 - Tópico 3 Livro Digital - Programação para Web II https://livrodigital.uniasselvi.com.br/ADS27_programacao_para_web_ii... 7 of 30 26/06/2024, 16:25 FONTE: O autor O Eclipse gera um template vazio para uma página XHTML, entretanto, a importação das bibliotecas que contém os componentes visuais já está feita. Na Figura 41 podemos perceber a existência destas bibliotecas e sua efetiva utilização. Entre as linhas 2 e 5 são referenciadas URLs através dos pre�xos ui, f e h. Estes pre�xos servirão para utilizar os componentes visuais, de acordo com sua natureza. Isto pode ser percebido através do componente head que aqui ele é <h:head>, o que indica que a importação ocorrerá através da URL referenciado no pre�xo h. O exemplo contendo o código fonte completo pode ser visualizado na Figura 42. A linha 1 foi removida para simpli�car o exemplo. Da mesma forma que no HTML, os componentes visíveis �cam dentro da tag <body>. Na linha 11 criamos um formulário que contém um Label, um InputText e um Button, todos componentes Unidade 1 - Tópico 3 Livro Digital - Programação para Web II https://livrodigital.uniasselvi.com.br/ADS27_programacao_para_web_ii... 9 of 30 26/06/2024, 16:25 que exige a presença de um intermediário entre o model e a view. Este intermediário é o controller, que no caso do JSF é chamado de Managed Bean (MB). Cabe ao MB mapear os componentes para o model, instanciar os objetos no lado do servidor e também reagir aos eventos gerados na view. O MB sempre é uma classe serializável com métodos getters e setters para permitir o acesso aos componentes visuais. A �gura a seguir mostra o código-fonte de um MB. Inicialmente, a anotação named permite que o MB seja visualizado dentro dos arquivos XHTML. É por causa desta anotação que conseguimos referenciar métodos públicos e atributos do MB. A anotação @RequestScoped indica que o escopo do MB é de request, ou seja, os valores da árvore de objetos devem ser mantidos somente durante o request. FIGURA 43 – CÓDIGO-FONTE DO MB FONTE: O autor Para este exemplo utilizamos uma String como o objeto de domínio, para �ns de Unidade 1 - Tópico 3 Livro Digital - Programação para Web II https://livrodigital.uniasselvi.com.br/ADS27_programacao_para_web_ii... 11 of 30 26/06/2024, 16:25 1. O primeiro passo é a restauração da árvore de componentes. Caso seja o primeiro acesso daquele cliente, o JSF cria a árvore de acordo com a descrição do arquivo .xhtml. Caso não seja o primeiro acesso, a árvore é recuperada da memória no servidor. 2. O segundo passo é a extração dos valores de campos de formulários vindos com a requisição e atribuição dos mesmos aos respectivos componentes dentro da árvore, atualizando-os. Neste momento ocorre também a conversão dos dados. 3. O terceiro passo consiste na validação dos valores dos componentes que possuírem regras de validação associadas. Por exemplo, um campo obrigatório que é submetido sem nenhum valor ou um campo numérico que Para entendermos de que forma o JSF se comporta na questão da árvore de objetos em memória, e consequentemente extrairmos o máximo da tecnologia, é essencial entender o ciclo de vida e os escopos do JSF. FIGURA 45 - TESTE DA APLICAÇÃO JSF FONTE: O autor Conforme SOFTPLAN (2015), o ciclo de vida do JSF é simplesmente a sequência dos passos que o Front Controller do JSF executa ao receber uma requisição de um cliente, conforme descrito a seguir: Unidade 1 - Tópico 3 Livro Digital - Programação para Web II https://livrodigital.uniasselvi.com.br/ADS27_programacao_para_web_ii... 13 of 30 26/06/2024, 16:25 FIGURA 46 - O CICLO DE VIDA DO JSF FONTE: O autor Na Figura 47, podemos perceber que a aplicação carregou normalmente no navegador, mas o importante é conseguir observar as mensagens do console. Neste caso, o construtor do MB foi invocado e também o método getter. É possível ainda notar que duas instâncias do MB são criadas, ao invés de somente uma. O motivo para tal comportamento será explicado na Unidade 3 deste Caderno de Estudos. Mas por que o valor de nome é igual a null? Isso ocorre devido ao próprio ciclo de vida do JSF, onde o MB é instanciado e, como esta é a primeira requisição, a árvore de componentes deve ser montada com base no arquivo xhtml e alocada na memória. O último passo antes de renderizar o HTML é atribuir os valores do MB aos componentes visuais.Como nosso MB não possui nenhum valor, o getNome aparece retornando null. Unidade 1 - Tópico 3 Livro Digital - Programação para Web II https://livrodigital.uniasselvi.com.br/ADS27_programacao_para_web_ii... 15 of 30 26/06/2024, 16:25 navegador. Neste passo, o valor dos componentes é atualizado com o valor existente no atributo do MB associado através da expression language. FIGURA 48 - CONTINUAÇÃO DO CICLO DE VIDA JSF FONTE: O autor Cada vez que você clicar no botão Executar, uma nova instância de FormularioMB é criada e o getNome retornará null. Este comportamento é característico da annotation @RequestScoped, onde uma nova instância de FormularioMB é criada a cada requisição do usuário. Esta anotação de�ne que o tempo de vida deste objeto é marcado pela requisição do usuário. Outro escopo existente é o SessionScope, onde o tempo de vida do MB é marcado pela sessão do usuário. Caso nenhuma con�guração adicional seja feita, o MB se mantém desde pressionarmos o botão até fecharmos o navegador. Este tipo de escopo é interessante para guardar uma sessão de login do usuário, garantindo que ele tenha passado por uma página e se identi�cado antes de acessar a parte protegida de uma aplicação. Você já deve ter visto aplicações web onde o tempo de sessão é de�nido em minutos, para aumentar a segurança. Em geral, este tipo de con�guração é utilizado em aplicações de Home Banking e cartões de crédito. Na �gura a seguir demonstramos como alterar o escopo de nosso MB para Unidade 1 - Tópico 3 Livro Digital - Programação para Web II https://livrodigital.uniasselvi.com.br/ADS27_programacao_para_web_ii... 17 of 30 26/06/2024, 16:25 usuários? Vou responder a esta pergunta com outra. Você se lembra de quando acessamos nossa aplicação pela primeira vez e o servidor criou duas instâncias do FormularioMB? O segundo usuário está acessando nossa aplicação através daquela segunda instância, que o AS já criou para evitar o overhead de instanciação de um novo objeto e melhorar a performance da aplicação. Lembrando que esta característica é con�gurável. A última experiência consiste em abrir uma instância da aplicação através de outro navegador (se você abriu o Chrome, tente acessar a aplicação do Firefox e, em último caso, do Internet Explorer). Observando o log no console, percebemos que o mesmo mostra a criação de uma nova instância do FormularioMB, pois para o servidor somos um novo usuário e nossas duas instâncias iniciais já estão ocupadas. Existem outros escopos no JSF além do Request e Session. Para maiores detalhes acesse: uuaaiihheebbeerrtt..ccoomm//jjssff--mmiinnii--lliivvrroo--ddiiccaass--ccoonncceeiittooss--ee--bbooaass--pprraattii ccaass// Nesta unidade percorremos bastante conteúdo... entendemos o contexto onde são aplicadas as aplicações JEE, compreendemos a necessidade de um servidor de aplicação, criamos e con�guramos um ambiente para a criação de aplicações enterprise e, por �m, introduzimos as Java Server Faces de forma prática, enfatizando a caracterização de sua arquitetura e seu ciclo de vida. Nas próximas unidades abordaremos aspectos avançados de JSF e demonstraremos o funcionamento de outras tecnologias chave que fazem parte da especi�cação JEE, como CDI e EJB. Novamente queremos destacar a necessidade de realização das autoatividades e de todas as implementações que são solicitadas no caderno. É somente através da prática que você alcançará a compreensão deste conteúco. Nos veremos na próxima unidade. Unidade 1 - Tópico 3 Livro Digital - Programação para Web II https://livrodigital.uniasselvi.com.br/ADS27_programacao_para_web_ii... 19 of 30 26/06/2024, 16:25 http://uaihebert.com/jsf-mini-livro-dicas-conceitos-e-boas-praticas/ http://uaihebert.com/jsf-mini-livro-dicas-conceitos-e-boas-praticas/ http://uaihebert.com/jsf-mini-livro-dicas-conceitos-e-boas-praticas/ http://uaihebert.com/jsf-mini-livro-dicas-conceitos-e-boas-praticas/ elementos de interação, elementos que fazem parte do domínio do problema, elementos de conexão, elementos de persistência etc. Dessa forma, na arquitetura sempre de�nimos os seus elementos que precisarão ser utilizados no software e como eles se conectam. Uma arquitetura complexa exige mais tempo para desenvolvimento, porém, através de geração automática de aplicações isso pode se tornar mais produtivo. Por isso algumas equipes de�nem um framework para uma determinada aplicação, assim podemos utilizar muitas coisas pré-prontas que facilitam o desenvolvimento. No entanto, alguns padrões arquiteturais já foram pensados para resolver problemas corriqueiros. Alguns projetos ou organizações combinam esses padrões arquiteturais, pois atendem melhor às suas necessidades ou deram certo para o seu tipo de aplicação. Por isso é sempre interessante entender as características básicas de cada um dos estilos e escolher ou combinar aqueles que atendem melhor às necessidades de um projeto especí�co, isso tudo deve ser feito após uma análise do sistema a ser desenvolvido. Entre as arquiteturas existentes temos: Cliente-servidor, P2P - Peer to Peer, Dados compartilhados, Máquina virtual, Camadas, MVC e muitos outros. No restante do artigo veremos mais sobre o padrão arquitetural MVC (Model-View- Controller) que é um dos mais antigos e mais utilizados atualmente. 22 PPaaddrrããoo MMooddeell--VViieeww--CCoonnttrroolllleerr O padrão arquitetural Model-View-Controller (MVC) é uma forma de quebrar uma aplicação, ou até mesmo um pedaço da interface de uma aplicação, em três partes: o modelo, a visão e o controlador. O MVC inicialmente foi desenvolvido no intuito de mapear o método tradicional de entrada, processamento, e saída que os diversos programas baseados em GUI utilizavam. No padrão MVC, teríamos então o mapeamento de cada uma dessas três partes para o padrão MVC conforme ilustra a imagem abaixo: Unidade 1 - Tópico 3 Livro Digital - Programação para Web II https://livrodigital.uniasselvi.com.br/ADS27_programacao_para_web_ii... 21 of 30 26/06/2024, 16:25 visão também se comunica de volta com o modelo e com o controlador para reportar o seu estado. Tão importante quanto explicar cada um dos objetos do padrão arquitetural MVC é explicar como é o seu �uxo tipicamente. Primeiramente o usuário interage com a interface (por exemplo, pressionando um botão) e o controlador gerenciar esse evento de entrada da interface do usuário. A interface do usuário é exibida pela visão (view), mas controlada pelo controlador. O controlador não tem nenhum conhecimento direto da View, ele apenas envia mensagens quando ela precisa de algo na tela atualizado. O controlador acessa o modelo, possivelmente atualizando ela de forma apropriada para as ações do usuário (por exemplo, o controlador solicita ao modelo que o carrinho de compras seja atualizado pelo modelo, pois o usuário incluiu um novo item). Isto normalmente causa uma alteração no estado do modelo tanto quanto nas informações. Por �m, a visão usa o modelo para gerar uma interface com o usuário apropriada. A visão recebe as informações do modelo. O modelo não tem conhecimento direto da visão. Ele apenas responde a requisições por informações de quem quer que seja e requisita por transformações nas informações feitas pelo controlador. Após isso, o controlador, como um gerenciador da interface do usuário, aguarda por mais interações do usuário, onde inicia novamente todo o ciclo. Portanto, a principal ideia do padrão arquitetural MVC é a separação dos conceitos - e do código. O MVC é como a clássica programação orientada a objetos, ou seja, criar objetos que escondem as suas informações e como elas são manipuladas e então apresentar apenas uma simples interface para o mundo. Entre as diversas vantagens do padrão MVC estão a possibilidade de reescrita da GUI ou do Controller sem alterar o nosso modelo, reutilização da GUI para diferentes aplicações com pouco esforço, facilidade na manutenção e adição de recursos, reaproveitamentode código, facilidade de manter o código sempre limpo etc. 33 IImmpplleemmeennttaaççããoo ddoo MMVVCC Existem diversos frameworks para Java que implementam o padrão MVC e são Unidade 1 - Tópico 3 Livro Digital - Programação para Web II https://livrodigital.uniasselvi.com.br/ADS27_programacao_para_web_ii... 23 of 30 26/06/2024, 16:25 RREESSUUMMOO DDOO TTÓÓPPIICCOO • O Java Server Faces (JSF) é o framework padrão da plataforma Java para a construção de aplicações web com JEE. • Da mesma forma que as demais tecnologias que fazem parte da plataforma Java, o JSF é de�nido por uma especi�cação mantida pelo JCP através de JSRs. • O JSF funciona baseado em objetos que são mantidos em memória no servidor e que �cam responsáveis pela geração do HTML que será enviado ao navegador. • Note que este mapeamento de um componente de formulário diretamente para um atributo e de um botão diretamente para um método aumenta muito a produtividade no desenvolvimento. • O JSF funciona através de uma arquitetura MVC, o que exige a presença de um intermediário entre o model e a view. Este intermediário é o controller, que no caso do JSF é chamado de Managed Bean (MB). • Cabe ao MB mapear os componentes para o model, instanciar os objetos no lado do servidor e também reagir aos eventos gerados na view. • O MB sempre é uma classe serializável com métodos getters e setters para permitir o acesso aos componentes visuais. • No escopo marcado pela anotação @SessionScoped o tempo de vida do MB é marcado pela sessão do usuário. Caso nenhuma con�guração adicional seja feita, o MB se mantém desde pressionarmos o botão até fecharmos o navegador. O escopo de Sessão é interessante para guardar uma sessão de login do usuário, garantindo que ele tenha passado por uma página e se identi�cado antes de acessar a parte protegida de uma aplicação. NNeessttee ttóóppiiccoo vviimmooss qquuee: Unidade 1 - Tópico 3 Livro Digital - Programação para Web II https://livrodigital.uniasselvi.com.br/ADS27_programacao_para_web_ii... 25 of 30 26/06/2024, 16:25 D) Responder Responder II, III e IV 2 Diferencie e descreva a aplicabilidade das anotações @RequestScoped e @SessionScoped: 3 Implemente uma aplicação que contenha uma tela de login e senha utilizando o JSF. Deve existir um MB que veri�ca os valores para ver se são iguais a “admin” para o login e “admin” para a senha. Após a validação ou não dos valores, uma mensagem deverá ser exibida no console do AS. Unidade 1 - Tópico 3 Livro Digital - Programação para Web II https://livrodigital.uniasselvi.com.br/ADS27_programacao_para_web_ii... 27 of 30 26/06/2024, 16:25 B) C) D) Responder Apenas as a�rmativas II e III estão corretas Apenas as a�rmativas I, II e III estão corretas Apenas as a�rmativas II, III e IV estão corretas 5 O framework JSF (Java Server Faces), permite o desenvolvimento de aplicações robustas e com vários recursos que facilitam o desenvolvimento. O JSF utiliza classes Managed Beans, as quais permitem o controle de formulários de páginas web dentro destas classes. Referente ao JSF e seus componentes, analise as a�rmativas a seguir: I - O Managed Bean permite que um método seu seja invocado pelo componente do tipo “commandButton”. II - O Managed Bean funciona como intermediário entre as camadas model e view. III - A anotação @RequestScoped possui a mesma funcionalidade da anotação @SessionScoped. IV - A anotação @SessionScoped não pode ser utilizada em um Managed Bean. Agora assinale a alternative CORRETA: Unidade 1 - Tópico 3 Livro Digital - Programação para Web II https://livrodigital.uniasselvi.com.br/ADS27_programacao_para_web_ii... 29 of 30 26/06/2024, 16:25