{"id":49689,"date":"2026-02-26T21:54:39","date_gmt":"2026-02-27T00:54:39","guid":{"rendered":"https:\/\/portifolioos-prontos.com\/?post_type=product&#038;p=49689"},"modified":"2026-03-02T17:40:22","modified_gmt":"2026-03-02T20:40:22","slug":"aula-pratica-programacao-web-ii","status":"publish","type":"product","link":"https:\/\/portifolioos-prontos.com\/index.php\/product\/aula-pratica-programacao-web-ii\/","title":{"rendered":"Aula Pr\u00e1tica Programa\u00e7\u00e3o Web II"},"content":{"rendered":"<p><strong>Aula Pr\u00e1tica Programa\u00e7\u00e3o Web II <\/strong><\/p>\n<p><strong>ROTEIRO DE AULA PR\u00c1TICA NOME DA DISCIPLINA: PROGRAMA\u00c7\u00c3O WEB <\/strong><\/p>\n<p><strong>Unidade: U1_ PROGRAMA\u00c7\u00c3O_EM_JSF <\/strong><\/p>\n<p><strong>Aula: A2_COMPONENTES_VISUAIS_DO_JSF <\/strong><\/p>\n<hr \/>\n<p><strong>OBJETIVOS<\/strong><\/p>\n<p>Defini\u00e7\u00e3o dos objetivos da aula pr\u00e1tica:<br \/>\nDefini\u00e7\u00e3o dos objetivos da aula pr\u00e1tica: Ensinar o aluno a criar um projeto web din\u00e2mico utilizando<br \/>\nconceitos iniciais de JSF na camada de vis\u00e3o, al\u00e9m de estruturar as partes desse projeto segundo<br \/>\no padr\u00e3o de arquitetura MVC, tudo isso sendo aplicado \u00e0 linguagem de programa\u00e7\u00e3o Java. Ap\u00f3s<br \/>\na cria\u00e7\u00e3o e estrutura\u00e7\u00e3o dos arquivos, aplicaremos uma folha de estilo no formul\u00e1rio criado.<\/p>\n<p>Eclipse e Wildfly<\/p>\n<p>Ide Eclipse ou correlata que possua configura\u00e7\u00f5es para constru\u00e7\u00e3o de classes seguindo o Java<br \/>\nEE, com configura\u00e7\u00f5es para ter servidor de aplica\u00e7\u00e3o e utilizar o framework JSF para a camada<br \/>\nde vis\u00e3o. Recomenda-se o uso do servidor wilfly.<\/p>\n<p>Acesse o site oficial: <a href=\"https:\/\/eclipseide.org\/\">https:\/\/eclipseide.org\/<\/a><br \/>\nClique em Download:<br \/>\nEscolha a vers\u00e3o \u201cEclipse IDE for Enterprise Java and Web Developers\u201d que compat\u00edvel<br \/>\ncom o sistema operacional do seu computador.<\/p>\n<p>Ap\u00f3s o download, descompacte o j\u00e1 estar\u00e1 pronto para uso.<\/p>\n<p>Atividade proposta: Criaremos um projeto baseado em Java EE (Projeto de WEB Din\u00e2mico)<br \/>\ncom organiza\u00e7\u00e3o preconizada pelo MVC, para cadastro de faculdades.<\/p>\n<p>Voc\u00ea deve elaborar, pelo menos, uma classe de modelo chamada Faculdade. Essa classe ter\u00e1<br \/>\num id (int), nomeCompleto (String) e nomeFantasia (String). Esses dados devem ser obtidos<br \/>\natrav\u00e9s de um formul\u00e1rio que contenha esses tr\u00eas elementos para ser digitados pelo usu\u00e1rio.<\/p>\n<p>Esse formul\u00e1rio deve estar presente na p\u00e1gina faculdades.xhtml e ela deve obrigatoriamente<br \/>\nutilizar conceitos de JSF que seja compat\u00edvel com as premissas de utiliza\u00e7\u00e3o de<br \/>\nManagedBeans. A classe Java FaculdadeMB ser\u00e1 a respons\u00e1vel por controlar as requisi\u00e7\u00f5es<br \/>\noriundas da camada de vis\u00e3o e pass\u00e1-las para a camada modelo. As etapas descritas a seguir<br \/>\nforam criadas usando a IDE Eclipse, com o servidor Wildfly.<\/p>\n<p>Para iniciar a atividade, vamos criar um projeto web din\u00e2mico:<\/p>\n<p>Figura 1 \u2013 Criando um Dynamic Web Project<\/p>\n<p>Vamos dar o nome \u201cFaculdade\u201d ao projeto e colocar as configura\u00e7\u00f5es conforme a Figura 7. Caso<br \/>\nseu \u201cTarget runtime\u201d esteja vazio como na Figura 2 ent\u00e3o clique em \u201cNew Runtime\u2026\u201d, ent\u00e3o uma<br \/>\njanela abrir\u00e1, procure por \u201cWildFly\u201d da mesma forma que a Figura 3, selecione \u201cJBoss AS, WildFly<br \/>\n&amp; EAP Server Tools\u201d e clique em next, prossiga com a instala\u00e7\u00e3o at\u00e9 a conclus\u00e3o, e no final, aceite<br \/>\nos termos. Aten\u00e7\u00e3o, mesmo ap\u00f3s o aceite dos termos o download e a instala\u00e7\u00e3o ainda podem<br \/>\nestar ocorrendo, cheque no canto inferior esquerdo (Figura 4) e logo ap\u00f3s a finaliza\u00e7\u00e3o o Eclipse<br \/>\nprecisar\u00e1 ser reiniciado, ent\u00e3o repita o processo de cria\u00e7\u00e3o do projeto, caso ainda n\u00e3o tenha o<br \/>\n\u201cTarget runtime\u201d clique novamente em \u201cNew Runtime\u2026\u201d e procure por \u201cWildFly\u201d (Figura 5),<br \/>\nent\u00e3o selecione \u201cWildFly 10.x Runtime\u201d e clique em next, na pr\u00f3xima clique em \u201cDownload and<br \/>\ninstall runtime\u2026\u201d, vamos utilizar a vers\u00e3o, selecione ela e clique em next, prossiga com a<br \/>\ninstala\u00e7\u00e3o at\u00e9 a finaliza\u00e7\u00e3o, agora podemos prosseguir com a configura\u00e7\u00e3o do projeto.<\/p>\n<p>Figura 2 \u2013 Configurando runtime<br \/>\nFigura 3 \u2013 Instalando WildFly<br \/>\nFigura 4 \u2013 Processo de download e instala\u00e7\u00e3o<br \/>\nFigura 5 \u2013 Sele\u00e7\u00e3o Runtime WildFly 10<br \/>\nFigura 6 \u2013 Instala\u00e7\u00e3o WildFly 10<br \/>\nFigura 7 \u2013 Configura\u00e7\u00f5es para cria\u00e7\u00e3o do projeto<\/p>\n<p>Para cria\u00e7\u00e3o do formul\u00e1rio, clique com o bot\u00e3o direito sobre o projeto e escolha New &gt;&gt; HTML<br \/>\nFile. D\u00ea o nome para o arquivo de faculdades.xhtml e clique em finish. Crie os campos necess\u00e1rios<br \/>\nusando os recursos JSF, conforme c\u00f3digo na Figura 8.<\/p>\n<p>Figura 8 \u2013 C\u00f3digo para cria\u00e7\u00e3o do formul\u00e1rio faculdade.xhtml o<\/p>\n<p>Criada a interface para a tela de cadastro, o pr\u00f3ximo passo \u00e9 criar o pacote \u201cmodel\u201d e dentro do<br \/>\npacote criar a classe \u201cFaculdade\u201d, com o c\u00f3digo da Figura 9.<\/p>\n<p>Figura 9 \u2013 Classe Faculdade<\/p>\n<p>O pr\u00f3ximo passo consiste em criar uma classe especial, uma Managed Bean, para fazer o<br \/>\ncontrole da comunica\u00e7\u00e3o entre a camada de vis\u00e3o e a camada modelo. Para isso, no<br \/>\nprojeto crie um pacote chamado \u201ccontrol\u201d e dentro do pacote uma nova classe Java<br \/>\nchamada \u201cFaculdadeMB\u201d, com o c\u00f3digo da Figura 10.<\/p>\n<p>Figura 10 \u2013 Classe FaculdadeMB<\/p>\n<p>O pr\u00f3ximo passo \u00e9 configurar o arquivo faces-config.xml, que se encontra dentro da pasta<br \/>\nwebapp &gt; WEB-INF, clique duas vezes para abrir, caso de primeira n\u00e3o consiga ver o c\u00f3digo, no<br \/>\nmenu inerior dessa janela clique em \u201csource\u201d. Com o c\u00f3digo da Figura 11, adicione as tags das<br \/>\nlinhas 8 a 10.<\/p>\n<p>Figura 11 \u2013 Classe FaculdadeMB<\/p>\n<p>Para testar, clique com o bot\u00e3o direito no arquivo faculdades.xhtml e selecione Run as &gt; Run on<br \/>\nServer. Caso uma janela se abra pedindo para selecionar o server, procure por \u201cWildFly\u201d,<br \/>\nselecione \u201cWildFly 10.x\u201d e clique em next (Figura 12), prossiga at\u00e9 finalizar.<\/p>\n<p>Figura 12 \u2013 Selecionar server<\/p>\n<p>Caso de o erro 404 ao rodar o server, siga os seguintes passos:<\/p>\n<p>No Eclipse, v\u00e1 em:<br \/>\nProject \u2192 Properties \u2192 Java Compiler<br \/>\nMarque \u201cEnable project specific settings\u201d.<br \/>\nEm Compiler compliance level, selecione 1.8.<br \/>\nV\u00e1 em Project \u2192 Clean\u2026 e limpe\/recompile o projeto.<br \/>\nPare e reinicie o WildFly.<\/p>\n<p>Se todos os c\u00f3digos foram feitos corretamente, o resultado ap\u00f3s preencher e clicar no bot\u00e3o<br \/>\nsubmit, dever\u00e1 ser similar ao da Figura 13.<\/p>\n<p>Figura 12 \u2013 Resultado esperado at\u00e9 o momento<\/p>\n<p>Observe o caminho:<\/p>\n<p>Localhost:8080\/Faculdade\/faces\/faculdade.xhtml<\/p>\n<p>A tag no arquivo web.xml \u00e9 quem especifica o mapeamento do JSF, veja como est\u00e1<br \/>\npara esse projeto. Na linha 13 \/faces\/* implica diretamente no caminho.<\/p>\n<p>Agora passaremos para a finaliza\u00e7\u00e3o do projeto criando o arquivo de estilos. Dando continuidade<br \/>\ncrie uma nova pasta, dentro de \u201cwebapp\u201d, chamada \u201cresources\u201d. Dentro dessa nova pasta, crie<br \/>\numa nova, chamada \u201ccss\u201d. Quando constru\u00edmos essa estrutura de pastas, basta adicionar a<br \/>\nseguinte diretriz para que o arquivo xhtml aplique as regras do CSS:<\/p>\n<p>&lt;h:outputStylesheet library=\u201dcss\u201d name=\u201darquivo.css\u201d \/&gt;<\/p>\n<p>Onde arquivo.css \u00e9 o nome que dar\u00e1 ao arquivo de folha de estilo.<\/p>\n<p>Vamos criar, dentro da pasta css o arquivo estilo1.css com o seguinte c\u00f3digo:<\/p>\n<p>Pare a execu\u00e7\u00e3o do servidor, e execute novamente. Veja se o resultado \u00e9 similar ao da Figura 13.<\/p>\n<p>Figura 13 \u2013 Resultado da atividade<\/p>\n<p>Ao final da aula, dever\u00e1 ser entregue um projeto web chamado Faculdade, com uma interface<br \/>\ngr\u00e1fica, uma classe modelo e uma classe de controle. O sistema dever\u00e1 estar funcionando.<\/p>\n<p>Utilize esta tabela para organizar os passos realizados e adicionar capturas de tela:<\/p>\n<p>Estrutura do Projeto Criada [Insira o Print]<br \/>\nArquivo faculdades.xhtml [Insira o Print]<br \/>\nArquivo Faculdade.java [Insira o Print]<br \/>\nArquivo FaculdadeMB.java [Insira o Print]<br \/>\nArquivo estilo1.css [Insira o Print]<br \/>\nResultado Testado [Insira o Print]<\/p>\n<p>\u2713 Estrutura do projeto criada corretamente;<br \/>\n\u2713 Arquivo xhtml criado;<br \/>\n\u2713 Classe modelo para o objeto Faculdade;<br \/>\n\u2713 Arquivos organizados nos devidos pacotes;<br \/>\n\u2713 ManagedBean criado;<br \/>\n\u2713 Configura\u00e7\u00e3o do arquivo faces-config.xml<br \/>\n\u2713 Projeto executando em um browser<br \/>\n\u2713 Pasta \u201cresources\u201d criada dentro de \u201cwebapp\u201d<br \/>\n\u2713 Pasta \u201ccss\u201d criada dentro de \u201cresources\u201d<br \/>\n\u2713 Arquivo css chamado estilo1.css criado dentro da pasta css<br \/>\n\u2713 Arquivo estilo1.css anexado no arquivo xhtml atrav\u00e9s da refer\u00eancia:<br \/>\n\uf06f &lt;h:outputStylesheet library=\u201dcss\u201d name=\u201destilo1.css\u201d \/&gt;<\/p>\n<p>Resultados do experimento:<\/p>\n<p>O arquivo dever\u00e1 conter:<\/p>\n<p>Capa<br \/>\nFolha de rosto com os dados da disciplina e do aluno<br \/>\nM\u00e9todos: Explique as t\u00e9cnicas que utilizou<br \/>\nResultado:<br \/>\n\uf06f Captura de tela da p\u00e1gina WEB.<br \/>\n\uf06f Captura de tela da estrutura do projeto.<\/p>\n<p>Evid\u00eancias (c\u00f3digos):<br \/>\n\uf06f faculdades.xhtml<br \/>\n\uf06f Faculdade.java<br \/>\n\uf06f FaculdadeMB.java<br \/>\n\uf06f estilo1.css<\/p>\n<p>Ap\u00f3s concluir esta atividade, voc\u00ea ter\u00e1 aprendido:<\/p>\n<p>Criar um projeto web din\u00e2mico em Java utilizando o servidor de aplica\u00e7\u00f5es WildFly.<br \/>\nEstruturar uma aplica\u00e7\u00e3o seguindo o padr\u00e3o MVC (Model\u2013View\u2013Controller).<br \/>\nDesenvolver p\u00e1ginas de interface utilizando JSF (JavaServer Faces) e componentes<br \/>\nXHTML.<\/p>\n<p>Implementar Managed Beans para comunica\u00e7\u00e3o entre a camada de vis\u00e3o e a camada de<br \/>\nmodelo.<\/p>\n<p>Aplicar estilos personalizados em p\u00e1ginas JSF utilizando folhas de estilo (CSS) e a pasta<br \/>\nde recursos padr\u00e3o do framework.<\/p>\n<hr \/>\n<p>Defini\u00e7\u00e3o dos objetivos da aula pr\u00e1tica:<\/p>\n<p>Nessa aula o objetivo \u00e9 criar um sistema de agenda fazendo a persist\u00eancia dos dados usando o<br \/>\nframework Hibernate.<\/p>\n<p>Para isso o sistema ser\u00e1 dividido em duas partes:<\/p>\n<p>Na primeira dever\u00e3o ser criados os arquivos de configura\u00e7\u00e3o com o banco, bem como a<br \/>\ntransa\u00e7\u00e3o de inser\u00e7\u00e3o de dados.<\/p>\n<p>Na segunda, ser\u00e3o criados os arquivos necess\u00e1rios \u00e0 intera\u00e7\u00e3o do usu\u00e1rio com o sistema,<br \/>\nou seja, a Managed Bean e o arquivo.xhtml.<\/p>\n<p>Eclipse, Wildfly e XAMPP<\/p>\n<p>Ide Eclipse ou correlata que possua configura\u00e7\u00f5es para constru\u00e7\u00e3o de classes seguindo o Java<br \/>\nEE, com configura\u00e7\u00f5es para ter servidor de aplica\u00e7\u00e3o e utilizar o framework JSF para a camada<br \/>\nde vis\u00e3o. Recomenda-se o uso do servidor wilfly.<\/p>\n<p>Acesse o site oficial: <a href=\"https:\/\/eclipseide.org\/\">https:\/\/eclipseide.org\/<\/a><br \/>\nClique em Download:<br \/>\nEscolha a vers\u00e3o \u201cEclipse IDE for Enterprise Java and Web Developers\u201d que compat\u00edvel<br \/>\ncom o sistema operacional do seu computador.<\/p>\n<p>Ap\u00f3s o download, descompacte o j\u00e1 estar\u00e1 pronto para uso.<\/p>\n<p>Atividade proposta: Criaremos um projeto baseado em Java EE (Projeto Web Din\u00e2mico),<br \/>\norganizado segundo o padr\u00e3o MVC, para o cadastro de contatos.<\/p>\n<p>Voc\u00ea deve elaborar, pelo menos, uma classe de modelo chamada Contato, contendo os atributos<br \/>\nid (Long), nome (String), telefone (String) e email (String). Esses dados ser\u00e3o obtidos por meio de<br \/>\num formul\u00e1rio presente na p\u00e1gina Contato.xhtml, na qual o usu\u00e1rio poder\u00e1 cadastrar, listar, alterar<br \/>\ne excluir registros.<\/p>\n<p>A p\u00e1gina deve utilizar os componentes e tags do JSF, de forma compat\u00edvel com as premissas de<br \/>\nutiliza\u00e7\u00e3o de ManagedBeans. A classe Java ContatoMB ser\u00e1 respons\u00e1vel por controlar as<br \/>\nrequisi\u00e7\u00f5es oriundas da camada de vis\u00e3o e encaminh\u00e1-las \u00e0 camada de persist\u00eancia.<\/p>\n<p>A persist\u00eancia dos dados deve ser implementada por meio da API JPA, com o provedor<br \/>\nHibernate, realizando a integra\u00e7\u00e3o com o banco de dados MySQL. A configura\u00e7\u00e3o do acesso ao<br \/>\nbanco ser\u00e1 feita no arquivo persistence.xml, e as opera\u00e7\u00f5es de CRUD ser\u00e3o estruturadas nas<br \/>\nclasses DAO e CRUD, utilizando EntityManager para gerenciar as transa\u00e7\u00f5es.<\/p>\n<p>As etapas descritas a seguir foram desenvolvidas utilizando a IDE Eclipse e o servidor WildFly,<br \/>\nem conjunto com o XAMPP (phpMyAdmin) para gerenciamento do banco de dados.<\/p>\n<p>Usando o Xampp (ou outro SGBD), crie um banco de dados chamado \u201cagenda\u201d.<br \/>\nFa\u00e7a o download do conector MySql pelo link:<br \/>\n<a href=\"https:\/\/repo1.maven.org\/maven2\/mysql\/mysql-connector-java\/8.0.11\/mysqlconnector-java-8.0.11.jar\">https:\/\/repo1.maven.org\/maven2\/mysql\/mysql-connector-java\/8.0.11\/mysqlconnector-java-8.0.11.jar<\/a><\/p>\n<p>Fa\u00e7a o download do Hibernate, os links para download das libs:<br \/>\n<a href=\"https:\/\/repo1.maven.org\/maven2\/antlr\/antlr\/2.7.7\/antlr-2.7.7.jar\">https:\/\/repo1.maven.org\/maven2\/antlr\/antlr\/2.7.7\/antlr-2.7.7.jar<\/a><br \/>\n<a href=\"https:\/\/repo1.maven.org\/maven2\/com\/fasterxml\/classmate\/1.3.0\/classmate-1.3.0.jar\">https:\/\/repo1.maven.org\/maven2\/com\/fasterxml\/classmate\/1.3.0\/classmate-1.3.0.jar<\/a><br \/>\n<a href=\"https:\/\/repo1.maven.org\/maven2\/dom4j\/dom4j\/1.6.1\/dom4j-1.6.1.jar\">https:\/\/repo1.maven.org\/maven2\/dom4j\/dom4j\/1.6.1\/dom4j-1.6.1.jar<\/a><br \/>\n<a href=\"https:\/\/repo1.maven.org\/maven2\/org\/hibernate\/common\/hibernate-commonsannotations\/5.0.1.Final\/hibernate-commons-annotations-5.0.1.Final.jar\">https:\/\/repo1.maven.org\/maven2\/org\/hibernate\/common\/hibernate-commonsannotations\/5.0.1.Final\/hibernate-commons-annotations-5.0.1.Final.jar<\/a><br \/>\n<a href=\"https:\/\/repo1.maven.org\/maven2\/org\/hibernate\/hibernatecore\/5.2.17.Final\/hibernate-core-5.2.17.Final.jar\">https:\/\/repo1.maven.org\/maven2\/org\/hibernate\/hibernatecore\/5.2.17.Final\/hibernate-core-5.2.17.Final.jar<\/a><br \/>\n<a href=\"https:\/\/repo1.maven.org\/maven2\/org\/hibernate\/hibernateentitymanager\/5.0.7.Final\/hibernate-entitymanager-5.0.7.Final.jar\">https:\/\/repo1.maven.org\/maven2\/org\/hibernate\/hibernateentitymanager\/5.0.7.Final\/hibernate-entitymanager-5.0.7.Final.jar<\/a><br \/>\n<a href=\"https:\/\/repo1.maven.org\/maven2\/org\/javassist\/javassist\/3.18.1-GA\/javassist-3.18.1-GA.jar\">https:\/\/repo1.maven.org\/maven2\/org\/javassist\/javassist\/3.18.1-GA\/javassist-3.18.1-GA.jar<\/a><br \/>\n<a href=\"https:\/\/repo1.maven.org\/maven2\/org\/jboss\/logging\/jboss-logging\/3.3.0.Final\/jbosslogging-3.3.0.Final.jar\">https:\/\/repo1.maven.org\/maven2\/org\/jboss\/logging\/jboss-logging\/3.3.0.Final\/jbosslogging-3.3.0.Final.jar<\/a><\/p>\n<p>Crie um projeto Dynamic Web com p nome \u201cAgenda\u201d (Figura 1).<br \/>\nDentro da pasta webapp &gt; WEB-INF &gt; lib, coloque tanto o conector MySql, quanto os<br \/>\narquivos do Hibernate que voc\u00ea realizou o download nos passos 2 e 3.<\/p>\n<p>Clique com o bot\u00e3o direito no nome do projeto, selecione \u201cProperties\u201d e depois Java Build<br \/>\nPath &gt; aba Libraries. Clique em Add Jars e selecione a pasta lib que voc\u00ea copiou os<br \/>\narquivos no passo 6 (Figura 2).<\/p>\n<p>Ajustar o compilador<\/p>\n<p>Clique com o bot\u00e3o direito no projeto Agenda \u2192 Properties<br \/>\nV\u00e1 em Java Compiler<br \/>\nMarque Enable project specific settings<br \/>\nEm Compiler compliance level, selecione 1.8<br \/>\nClique em Apply and Close<\/p>\n<p>Ajustar o \u201cProject Facet\u201d<br \/>\nClique novamente com o bot\u00e3o direito no projeto \u2192 Properties<br \/>\nV\u00e1 em Project Facets<br \/>\nProcure a linha Java<br \/>\nAltere a Version para 1.8<br \/>\nSe estiver cinza:<br \/>\nClique no link \u201cFurther configuration available\u2026\u201d<br \/>\nNo campo \u201cRuntimes\u201d, marque o WildFly 10 Runtime (ou configure<br \/>\nse ainda n\u00e3o existir)<\/p>\n<p>Clique em OK e volte para 1.8<br \/>\nClique em Apply and Close<\/p>\n<p>Figura 1 \u2013 Criando o projeto<br \/>\nFigura 2 \u2013 Adicionando libs<\/p>\n<p>Dentro da pasta webpp&gt; META-INF crie o arquivo persistence.xml<\/p>\n<p>&lt;persistence xmlns=\u201d<a href=\"http:\/\/xmlns.jcp.org\/xml\/ns\/persistence%E2%80%9D\">http:\/\/xmlns.jcp.org\/xml\/ns\/persistence\u201d<\/a><br \/>\nxmlns:xsi=\u201d<a href=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance%E2%80%9D\">http:\/\/www.w3.org\/2001\/XMLSchema-instance\u201d<\/a><br \/>\nxsi:schemaLocation=\u201d<a href=\"http:\/\/xmlns.jcp.org\/xml\/ns\/persistence\">http:\/\/xmlns.jcp.org\/xml\/ns\/persistence<\/a><br \/>\n<a href=\"http:\/\/xmlns.jcp.org\/xml\/ns\/persistence\/persistence_2_1.xsd%E2%80%9D\">http:\/\/xmlns.jcp.org\/xml\/ns\/persistence\/persistence_2_1.xsd\u201d<\/a><br \/>\nversion=\u201d2.1\u2033&gt;<\/p>\n<p>org.hibernate.jpa.HibernatePersistenceProvider<br \/>\nmodel.Contato<\/p>\n<p>&lt;property name=\u201djavax.persistence.jdbc.url\u201d<br \/>\nvalue=\u201djdbc:mysql:\/\/localhost:3306\/agenda?serverTimezone=UTC\u201d\/&gt;<\/p>\n<p>Crie um pacote chamado \u201cmodel\u201d dentro da pasta raiz \u201csrc\u201d e crie a classe \u201cContato\u201d, com<br \/>\no seguinte c\u00f3digo:<\/p>\n<p>package model;<\/p>\n<p>import javax.persistence.*;<\/p>\n<p>@Entity<br \/>\n@Table(name = \u201cContato\u201d)<br \/>\npublic class Contato {<\/p>\n<p>@Id<br \/>\n@GeneratedValue(strategy = GenerationType.IDENTITY)<br \/>\n@Column<br \/>\nprivate int id;<\/p>\n<p>@Column<br \/>\nprivate String nome;<\/p>\n<p>@Column<br \/>\nprivate String sobrenome;<\/p>\n<p>@Column<br \/>\nprivate String telefone;<\/p>\n<p>@Column<br \/>\nprivate String email;<\/p>\n<p>public int getId() {<br \/>\nreturn id;<br \/>\n}<\/p>\n<p>public void setId(int id) {<br \/>\nthis.id = id;<br \/>\n}<\/p>\n<p>public String getNome() {<br \/>\nreturn nome;<br \/>\n}<\/p>\n<p>public void setNome(String nome) {<br \/>\nthis.nome = nome;<br \/>\n}<\/p>\n<p>public String getSobrenome() {<br \/>\nreturn sobrenome;<br \/>\n}<\/p>\n<p>public void setSobrenome(String sobrenome) {<br \/>\nthis.sobrenome = sobrenome;<br \/>\n}<\/p>\n<p>public String getTelefone() {<br \/>\nreturn telefone;<br \/>\n}<\/p>\n<p>public void setTelefone(String telefone) {<br \/>\nthis.telefone = telefone;<br \/>\n}<\/p>\n<p>public String getEmail() {<br \/>\nreturn email;<br \/>\n}<\/p>\n<p>public void setEmail(String email) {<br \/>\nthis.email = email;<br \/>\n}<\/p>\n<p>}<\/p>\n<p>Dentro da pasta model crie a classe DAO, para fazer a conex\u00e3o com o banco<br \/>\npackage model;<\/p>\n<p>import javax.persistence.*;<\/p>\n<p>public class DAO {<\/p>\n<p>private static final EntityManagerFactory emFactory;<\/p>\n<p>static {<br \/>\nemFactory = Persistence.createEntityManagerFactory(\u201cagendaPersist\u201d);<br \/>\n}<\/p>\n<p>public static EntityManager getEntityManager() {<br \/>\nreturn emFactory.createEntityManager();<br \/>\n}<\/p>\n<p>public static void fecharFactory() {<br \/>\nemFactory.close();<br \/>\n}<\/p>\n<p>}<\/p>\n<p>Dentro da pasta model crie agora a classe CRUD.<br \/>\npackage model;<\/p>\n<p>import javax.persistence.*;<\/p>\n<p>public class CRUD {<\/p>\n<p>public static void inserir(Contato c1) {<br \/>\ntry {<br \/>\nEntityManager entityManager = DAO.getEntityManager();<br \/>\nentityManager.getTransaction().begin();<br \/>\nentityManager.persist(c1);<br \/>\nentityManager.getTransaction().commit();<br \/>\nentityManager.close();<br \/>\nSystem.out.println(\u201cconectado Salvo!\u201d);<br \/>\n} catch(Exception ex) {<br \/>\nex.printStackTrace();<br \/>\n}<br \/>\n}<\/p>\n<p>}<\/p>\n<p>Nesse momento, fique \u00e0 vontade caso queira implementar as demais transa\u00e7\u00f5es com o banco, elas est\u00e3o<br \/>\ndispon\u00edveis no texto principal da se\u00e7\u00e3o 2.3.<\/p>\n<p>Agora vamos criar os componentes necess\u00e1rios para a intera\u00e7\u00e3o do usu\u00e1rio com o sistema.<\/p>\n<p>Crie o pacote \u201ccontroller\u201d dentro da pasta raiz \u201csrc\u201d e dentro dele crie a classe ContatoMB com o<br \/>\nseguinte c\u00f3digo:<\/p>\n<p>package controller;<\/p>\n<p>import javax.faces.bean.ManagedBean;<\/p>\n<p>import model.*;<\/p>\n<p>@ManagedBean<br \/>\npublic class ContatoMB {<\/p>\n<p>public ContatoMB() {<br \/>\n}<\/p>\n<p>private Contato c = new Contato();<\/p>\n<p>public String getId() {<br \/>\nreturn String.valueOf(c.getId());<br \/>\n}<\/p>\n<p>public void setId(String id) {<br \/>\nc.setId(Integer.parseInt(id));<br \/>\n}<\/p>\n<p>public String getNome() {<br \/>\nreturn c.getNome();<br \/>\n}<\/p>\n<p>public void setNome(String nome) {<br \/>\nc.setNome(nome);<br \/>\n}<\/p>\n<p>public String getSobrenome() {<br \/>\nreturn c.getSobrenome();<br \/>\n}<\/p>\n<p>public void setSobrenome(String sobrenome) {<br \/>\nc.setSobrenome(sobrenome);<br \/>\n}<\/p>\n<p>public String getTelefone() {<br \/>\nreturn c.getTelefone();<br \/>\n}<\/p>\n<p>public void setTelefone(String telefone) {<br \/>\nc.setTelefone(telefone);<br \/>\n}<\/p>\n<p>public void setEmail(String email) {<br \/>\nc.setEmail(email);<br \/>\n}<\/p>\n<p>public String getEmail() {<br \/>\nreturn c.getEmail();<br \/>\n}<\/p>\n<p>public void salvar() {<br \/>\ntry {<br \/>\nCRUD.inserir(c);<br \/>\n} catch(Exception ex){<br \/>\nex.printStackTrace();<br \/>\n}<br \/>\n}<\/p>\n<p>}<\/p>\n<p>Configure arquivo faces-config.xml na pasta webapp&gt;WEB-INF, deixando com o seguinte<br \/>\nc\u00f3digo:<\/p>\n<p>&lt;faces-config<br \/>\nxmlns=\u201d<a href=\"http:\/\/xmlns.jcp.org\/xml\/ns\/javaee%E2%80%9D\">http:\/\/xmlns.jcp.org\/xml\/ns\/javaee\u201d<\/a><br \/>\nxmlns:xsi=\u201d<a href=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance%E2%80%9D\">http:\/\/www.w3.org\/2001\/XMLSchema-instance\u201d<\/a><br \/>\nxsi:schemaLocation=\u201d<a href=\"http:\/\/xmlns.jcp.org\/xml\/ns\/javaee\">http:\/\/xmlns.jcp.org\/xml\/ns\/javaee<\/a><br \/>\n<a href=\"http:\/\/xmlns.jcp.org\/xml\/ns\/javaee\/web-facesconfig_2_2.xsd%E2%80%9D\">http:\/\/xmlns.jcp.org\/xml\/ns\/javaee\/web-facesconfig_2_2.xsd\u201d<\/a><br \/>\nversion=\u201d2.2\u2033&gt;<\/p>\n<p>contatoMB<br \/>\ncontroller.ContatoMB<br \/>\nrequest<\/p>\n<p>Por fim, crie o arquivo Contato.xhtml dentro da pasta webapp, com o seguinte c\u00f3digo:<\/p>\n<p>Com a cria\u00e7\u00e3o dos 6 arquivos de c\u00f3digos descritos nas duas atividades, juntamente com as<br \/>\nconfigura\u00e7\u00f5es que foram realizadas, o projeto \u201cAgenda\u201d est\u00e1 pronto para ser executado e persistir<br \/>\ndados.<\/p>\n<p>\u2713 Criar o Banco de dados Usu\u00e1rios no MySQL;<br \/>\n\u2713 Cria\u00e7\u00e3o da estrutura do projeto no Eclipse;<br \/>\n\u2713 Cria\u00e7\u00e3o o arquivo de persist\u00eancia;<br \/>\n\u2713 Cria\u00e7\u00e3o da classe Contato.java;<br \/>\n\u2713 Cria\u00e7\u00e3o da classe DAO.java;<br \/>\n\u2713 Cria\u00e7\u00e3o da classe CRUD.java;<br \/>\n\u2713 Cria\u00e7\u00e3o da classe Managed Bean chamada \u201cContatoMB\u201d;<br \/>\n\u2713 Configura\u00e7\u00e3o do arquivo faces-config.xml;<br \/>\n\u2713 Cria\u00e7\u00e3o da interface gr\u00e1fica em um arquivo xhtml.<\/p>\n<p>Resultados do experimento:<\/p>\n<p>O arquivo dever\u00e1 conter:<\/p>\n<p>Capa<br \/>\nFolha de rosto com os dados da disciplina e do aluno<br \/>\nM\u00e9todos: Explique as t\u00e9cnicas que utilizou<br \/>\nResultado:<br \/>\n\uf06f Captura de tela da raiz do projeto;<br \/>\n\uf06f Captura de tela da p\u00e1gina Contato funcionando;<br \/>\n\uf06f Captura de tela da tabela do banco de dados com pelo menos 5 dados inseridos.<\/p>\n<p>Evid\u00eancias (c\u00f3digos):<br \/>\n\uf06f Persistence.xml<br \/>\n\uf06f Contato.java<br \/>\n\uf06f DAO.java<br \/>\n\uf06f CRUD.java<br \/>\n\uf06f ContatoMB.java<br \/>\n\uf06f Contato.xhtml<\/p>\n<p>Ap\u00f3s concluir esta atividade, voc\u00ea ter\u00e1 aprendido:<\/p>\n<p>Cria\u00e7\u00e3o e configura\u00e7\u00e3o de um projeto Java EE (Web Din\u00e2mico) estruturado segundo o<br \/>\npadr\u00e3o MVC.<\/p>\n<p>Implementa\u00e7\u00e3o de um CRUD (Create, Read, Update, Delete) utilizando JSF como camada<br \/>\nde vis\u00e3o.<\/p>\n<p>Mapeamento de entidades e persist\u00eancia de dados com JPA\/Hibernate integrando com o<br \/>\nbanco de dados MySQL.<\/p>\n<p>Configura\u00e7\u00e3o e utiliza\u00e7\u00e3o do arquivo persistence.xml para definir o provedor de<br \/>\npersist\u00eancia e os par\u00e2metros de conex\u00e3o.<\/p>\n<p>Manipula\u00e7\u00e3o de dados por meio da API EntityManager, aplicando boas pr\u00e1ticas de<br \/>\ntransa\u00e7\u00f5es e controle de exce\u00e7\u00f5es.<\/p>\n<p>Integra\u00e7\u00e3o entre as camadas View, Controller e Model, garantindo comunica\u00e7\u00e3o eficiente<br \/>\nentre os componentes do sistema.<\/p>\n<hr \/>\n<p>Defini\u00e7\u00e3o dos objetivos da aula pr\u00e1tica:<\/p>\n<p>Compreender o papel dos frameworks Tomahawk, HighFaces e BootsFaces no<br \/>\necossistema JSF, reconhecendo como eles ampliam os recursos visuais e funcionais das<br \/>\naplica\u00e7\u00f5es web.<\/p>\n<p>Explorar a integra\u00e7\u00e3o do BootsFaces com o JSF, aplicando componentes visuais<br \/>\nbaseados em Bootstrap para criar interfaces modernas, responsivas e de f\u00e1cil<br \/>\nmanuten\u00e7\u00e3o.<\/p>\n<p>Desenvolver uma aplica\u00e7\u00e3o pr\u00e1tica utilizando BootsFaces, aplicando seus principais<br \/>\ncomponentes (como &lt;b:form&gt;, &lt;b:inputText&gt;, &lt;b:commandButton&gt;, &lt;b:dataTable&gt;, entre<br \/>\noutros) em conjunto com ManagedBeans e a arquitetura MVC.<\/p>\n<p>Eclipse e BootsFaces<\/p>\n<p>Ide Eclipse ou correlata que possua configura\u00e7\u00f5es para constru\u00e7\u00e3o de classes seguindo o Java<br \/>\nEE, com configura\u00e7\u00f5es para ter servidor de aplica\u00e7\u00e3o e utilizar o framework JSF para a camada<br \/>\nde vis\u00e3o. Recomenda-se o uso do servidor wilfly.<\/p>\n<p>Acesse o site oficial: <a href=\"https:\/\/eclipseide.org\/\">https:\/\/eclipseide.org\/<\/a><br \/>\nClique em Download:<br \/>\nEscolha a vers\u00e3o \u201cEclipse IDE for Enterprise Java and Web Developers\u201d que compat\u00edvel<br \/>\ncom o sistema operacional do seu computador.<\/p>\n<p>Ap\u00f3s o download, descompacte o j\u00e1 estar\u00e1 pronto para uso.<\/p>\n<p>Atividade proposta:<\/p>\n<p>Criaremos um projeto baseado em Java EE (Projeto Web Din\u00e2mico) utilizando o framework JSF<br \/>\ne a biblioteca BootsFaces, com o objetivo de desenvolver uma interface moderna e responsiva<br \/>\npara listagem de ve\u00edculos.<\/p>\n<p>Voc\u00ea dever\u00e1 elaborar uma classe de modelo chamada Ve\u00edculo, contendo os atributos id<br \/>\n(Integer), modelo (String), fabricante (String), ano (int) e valor (double). Esses dados ser\u00e3o<br \/>\nmanipulados por meio de uma tabela din\u00e2mica na p\u00e1gina veiculos.xhtml, utilizando o<br \/>\ncomponente &lt;b:dataTable&gt; do BootsFaces.<\/p>\n<p>O projeto deve seguir o padr\u00e3o MVC, utilizando uma classe ManagedBean (VeiculoMB) para<br \/>\ncontrolar as a\u00e7\u00f5es do usu\u00e1rio e repassar os dados para a camada de modelo. A tabela deve<br \/>\npermitir a exibi\u00e7\u00e3o dos registros cadastrados e aplicar o estilo visual oferecido pelo BootsFaces,<br \/>\ngarantindo uma interface limpa e intuitiva.<\/p>\n<p>As etapas descritas a seguir foram desenvolvidas na IDE Eclipse, com o servidor WildFly,<br \/>\ndemonstrando a integra\u00e7\u00e3o entre JSF e BootsFaces na cria\u00e7\u00e3o de aplica\u00e7\u00f5es web modernas e<br \/>\ncompat\u00edveis com o padr\u00e3o Java EE.<\/p>\n<p>Crie um novo projeto chamado PraticaBootsFaces, com as configura\u00e7\u00f5es da<br \/>\nFigura 1.<\/p>\n<p>Figura 1 \u2013 Criando o projeto<\/p>\n<p>Ajustar o compilador<br \/>\n\uf06f Clique com o bot\u00e3o direito no projeto Agenda \u2192 Properties<br \/>\n\uf06f V\u00e1 em Java Compiler<br \/>\n\uf06f Marque Enable project specific settings<br \/>\n\uf06f Em Compiler compliance level, selecione 1.8<br \/>\n\uf06f Clique em Apply and Close<\/p>\n<p>Dentro da pasta java raiz \u201csrc\u201d, criar um novo pacote chamado model. Dentro<br \/>\ndesse pacote criar a classe Carro.java com o seguinte c\u00f3digo:<\/p>\n<p>package model;<\/p>\n<p>public class Carro {<\/p>\n<p>private String modelo;<\/p>\n<p>private String marca;<\/p>\n<p>public Carro(String marca, String modelo) {<br \/>\nthis.modelo = modelo;<br \/>\nthis.marca = marca;<br \/>\n}<\/p>\n<p>public String getModelo() {<br \/>\nreturn modelo;<br \/>\n}<\/p>\n<p>public void setModelo(String modelo) {<br \/>\nthis.modelo = modelo;<br \/>\n}<\/p>\n<p>public String getMarca() {<br \/>\nreturn marca;<br \/>\n}<\/p>\n<p>public void setMarca(String marca) {<br \/>\nthis.marca = marca;<br \/>\n}<\/p>\n<p>}<\/p>\n<p>Dentro da pasta java raiz \u201csrc\u201d, criar um novo pacote chamado control, e dentro<br \/>\ndele criar uma nova classe java chamada CarrosMB.java, com o seguinte c\u00f3digo:<\/p>\n<p>package control;<\/p>\n<p>import java.util.ArrayList;<br \/>\nimport java.util.List;<\/p>\n<p>import javax.faces.bean.ManagedBean;<\/p>\n<p>import model.Carro;<\/p>\n<p>@ManagedBean<br \/>\npublic class CarrosMB {<\/p>\n<p>public CarrosMB() {<br \/>\ncarros = new ArrayList();<br \/>\ncarros.add(new Carro(\u201cMarca 1\u201d, \u201cModelo 1\u201d));<br \/>\ncarros.add(new Carro(\u201cMarca 2\u201d, \u201cModelo 2\u201d));<br \/>\ncarros.add(new Carro(\u201cMarca 3\u201d, \u201cModelo 3\u201d));<br \/>\n}<\/p>\n<p>private List carros;<\/p>\n<p>public List getCarros() {<br \/>\nreturn carros;<br \/>\n}<\/p>\n<p>public void setCarros(List carros) {<br \/>\nthis.carros = carros;<br \/>\n}<\/p>\n<p>}<\/p>\n<p>Dentro do arquivo faces-config.xml acrescentar a seguinte configura\u00e7\u00e3o:<\/p>\n<p>carrosMB<br \/>\ncontrol.CarrosMB<br \/>\nrequest<\/p>\n<p>Agora vamos criar a interface gr\u00e1fica para usar os dados da Managed Bean CarrosMB.java.<\/p>\n<p>Acesse o site <a href=\"https:\/\/github.com\/TheCoder4eu\/BootsFacesOSP\/releases\/download\/v1.3.0\/BootsFaces-OSP-1.3.0-dist.jar\">https:\/\/github.com\/TheCoder4eu\/BootsFacesOSP\/releases\/download\/v1.3.0\/BootsFaces-OSP-1.3.0-dist.jar<\/a> e fa\u00e7a o download do framework<br \/>\nBootsFaces. Descompacte o arquivo e copie o JAR para a pasta lib do projeto. Utilizamos o<br \/>\narquivo \u201cBootsFaces-OSP-1.3.0-dist\u201d.<\/p>\n<p>Dentro da pasta webapp crie um arquivo chamado pagina.xhtml, com o respectivo c\u00f3digo:<\/p>\n<p>Se todos os passos foram devidamente seguidos, o resultado ser\u00e1 como na Figura 2.<\/p>\n<p>Figura 2 \u2013 Resultado do roteiro<\/p>\n<p>Ap\u00f3s o experimento responda as seguintes quest\u00f5es:<\/p>\n<p>Qual \u00e9 a principal vantagem de usar o BootsFaces em rela\u00e7\u00e3o aos componentes padr\u00e3o<br \/>\ndo JSF na cria\u00e7\u00e3o das interfaces web?<\/p>\n<p>Como o uso de componentes BootsFaces, como &lt;b:inputText&gt; e &lt;b:dataTable&gt;,<br \/>\ncontribui para a usabilidade e organiza\u00e7\u00e3o visual da aplica\u00e7\u00e3o?<\/p>\n<p>De que forma o BootsFaces se integra ao JSF, e por que essa integra\u00e7\u00e3o \u00e9 importante<br \/>\npara o funcionamento da aplica\u00e7\u00e3o?<\/p>\n<p>\u2713 Criar um projeto com as especifica\u00e7\u00f5es sugeridas<br \/>\n\u2713 Criar o pacote model e dentro dele a classe Carro.java<br \/>\n\u2713 Criar o pacote model e dentro dele a classe CarrosMB.java<br \/>\n\u2713 Acrescentar a configura\u00e7\u00e3o da Managed Bean no arquivo faces-config.xml<br \/>\n\u2713 Fazer o download do framework BootsFaces<br \/>\n\u2713 Copiar o JAR para a pasta lib do projeto<br \/>\n\u2713 Dentro da pasta webappcriar o arquivo pagina.xhtml com o devido c\u00f3digo.<br \/>\n\u2713 Responder as quest\u00f5es.<\/p>\n<p>Resultados do experimento:<\/p>\n<p>O arquivo dever\u00e1 conter:<\/p>\n<p>Capa<br \/>\nFolha de rosto com os dados da disciplina e do aluno<br \/>\nM\u00e9todos: Explique as t\u00e9cnicas que utilizou<br \/>\nResultado:<br \/>\n\uf06f Respostas das quest\u00f5es do avaliando resultados.<\/p>\n<p>Evid\u00eancias:<br \/>\n\uf06f Captura de tela do projeto.<br \/>\n\uf06f Captura de tela do resultado do experimento.<\/p>\n<p>Formato de entrega:<\/p>\n<p>Arquivo PDF<\/p>\n<p>Ap\u00f3s concluir esta atividade, voc\u00ea ter\u00e1 aprendido:<\/p>\n<p>A compreender a fun\u00e7\u00e3o dos frameworks Tomahawk, HighFaces e BootsFaces no<br \/>\naprimoramento das aplica\u00e7\u00f5es desenvolvidas com JSF.<\/p>\n<p>A utilizar componentes visuais do BootsFaces para construir interfaces web modernas,<br \/>\nresponsivas e integradas ao padr\u00e3o MVC.<\/p>\n<p>A integrar o BootsFaces ao JSF, configurando corretamente as bibliotecas e aplicando<br \/>\nseus recursos de forma pr\u00e1tica no desenvolvimento de p\u00e1ginas XHTML.<\/p>\n<p>A diferenciar os frameworks visuais para JSF, reconhecendo suas vantagens e o contexto<br \/>\nmais adequado para o uso de cada um.<\/p>\n<hr \/>\n<p>Defini\u00e7\u00e3o dos objetivos da aula pr\u00e1tica:<\/p>\n<p>Compreender o funcionamento de APIs RESTful e seus princ\u00edpios b\u00e1sicos.<br \/>\nImplementar endpoints usando JAX-RS no Java EE.<br \/>\nProduzir e consumir dados no formato JSON.<br \/>\nExecutar e testar servi\u00e7os REST em um servidor de aplica\u00e7\u00e3o (WildFly).<\/p>\n<p>Eclipse<\/p>\n<p>Ide Eclipse ou correlata que possua configura\u00e7\u00f5es para constru\u00e7\u00e3o de classes seguindo o Java<br \/>\nEE, com configura\u00e7\u00f5es para ter servidor de aplica\u00e7\u00e3o e utilizar o framework JSF para a camada<br \/>\nde vis\u00e3o. Recomenda-se o uso do servidor wilfly.<\/p>\n<p>Acesse o site oficial: <a href=\"https:\/\/eclipseide.org\/\">https:\/\/eclipseide.org\/<\/a><br \/>\nClique em Download:<br \/>\nEscolha a vers\u00e3o \u201cEclipse IDE for Enterprise Java and Web Developers\u201d que compat\u00edvel<br \/>\ncom o sistema operacional do seu computador.<\/p>\n<p>Ap\u00f3s o download, descompacte o j\u00e1 estar\u00e1 pronto para uso.<\/p>\n<p>Atividade proposta:<\/p>\n<p>Nesta atividade, o aluno desenvolver\u00e1 uma API RESTful utilizando os recursos da especifica\u00e7\u00e3o<br \/>\nJAX-RS presentes no Java EE (atrav\u00e9s do servidor WildFly).<\/p>\n<p>A aplica\u00e7\u00e3o, chamada RestBook, tem como objetivo expor endpoints REST para listar e cadastrar<br \/>\nlivros em formato JSON, aplicando os princ\u00edpios de comunica\u00e7\u00e3o sem estado (stateless) e<br \/>\npadroniza\u00e7\u00e3o de verbos HTTP.<\/p>\n<p>A classe Livro representar\u00e1 o modelo principal da aplica\u00e7\u00e3o, contendo os atributos id, titulo e<br \/>\nautor.<\/p>\n<p>Em seguida, ser\u00e1 criada a classe LivroResource, respons\u00e1vel por definir os endpoints com as<br \/>\nanota\u00e7\u00f5es @Path, @GET, @POST e @Produces(MediaType.APPLICATION_JSON).<\/p>\n<p>Esses endpoints permitir\u00e3o consultar todos os livros e cadastrar novos livros via requisi\u00e7\u00f5es<br \/>\nHTTP.<\/p>\n<ol>\n<li>Criar o projeto (Figura 1)<\/li>\n<\/ol>\n<p>No Eclipse: File &gt; New &gt; Dynamic Web Project.<br \/>\nNome: RestBook.<br \/>\nTarget runtime: selecione o WildFly instalado.<br \/>\nConfiguration: \u201cDefault Configuration for WildFly\u201d.<br \/>\nFinish.<\/p>\n<p>Figura 1 \u2013 Criando o projeto<\/p>\n<ol start=\"2\">\n<li>Certifique-se de que o projeto est\u00e1 com Java 8<\/li>\n<\/ol>\n<p>Project &gt; Properties &gt; Project Facets: Java 1.8<\/p>\n<ol start=\"3\">\n<li>Habilitar JAX-RS (RESTEasy) e JSON<\/li>\n<\/ol>\n<p>O WildFly j\u00e1 traz o RESTEasy. Para garantir a serializa\u00e7\u00e3o em JSON via Jackson:<\/p>\n<p>Crie a pasta: src\/main\/webapp\/WEB-INF\/ (se n\u00e3o existir).<br \/>\nDentro dela, crie o arquivo jboss-deployment-structure.xml com o conte\u00fado:<\/p>\n<p>Isso adiciona o provider Jackson2 do WildFly ao seu WAR (sem precisar baixar libs).<\/p>\n<ol start=\"4\">\n<li>Definir o pacote base<\/li>\n<\/ol>\n<p>Crie um pacote Java, por exemplo: br.com.restbook<\/p>\n<ol start=\"5\">\n<li>Configurar o ponto de entrada do JAX-RS<\/li>\n<\/ol>\n<p>Crie a classe JaxRsConfig:<br \/>\npackage br.com.restbook;<\/p>\n<p>import javax.ws.rs.ApplicationPath;<\/p>\n<p>import javax.ws.rs.core.Application;<\/p>\n<p>@ApplicationPath(\u201c\/api\u201d)<br \/>\npublic class JaxRsConfig extends Application {<br \/>\n\/\/ sem c\u00f3digo: a anota\u00e7\u00e3o j\u00e1 registra o JAX-RS em \/api<br \/>\n}<\/p>\n<p>A sua API responder\u00e1 em URLs que come\u00e7am com \/api.<\/p>\n<ol start=\"6\">\n<li>Criar o modelo (Resource Representation)<\/li>\n<\/ol>\n<p>Crie a classe Livro:<br \/>\npackage br.com.restbook;<\/p>\n<p>public class Livro {<\/p>\n<p>private Integer id;<\/p>\n<p>private String titulo;<\/p>\n<p>private String autor;<\/p>\n<p>public Livro() {}<\/p>\n<p>public Livro(Integer id, String titulo, String autor) {<br \/>\nthis.id = id;<br \/>\nthis.titulo = titulo;<br \/>\nthis.autor = autor;<br \/>\n}<\/p>\n<p>public Integer getId() { return id; }<\/p>\n<p>public void setId(Integer id) { this.id = id; }<\/p>\n<p>public String getTitulo() { return titulo; }<\/p>\n<p>public void setTitulo(String titulo) { this.titulo = titulo; }<\/p>\n<p>public String getAutor() { return autor; }<\/p>\n<p>public void setAutor(String autor) { this.autor = autor; }<\/p>\n<p>}<\/p>\n<ol start=\"7\">\n<li>Criar o recurso REST (endpoints)<\/li>\n<\/ol>\n<p>Crie a classe LivroResource:<br \/>\npackage br.com.restbook;<\/p>\n<p>import java.util.*;<\/p>\n<p>import java.util.concurrent.atomic.AtomicInteger;<\/p>\n<p>import javax.ws.rs.*;<\/p>\n<p>import javax.ws.rs.core.*;<\/p>\n<p>import javax.ws.rs.core.Response.Status;<\/p>\n<p>@Path(\u201c\/livros\u201d)<br \/>\n@Produces(MediaType.APPLICATION_JSON)<br \/>\n@Consumes(MediaType.APPLICATION_JSON)<br \/>\npublic class LivroResource {<\/p>\n<p>private static final List LIVROS = new ArrayList&lt;&gt;();<\/p>\n<p>private static final AtomicInteger SEQ = new AtomicInteger(1);<\/p>\n<p>static {<br \/>\nLIVROS.add(new Livro(SEQ.getAndIncrement(), \u201cClean Code\u201d, \u201cRobert C. Martin\u201d));<br \/>\nLIVROS.add(new Livro(SEQ.getAndIncrement(), \u201cEffective Java\u201d, \u201cJoshua Bloch\u201d));<br \/>\n}<\/p>\n<p>@GET<br \/>\npublic List listar() {<br \/>\nreturn LIVROS; \/\/ 200 + JSON<br \/>\n}<\/p>\n<p>@GET<br \/>\n@Path(\u201c\/{id}\u201d)<br \/>\npublic Response obter(@PathParam(\u201cid\u201d) int id) {<br \/>\nreturn LIVROS.stream()<br \/>\n.filter(l -&gt; l.getId() == id)<br \/>\n.findFirst()<br \/>\n.map(l -&gt; Response.ok(l).build())<br \/>\n.orElse(Response.status(Status.NOT_FOUND).build());<br \/>\n}<\/p>\n<p>@POST<br \/>\npublic Response adicionar(Livro novo, @Context UriInfo uriInfo) {<br \/>\nif (novo == null || novo.getTitulo() == null || novo.getAutor() == null) {<br \/>\nreturn Response.status(Status.BAD_REQUEST).entity(\u201c{\\\u201derro\\\u201d:\\\u201dTitulo e autor s\u00e3o<br \/>\nobrigat\u00f3rios\\\u201d}\u201d).build();<br \/>\n}<\/p>\n<p>novo.setId(SEQ.getAndIncrement());<br \/>\nLIVROS.add(novo);<\/p>\n<p>UriBuilder uriBuilder =<br \/>\nuriInfo.getAbsolutePathBuilder().path(String.valueOf(novo.getId()));<br \/>\nreturn Response.created(uriBuilder.build()).entity(novo).build(); \/\/ 201 + Location +<br \/>\nJSON<br \/>\n}<\/p>\n<p>@DELETE<br \/>\n@Path(\u201c\/{id}\u201d)<br \/>\npublic Response remover(@PathParam(\u201cid\u201d) int id) {<br \/>\nboolean removed = LIVROS.removeIf(l -&gt; l.getId() == id);<br \/>\nreturn removed ? Response.noContent().build() :<br \/>\nResponse.status(Status.NOT_FOUND).build();<br \/>\n}<\/p>\n<p>}<\/p>\n<ol start=\"8\">\n<li>Deploy no WildFly<\/li>\n<\/ol>\n<p>Run As &gt; Run on Server (selecione o WildFly).<br \/>\nVerifique no Console se a aplica\u00e7\u00e3o subiu sem erros.<br \/>\nAcesse no navegador para testar o GET:<br \/>\n<a href=\"http:\/\/localhost:8080\/RestBook\/api\/livros\">http:\/\/localhost:8080\/RestBook\/api\/livros<\/a><\/p>\n<ol start=\"9\">\n<li>Testes r\u00e1pidos (Postman ou cURL)<\/li>\n<\/ol>\n<p>Listar livros (GET)<br \/>\nURL: GET <a href=\"http:\/\/localhost:8080\/RestBook\/api\/livros\">http:\/\/localhost:8080\/RestBook\/api\/livros<\/a><br \/>\nHeaders: Accept: application\/json<\/p>\n<p>Obter por id (GET)<br \/>\nURL: GET <a href=\"http:\/\/localhost:8080\/RestBook\/api\/livros\/1\">http:\/\/localhost:8080\/RestBook\/api\/livros\/1<\/a><\/p>\n<p>Adicionar livro (POST)<br \/>\nURL: POST <a href=\"http:\/\/localhost:8080\/RestBook\/api\/livros\">http:\/\/localhost:8080\/RestBook\/api\/livros<\/a><br \/>\nHeaders:<br \/>\nContent-Type: application\/json<br \/>\nAccept: application\/json<br \/>\nBody (raw\/JSON):<br \/>\n{<br \/>\n\u201ctitulo\u201d: \u201cDomain-Driven Design\u201d,<br \/>\n\u201cautor\u201d: \u201cEric Evans\u201d<br \/>\n}<\/p>\n<ol start=\"10\">\n<li>Remover (DELETE)<\/li>\n<\/ol>\n<p>URL: DELETE <a href=\"http:\/\/localhost:8080\/RestBook\/api\/livros\/2\">http:\/\/localhost:8080\/RestBook\/api\/livros\/2<\/a><\/p>\n<p>cURL exemplo (POST):<br \/>\ncurl -i -X POST \u201c<a href=\"http:\/\/localhost:8080\/RestBook\/api\/livros%E2%80%9D\">http:\/\/localhost:8080\/RestBook\/api\/livros\u201d<\/a> \\<br \/>\n-H \u201cContent-Type: application\/json\u201d \\<br \/>\n-d \u201c{\\\u201dtitulo\\\u201d:\\\u201dRefactoring\\\u201d,\\\u201dautor\\\u201d:\\\u201dMartin Fowler\\\u201d}\u201d<\/p>\n<p>Ap\u00f3s o experimento responda as seguintes quest\u00f5es:<\/p>\n<p>Qual \u00e9 a principal diferen\u00e7a entre um m\u00e9todo REST anotado com @GET e outro com<br \/>\n@POST?<\/p>\n<p>Por que o formato JSON \u00e9 amplamente utilizado em APIs RESTful modernas?<\/p>\n<p>Explique o papel da anota\u00e7\u00e3o @Path em uma classe que representa um recurso REST.<\/p>\n<p>\u2713 Criar o projeto \u201cRestBook\u201d no Eclipse (Dynamic Web Project com suporte a JAX-RS).<br \/>\n\u2713 Configurar a classe Livro com os atributos e m\u00e9todos getters\/setters.<br \/>\n\u2713 Criar a classe LivroResource com os m\u00e9todos listarLivros() e adicionarLivro().<br \/>\n\u2713 Garantir o retorno em JSON usando @Produces(MediaType.APPLICATION_JSON).<br \/>\n\u2713 Testar os endpoints \/livros e \/livros\/add no Postman ou navegador.<\/p>\n<p>Resultados do experimento:<\/p>\n<p>O arquivo dever\u00e1 conter:<\/p>\n<p>Capa<br \/>\nFolha de rosto com os dados da disciplina e do aluno<br \/>\nM\u00e9todos: Explique as t\u00e9cnicas que utilizou<br \/>\nResultado:<br \/>\n\uf06f Respostas das quest\u00f5es do avaliando resultados.<\/p>\n<p>Evid\u00eancias:<br \/>\n\uf06f Captura de tela do projeto;<br \/>\n\uf06f Captura de tela da p\u00e1gina dos dois GETs no navegador.<\/p>\n<p>Formato de entrega:<\/p>\n<p>Arquivo em Word ou PDF com as capturas de tela.<\/p>\n<p>Ao final desta atividade, o aluno ser\u00e1 capaz de:<\/p>\n<p>Compreender a estrutura e funcionamento de uma API RESTful desenvolvida em Java<br \/>\nEE, reconhecendo o papel dos recursos, m\u00e9todos HTTP e formato de troca de dados<br \/>\n(JSON).<\/p>\n<p>Implementar e expor endpoints REST utilizando JAX-RS (RESTEasy), aplicando<br \/>\nanota\u00e7\u00f5es como @Path, @GET, @POST e @Produces para definir o comportamento da<br \/>\nAPI.<\/p>\n<p>Testar e validar requisi\u00e7\u00f5es HTTP (GET, POST e DELETE) atrav\u00e9s de ferramentas como<br \/>\nPostman ou navegador, analisando os c\u00f3digos de status e as respostas retornadas em<br \/>\nJSON.<\/p>\n<p>Configurar e executar uma aplica\u00e7\u00e3o REST no servidor WildFly, garantindo o correto<br \/>\nfuncionamento do m\u00f3dulo de serializa\u00e7\u00e3o JSON (Jackson Provider).<\/p>\n<div class=\"elementor-toggle-item\">\n<p><strong>Como se realizam os envios?<\/strong><\/p>\n<\/div>\n<p id=\"elementor-tab-content-1942\" class=\"elementor-tab-content elementor-clearfix elementor-active\" role=\"tabpanel\" data-tab=\"2\" aria-labelledby=\"elementor-tab-title-1942\">O seu trabalho \u00e9 disponibilizado pronto, respondido e nas normas j\u00e1 na mesma hora aqui em nosso site na sua \u00e1rea de downloads e tamb\u00e9m no seu e-mail.<\/p>\n<p><strong>Em quanto tempo recebo o portf\u00f3lio?<\/strong><\/p>\n<p>Os envios s\u00e3o imediatos. Ap\u00f3s sua compra, o trabalho j\u00e1 \u00e9 disponibilizado instantaneamente aqui em nosso site e no seu e-mail.<\/p>\n<p><strong>E se o portf\u00f3lio que comprei precisar de corre\u00e7\u00e3o?<\/strong><\/p>\n<p>Caso haja alguma solicita\u00e7\u00e3o de corre\u00e7\u00e3o\/altera\u00e7\u00e3o por parte do tutor, basta entrar em contato conosco pelo\u00a0WhatsApp\u00a0que provid\u00eanciaremos sem custo algum.<\/p>\n<p><strong>Qual o formato do arquivo?<\/strong><\/p>\n<p>Os arquivos s\u00e3o enviados em formato Word e s\u00e3o edit\u00e1veis.<\/p>\n<p><strong>Caso eu tiver alguma d\u00favida, terei suporte no p\u00f3s venda?<\/strong><\/p>\n<p>Sim, com certeza. Basta clicar no \u00edcone do WhatsApp no cantinho da tela. Ser\u00e1 um prazer atend\u00ea-lo(a).<\/p>\n<div id=\"elementor-tab-content-1948\" class=\"elementor-tab-content elementor-clearfix elementor-active\" role=\"tabpanel\" data-tab=\"8\" aria-labelledby=\"elementor-tab-title-1948\">\n<p><strong>Quais os seus canais de contato?<\/strong><\/p>\n<\/div>\n<div id=\"elementor-tab-content-1949\" class=\"elementor-tab-content elementor-clearfix elementor-active\" role=\"tabpanel\" data-tab=\"9\" aria-labelledby=\"elementor-tab-title-1949\">\n<p>Whatsapp: 53 984751621 \u2013 Clicar no canto da tela ou ESCANEIE O QRCODE ABAIXO<\/p>\n<h4><img decoding=\"async\" class=\"alignnone wp-image-13699 jetpack-lazy-image jetpack-lazy-image--handled\" src=\"https:\/\/i0.wp.com\/portifolioos-prontos.com\/wp-content\/uploads\/2023\/02\/whatsapp-business-projeto-de-extensao-300x300.jpeg?resize=144%2C144\" sizes=\"(max-width: 144px) 100vw, 144px\" srcset=\"https:\/\/i0.wp.com\/portifolioos-prontos.com\/wp-content\/uploads\/2023\/02\/whatsapp-business-projeto-de-extensao.jpeg?resize=300%2C301&amp;ssl=1 300w, https:\/\/i0.wp.com\/portifolioos-prontos.com\/wp-content\/uploads\/2023\/02\/whatsapp-business-projeto-de-extensao.jpeg?resize=150%2C150&amp;ssl=1 150w, https:\/\/i0.wp.com\/portifolioos-prontos.com\/wp-content\/uploads\/2023\/02\/whatsapp-business-projeto-de-extensao.jpeg?resize=370%2C372&amp;ssl=1 370w, https:\/\/i0.wp.com\/portifolioos-prontos.com\/wp-content\/uploads\/2023\/02\/whatsapp-business-projeto-de-extensao.jpeg?resize=100%2C100&amp;ssl=1 100w, https:\/\/i0.wp.com\/portifolioos-prontos.com\/wp-content\/uploads\/2023\/02\/whatsapp-business-projeto-de-extensao.jpeg?w=470&amp;ssl=1 470w\" alt=\"projeto de extens\u00e3o unopar\" width=\"144\" height=\"144\" data-lazy-loaded=\"1\" \/><\/h4>\n<\/div>\n<div class=\"elementor-toggle-item\">\n<div id=\"elementor-tab-content-1949\" class=\"elementor-tab-content elementor-clearfix elementor-active\" role=\"tabpanel\" data-tab=\"9\" aria-labelledby=\"elementor-tab-title-1949\">\n<p>E-mail:portifoliosp@gmail.com<\/p>\n<div id=\"attachment_143\" class=\"wp-caption alignnone\">\n<div id=\"attachment_143\" class=\"wp-caption alignnone\">\n<p id=\"caption-attachment-143\" class=\"wp-caption-text\"><a href=\"http:\/\/portfolio-pronto.com\/\">Portf\u00f3lio<\/a>\u00a0em Word, respondido, completo e j\u00e1 nas normas<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<div class=\"product-short-description\"><strong>Pague pelo PIX ou cart\u00e3o e fa\u00e7a o download agora mesmo.<\/strong><\/div>\n<div class=\"sticky-add-to-cart-wrapper\">\n<div class=\"sticky-add-to-cart\">\n<p class=\"quantity buttons_added form-flat\"><img decoding=\"async\" class=\"lazyloaded smush-image-5 smush-image-3 smush-image-4 smush-detected-img smush-image-bigger-3\" src=\"https:\/\/d26lpennugtm8s.cloudfront.net\/assets\/common\/img\/logos\/payment\/visa@2x.png\" width=\"46\" height=\"29\" data-src=\"https:\/\/d26lpennugtm8s.cloudfront.net\/assets\/common\/img\/logos\/payment\/visa@2x.png\" \/><img decoding=\"async\" class=\"lazyloaded smush-image-6 smush-image-4 smush-image-5 smush-detected-img smush-image-bigger-4\" src=\"https:\/\/d26lpennugtm8s.cloudfront.net\/assets\/common\/img\/logos\/payment\/boleto@2x.png\" width=\"43\" height=\"27\" data-src=\"https:\/\/d26lpennugtm8s.cloudfront.net\/assets\/common\/img\/logos\/payment\/boleto@2x.png\" \/><img loading=\"lazy\" decoding=\"async\" class=\"lazyloaded smush-image-7 smush-image-5 smush-image-6 smush-detected-img smush-image-bigger-5\" src=\"https:\/\/d26lpennugtm8s.cloudfront.net\/assets\/common\/img\/logos\/payment\/mastercard@2x.png\" width=\"43\" height=\"27\" data-src=\"https:\/\/d26lpennugtm8s.cloudfront.net\/assets\/common\/img\/logos\/payment\/mastercard@2x.png\" \/><img loading=\"lazy\" decoding=\"async\" class=\"lazyloaded smush-image-8 smush-image-6 smush-image-7 smush-detected-img smush-image-bigger-6\" src=\"https:\/\/d26lpennugtm8s.cloudfront.net\/assets\/common\/img\/logos\/payment\/amex@2x.png\" width=\"43\" height=\"27\" data-src=\"https:\/\/d26lpennugtm8s.cloudfront.net\/assets\/common\/img\/logos\/payment\/amex@2x.png\" \/><img loading=\"lazy\" decoding=\"async\" class=\"lazyloaded smush-image-9 smush-image-7 smush-image-8 smush-detected-img smush-image-bigger-7\" src=\"https:\/\/d26lpennugtm8s.cloudfront.net\/assets\/common\/img\/logos\/payment\/diners@2x.png\" width=\"46\" height=\"29\" data-src=\"https:\/\/d26lpennugtm8s.cloudfront.net\/assets\/common\/img\/logos\/payment\/diners@2x.png\" \/><img loading=\"lazy\" decoding=\"async\" class=\"lazyloaded smush-image-10 smush-image-8 smush-image-9 alignnone smush-detected-img smush-image-bigger-8\" src=\"https:\/\/d26lpennugtm8s.cloudfront.net\/assets\/common\/img\/logos\/payment\/br\/elo@2x.png\" alt=\"portf\u00f3lio unopar anhanguera\" width=\"45\" height=\"28\" data-src=\"https:\/\/d26lpennugtm8s.cloudfront.net\/assets\/common\/img\/logos\/payment\/br\/elo@2x.png\" \/><img loading=\"lazy\" decoding=\"async\" class=\"lazyloaded smush-image-11 smush-image-9 smush-image-10 alignnone smush-detected-img smush-image-bigger-9\" src=\"https:\/\/d26lpennugtm8s.cloudfront.net\/assets\/common\/img\/logos\/payment\/br\/hipercard@2x.png\" alt=\"portf\u00f3lio unopar anhanguera\" width=\"44\" height=\"28\" data-src=\"https:\/\/d26lpennugtm8s.cloudfront.net\/assets\/common\/img\/logos\/payment\/br\/hipercard@2x.png\" \/><img loading=\"lazy\" decoding=\"async\" class=\"lazyloaded smush-image-12 smush-image-10 smush-image-11 alignnone smush-detected-img smush-image-bigger-10\" src=\"https:\/\/d26lpennugtm8s.cloudfront.net\/assets\/common\/img\/logos\/payment\/mercadopago@2x.png\" alt=\"portf\u00f3lio unopar anhanguera\" width=\"45\" height=\"28\" data-src=\"https:\/\/d26lpennugtm8s.cloudfront.net\/assets\/common\/img\/logos\/payment\/mercadopago@2x.png\" \/><\/p>\n<\/div>\n<\/div>\n","protected":false},"featured_media":49690,"template":"","meta":{"_seopress_robots_primary_cat":"none","_seopress_titles_title":"","_seopress_titles_desc":"","_seopress_robots_index":""},"product_cat":[15],"product_tag":[],"class_list":{"0":"post-49689","1":"product","2":"type-product","3":"status-publish","4":"has-post-thumbnail","6":"product_cat-uncategorized","8":"first","9":"instock","10":"shipping-taxable","11":"product-type-simple","12":"col-xs-6 col-sm-4","13":"col-mf-5","14":"un-5-cols"},"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/portifolioos-prontos.com\/index.php\/wp-json\/wp\/v2\/product\/49689","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/portifolioos-prontos.com\/index.php\/wp-json\/wp\/v2\/product"}],"about":[{"href":"https:\/\/portifolioos-prontos.com\/index.php\/wp-json\/wp\/v2\/types\/product"}],"version-history":[{"count":3,"href":"https:\/\/portifolioos-prontos.com\/index.php\/wp-json\/wp\/v2\/product\/49689\/revisions"}],"predecessor-version":[{"id":49831,"href":"https:\/\/portifolioos-prontos.com\/index.php\/wp-json\/wp\/v2\/product\/49689\/revisions\/49831"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/portifolioos-prontos.com\/index.php\/wp-json\/wp\/v2\/media\/49690"}],"wp:attachment":[{"href":"https:\/\/portifolioos-prontos.com\/index.php\/wp-json\/wp\/v2\/media?parent=49689"}],"wp:term":[{"taxonomy":"product_cat","embeddable":true,"href":"https:\/\/portifolioos-prontos.com\/index.php\/wp-json\/wp\/v2\/product_cat?post=49689"},{"taxonomy":"product_tag","embeddable":true,"href":"https:\/\/portifolioos-prontos.com\/index.php\/wp-json\/wp\/v2\/product_tag?post=49689"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}