Desenvolvimento De Software Para Concursos 36454l

  • ed by: Edinelson Sousa Junior
  • 0
  • 0
  • November 2019
  • PDF

This document was ed by and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this report form. Report 3b7i


Overview 3e4r5l

& View Desenvolvimento De Software Para Concursos as PDF for free.

More details w3441

  • Words: 323,024
  • Pages: 1,422


Arquivo: HelloWorld.java (No MVC, em geral, utilizada como Controladora) //Definições e importações. public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { Writer out = response.getWriter(); out.println(" "); out.println("HelloWorld"); out.println(" 716k6j "); out.println("HelloAgain"); out.println(""); out.flush(); out.close(); }

Galera, esses códigos são semelhantes: o primeiro é uma Página JSP (Arquivo .jsp ou .jspx4) e o segundo é uma Servlet (Arquivo .java). Vocês percebem que no primeiro código nós temos código HTML com algumas coisas de Java? Já no segundo nós temos Java com algumas coisas de HTML? Vejam como é chato escrever o segundo código – é preciso colocar as tags HTML dentro das funções de escrita do Java. Já imaginaram que inável fazer isso para arquivos muito grandes? Pois é, JSP torna possível desenvolver aplicações web sem ter que escrever todo código estático dentro de servlets. Professor, eu posso ter uma Página JSP sem nenhum código Java? Claro, não é obrigatório ter código Java, no entanto é ele quem permite ar comportamento dinâmico em páginas web. 16712855225

Outra desvantagem importante é que o programador, além de ser bom em Java, tem que ser bom em Web Design! No entanto, quando ele está escrevendo o código Java, ele não possui as ferramentas de Web Design! O JSP permite ess

4

.jspx refere-se ao Arquivo JSP que obedecer às regras de formação do XML.

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 20 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

separação, i.e., os Desenvolvedores Java criam as Servlets (Lógica de Negócio) e os Web Designers criam as Páginas JSP (Lógica de Apresentação)!5 Bacana? Um grande benefício dessa tecnologia é a integração com HTML! Galera, HTML é uma linguagem amplamente conhecida e estudada! Portanto, facilita a criação de páginas web dinâmicas tendo que, posteriormente, apenas embutir o código Java! O que isso significa? Significa que, quando o código Java for executado, parte da página será gerada em tempo de execução (dinamismo). Além da perfeita integração com HTML, Páginas JSP também oferecem modos de manipulação de arquivos texto (Ex: PDF, DOCX, etc); am criptografia de dados; am a utilização de cookies e sessões; am a manipulação de Arquivos XML; am diversos bancos de dados e sistemas de relatórios; possuem baixo custo de aprendizagem; entre outras vantagens. Em suma: JSP é uma linguagem de script server-side com especificação aberta cujo principal objetivo é a geração simples, prática e rápida de conteúdo dinâmico para páginas web. É uma tecnologia que possui o e de vários servidores, tais como: Tomcat, GlassFish, JBoss, entre outros. Ela define a interação entre Servidor e Página JSP, e descreve o formato e sintaxe da página. Vamos ver como tudo funciona? Bem, lá em cima eu disse que Páginas JSP tipicamente se tornam uma Servlet! Como assim, professor? Em relação a Servlets, processamento da Página JSP a por uma camada adicional em que a página é compilada e transformada em uma Servlet no Servidor Web. Simples, não?! Se vocês possuem uma página .html, renomeiem-a para .jsp e coloquem-na em um Servidor Web. Ao fazer isso, a página é automaticamente transformada em uma Servlet! No primeiro o, a compilação é realizada. Nos os subsequentes, a requisição é redirecionada para a Servlet que foi gerada anteriormente. Quando o arquivo .html se transforma em um arquivo .jsp, ele já pode conter scriplets, diretivas, expressões, etc. Entendido? 16712855225

A partir daí, o ciclo de vida é exatamente igual ao de uma Servlet, porém com métodos diferentes (apesar de semelhantes). Agora que tal vermos em detalhes um pouco sobre a sintaxe da nossa linguagem, i.e., declarações, expressões, scriplets, comentários, ações e diretivas. Antes de partir para as sintaxes, vamos ver um pouco sobre os objetos implícitos! 5

Antes, para cada mudança no Código HTML, uma recompilação da servlet era necessária. Para fazer essa separação que foi criada a Tecnologia JSP.

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 21 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

Galera, objetos implícitos são os objetos que são criados de forma automática pelo Contêiner JSP e posteriormente disponibilizados para os desenvolvedores, de maneira que eles não precisam ser instanciados explicitamente. No JSP, existem nove: request, response, pageContext, application, out, config, page, session e exception. Em seguida, veremos a sintaxe da linguagem!

OBJETO

DESCRIÇÃO

request

Objeto do tipo HttpServletRequest e contém a informação do pedido HTTP.

response

config

Objeto do tipo HttpServletResponse e contém a resposta HTTP que vai ser enviada ao cliente. Não é usado com frequência. Objeto do tipo PageContext e contém informações de contexto para execução da página. Objeto do tipo ServletContext que permite compartilhar informações entre todos os componentes web da aplicação. Objeto da classe JspWriter que permite imprimir para o response através do método println. Objeto do tipo ServletConfig da página JSP.

page

Sinônimo do operador “this” do objeto HttpJspPage. Não é usado com frequência.

session

Objeto do tipo HttpSession que guarda informações da sessão de um usuário específico entre múltiplas requisições. É o objeto Throwable que é resultante de uma situação de erro numa página JSP.

pageContext application out

exception

DECLARAÇÕES 16712855225

Galera, Declarações são similares às declarações em Java e definem variáveis, objetos e métodos para uso subsequente em expressões ou scriplets. Alguns alunos me perguntam como eu decoro isso! Bem, a declaração declara! Declara o quê? Variáveis! Como? Com ponto de exclamação. Quando eu gosto de enfatizar uma declaração, eu uso um ponto de exclamação! No JSP, é similar... //Declarações JSP <%! public final static String[] estacoes = {"Primavera", "Verão", "Outono", "Inverno"} %>

EXPRESSÕES

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 22 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

Expressões retornam valores que são inseridos dinamicamente na página no lugar da expressão, i.e., toda expressão é avaliada, executada, convertida em uma string e inserida no local onde aparece a expressão no Arquivo JSP. Falando de outra maneira: expressões são utilizadas para embutir o resultado da avaliação de uma expressão na Página JSP. Detalhe: não se termina a expressão com ponto-e-vírgula! O valor é convertido em um objeto string e inserido no objeto implícito out. Esse objeto tem escopo de página e permite ar o fluxo de saída da Servlet. Como você decorava isso, professor? Bem, eu me lembrava de expressões matemáticas! Por que? Porque, assim como as Expressões JSP, elas geralmente possuem o sinal de igualdade (=). Expressões são similares a Scriplets! //Expressões JSP <%= idade = idade + 1 %> <%= "Esse é seu aniversário de " + idade + "anos" %>

SCRIPLETS

Scriplets são importantíssimos e, de todos, é facilmente o que mais cai em prova6! Trata-se de blocos de Código Java embutidos em uma Página JSP. Qualquer código válido na linguagem Java pode ser inserido em um scriplet! Galera, como eu decorava isso? É o mais simples: é o único que não possui nada após o sinal de porcentagem. Quando transformamos Páginas JSP em Servlets, tudo aquilo que for scriplet é traduzido para chamadas out.println() no método _jspService da servlet gerada. A variável de uma linguagem de programação criada dentro de um scriplet pode ser ada de qualquer lugar dentro da Página JSP. Dentro das scriplets, estamos lidando com Java. Abaixo a instrução manda escrever “Bem vindo!”. 16712855225

Vocês se lembram que eu falei que expressões são similares a scriplets? Pois é, expressão <% expressão %> equivale a out.println(expressão), visto que o valor da expressão é convertido em uma string e inserido no objeto implícito out. A partir daí, funciona como um scriplet <% out.println(expressão) %>. Entenderam agora a similaridade entre ambos? ;) //Scriplets JSP

6

Apesar disso, hoje em dia, é considerado má prática utilizar Scriplets em Páginas JSP.

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 23 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04 <% String mensagem = "Bem vindo!"; %> <% out.println(mensagem); %>

COMENTÁRIOS

Comentários não mudam muito em relação a outras linguagens. Eles são completamente ignorados pelo tradutor da página e, nesse caso, possui uma sintaxe bastante parecida com a da Linguagem HTML. Enfim, eles servem apenas para ajudar o desenvolvedor e em nada interferem na página que o cliente visualiza! Há duas maneiras de se fazer um comentário: //Comentários JSP <%-- Comentário JSP --%> // Em HTML, seria:

AÇÕES

Ações permitem ar e alterar regras de negócio por meio das propriedades de JavaBeans7. Ademais, disponibilizam comando para redirecionamento de Requisições JSP para outra Servlet ou Página JSP. Esse também é tranquilo de decorar, porque é o único que utiliza a sigla jsp. Professor, você pode dar um exemplo de Ação JSP? Claro, meu querido! Temos vinte delas: JSP :USE BEAN

JSP :PARAM

JSP :INVOQUE

JSP :OUTPUT

JSP :SETPROPERTY

JSP :FALLBACK

JSP :DOBODY

JSP :ROOT

JSP :GETPROPERTY

JSP :TEXT

JSP :ELEMENTO

JSP :DECLARATION

JSP :INCLUDE

JSP :PLUGIN

JSP :BODY

JSP :SCRIPLET

JSP :FORWARD

JSP :PARAMS

JSP :ATTIBUTE

JSP :EXPRESSION

16712855225

Essas ações ajudam a controlar o comportamento da Engine da Servlet. As ações mais famosas e conhecidas são:  jsp:include: usada para inserir conteúdo dinâmico em tempo de solicitação;  jsp:forward: usada para redirecionar requisições para outra Página JSP;  jsp:param: usada para ar parâmetros para outra Ação JSP;

7

JavaBeans são componentes reutilizáveis de software que podem ser manipulados visualmente com a ajuda de uma ferramenta de desenvolvimento.

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 24 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

   

jsp:useBean: usada quando se deseja invocar/instanciar um JavaBean 8; jsp:plugin: usada para executar e mostrar um objeto (Ex: Applet) no browser. jsp:setProperty: usada para setar o valor da propriedade de um JavaBean; jsp:getProperty: usada para recuperar o valor da propriedade de um JavaBean.

//Ações JSP <jsp: useBean id="" scope="session" type="org.apache.struts"/>

DIRETIVAS

Diretivas são instruções enviadas ao servidor contendo informações que definam algum procedimento para o processo de compilação da página. Em outras palavras, podemos dizer que são instruções processadas quando a Página JSP é compilada em uma Servlet. As Diretivas são utilizadas para importar classes de um pacote, inserir dados de arquivos externos e habilitar o uso de bibliotecas de tags. Ao compilar uma Página JSP em uma Servlet, essas instruções podem afetar sua estrutura, no entanto não criam nenhuma saída visível. Ademais, são interpretadas pelo contêiner antes mesmo de qualquer elemento! Existem três diretivas principais:  page – define atributos de configuração da Página JSP.

ATRIBUTO buffer autoFlush contentType errorPage isErrorPage Extends Import Info isThreadSafe language Session isELIgnored isScriptingEnabled

PROPÓSITO Especifica o modelo de buffering da saída padrão. Controla o comportamento da saída padrão da Servlet. Define a codificação de caracteres e media type (MIME) Define a URL de outro JSP que reporta exceções. Indica se a Página JSP possui URL de outra página. Especifica uma superclasse a ser estendida pela servlet. Especifica uma lista de pacotes ou classes importadas. Define uma string que pode ser ada para informações. Define se a servlet é capaz de atender múltiplas solicitações. Define a linguagem de programação utilizada. Especifica se a Página JSP participa de Sessões HTTP. Especifica se Linguagens de Expressão serão ignoradas. Determina se elementos de script são permitidos. 16712855225

8

Ele ajuda a localizar a instanciar Componentes JavaBean. Dessa forma, não é necessário instanciar explicitamente um objeto da classe para ar seus métodos.

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 25 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04 //Diretiva PAGE <%@ page import = "java.swing.*" %> // Page pode usar 11 atributos: Info; Language; ContentType; Extends; Import; Session; Buffer; AutoFlush; isThreadSafe; errorPage; isErrorPage.

 include – inclui recursos estáticos em uma Página JSP. //Diretiva INCLUDE <%@ include file = "teste.jsp" %>

 taglib – estende o conjunto de tags através de uma biblioteca de tags. //Diretiva TAGLIB <%@ taglib uri = "http://serlets.com/testes" prefix = "ops" %>

COMPONENTES

EM INGLÊS

SINTAXE

Declarações Expressões Scriplets Comentários Ações Diretivas

Declarations Expressions Scriplets Comments Actions Directives

<%! ... %> <%= Expressão %> <% Scriplet %> <%-- Comentário --%> <jsp: Ação /> <%@ Diretiva %>

Por fim, vamos falar um pouquinho sobre Expression Language! Como vimos, podemos utilizar Scriplets e Expressões para recuperar atributos e parâmetros em Páginas JSP por meio de Código Java e utilizá-los para propósitos de Apresentação (ou Visão). No entanto – para Web Designers –, Código Java é difícil de entender e foi para isso que foi criada a Expression Language9! 16712855225

Desenvolvida pela Sun, ela é interpretada pelo Servlet Container e busca remover um pouco do Código Java que fica na Página JSP. Agora Web Designers pode recuperar atributos e parâmetros facilmente utilizando tags HTML-like. Em geral, quando se especifica o valor de um atributo em uma tag JSP, simplesmente utilizase uma string, como é mostrado abaixo: 9

O JSP 2.1 trouxe e a Unified Expression Language (UEL), que representa a união da linguagem de expressão oferecida pelo JSP 2.0 e a criada linguagem de expressão criada para o JSF.

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 26 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04 <jsp:setProperty name="cubo" property="perimetro" value="120"/>

O exemplo apresentado acima apresenta algumas propriedades de um Componente JavaBean, de forma que um Cubo possui um Perímetro de 120 unidades de medida (Ex: Centímetro). Uma JSP Expression Language (JSPEL) permite especificar uma expressão para qualquer um desses valores de atributos mostrados acima. Uma sintaxe simples é: ${expressão}

Os operadores mais comuns do JSPEL são “.” e “[ ]”. Esses dois operadores (ponto e colchetes) permitem ar diversas atributos de Componentes JavaBeans. Por exemplo, poderíamos escrever a primeira expressão da maneira mostrada abaixo! Quando o Compilador JSP encontrar a forma ${...} em um atributo, ele gerará código para avaliar a expressão e substituir seu valor. <jsp:setProperty name="cubo" property="aresta" value="10"/> <jsp:setProperty name="cubo" property="perimetro" value="${12*cubo.aresta}"/>

Vejam que o Valor do Perímetro do Cubo é dado pela expressão contida em value presente na segunda linha. O operador Ponto permite ar o valor da propriedade aresta do JavaBeans cubo e disso, seu valor continua sendo 120 unidades de medida. No entanto, o Operador Colchetes é mais poderoso, visto que pode recuperar dados de listas, vetores e mapas. Vejamos abaixo: ${Lista[1]} Lista

// É exatamente igual ao anterior

Lista Carro ${Lista.Carro} // É exatamente igual ao anterior 16712855225

A JSPEL a a maioria dos operadores aritméticos e lógicos do Java, além de muitos outros. Além disso, ela é baseada em propriedades aninhadas e coleções; operadores relacionais, lógicos e aritméticos, funções estendidas de mapeamento em métodos estáticos de Classes Java; e um conjunto de objetos implícitos. Ademais, podem ser usados em textos estáticos e atributos de tags. Professor, o que é esse negócio vermelho do último parágrafo? Cara, JSPEL permite a definição de funções (por meio de tags personalizadas) que podem ser chamadas em uma expressão. Para tal, deve-se definir o método da classe que realiza a função

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 27 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

como público e estático. Em seguida, deve-se mapear o nome da função no Tag Library Descriptors (TLD, ou Descritor de Biblioteca de Tags). Por fim, devemos utilizar a Diretiva Taglib para importar a Biblioteca de Tags personalizada que agora contém essa função e invocá-la pelo seu prefixo. Professor, o nome do método público que realiza a função deve ser o mesmo nome da própria função? Não é obrigatório! A função pode se chamar Multiplica e o método que a realiza se chamar Divida – sem nenhum problema.

16712855225

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 28 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

(CESPE – 2013 – CNJ – Analista de Sistemas Como forma de incluir dinamismo em páginas JSP, é possível incluir blocos de código Java conhecidos como scriptlets. Comentários: Scriplets são importantíssimos e, de todos, é facilmente o que mais cai em prova! Trata-se de blocos de Código Java embutidos em uma Página JSP. Qualquer código válido na linguagem Java pode ser inserido em um scriplet! Galera, como eu decorava isso? É o mais simples: é o único que não possui nada após o sinal de porcentagem. Conforme vimos em aula, trata-se dos Scriplets. Gabarito: C (CESPE – 2011 – PREVIC – Analista de Sistemas O container JSP provê uma lista de objetos instanciados, chamados de objetos implícitos. É através do objeto aplicação (application object) que são rastreadas as informações de um cliente específico entre múltiplas requisições. Comentários: 16712855225

OBJETO

DESCRIÇÃO

request

Objeto do tipo HttpServletRequest e contém a informação do pedido HTTP.

response

Objeto do tipo HttpServletResponse e contém a resposta HTTP que vai ser enviada ao cliente. Não é usado com frequência. Objeto do tipo PageContext e contém informações de contexto para execução da página. Objeto do tipo ServletContext que permite compartilhar informações entre todos os componentes web da aplicação.

pageContext application

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 29 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

config

Objeto da classe JspWriter que permite imprimir para o response através do método println. Objeto do tipo ServletConfig da página JSP.

page

Sinônimo do operador “this” do objeto HttpJspPage. Não é usado com frequência.

session

Objeto do tipo HttpSession que guarda informações da sessão de um usuário específico entre múltiplas requisições. É o objeto Throwable que é resultante de uma situação de erro numa página JSP.

out

exception

Galera, olhem para as duas definições acima! A questão está se referindo ao Objeto Application ou Session? Evidente que é o Session! Gabarito: E (CESPE – 2013 – TRT/10 – Analista de Sistemas Nas páginas JSP, combinam-se modelos estáticos, incluindo fragmentos de HTML ou XML, com o código para gerar conteúdo dinâmico e compilar páginas JSP dinamicamente em servlets, quando solicitado. Comentários: Galera, trata-se de uma tecnologia para geração de documentos baseados em texto e executados do lado do servidor (assim como Servlets). Professor, como assim texto? Esse texto pode ser um conjunto de dados estáticos (Ex: HTML e XML); ou pode ser um conjunto de elementos JSP e tags customizadas, que definem como a página construirá conteúdo dinâmico. Conforme vimos em aula, combina estático e dinâmico, compilando em servlets. 16712855225

Gabarito: C (CESPE – 2013 – TRT/10 – Analista de Sistemas O JSP, cuja base é a linguagem de programação Java, tem portabilidade de plataforma, o que o permite ser executado em diversos sistemas operacionais, como o Windows e o Linux. Comentários: Primeiro, o que é JSP? É uma tecnologia da plataforma Java Enterprise Edition (Java EE) que permite utilizar ou o código Java dentro das páginas web ou tags que Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 30 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

realizam sua lógica. Por ser tecnologia Java, seus objetos são definidos segundo define a linguagem, i.e., podendo utilizar todos os seus recursos, tais como modificadores de o, tratamento de exceções, entre outros. Conforme vimos em aula, é uma Tecnologia Java! Logo, é portável e multiplataforma, podendo ser executada em qualquer sistema operacional que possua uma Java Virtual Machine (JVM). Gabarito: C (CESPE – 2013 – TRT/10 – Analista de Sistemas Para usar o JSP com Java embutido e algumas tags de marcação complexas, o programador tem de conhecer a fundo as complexidades do desenvolvimento de aplicações. Comentários: Conhecer a fundo as complexidades do desenvolvimento de aplicações? Galera, quem hoje em dia conhece a fundo o desenvolvimento de aplicações? Nós estamos em uma era de especialização e componentização, ou seja, cada um é especialista em uma área. O programador deve conhecer bem JSP e, não, os meandros de todo desenvolvimento de aplicações. Não faz sentido dizer que ele precisa conhecer a fundo as complexidades do desenvolvimento de aplicações. Gabarito: E (CESPE - 2013 - SERPRO - Analista - e Técnico Um scriptlet na tecnologia JSP (Java server pages) abrange todo o código entre "<#" e "#>". Comentários:

16712855225

COMPONENTES

EM INGLÊS

SINTAXE

Declarações Expressões Scriplets Comentários Ações Diretivas

Declarations Expressions Scriplets Comments Actions Directives

<%! ... %> <%= Expressão %> <% Scriplet %> <%-- Comentário --%> <jsp: Ação /> <%@ Diretiva %>

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 31 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

Conforme vimos em aula, scriplets vem entre “<%” e “%>”. Gabarito: E (CESPE - 2011 - CBM-DF - Oficial Bombeiro Militar Complementar - Informática O uso de Javabeans, o controle de transferência entre as páginas e o e independente de applets Java pelos browsers são possibilidades proporcionadas pela action tag da JSP. Comentários: JSP :USE BEAN

JSP :PARAM

JSP :INVOQUE

JSP :OUTPUT

JSP :SETPROPERTY

JSP :FALLBACK

JSP :DOBODY

JSP :ROOT

JSP :GETPROPERTY

JSP :TEXT

JSP :ELEMENTO

JSP :DECLARATION

JSP :INCLUDE

JSP :PLUGIN

JSP :BODY

JSP :SCRIPLET

JSP :FORWARD

JSP :PARAMS

JSP :ATTIBUTE

JSP :EXPRESSION

Essas ações ajudam a controlar o comportamento da Engine da Servlet. As ações mais famosas e conhecidas são: (...)  jsp:useBean: usada quando se deseja invocar/instanciar um JavaBean;  jsp:plugin: usada para executar e mostrar um objeto (Ex: Applet) no browser. Conforme vimos em aula, temos: jsp:useBean (para uso de javabeans); jsp:forward (para controle de transferência entre páginas); e jsp:plugin (para e a applets). Gabarito: C (CESPE - 2011 - PREVIC - Analista de Tecnologia da Informação Em uma aplicação multicamadas na plataforma Java EE, servlets, JavaServer Faces e JSP consistem em tecnologias utilizadas na camada web. 16712855225

Comentários: Galera, todos eles são da Camada Web! A fonte oficial diz: “Java Servlet, JavaServer Faces, and JavaServer Pages (JSP) technology components are web components that run on the server”, conforme podemos ver na imagem abaixo:

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 32 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

Gabarito: C ACERTEI

ERREI

16712855225

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 33 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

(FCC - 2012 - TRE- - Técnico Judiciário - Programação de Sistemas) As tags utilizadas em uma página JSP para importar classes de um pacote, habilitar o uso de bibliotecas de classes (por exemplo, JSTL) e incluir arquivos (por exemplo, JSP Fragments) são conhecidas como tags: a) b) c) d) e)

diretivas. de scriptlet. de declaração. de expressão. standard action.

Comentários: Diretivas são instruções enviadas ao servidor contendo informações que definam algum procedimento para o processo de compilação da página. Em outras palavras, podemos dizer que são instruções processadas quando a Página JSP é compilada em uma Servlet. As Diretivas são utilizadas para importar classes de um pacote, inserir dados de arquivos externos e habilitar o uso de bibliotecas de tags. Conforme vimos em aula, trata-se das Diretivas. Gabarito: A 16712855225

(FCC - PGE- - Técnico Superior de Análise de Sistemas e Métodos) Blocos ou trechos de operações em código Java podem ser incluídos em uma página JSP por meio de: a) b) c) d) e)

diretiva page. diretiva include. comentário. taglib. scriptlet.

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 34 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

Comentários: Scriplets são importantíssimos e, de todos, é facilmente o que mais cai em prova! Trata-se de blocos de Código Java embutidos em uma Página JSP. Qualquer código válido na linguagem Java pode ser inserido em um scriplet! Galera, como eu decorava isso? É o mais simples: é o único que não possui nada após o sinal de porcentagem. Conforme vimos em aula, trata-se das Scriplets. Gabarito: E (FCC - 2010 - TRT - 20ª REGIÃO (SE) - Técnico Judiciário - Tecnologia da Informação Na diretiva page, do JSP, podemos utilizar o atributo import que permite: a) configurar arquivos html. b) importar figuras. c) configurar pacotes. d) importar arquivos htm e) importar pacotes. Comentários:

ATRIBUTO buffer autoFlush contentType errorPage isErrorPage Extends Import Info isThreadSafe language Session isELIgnored isScriptingEnabled

Prof. Diego Carvalho

PROPÓSITO Especifica o modelo de buffering da saída padrão. Controla o comportamento da saída padrão da Servlet. Define a codificação de caracteres e media type (MIME) Define a URL de outro JSP que reporta exceções. Indica se a Página JSP possui URL de outra página. Especifica uma superclasse a ser estendida pela servlet. Especifica uma lista de pacotes ou classes importadas. Define uma string que pode ser ada para informações. Define se a servlet é capaz de atender múltiplas solicitações. Define a linguagem de programação utilizada. Especifica se a Página JSP participa de Sessões HTTP. Especifica se Linguagens de Expressão serão ignoradas. Determina se elementos de script são permitidos. 16712855225

www.estrategiaconcursos.com.br

Pág. 35 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

Conforme vimos em aula, ele especifica uma lista de pacotes ou classes importadas. Gabarito: E (FCC - 2009 - TRT - 16ª REGIÃO (MA) - Técnico Judiciário - Tecnologia da Informação) Em JSP, a diretiva taglib define: a) uma biblioteca de tags para serem usadas na página. b) um conjunto de classes importadas para serem usadas na página. c) uma nova tag para ser usada na página. d) uma biblioteca para ser inserida na página. e) um módulo logicamente coesivo. Comentários:  taglib – estende o conjunto de tags através de uma biblioteca de tags. //Diretiva TAGLIB <%@ taglib uri = "http://serlets.com/testes" prefix = "ops" %>

Conforme vimos em aula, a Diretiva Taglib estende o conjunto de tags através de uma biblioteca de tags, similar ao que diz a primeira opção. Gabarito: A (FCC - 2008 - MPE-RS - Técnico em Informática - Área Sistemas) Para incluir blocos de código Java em uma página JSP utiliza-se a categoria de tags denominada: 16712855225

a) diretivas. b) expressões. c) declarações. d) scriptlets. e) comentários. Comentários: Scriplets são importantíssimos e, de todos, é facilmente o que mais cai em prova! Trata-se de blocos de Código Java embutidos em uma Página JSP. Qualquer código Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 36 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

válido na linguagem Java pode ser inserido em um scriplet! Galera, como eu decorava isso? É o mais simples: é o único que não possui nada após o sinal de porcentagem. Conforme vimos em aula, trata-se dos Scriplets. Gabarito: D (FCC - 2010 - METRÔ- - Analista - Tecnologia da Informação Na diretiva page, do JSP, utiliza-se o atributo import, que permite: a) configurar pacotes. b) importar arquivos html. c) importar pacotes. d) configurar arquivos html. e) importar figuras. Comentários:

ATRIBUTO buffer autoFlush contentType errorPage isErrorPage Extends Import Info isThreadSafe language Session isELIgnored isScriptingEnabled

PROPÓSITO Especifica o modelo de buffering da saída padrão. Controla o comportamento da saída padrão da Servlet. Define a codificação de caracteres e media type (MIME) Define a URL de outro JSP que reporta exceções. Indica se a Página JSP possui URL de outra página. Especifica uma superclasse a ser estendida pela servlet. Especifica uma lista de pacotes ou classes importadas. Define uma string que pode ser ada para informações. Define se a servlet é capaz de atender múltiplas solicitações. Define a linguagem de programação utilizada. Especifica se a Página JSP participa de Sessões HTTP. Especifica se Linguagens de Expressão serão ignoradas. Determina se elementos de script são permitidos. 16712855225

Conforme vimos em aula, ele especifica uma lista de pacotes ou classes importadas. Gabarito: C

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 37 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

(FCC - 2012 - TRE-SP - Técnico Judiciário - Programação de Sistemas No JavaServer Pages a tag <%=conteúdo %> é uma: a) Declaration tag. b) Directive tag. c) Scriplet tag. d) Action tag. e) Expression tag. Comentários:

COMPONENTES

EM INGLÊS

SINTAXE

Declarações Expressões Scriplets Comentários Ações Diretivas

Declarations Expressions Scriplets Comments Actions Directives

<%! ... %> <%= Expressão %> <% Scriplet %> <%-- Comentário --%> <jsp: Ação /> <%@ Diretiva %>

Conforme vimos em aula, trata-se da Tag Expression! Gabarito: E (FCC - 2011 – TRE/AP – Analista de Sistemas – A) Em JSP o conceito de classes e objetos não leva em conta os princípios de proteção de dados tanto nas propriedades quanto nos métodos. Comentários:

16712855225

Primeiro, o que é JSP? É uma tecnologia da plataforma Java Enterprise Edition (Java EE) que permite utilizar ou o código Java dentro das páginas web ou tags que realizam sua lógica. Por ser tecnologia Java, seus objetos são definidos segundo define a linguagem, i.e., podendo utilizar todos os seus recursos, tais como modificadores de o, tratamento de exceções, entre outros. Conforme vimos em aula, leva – sim – em consideração. Gabarito: E

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 38 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

(FCC - 2011 – TRE/AP – Analista de Sistemas – C) Em JSP pode-se chamar o construtor do objeto pai em qualquer parte do código e não há tratamento de exceções nos métodos nativos. Comentários: Primeiro, o que é JSP? É uma tecnologia da plataforma Java Enterprise Edition (Java EE) que permite utilizar ou o código Java dentro das páginas web ou tags que realizam sua lógica. Por ser tecnologia Java, seus objetos são definidos segundo define a linguagem, i.e., podendo utilizar todos os seus recursos, tais como modificadores de o, tratamento de exceções, entre outros. Conforme vimos em aula, é código java – sendo assim, pode-se chamar o construtor do objeto pai, pode fazer uso de tratamento de exceções, etc. Gabarito: E 10. (FCC - 2010 – MPU – Analista de Sistemas O contêiner, que executa JSP, transforma o programa JSP em Servlet, assim, a expressão “<%= Math.Random()%>” se torna argumento para out.println(). Comentários: Expressões retornam valores que são inseridos dinamicamente na página no lugar da expressão, i.e., toda expressão é avaliada, executada, convertida em uma string e inserida no local onde aparece a expressão no Arquivo JSP. Falando de outra maneira: expressões são utilizadas para embutir o resultado da avaliação de uma expressão na Página JSP. Detalhe: não se termina a expressão com ponto-e-vírgula! 16712855225

Vocês se lembram que eu falei que expressões são similares a scriplets? Pois é, expressão <% expressão %> equivale a out.println(expressão), visto que o valor da expressão é convertido em uma string e inserido no objeto implícito out. A partir daí, funciona como um scriplet <% out.println(expressão) %>. Entenderam agora a similaridade entre ambos? ;) Conforme visto em aula, a expressão Math.Random() será avaliada, executada, convertida em uma string e inserida no local onde aparece a expressão no Arquivo JSP. E, por essa razão, é considerada equivalente à Scriplet:

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 39 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

out.println(Math.Random()) Gabarito: C 11. (FCC - 2011 – TRE/AP – Analista de Sistemas – A) Para que métodos estáticos de classes Java sejam executados a partir das funções da linguagem de expressão em JSP, é necessário que o nome da função coincida com o nome do método da classe Java. Comentários: Por fim, devemos utilizar a Diretiva Taglib para importar a Biblioteca de Tags personalizada que agora contém essa função e invocá-la pelo seu prefixo. Professor, o nome do método público que realiza a função deve ser o mesmo nome da própria função? Não é obrigatório! A função pode se chamar Multiplica e o método que a realiza se chamar Divida – sem nenhum problema. Conforme vimos em aula, não é obrigatório. Gabarito: E 12. (FCC - 2009 – TCE/SP – Analista de Sistemas – A) Quando se usa classes do tipo bean, não é necessário instanciar explicitamente um objeto da classe para poder ar seus métodos. A instância do objeto é criada pelo elemento especial: a) b) c) d) e)

<jsp:useJavaBean/> <jsp:useJava/> <jsp:useBean.Java/> <jsp:useJava.Bean/> <jsp:useBean/>

16712855225

Comentários: Essas ações ajudam a controlar o comportamento da Engine da Servlet. As ações mais famosas e conhecidas são:    

jsp:include: usada para inserir conteúdo dinâmico em tempo de solicitação; jsp:forward: usada para redirecionar requisições para outra Página JSP; jsp:param: usada para ar parâmetros para outra Ação JSP; jsp:useBean: usada quando se deseja invocar/instanciar um JavaBean; Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 40 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

 jsp:setProperty: usada para setar o valor da propriedade de um JavaBean;  jsp:getProperty: usada para recuperar o valor da propriedade de um JavaBean. Conforme vimos em aula, trata-se do <jsp:useBean>. Gabarito: E 13. (FCC – TCE/ – Analista de Sistema Nas páginas dinâmicas escritas em JSP, para declaração de atributos ou métodos, utilizam-se as tags: a) b) c) d) e)

<% %> <%! %> <%= %> <%-- --%> /* */

Comentários:

COMPONENTES

EM INGLÊS

SINTAXE

Declarações Expressões Scriplets Comentários Ações Diretivas

Declarations Expressions Scriplets Comments Actions Directives

<%! ... %> <%= Expressão %> <% Scriplet %> <%-- Comentário --%> <jsp: Ação /> <%@ Diretiva %>

Declarações lembra...? Ponto de Exclamação! 16712855225

Gabarito: A 14. (FCC – 2012 – TST – Analista de Sistemas Páginas JavaServer Pages são páginas web: a) b) c) d) e)

que permitem combinar códigos Java, HTML estático, CSS, XML e JavaScript. escritas em Java, sem código HTML. Interpretadas e não compiladas. Transformadas em bytecode e executadas no cliente. Combinadas com servlets no desenvolvimento exclusivo de páginas estáticas.

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 41 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

Comentários: Galera, trata-se de uma tecnologia para geração de documentos baseados em texto e executados do lado do servidor (assim como Servlets). Professor, como assim texto? Esse texto pode ser um conjunto de dados estáticos (Ex: HTML e XML); ou pode ser um conjunto de elementos JSP e tags customizadas, que definem como a página construirá conteúdo dinâmico. Conforme vimos em aula, pode combinar Java, HTML, CSS, XML, Javascript. A segunda opção está errada porque possui código HTML. A terceira opção está errada porque páginas JSP são compiladas e interpretadas. A quarta opção está errada porque são executadas no servidor. E, por fim, a última opção está errada porque não é desenvolvimento exclusivo de páginas estáticas – seu foco é no desenvolvimento de páginas dinâmicas. Gabarito: A 15. (FCC – – TRT/3 – Analista de Sistemas NÃO possui uma habilidade de armazenar e recuperar valores de atributos arbitrários o objeto implícito de JSP: a) b) c) d) e)

Session. Request. Exception. Application. pageContext.

Comentários: 16712855225

OBJETO

DESCRIÇÃO

Request

Objeto do tipo HttpServletRequest e contém a informação do pedido HTTP.

Response

Objeto do tipo HttpServletResponse e contém a resposta HTTP que vai ser enviada ao cliente. Não é usado com frequência. Objeto do tipo PageContext e contém informações de contexto para execução da página. Objeto do tipo ServletContext que permite compartilhar informações entre todos os componentes web da aplicação.

pageContext Application

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 42 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

Config

Objeto da classe JspWriter que permite imprimir para o response através do método println. Objeto do tipo ServletConfig da página JSP.

Page

Sinônimo do operador “this” do objeto HttpJspPage. Não é usado com frequência.

Session

Objeto do tipo HttpSession que guarda informações da sessão de um usuário específico entre múltiplas requisições. É o objeto Throwable que é resultante de uma situação de erro numa página JSP.

Out

Exception

Observem que todos eles manipulam informações (atributos arbitrários), exceto o Objeto Exception, que apenas retorna erros. Gabarito: C 16. (FCC – 2007 – TRF/4 – Analista de Sistemas Uma ferramenta usada especificamente para gerar páginas dinâmicas de HTML, baseada em programação Java, é: a) b) c) d) e)

o WSDL. o DTD. a J. a XSL. o JSP.

Comentários: Galera, trata-se de uma tecnologia para geração de documentos baseados em texto e executados do lado do servidor (assim como Servlets). Professor, como assim texto? Esse texto pode ser um conjunto de dados estáticos (Ex: HTML e XML); ou pode ser um conjunto de elementos JSP e tags customizadas, que definem como a página construirá conteúdo dinâmico. 16712855225

Sabe aquelas questões que você não pode errar de tão fácil? Ei-la! Gabarito: E 17. (FCC – 2013 – ALERN – Analista de Sistemas) Em uma aplicação web desenvolvida utilizando a plataforma Java EE 6, há a seguinte classe Java:

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 43 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04 package dados; public class Cliente { private String nome; public Cliente() { } public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } }

Em uma página JSP da mesma aplicação, para instanciar um objeto desta classe pode-se utilizar a tag: a) b) c) d) e)

<jsp:setBean name="cliente" class="dados.Cliente"/> <jsp:setBean id="cliente" class="dados.Cliente"/> <jsp:useBean name="cliente" class="dados.Cliente"/> <jsp:useBean id="cliente" class="dados.Cliente"/> <jsp:newInstance id="cliente" class= "dados.Cliente"/>

Comentários: JSP :USE BEAN

JSP :PARAM

JSP :INVOQUE

JSP :OUTPUT

JSP :SETPROPERTY

JSP :FALLBACK

JSP :DOBODY

JSP :ROOT

JSP :GETPROPERTY

JSP :TEXT

JSP :ELEMENTO

JSP :DECLARATION

JSP :INCLUDE

JSP :PLUGIN

JSP :BODY

JSP :SCRIPLET

JSP :FORWARD

JSP :PARAMS

JSP :ATTIBUTE

JSP :EXPRESSION

Essas ações ajudam a controlar o comportamento da Engine da Servlet. As ações mais famosas e conhecidas são: (...) 16712855225

 jsp:useBean: usada quando se deseja invocar/instanciar um JavaBean; //Ações JSP - Exemplo <jsp: useBean id="" scope="session" type="org.apache.struts"/>

Conforme vimos em aula, trata-se da penúltima opção. Gabarito: D

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 44 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

18. (FCC - 2012 - MPE-PE - Analista Ministerial - Informática Em uma aplicação web Java que utiliza JSP, as linhas de código comuns a diversas páginas podem ser criadas em um arquivo ..I.. , que pode ser incluído nas páginas utilizando-se a diretiva ..II.. . As lacunas I e II são preenchidas correta e respectivamente por a) I. Javascript, <%@page II. file="caminho/nome_do_arquivo"%>. b) I. Java Servlet, <%@include II. uri="caminho/nome_do_arquivo"%>. c) I. JSTL, <%@taglib II. uri="caminho/nome_do_arquivo"%>. d) I. JSF, <%@page II. import="caminho/nome_do_arquivo%>. e) I. JSPF, <%@include II. file="caminho/nome_do_arquivo"%>. Comentários: 

include – inclui recursos estáticos em uma Página JSP. //Diretiva INCLUDE <%@ include file = "teste.jsp" %>

Professor, que raios é esse JSPF? Cara, não se assuste! É apenas o nome dado a um fragmento de JSP que é inserido em outro JSP. E que diretiva pode ser utilizada para inserir um recurso em uma Página JSP? @include. 16712855225

barito: E 19. (FCC - 2012 - MPE-PE - Analista - Tecnologia da Informação) Em uma página JSP, para importar uma classe de um pacote e para fazer referência a uma biblioteca (como, por exemplo, JSTL) podem ser utilizadas, respectivamente, as diretivas: a) <%@page import=“pacote.Classe”%> e <%@taglib uri=“caminho/biblioteca” prefix=“prefixo”%>.

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 45 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

b) <%@include import= “pacote.Classe”%> e <%@taglib uri=“caminho/biblioteca”%>. c) <%import= “pacote.Classe”%> e <%taglib uri=“caminho/biblioteca”%>. d) <%@page include= “pacote.Classe”%> e <%@library uri=“caminho/biblioteca”%>. e) <%@import class= “pacote.Classe”%> e <%@taglib urli=“caminho/biblioteca”%>. Comentários:  page – define atributos de configuração da Página JSP.

ATRIBUTO buffer autoFlush contentType errorPage isErrorPage Extends Import Info isThreadSafe language Session isELIgnored isScriptingEnabled

PROPÓSITO Especifica o modelo de buffering da saída padrão. Controla o comportamento da saída padrão da Servlet. Define a codificação de caracteres e media type (MIME) Define a URL de outro JSP que reporta exceções. Indica se a Página JSP possui URL de outra página. Especifica uma superclasse a ser estendida pela servlet. Especifica uma lista de pacotes ou classes importadas. Define uma string que pode ser ada para informações. Define se a servlet é capaz de atender múltiplas solicitações. Define a linguagem de programação utilizada. Especifica se a Página JSP participa de Sessões HTTP. Especifica se Linguagens de Expressão serão ignoradas. Determina se elementos de script são permitidos.

 taglib – estende o conjunto de tags através de uma biblioteca de tags. 16712855225

Conforme vimos em aula, podemos usar a Diretiva page com o Atributo import e a Diretiva taglib. Gabarito: A (FCC - 2012 - TREalista Judiciário - Análise de Sistemas <%@ page atributo1="valor1" atributo2="valor2"... %> é a sintaxe típica da diretiva Page, em JSP. Um de seus atributos, se definido para true, indica o processamento normal do servlet quando múltiplas requisições podem ser adas simultaneamente na mesma instância de servlet. Trata-se do atributo:

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 46 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

a) Extends. b) Import. c) isThreadSafe. d) Session. e) AutoFlush. Comentários:

ATRIBUTO buffer autoFlush contentType errorPage isErrorPage Extends Import Info isThreadSafe language Session isELIgnored isScriptingEnabled

PROPÓSITO Especifica o modelo de buffering da saída padrão. Controla o comportamento da saída padrão da Servlet. Define a codificação de caracteres e media type (MIME) Define a URL de outro JSP que reporta exceções. Indica se a Página JSP possui URL de outra página. Especifica uma superclasse a ser estendida pela servlet. Especifica uma lista de pacotes ou classes importadas. Define uma string que pode ser ada para informações. Define se a servlet é capaz de atender múltiplas solicitações. Define a linguagem de programação utilizada. Especifica se a Página JSP participa de Sessões HTTP. Especifica se Linguagens de Expressão serão ignoradas. Determina se elementos de script são permitidos.

Conforme vimos em aula, trata-se do atributo isThreadSafe. Gabarito: C 16712855225

21. (FCC - MPE-RS - Técnico em Informática - Área Sistemas) Se uma super classe de servlet deve ser gerada, será definida na diretiva page do JSP por meio do atributo: a) info. b) extends. c) session. d) import. e) autoFlush. Comentários:

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 47 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

ATRIBUTO

PROPÓSITO

buffer autoFlush contentType errorPage isErrorPage Extends Import Info isThreadSafe language Session isELIgnored isScriptingEnabled

Especifica o modelo de buffering da saída padrão. Controla o comportamento da saída padrão da Servlet. Define a codificação de caracteres e media type (MIME) Define a URL de outro JSP que reporta exceções. Indica se a Página JSP possui URL de outra página. Especifica uma superclasse a ser estendida pela servlet. Especifica uma lista de pacotes ou classes importadas. Define uma string que pode ser ada para informações. Define se a servlet é capaz de atender múltiplas solicitações. Define a linguagem de programação utilizada. Especifica se a Página JSP participa de Sessões HTTP. Especifica se Linguagens de Expressão serão ignoradas. Determina se elementos de script são permitidos.

Conforme vimos em aula, trata-se do Atributo Extends. Gabarito: B ACERTEI

ERREI

16712855225

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 48 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

(FGV – Senado Federal – Analista de Sistemas) No contexto do Desenvolvimento WEB JAVA, analise as afirmativas a seguir, a respeito da tecnologia JSP ("JavaServer Page"): I. Disponibiliza uma tecnologia simples e rápida para criar páginas que exibem conteúdo gerado dinamicamente, define a interação entre o servidor e a página JSP, e descreve o formato e sintaxe da página. II. Emprega servlets - programas escritos na linguagem Java e executados no servidor, em oposição aos applets, executados no browser do cliente. III. Utiliza páginas JSP, com extensão .jsp ou .jspx, criadas pelo desenvolvedor da web e que incluem especificações JSP e tags customizadas, em combinação com outras tags estáticas, HTML ou XML. Assinale: a) se somente a afirmativa I estiver correta. b) se somente as afirmativas I e II estiverem corretas. c) se somente as afirmativas I e III estiverem corretas. d) se somente as afirmativas II e III estiverem corretas. e) se todas as afirmativas estiverem corretas. 16712855225

Comentários: I. Em suma: JSP é uma linguagem de script server-side com especificação aberta cujo principal objetivo é a geração simples, prática e rápida de conteúdo dinâmico para páginas web. É uma tecnologia que possui o e de vários servidores, tais como: Tomcat, GlassFish, JBoss, entre outros. Ela define a interação entre Servidor e Página JSP, e descreve o formato e sintaxe da página. Vamos ver como tudo funciona?

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 49 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

Foi considerada errada. Eu discordo do gabarito, assim como a Documentação oficial da Oracle, que ratifica o que foi dito em aula. II. Professor, como funciona esse tal de JSP? Cara, Páginas JSP utilizam tags XML e Scriplets escritos em Java para encapsular a lógica que gera o conteúdo para a página web. Ele separa a lógica do conteúdo da sua apresentação. Páginas JSP são compiladas em Servlets e podem chamar beans a fim de executar o processamento no servidor. Espera, professor! Como assim são compiladas em Servlets? Perfeito, empregam Servlets (executadas no Servidor) em oposição às Applets (executadas no cliente). III. Galera, esses códigos são semelhantes: o primeiro é uma Página JSP (Arquivo .jsp ou .jspx) e o segundo é uma Servlet (Arquivo .java). Vocês percebem que no primeiro código nós temos código HTML com algumas coisas de Java? Já no segundo nós temos Java com algumas coisas de HTML? Vejam como é chato escrever o segundo código – é preciso colocar as tags HTML dentro das funções de escrita do Java. Galera, trata-se de uma tecnologia para geração de documentos baseados em texto e executados do lado do servidor (assim como Servlets). Professor, como assim texto? Esse texto pode ser um conjunto de dados estáticos (Ex: HTML e XML); ou pode ser um conjunto de elementos JSP e tags customizadas, que definem como a página construirá conteúdo dinâmico. Conforme visto em aula, está perfeito.

16712855225

Gabarito: D (CESGRANRIO – 2010 – BNDES – Analista de Sistemas É característica de um arquivo JSP a: a) b) c) d) e)

compilação em um servlet. presença maciça de código Assembly. impossibilidade de inclusão de comentários. execução exclusiva em sistemas Windows. execução exclusiva em sistemas Linux. Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 50 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

Comentários: Professor, como funciona esse tal de JSP? Cara, Páginas JSP utilizam tags XML e Scriplets escritos em Java para encapsular a lógica que gera o conteúdo para a página web. Ele separa a lógica do conteúdo da sua apresentação. Páginas JSP são compiladas em Servlets e podem chamar beans a fim de executar o processamento no servidor. Espera, professor! Como assim são compiladas em Servlets? Conforme vimos em aula, Páginas JSP são compiladas em Servlets. Gabarito: A (NCE – – BNDES – Analista de Sistemas Considere as seguintes afirmativas sobre JSP e Servlets: I. II. III. IV.

É possível usar uma página JSP para gerar um arquivo de imagem do tipo JPEG, GIF ou PNG. Um servlet é executado no servidor, ao o que uma página JSP é executada no browser do cliente. Uma página gerada por um servlet não pode conter código Javascript. Uma página JSP é executada no servidor enquanto que um servlet é executado no browser do cliente.

A quantidade de afirmativas corretas é: a) b) c) d) e)

0; 1; 2; 3; 4.

16712855225

Comentários:

ATRIBUTO buffer autoFlush contentType

Prof. Diego Carvalho

PROPÓSITO Especifica o modelo de buffering da saída padrão. Controla o comportamento da saída padrão da Servlet. Define a codificação de caracteres e media type (MIME)

www.estrategiaconcursos.com.br

Pág. 51 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

errorPage isErrorPage Extends Import Info isThreadSafe language Session isELIgnored isScriptingEnabled

Define a URL de outro JSP que reporta exceções. Indica se a Página JSP possui URL de outra página. Especifica uma superclasse a ser estendida pela servlet. Especifica uma lista de pacotes ou classes importadas. Define uma string que pode ser ada para informações. Define se a servlet é capaz de atender múltiplas solicitações. Define a linguagem de programação utilizada. Especifica se a Página JSP participa de Sessões HTTP. Especifica se Linguagens de Expressão serão ignoradas. Determina se elementos de script são permitidos.

I. Conforme visto em aula, o atributo contentType da Diretiva Page permite definir a codificação dos caracteres e o Media Type (Ex: text/plain, image/jpeg, vídeo/mp4). Logo, é possível sim usar uma Página JSP para gerar um arquivo de imagem do tipo JPEG, GIF ou PNG. Galera, trata-se de uma tecnologia para geração de documentos baseados em texto e executados do lado do servidor (assim como Servlets). Professor, como assim texto? Esse texto pode ser um conjunto de dados estáticos (Ex: HTML e XML); ou pode ser um conjunto de elementos JSP e tags customizadas, que definem como a página construirá conteúdo dinâmico. II. Conforme visto em aula, ambos são executados no Servidor. III. Não existe isso! JavaScript roda no browser do cliente, logo é completamente possível ter código JavaScript em uma Página JSP. Galera, trata-se de uma tecnologia para geração de documentos baseados em texto e executados do lado do servidor (assim como Servlets). Professor, como assim texto? Esse texto pode ser um conjunto de dados estáticos (Ex: HTML e XML); ou pode ser um conjunto de elementos JSP e tags customizadas, que definem como a página construirá conteúdo dinâmico. 16712855225

IV. Conforme visto em aula, ambos são executados no Servidor. Gabarito: B (CESGRANRIO – 2012 – CEF – Analista de Sistemas) Um objeto implícito é utilizado dentro de páginas JSP sem que haja necessidade de declará-lo. Que objeto é esse?

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 52 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

a) b) c) d) e)

Integer. queryString. getParameter. String. Request.

Comentários:

OBJETO

DESCRIÇÃO

request

Objeto do tipo HttpServletRequest e contém a informação do pedido HTTP.

response

config

Objeto do tipo HttpServletResponse e contém a resposta HTTP que vai ser enviada ao cliente. Não é usado com frequência. Objeto do tipo PageContext e contém informações de contexto para execução da página. Objeto do tipo ServletContext que permite compartilhar informações entre todos os componentes web da aplicação. Objeto da classe JspWriter que permite imprimir para o response através do método println. Objeto do tipo ServletConfig da página JSP.

page

Sinônimo do operador “this” do objeto HttpJspPage. Não é usado com frequência.

session

Objeto do tipo HttpSession que guarda informações da sessão de um usuário específico entre múltiplas requisições. É o objeto Throwable que é resultante de uma situação de erro numa página JSP.

pageContext application out

exception

16712855225

Conforme vimos em aula, trata-se do Objeto Request. Gabarito: E (FMP-RS - 2013 - MPE-AC - Analista - Tecnologia da Informação) No contexto de arquitetura Java Enterprise Edition, ___________________ é uma tecnologia que simplifica o processo de gerar páginas dinamicamente, pois permite embutir Java diretamente em uma página HTML ou XML. Assinale a única alternativa que completa corretamente a lacuna acima:

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 53 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

a) Java Virtual Machine (JVM) b) JavaServer Pages (JSP) c) Java ME (Java Micro Edition) d) Enterprise JavaBeans (EJB) e) Java Persistence API (JPA) Comentários: Primeiro, o que é JSP? É uma tecnologia da plataforma Java Enterprise Edition (Java EE) que permite utilizar ou o código Java dentro das páginas web ou tags que realizam sua lógica. Por ser tecnologia Java, seus objetos são definidos segundo define a linguagem, i.e., podendo utilizar todos os seus recursos, tais como modificadores de o, tratamento de exceções, entre outros. Conforme vimos em aula, trata-se do JSP! Gabarito: B (CESGRANRIO - 2011 - FINEP - Analista - Desenvolvimento de Sistemas Qual ação padrão do JSP interrompe o processamento das requisições pela página corrente e as direciona para outro componente Web? a) <jsp:invoke> b) <jsp:include> c) <jsp:forward> d) <jsp:plugin> e) <jsp:call> Comentários:

16712855225

JSP :USE BEAN

JSP :PARAM

JSP :INVOQUE

JSP :OUTPUT

JSP :SETPROPERTY

JSP :FALLBACK

JSP :DOBODY

JSP :ROOT

JSP :GETPROPERTY

JSP :TEXT

JSP :ELEMENTO

JSP :DECLARATION

JSP :INCLUDE

JSP :PLUGIN

JSP :BODY

JSP :SCRIPLET

JSP :FORWARD

JSP :PARAMS

JSP :ATTIBUTE

JSP :EXPRESSION

Essas ações ajudam a controlar o comportamento da Engine da Servlet. As ações mais famosas e conhecidas são: (...)  jsp:forward: usada para redirecionar requisições para outra Página JSP; Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 54 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

Conforme vimos em aula, trata-se do jsp:forward. Gabarito: C (ESAF - ANA - Analista istrativo - Tecnologia da Informação Desenvolvimento O mecanismo de inclusão, que permite o conteúdo dinâmico ser incluído em uma JSP em tempo de solicitação, é denominado: a) Ação <jsp:plugin>. b) Ação <jsp:include>. c) Diretiva include. d) Diretiva Page. e) Diretiva taglib. Comentários: JSP :USE BEAN

JSP :PARAM

JSP :INVOQUE

JSP :OUTPUT

JSP :SETPROPERTY

JSP :FALLBACK

JSP :DOBODY

JSP :ROOT

JSP :GETPROPERTY

JSP :TEXT

JSP :ELEMENTO

JSP :DECLARATION

JSP :INCLUDE

JSP :PLUGIN

JSP :BODY

JSP :SCRIPLET

JSP :FORWARD

JSP :PARAMS

JSP :ATTIBUTE

JSP :EXPRESSION

Essas ações ajudam a controlar o comportamento da Engine da Servlet. As ações mais famosas e conhecidas são: (...)  jsp:include: usada para inserir conteúdo dinâmico em tempo de solicitação; Conforme vimos em aula, trata-se da Ação jsp:include. 16712855225

Gabarito: B ACERTEI

Prof. Diego Carvalho

ERREI

www.estrategiaconcursos.com.br

Pág. 55 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

SERVLETS Pessoal, lá no Contêiner Web, há uma tal de Servlet! O que é isso, professor? É uma API independente de plataforma, escrita em Java, que roda no servidor (Container Web) processando requisições de clientes e enviando respostas, e que pode ser traduzida como ‘servidorzinho’. Como é? É isso mesmo! Porque ele é utilizado para estender as funcionalidades de um servidor. A documentação oficial afirma que se trata de uma classe java pura utilizada para estender as capacidades dos servidores que hospedam aplicações adas por meio de um modelo de requisição-resposta. Em geral, elas funcionam para fornecer conteúdo web dinâmicos (normalmente em HTML) às páginas web, processando requisições/respostas, filtrando dados, ando o banco de dados, etc. Vocês podem me perguntar se as servlets utilizam apenas HTTP. Não! Elas utilizam qualquer protocolo, no entanto ele é o protocolo mais utilizado por clientes web. Professor, o que você quis dizer com “classe java pura”? Cara, isso significa que essa classe só contém código java. Professor as servlets rodam no cliente ou no servidor? Pô... essa é muito fácil: Servlets rodam no Servidor (JVM)!10 ;)

16712855225

10

O

A

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 56 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

Bem, acima eu afirmei que as servlets são responsáveis por fornecer conteúdo web dinâmicos. E aí, alguém sabe o que é uma página web dinâmica? Bem, nós temos dois tipos de página web dinâmicas: client-side e server-side. O primeiro se refere a páginas que permitem mudanças em sua interface como resposta a ações do mouse, teclado, entre outros. Vejam o exemplo da imagem anterior!

Agora observem que a página acima é modificada quando se move o cursor do mouse sobre o link “menu” – ela é dinâmica! Bem, mas nosso interesse nessa aula são as páginas web dinâmicas server-side, i.e., que variam de acordo com os parâmetros fornecidos por um usuário/programa com o intuito de aumentar o potencial de comunicação e interação com cada usuário especificamente. 16712855225

Antigamente, para gerar conteúdo dinâmico, utilizava-se o CGI (Common Gateway Interface) – ele permitia escrever pequenos programas para apresentar páginas web dinâmicas utilizando outras linguagens de programação. Em 1997, apareceu a tecnologia de servlets, que são utilizadas para gerar páginas web dinâmicas por meio da linguagem Java. Professor, deixa eu ver uma servlet? Vamos lá: import import import import import

java.io.*; java.text.*; java.util.*; javax.servlet.*; javax.servlet.http.*;

public class ServletTeste extends HttpServlet

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 57 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04 { public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException { res.setContentType("text/html"); PrintWriter out = res.getWriter(); out.println(""); out.println(""); out.println("

Hello Servlet 5971z

"); out.println(""); out.println(""); } }

Dado esse código, vamos ver alguns detalhes importantes: primeiro, foi importado o pacote javax.servlet, que é um conjunto de classes e interfaces responsáveis pela comunicação com diversos protocolos – lá se encontram, por exemplo, as interfaces ServletRequest e ServletResponse. No entanto, observem abaixo que se importa também o pacote javax.servlet.http – cuja estrutura é mostrada a seguir:

16712855225

Ele se trata de um conjunto de classes e interfaces responsáveis pela comunicação especificamente com o protocolo HTTP – lá se encontram as interfaces HttpServletRequest e HttpServletResponse, e também uma classe abstrata chamada HttpServlet11. Essa classe define diversos métodos para lidar com Requisições HTTP: doGet, doPost, doPut, doDelete, doHead, doTrace e doOptions, etc. Dentro da javax.servlet, temos também a interface ServletContext! Ela define um contexto, i.e., uma unidade de aplicação web que possui suas próprias configurações. Para executar Servlets e Páginas JSP, é necessário colocá-los dentro

11

Seu nome completo é: javax.servlet.http.HttpServlet.

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 58 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

de um contexto de uma aplicação web – existe um Contexto por Aplicação Web por JVM. Entenderam mais ou menos? É simples, só é um pouco abstrato! A interface ServletContext é um conjunto de métodos que uma servlet utiliza para interagir com seu Servlet Container – por exemplo, para recuperar um arquivo, despachar requisições ou escrever em um arquivo de log! Bem, conforme a imagem abaixo, cada servlet possui seu ServletConfig. Já o ServletContext serve para qualquer servlet do contexto e pode ser ado por meio do objeto ServletConfig.

Voltando ao nosso código: importamos os dois pacotes, estendemos essa classe abstrata e amos como parâmetro as duas interfaces. Se a Requisição HTTP foi feita utilizando o Método GET, executaremos o método doGet; se foi com o Método POST, executaremos o método doPost. Esses métodos recebem dois parâmetros: uma requisição HttpServletRequest e uma resposta HttpServletResponse. 16712855225

Vocês observarão um padrão muito comum em servlets. Qual, professor? Para devolver a resposta ao cliente, devemos primeiro definir o tipo de saída. Para tal, utilizamos a função setContentType do HttpServletResponse – nossa servlet definiu como text/html, i.e., teremos uma saída em HTML! A seguir, utilizamos o método getWriter para capturar os caracteres da resposta e inseri-los em um objeto out. Após isso, nós já podemos utilizar o método println do objeto out para escrever a saída, resultando em uma Página HTML “Hello Servlet” – como é apresentado na imagem abaixo. Qualé, professor? O que tem de dinâmico aí? Isso foi só um exemplo

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 59 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

para vocês verem como é possível receber dados de entrada do usuário e manipulálos dinamicamente.

O único objetivo da servlet acima é exibir uma mensagem HTML simples para os usuários que a requisitarem. No entanto, note como seria muito fácil escrever outros códigos Java mais poderosos para gerar as strings do HTML baseadas em informações dinâmicas vindas, por exemplo, de um banco de dados. Vocês entenderam direitinho?

16712855225

É importante entender também como funciona um dos métodos mais importantes da interface HttpServletRequest: método getParameter12! Bem, ele retorna o valor do parâmetro de uma requisição como uma String; E por que é importante? Porque 12

Já o Método getInitParameter retorna o valor do parâmetro de inicialização.

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 60 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

ele é útil na agem de dados de um formulário do cliente, i.e., por meio dele, a servlet pode capturar dados de formulários! Agora vamos ver o ciclo das servlets ;) Conforme a imagem acima, o Servidor recebe uma Requisição HTTP e a rea para o Servlet Container. Já existe uma instância13 da servlet capaz de responder a essa requisição? Se sim, delega-se a requisição para essa instância; se não, carregase a classe servlet na memória, cria-se uma instância dela e a inicializa por meio do método init. Esse método recebe como parâmetro um objeto ServletConfig! Esse objeto contém informações de configuração e parâmetros de inicialização da aplicação web. A partir do momento que a servlet é inicializada, o contêiner pode utilizá-la para tratar requisições dos clientes. Chama-se então o método service com dois parâmetros: ServletRequest, que contém a solicitação do cliente; e o ServletResponse, que contém a resposta – ambos criados pelo contêiner. Na prática, método service determina qual Método HTTP (GET/POST) deve ser chamado na servlet. Por fim, o contêiner chama o método destroy a fim de remover a instância da servlet da memória e liberar os recursos e os dados. Tanto o método init quanto o método destroy são executados apenas uma vez durante o ciclo de vida da servlet. Professor, quem gerencia tudo nisso? O Servlet Container!

16712855225

13

A cada nova thread, cria-se uma nova instância? Não, existe apenas uma instância e a cada nova requisição do cliente, o contêiner gera um novo par de objetos request e response, cria uma nova thread e os a para ela.

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 61 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

(CESPE - 2013 - TRT - 10ª REGIÃO (DF e TO) - Técnico Judiciário - Tecnologia da Informação) No ciclo de vida de um servlet, o servidor recebe uma requisição e a rea para o container, que a delega a um servlet. O container carrega a classe na memória, cria uma instância da classe do servlet e inicia a instância chamando o método init( ). Comentários: O Servidor recebe uma Requisição HTTP e a rea para o Servlet Container. Já existe uma instância da servlet capaz de responder a essa requisição? Se sim, delegase a requisição para essa instância; se não, carrega-se a classe servlet na memória, cria-se uma instância dela e a inicializa por meio do método init. Esse método recebe como parâmetro um objeto ServletConfig! Perfeito, conforme visto em aula. Gabarito: C (CESPE – 2013 – DPE/SP – Analista de Sistemas) No ciclo de vida de um servlet, o servidor recebe uma requisição e a rea para o container, que a delega a um servlet. O container carrega a classe na memória, cria uma instância da classe do servlet e inicia a instância chamando o método init(). 16712855225

Comentários: O Servidor recebe uma Requisição HTTP e a rea para o Servlet Container. Já existe uma instância da servlet capaz de responder a essa requisição? Se sim, delegase a requisição para essa instância; se não, carrega-se a classe servlet na memória, cria-se uma instância dela e a inicializa por meio do método init. Esse método recebe como parâmetro um objeto ServletConfig! Conforme vimos em aula, está perfeito! Gabarito: C Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 62 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

(CESPE – – MPE/RR – Analista de Sistemas) O nome completo da classe da qual herda a classe acima declarada é javax.servlet.HttpServlet. A classe indicada também herda, indiretamente, da classe java.lang.Object. Portanto, é correto afirmar que classes em Java podem ter herança múltipla. Comentários: Ele se trata de um conjunto de classes e interfaces responsáveis pela comunicação especificamente com o protocolo HTTP – lá se encontram as interfaces HttpServletRequest e HttpServletResponse, e também uma classe abstrata chamada HttpServlet2. Essa classe define diversos métodos para lidar com Requisições HTTP: doGet, doPost, doPut, doDelete, doHead, doTrace e doOptions, etc. A classe acima herda da classe HttpServlet, cujo nome completo é javax.servlet.http.HttpServlet. Além disso, todas (todas mesmo!) as classes (inclusive a classe HttpServlet) herdam da classe Object (ou java.lang.Object). No entanto, a classe BookStoreServlet não herda diretamente de Object, logo não há que se falar em Herança Múltipla. Gabarito: E import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class BookStoreServlet extends HttpServlet { public void service (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Get the dispatcher; it gets the main page to the RequestDispatcher dispatcher = getServletContext().getRequestDispatcher( "/bookstore/bookstore.html"); if (dispatcher == null) { System.out.println("There was no dispatcher"); //No dispatcher means the html file could not be found. response.sendError(response.SC_NO_CONTENT); } else { System.out.println("There is a dispatcher"); // Get or start a new session for this HttpSession session = request.getSession(); // Send the the bookstore's opening page dispatcher.forward(request,response); } } public String getServletInfo() { return "The BookStore servlet returns the main web page " + "for Duke's Bookstore."; } } 16712855225

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 63 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

(CESPE – – MPE/RR – Analista de Sistemas) Para a recuperação dos parâmetros que o browser envia para essa servlet, deve-se fazer o ao objeto apontado pela variável request, declarada na linha 3. Comentários: Perfeito, isso vale para qualquer servlet. Se você deseja ter o a parâmetros enviados pelo usuário por meio do browser para a servlet, você precisa ter o ao objeto request do tipo HttpServletRequest. Gabarito: C (CESPE – – MPE/RR – Analista de Sistemas) Se, durante o processamento de um pedido por essa servlet, quando da execução da linha de código 10, o valor da variável dispatcher for null (nulo), então, a mensagem There was no dispatcher será apresentada na interface do usuário. Comentários: Questão de programador mesmo. Essa questão parece boba, mas observem que ela diz que a mensagem será apresentada na interface do usuário (i.e., no browser). Galera, para apresentar no browser, é necessário utilizar o objeto PrintWriter, caso contrário ele irá imprimir esse valor na JVM e o usuário não visualizará! Gabarito: E (CESPE – – MPE/RR – Analista de Sistemas) Durante o funcionamento de uma aplicação web na qual esteja em uso a servlet acima declarada, cada pedido http enviado pelo browser e direcionado à servlet BookStoreServlet implicará a criação de uma nova instância da classe BookStoreServlet, bem como a criação de uma thread que invoca o método service(HttpServletRequest, HttpServletResponse), declarado no código apresentado. 16712855225

Comentários: Galera, implicará a criação de uma nova instância? Não, só existe uma instância! Na verdade, implicará a criação de uma nova thread para cada novo pedido. Gabarito: E Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 64 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

(CESPE – – TRT/5 – Analista de Sistemas) Java Servlets são componentes Java executados somente do lado do servidor. Comentários: Pessoal, lá no Contêiner Web, há uma tal de Servlet! O que é isso, professor? É uma API independente de plataforma, escrita em Java, que roda no servidor (Container Web) processando requisições de clientes e enviando respostas, e que pode ser traduzida como ‘servidorzinho’. Como é? É isso mesmo! Porque ele é utilizado para estender as funcionalidades de um servidor. Perfeito, conforme visto em aula. Gabarito: C (CESPE – 1 – /ES – Analista de Sistemas) Servlet pode ser considerado um applet que é executado no lado servidor. Comentários: Na minha opinião, essa questão está errada! O Guia da Oracle afirma: “A servlet can almost be thought of as an applet that runs on the server side--without a face. Java servlets make many Web applications possible”. Para mim, isso é diferente de dizer que um servlet pode ser considerado um applet que é executado no lado do servidor. Eu diria: “Em termos de local de execução, uma servlet pode ser considerada uma applet que é executada no lado servidor”, no entanto a banca não entendeu dessa maneira :( 16712855225

Gabarito: C (CESPE – 2011 – TRE/ES – Analista de Sistemas) Um servlet é uma classe Java utilizada para ampliar a capacidade de o dos servidores a aplicações por meio do modelo requisição-resposta. Embora os servlets possam responder a um tipo específico de requisição hospedada em servidores web, os servlets não respondem a requisições genéricas. Comentários:

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 65 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

Pessoal, lá no Contêiner Web, há uma tal de Servlet! O que é isso, professor? É uma API independente de plataforma, escrita em Java, que roda no servidor (Container Web) processando requisições de clientes e enviando respostas, e que pode ser traduzida como ‘servidorzinho’. Como é? É isso mesmo! Porque ele é utilizado para estender as funcionalidades de um servidor. Vocês podem me perguntar se as servlets utilizam apenas HTTP. Não! Elas utilizam qualquer protocolo, no entanto ele é o protocolo mais utilizado por clientes web. Professor, o que você quis dizer com “classe java pura”? Cara, isso significa que essa classe só contém código java. Professor as servlets rodam no cliente ou no servidor? Pô... essa é muito fácil: Servlets rodam no Servidor (JVM)! ;) Embora os servlets possam responder a qualquer tipo de requisição, eles são mais utilizados para tratar requisições HTTP. Gabarito: E 10. (CESPE – 2013 – CNJ – Analista de Sistemas) Apesar de serem independentes de plataforma, os servlets, para funcionarem, precisam utilizar o protocolo HTTP. Comentários: Vocês podem me perguntar se as servlets utilizam apenas HTTP. Não! Elas utilizam qualquer protocolo, no entanto ele é o protocolo mais utilizado por clientes web. Professor, o que você quis dizer com “classe java pura”? Cara, isso significa que essa classe só contém código java. Professor as servlets rodam no cliente ou no servidor? Pô... essa é muito fácil: Servlets rodam no Servidor (JVM)! ;) Opa, não precisa utilizar HTTP (apesar de ele ser o mais comum). 16712855225

Gabarito: E 11. (CESPE – 2013 – TRE/MS – Analista de Sistemas – D) O servlet é uma classe de programa em Java utilizada para estender a capacidade dos servidores em aplicações web que trabalham com a filosofia requisição e resposta. Comentários: Pessoal, lá no Contêiner Web, há uma tal de Servlet! O que é isso, professor? É uma API independente de plataforma, escrita em Java, que roda no servidor (Container Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 66 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

Web) processando requisições de clientes e enviando respostas, e que pode ser traduzida como ‘servidorzinho’. Como é? É isso mesmo! Porque ele é utilizado para estender as funcionalidades de um servidor. Perfeito, conforme visto em aula. Gabarito: C - STJ - Analista Judiciário - Tecnologia da Informação Na 12. (CESPE plataforma J2EE, uma aplicação web para a Internet pode ser composta por servlets, Java Server Pages (JSP) e páginas HTML. Nessas aplicações, a apresentação dos dados pode ser separada da lógica do negócio, adotando-se o estilo de arquitetura model view controller (MVC). Nesse caso, pode-se usar servlets operando como controladoras que recebem as solicitações dos usuários e providenciam o processamento das mesmas. Em uma mesma aplicação, entretanto, só pode existir um servlet operando como controladora. Comentários: Não faz sentido, visto que mais de uma servlet pode operar como controladora de uma aplicação. Gabarito: E 13. (CESPE - 2010 - TRE-BA - Analista Judiciário - Análise de Sistemas Todo servlet pode interagir com o contexto no qual ele está inserido por meio dos métodos especificados na interface ServletContext. Comentários: 16712855225

Dentro da javax.servlet, temos também a interface ServletContext! Ela define um contexto, i.e., uma unidade de aplicação web que possui suas próprias configurações. Para executar Servlets e Páginas JSP, é necessário colocá-los dentro de um contexto de uma aplicação web – existe um Contexto por Aplicação Web por JVM. Entenderam mais ou menos? É simples, só é um pouco abstrato! A interface ServletContext é um conjunto de métodos que uma servlet utiliza para interagir com seu Servlet Container – por exemplo, para recuperar um arquivo, despachar requisições ou escrever em um arquivo de log! Bem, conforme a imagem abaixo, cada servlet possui seu ServletConfig. Já o ServletContext serve para qualquer servlet do contexto e pode ser ado por meio do objeto ServletConfig. Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 67 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

Conforme vimos em aula, os servlets interagem com o contexto por meio de métodos especificados na interface ServletContext – que estão contidos em um Servlet Container. Gabarito: C 14. (CESPE - 2011 - Correios - Analista de Correios - Analista de Sistemas - Produção Entre outras aplicações, os servlets são utilizados para escrever aplicativos web J2EE dinâmicos em servidores web. Um servlet pode utilizar seus recursos para realizar ações como, por exemplo, usar os registros (logging) para permitir que o servidor possa autenticar usuários. Comentários: Essa é uma questão bastante difícil! Tive que pesquisar e, de fato, pode-se utilizar recursos de servlets para autenticação, auditoria e logging! Gabarito: C 15. (CESPE - 2009 - SECONT-ES - Auditor do Estado – Tecnologia da Informação No desenvolvimento de uma aplicação web que siga o padrão JEE, a tecnologia JSP (Java Server Pages) permite criar páginas web com componentes estáticos e dinâmicos; o AJAX permite a troca e manipulação de dados XML com comunicação assíncrona, utilizando XMLHttpRequest; e o servlet é exemplo de servidor de aplicações que contém diretórios como o bin e o webapps e é responsável por gerenciar requisições recebidas de clientes. Comentários:

16712855225

Pessoal, lá no Contêiner Web, há uma tal de Servlet! O que é isso, professor? É uma API independente de plataforma, escrita em Java, que roda no servidor (Container Web) processando requisições de clientes e enviando respostas, e que pode ser traduzida como ‘servidorzinho’. Como é? É isso mesmo! Porque ele é utilizado para estender as funcionalidades de um servidor. Confome vimos em aula, servlet não é um servidor de aplicação, mas simplesmente uma Classe Java. Gabarit Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 68 de 156

E

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

ACERTEI

ERREI

16712855225

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 69 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

(FCC - 2007 - TRE-SE - Analista Judiciário - Tecnologia da Informação) Quando um servlet é carregado pela primeira vez para a máquina virtual Java do servidor: a) ocorre um destroy() no processo cliente. b) o seu método init() é invocado. c) o método service() é definido. d) ocorre a execução do método getOutputStream(). e) o seu método stream() é invocado. Comentários: O Servidor recebe uma Requisição HTTP e a rea para o Servlet Container. Já existe uma instância da servlet capaz de responder a essa requisição? Se sim, delegase a requisição para essa instância; se não, carrega-se a classe servlet na memória, cria-se uma instância dela e a inicializa por meio do método init. Esse método recebe como parâmetro um objeto ServletConfig! Perfeito, conforme visto em aula. Gabarito: B (FCC – 2011 – TRT - 1ª REGIÃO – Analista de Sistemas Em relação às tecnologias Java, é INCORRETO afirmar que as Servlets: 16712855225

a) deixam para a API utilizada na sua escrita a responsabilidade com o ambiente em que elas serão carregadas e com o protocolo usado no envio e recebimento de informações. b) fornecem um mecanismo simples e consistente para estender a funcionalidade de um servidor Web. c) podem ser incorporadas em vários servidores Web diferentes.

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 70 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

d) podem rodar em qualquer plataforma sem a necessidade de serem reescritas ou compiladas novamente. e) são carregadas apenas uma vez e, para cada nova requisição, a servlet gera uma nova thread. Comentários: (a) Deixa a responsabilidade do ambiente de execução e protocolo para a API? De jeito algum! Isso é uma escolha do programador; (b) Perfeito, já vimos diversas vezes que elas são responsáveis por estender a funcionalidade de servidores; (c) Perfeito, está disponível para diversos servidores web; (d) Perfeito, nunca se esqueçam que são classes Java; (e) Perfeito, é uma thread para cada requisição. Gabarito: A (FCC – 2010 – DPE/SP – Analista de Sistemas) Servlets são projetadas para fornecer aos desenvolvedores uma solução JAVA para criar aplicações web. Para criar Servlets é necessário importar as classes padrão de extensão dos pacotes: a) javax.servlet e javax.servlet.http. b) javax.servlet e javax.http.servlet. c) javax.servlet.html e javax.servlet.http. d) servlet.javax e servlet.javax.http. e) javax.servlet.smtp e javax.servlet.html. Comentários: Dado esse código, vamos ver alguns detalhes importantes: primeiro, foi importado o pacote javax.servlet, que é um conjunto de classes e interfaces responsáveis pela comunicação com diversos protocolos – lá se encontram, por exemplo, as interfaces ServletRequest e ServletResponse. No entanto, observem abaixo que se importa também o pacote javax.servlet.http – cuja estrutura é mostrada a seguir: 16712855225

Conforme vimos em aula, trata-se da javax.servlet e javax.servlet.http. Gabarito: A (FCC – 2 – TRE/CE – Analista de Sistemas) No contexto do ciclo de vida de um servlet, considere: Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 71 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

I. Quando o servidor recebe uma requisição, ela é reada para o container que, por sua vez, carrega a classe na memória e cria uma instância da classe do servlet. II. Quando um servlet é carregado pela primeira vez para a máquina virtual Java do servidor, o método init() é invocado, para preparar recursos para a execução do serviço ou para estabelecer conexão com outros serviços. III. Estando o servlet pronto para atender as requisições dos clientes, o container cria um objeto de requisição (ServletRequest) e de resposta (ServletResponse) e depois chama o método service(), ando os objetos como parâmetros. IV. O método destroy() permite liberar os recursos que foram utilizados, sendo invocado quando o servidor estiver concluindo sua atividade. Está correto o que se afirma em: a) I, II e III, apenas. b) I, II e IV, apenas. c) I, III e IV, apenas. d) II, III e IV, apenas. e) I, II, III e IV. Comentários: Conforme a imagem acima, o Servidor recebe uma Requisição HTTP e a rea para o Servlet Container. Já existe uma instância da servlet capaz de responder a essa requisição? Se sim, delega-se a requisição para essa instância; se não, carrega-se a classe servlet na memória, cria-se uma instância dela e a inicializa por meio do método init. Esse método recebe como parâmetro um objeto ServletConfig! 16712855225

(I) Galera, isso só ocorre se já não existir uma instância da servlet. No entanto, guardem isso para sempre na vida de concurseiros: “Um item só está errado se contiver um erro”. O item disse que ocorre sempre assim? Não. Existe um caso em que o que foi descrito no item ocorre? Sim! Logo, não há erro! Ele descreveu um caso, não disse que era o único caso! Item completamente perfeito... Conforme a imagem acima, o Servidor recebe uma Requisição HTTP e a rea para o Servlet Container. Já existe uma instância da servlet capaz de responder a essa Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 72 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

requisição? Se sim, delega-se a requisição para essa instância; se não, carrega-se a classe servlet na memória, cria-se uma instância dela e a inicializa por meio do método init. Esse método recebe como parâmetro um objeto ServletConfig! (II) Conforme vimos em aula, esse método contém as configurações que preparam os recursos para a execução do serviço ou conexão com outros serviços. Esse objeto contém informações de configuração e parâmetros de inicialização da aplicação web. A partir do momento que a servlet é inicializada, o contêiner pode utilizá-la para tratar requisições dos clientes. Chama-se então o método service com dois parâmetros: ServletRequest, que contém a solicitação do cliente; e o ServletResponse, que contém a resposta – ambos criados pelo contêiner. (III) Conforme vimos em aula, eles são criados para tratar a solicitação e resposta para o cliente e são criados pelo contêiner. Na prática, o método service determina qual Método HTTP (GET/POST) deve ser chamado na servlet. Por fim, o contêiner chama o método destroy a fim de remover a instância da servlet da memória e liberar os recursos e os dados. Tanto o método init quanto o método destroy são executados apenas uma vez durante o ciclo de vida da servlet. Professor, quem gerencia tudo nisso? O Servlet Container! (IV) Conforme vimos em aula, está perfeito! Quando a servlet tiver cumprido seu papel, o servidor liberará os recursos investidos. Gabarito: E (FCC – 3 – DPE/SP – Analista de Sistemas) Um Servlet Contêiner controla o ciclo de vida de uma servlet onde são invocados três métodos essenciais: um para inicializar a instância da servlet, um para processar a requisição e outro para descarregar a servlet da memória. Os itens a seguir representam, nessa ordem, o que ocorre quando um usuário envia uma requisição HTTP ao servidor: 16712855225

I. A requisição HTTP recebida pelo servidor é encaminhada ao Servlet Contêiner que mapeia esse pedido para uma servlet específica. II. O Servlet Contêiner invoca o método init da servlet. Esse método é chamado em toda requisição do usuário à servlet não sendo possível ar parâmetros de inicialização.

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 73 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

III. O Servlet Contêiner invoca o método service da servlet para processar a requisição HTTP, ando os objetos request e response. O método service não é chamado a cada requisição, mas apenas uma vez, na primeira requisição do usuário à servlet. IV. Para descarregar a servlet da memória, o Servlet Contêiner chama o método unload, que faz com que o garbage collector retire a instância da servlet da memória. Está correto o que se afirma em: a) I, II, III e IV. b) I, apenas. c) I e IV, apenas. d) II, III e IV, apenas. e) II e III, apenas. Comentários: Conforme a imagem acima, o Servidor recebe uma Requisição HTTP e a rea para o Servlet Container. Já existe uma instância da servlet capaz de responder a essa requisição? Se sim, delega-se a requisição para essa instância; se não, carrega-se a classe servlet na memória, cria-se uma instância dela e a inicializa por meio do método init. Esse método recebe como parâmetro um objeto ServletConfig! (I) Conforme vimos em aula, o contêiner verifica se há uma servlet específica para responder a esse pedido. Conforme a imagem acima, o Servidor recebe uma Requisição HTTP e a rea para o Servlet Container. Já existe uma instância da servlet capaz de responder a essa requisição? Se sim, delega-se a requisição para essa instância; se não, carrega-se a classe servlet na memória, cria-se uma instância dela e a inicializa por meio do método init. Esse método recebe como parâmetro um objeto ServletConfig! 16712855225

(II) Conforme vimos em aula, esse método pode – e recebe – parâmetros de inicialização. Esse objeto contém informações de configuração e parâmetros de inicialização da aplicação web. A partir do momento que a servlet é inicializada, o contêiner pode utilizá-la para tratar requisições dos clientes. Chama-se então o método service com Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 74 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

dois parâmetros: ServletRequest, que contém a solicitação do cliente; e o ServletResponse, que contém a resposta – ambos criados pelo contêiner. (III) Na verdade, esse método é chamado a cada requisição, porque cada requisição possui parâmetros diferentes. Na prática, o método service determina qual Método HTTP (GET/POST) deve ser chamado na servlet. Por fim, o contêiner chama o método destroy a fim de remover a instância da servlet da memória e liberar os recursos e os dados. Tanto o método init quanto o método destroy são executados apenas uma vez durante o ciclo de vida da servlet. Professor, quem gerencia tudo nisso? O Servlet Container! (IV) Conforme vimos em aula, não se chama método unload – o nome do método é destroy! Gabarito: B (FCC – 6 – BACEN – Analista de Sistemas) Para ser um servlet, uma classe deve estender a classe I e exceder as ações “doGet” ou “doPost” (ou ambas), dependendo se os dados estão sendo enviados por uma ação GET ou por uma ação POST. Estes métodos tomam dois argumentos: um II e um III em sua execução. Preenchem correta e respectivamente I, II e III:

16712855225

Comentários: Voltando ao nosso código: importamos os dois pacotes, estendemos essa classe abstrata e amos como parâmetro as duas interfaces. Se a Requisição HTTP foi feita utilizando o Método GET, executaremos o método doGet; se foi com o Método POST, executaremos o método doPost. Esses métodos recebem dois parâmetros: uma requisição HttpServletRequest e uma resposta HttpServletResponse.

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 75 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

Para ser um servlet, uma classe deve estender a classe HttpServlet e exceder as ações “doGet” ou “doPost” (ou ambas), dependendo se os dados estão sendo enviados por uma ação GET ou por uma ação POST. Estes métodos tomam dois argumentos: um HttpServletRequest e um HttpServletResponse em sua execução. Gabarito: D (FCC - 2007 - TRE-SE - Analista Judiciário - Tecnologia da Informação Em Java, a agem de dados de um formulário do cliente para o servlet pode ocorrer por meio do uso do método: a) import() b) return() c) catch() d) getParameter() e) nameComponent() Comentários: É importante entender também como funciona um dos métodos mais importantes da interface HttpServletRequest: método getParameter! Bem, ele retorna o valor do parâmetro de um requisito como uma String; Por que isso é importante? Porque ele é útil na agem de dados de um formulário do cliente, i.e., por meio dele, a servlet pode capturar dados de formulários! Agora vamos ver o ciclo das servlets ;) Conforme vimos em aula, trata-se do método getParameter(). Gabarito: D 16712855225

(FCC - 2012 - TRE- - Programador de computador A tecnologia Java Servlet é baseada na construção de classes servlet que executam no servidor recebendo dados de requisições do cliente, processando esses dados, opcionalmente ando recursos externos como bancos de dados, e respondendo ao cliente com conteúdo no formato HTML. Com relação ao tema, analise as asserções a seguir: Embora as servlets sejam muito boas no que fazem, tornou-se difícil responder ao cliente com conteúdo no formato HTML.

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 76 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

PORQUE Geralmente quem trabalha com o conteúdo HTML é o web designer que normalmente não é programador Java experiente. Ao misturar HTML dentro de uma servlet, torna-se muito difícil separar as funções de web designer e desenvolvedor Java. Além disso, é difícil fazer alterações no conteúdo HTML, pois para cada mudança, uma recompilação da servlet tem que acontecer. Para contornar as limitações da tecnologia Java Servlet a Sun Microsystems criou a tecnologia JavaServer Pages (JSP). Acerca dessas asserções, é correto afirmar: a) Tanto a primeira quanto a segunda asserções são proposições falsas. b) A primeira asserção é uma proposição verdadeira e a segunda uma proposição falsa. c) A primeira asserção é uma proposição falsa e a segunda uma proposição verdadeira. d) As duas asserções são proposições verdadeiras, mas a segunda não é a justificativa correta da primeira. e) As duas asserções são proposições verdadeiras e a segunda é a justificativa correta da primeira. Comentários: Outra desvantagem importante é que o programador, além de ser bom em Java, tem que ser bom em Web Design! No entanto, quando ele está escrevendo o código Java, ele não possui as ferramentas de Web Design! O JSP permite essa separação, i.e., os Desenvolvedores Java criam as Servlets (Lógica de Negócio) e os Web Designers criam as Páginas JSP (Lógica de Apresentação)! Bacana? 16712855225

Roubei esse parágrafo da aula de JSP! Observem que ambas as assertivas estão corretas e a segunda justifica a primeira. Gabarito: E

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 77 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

(FCC - 2013 - -RN - Analista Legislativo - Analista de Sistemas No Java EE 6 os métodos doPost e doGet podem ser sobrescritos em uma servlet criada na aplicação para receberem as requisições vindas de páginas HTML. Quando sobrescritos na servlet, eles substituem seus métodos ancestrais existentes na classe abstrata: a) GenericServlet. b) HttpServlet. c) HttpServletRequest. d) HttpServletResponse. e) HttpServletObject. Comentários: Ele se trata de um conjunto de classes e interfaces responsáveis pela comunicação especificamente com o protocolo HTTP – lá se encontram as interfaces HttpServletRequest e HttpServletResponse, e também uma classe abstrata chamada HttpServlet. Essa classe define diversos métodos para lidar com Requisições HTTP: doGet, doPost, doPut, doDelete, doHead, doTrace e doOptions, etc. Conforme vimos em aula, essa classe abstrata é a HttpServlet. Gabarito: B 10. (FCC - 2009 - TRT - 16ª REGIÃO (MA) - Técnico Judiciário - Tecnologia da Informação Para ler os parâmetros de inicialização do contexto de um servlet utiliza-se o método: a) String getInitParameter(String). b) Enumeration getInitParameterNames(). c) InputStream getResourceAsStream(). d) setAttribute(String nome, Object). e) Object getAttribute(String nome). 16712855225

Comentários: É importante entender também como funciona um dos métodos mais importantes da interface HttpServletRequest: método getParameter3! Bem, ele retorna o valor do parâmetro de uma requisição como uma String; E por que é importante? Porque ele

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 78 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

é útil na agem de dados de um formulário do cliente, i.e., por meio dele, a servlet pode capturar dados de formulários! Agora vamos ver o ciclo das servlets ;) Conforme vimos em aula, a nota de rodapé 3 afirma que o Método getInitParameter retorna o valor do parâmetro de inicialização de uma servlet. Gabarito: A ACERTEI

ERREI

16712855225

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 79 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

(FMP/RS – 2013 – MPE/AC – Analista de Sistemas No contexto da arquitetura Java Enterprise Edition, __________________ são, em termos de estrutura, classes Java especializadas que se assemelham muito à estrutura dos applets Java, porém rodando em um servidor web e não no do cliente. Assinale a única alternativa que completa corretamente a lacuna acima. a) Java ME (Java Micro Edition) b) portlets c) Java Persistence API (JPA) d) Enterprise JavaBeans (EJB) e) servlets Comentários: A Oracle afirma: “A servlet can almost be thought of as an applet that runs on the server side”. Portanto, no contexto da arquitetura Java Enterprise Edition, servlets são, em termos de estrutura, classes Java especializadas que se assemelham muito à estrutura dos applets Java, porém rodando em um servidor web e não no do cliente. Gabarito: E 16712855225

(VUNESP – 3 – FUNDUNESP – Analista de Sistemas) Na plataforma J2EE, a classe ServletRequest define: a) a estrutura do objeto principal do Servlet, permitindo que sejam feitas requisições ao Servlet. b) métodos que permitem que o Servlet faça requisições de forma assíncrona. c) métodos que permitem que o Servlet faça requisições aos clientes. d) propriedades que permitem que seja alterado o comportamento do Servlet. e) um objeto que fornecerá informações sobre a requisição feita pelo cliente ao Servlet.

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 80 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

Comentários: Dado esse código, vamos ver alguns detalhes importantes: primeiro, foi importado o pacote javax.servlet, que é um conjunto de classes e interfaces responsáveis pela comunicação com diversos protocolos – lá se encontram, por exemplo, as interfaces ServletRequest e ServletResponse. No entanto, observem abaixo que se importa também o pacote javax.servlet.http – cuja estrutura é mostrada a seguir: Conforme vimos em aula, ServletRequest é uma interface e, não, uma classe! Vacilou, banca! Bem, essa interface funciona como a interface ServletHttpRequest, porém não é específica para o Protocolo HTTP! Bem, ambas servem para manipular informações de uma requisição feito pelo cliente ao servlet. Gabarito: E (CESGRANRI – 2006 – DECEA – Analista de Sistemas – A) Servlets e arquivos JSP são executados no WEB Container. Comentários: Pessoal, lá no Contêiner Web, há uma tal de Servlet! O que é isso, professor? É uma API independente de plataforma, escrita em Java, que roda no servidor (Container Web) processando requisições de clientes e enviando respostas, e que pode ser traduzida como ‘servidorzinho’. Como é? É isso mesmo! Porque ele é utilizado para estender as funcionalidades de um servidor. Conforme vimos em aula, são executados no Container Web. 16712855225

Gabarito: C (CESGRANRIO – – DECEA – Analista de Sistemas – B) Applets e Servlets são compilados e executados no servidor. Comentários: Pessoal, lá no Contêiner Web, há uma tal de Servlet! O que é isso, professor? É uma API independente de plataforma, escrita em Java, que roda no servidor (Container Web) processando requisições de clientes e enviando respostas, e que pode ser

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 81 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

traduzida como ‘servidorzinho’. Como é? É isso mesmo! Porque ele é utilizado para estender as funcionalidades de um servidor. Conforme vimos em aula, servlets rodam no servidor, mas applets rodam no cliente. Gabarito: E (CESGRANRIO – 2009 – BNDES – Analista de Sistemas – A) Ao estudar as especificações e frameworks Java EE, um Analista de Sistemas concluiu que o container WEB do servidor de aplicações é o responsável por gerenciar o ciclo de vida de servlets e de EJBs utilizados numa aplicação Java. Comentários: Na prática, o método service determina qual Método HTTP (GET/POST) deve ser chamado na servlet. Por fim, o contêiner chamar o método destroy a fim de remover a instância da servlet da memória e liberar os recursos e os dados. Tanto o método init quanto o método destroy são executados apenas uma vez durante o ciclo de vida da servlet. ofessor, quem gerencia tudo nisso? O Servlet Container Conforme vimos em aula, o ciclo de vida das servlets é gerenciado pelo Servlet Container (que se encontra dentro do Web Container). No entanto, o Web Container não é responsável pelo ciclo de vida de EJBs (seria impossível!). Gabarito: E (CESGRANRIO – 2009 – BNDES – Analista de Sistemas – B) Ao estudar as especificações e frameworks Java EE, um Analista de Sistemas concluiu que no container WEB, uma página JSP transforma-se em um servlet, que é compilado, carregado e inicializado. 16712855225

Comentários: Isso é da aula de Páginas JSP, no entanto é sabido que Pásginas JSP se transformam em Servlets! Gabarito: C (CESGRANRIO – 2012 – PETROBRÁS – Analista de Sistemas Seja o código a seguir: Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 82 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

Sobre esse código, do qual foram omitidas as declarações de importação e o método getServletInfo por concisão, considere as afirmativas a seguir. I - Como o método service() não foi redefinido, o container não saberá qual método chamar para cada tipo de pedido, gerando uma exceção. II - Como o método init() não foi redefinido, o construtor padrão da classe mãe será chamado. III - Como o método destroy() não foi redefinido, o container gerará um erro registrando-o no arquivo de logs ao terminar este aplicativo. É correto APENAS o que se afirma em: a) b) c) d) e)

I II III I e III II e III

16712855225

Comentários: (I) Na questão, estamos herdando de HttpServlet e, não, Servlet diretamente. Logo, não precisamos sobrescrever o método service, basta utilizar doGet e doPost.

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 83 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

(II) Perfeito, quem geralmente chama o método init é o contêiner e, não, o programador. Se ele não redefini-lo, será chamado o construtor da classe mãe (super.init(config)). (III) Galera, quem geralmente chama o método destroy é o contêiner e, não, o programador. Logo, não é necessário redefini-lo. Gabarito: B

(ESAF – – CGU – Analista de Sistemas – A) Servlets são classes de programação Java que geram conteúdo dinâmico (normalmente para páginas HTML) e interagem com os clientes, utilizando o modelo challenge/request. Normalmente utilizam o protocolo HTTP, apesar de não serem restritas a ele. 16712855225

Comentários: A documentação oficial afirma que se trata de uma classe java pura utilizada para estender as capacidades dos servidores que hospedam aplicações adas por meio um modelo de requisição-resposta. Em geral, elas funcionam para fornecer conteúdo web dinâmicos (normalmente em HTML) às páginas web, processando requisições/respostas, filtrando dados, ando o banco de dados, etc.

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 84 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

Opa, utiliza-se um modelo Request/Response e, não, Challenge/Request. Gabarito: E (CIAAR - 2012 - CIAAR - Oficial Temporário - Análise de Sistemas O método chamado para liberar quaisquer recursos mantidos pelo servlet, quando o contëiner de servlets termina o servlet, denomina-se: a) get. b) post. c) destroy. d) prerender. Comentários: Na prática, o método service determina qual Método HTTP (GET/POST) deve ser chamado na servlet. Por fim, o contêiner chamar o método destroy a fim de remover a instância da servlet da memória e liberar os recursos e os dados. Tanto o método init quanto o método destroy são executados apenas uma vez durante o ciclo de vida da servlet. Professor, quem gerencia tudo nisso? O Servlet contêiner! Conforme vimos em aula, trata-se do método Destroy! Gabarito: C 10. (AO - 2012 - BRDE - Analista de Sistemas - Desenvolvimento de Sistemas (Prova TIPO 4) Sobre Servlets, analise as assertivas e assinale a alternativa que aponta as corretas. 16712855225

I. Servlets são implementadas como arquivos de classe da Linguagem Java. II. Servlets são independentes de plataforma, de modo que podem ser executadas em diferentes servidores, em diferentes sistemas operacionais. III. As Servlets podem ar qualquer uma das APIs Java. Uma Servlet pode usar a API JDBC para ar e armazenar dados ou para ar objetos remotos. IV. Ao criar uma Servlet, somos obrigados a reescrever nove métodos presentes à interface que foi implementada. Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 85 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

a) Apenas I e II. b) Apenas I e III. c) Apenas II e III. d) Apenas I, II e III. e) I, II, III e IV. Comentários: I. Galera, não sei o que a banca quis dizer com isso! Imagino que seja que Servlets são Classes Java (diferente de JSP) – logo, o item está correto. II. Não gosto de dizer que são independentes de plataforma, prefiro dizer que são multiplataformas, mas está correto. III. Conforme já foi dito, são classes Java! Logo, podem ar APIs Java como qualquer outra. IV. Não, somos obrigados a implementar, se for Servlet HTTP, os métodos doGet ou doPost. Gabarito: D 11. (VUNESP - 2013 - FUNDUNESP - Analista Programador Júnior Para criar um Servlet que processará as requisições HTTP na plataforma J2EE, deve-se: a) criar uma classe que implemente a interface Servlet. b) criar uma classe que estenda a classe HttpServlet. c) implementar o método processHttpHeader. d) instanciar a classe Servlet, ando para o parâmetro requestType o valor Servlet.HTTP_REQUEST. e) invocar o método Servlet.service(Servlet.HTTP_REQUEST) antes do processamento da requisição. 16712855225

Comentários: Dado esse código, vamos ver alguns detalhes importantes: primeiro, foi importado o pacote javax.servlet, que é um conjunto de classes e interfaces responsáveis pela comunicação com diversos protocolos – lá se encontram, por exemplo, as interfaces

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 86 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

ServletRequest e ServletResponse. No entanto, observem abaixo que se importa também o pacote javax.servlet.http – cuja estrutura é mostrada a seguir:

Ele se trata de um conjunto de classes e interfaces responsáveis pela comunicação especificamente com o protocolo HTTP – lá se encontram as interfaces HttpServletRequest e HttpServletResponse, e também uma classe abstrata chamada HttpServlet2. Essa classe define diversos métodos para lidar com Requisições HTTP: doGet, doPost, doPut, doDelete, doHead, doTrace e doOptions, etc. Conforme vimos em aula, quando queremos criar uma Servlet que processará especificamente requisições HTTP, devemos criar uma classe que estenda a classe HttpServlet – como mostrado na imagem. Gabarito: B 12. (FEPESE - 2013 - JUCESC - Analista Técnico em Gestão de Registro Mercantil Analista de Informática) Assinale a alternativa que defne corretamente um Servlet. 16712855225

a) É um método da JPA utilizado na persistência assíncrona de dados. b) É um componente que roda do lado do cliente para tratar problemas de comunicação. c) É uma classe Java utilizada para estender as capacidades de um servidor. d) É uma biblioteca JBOSS que emula servidores no lado do cliente. e) É uma JSP que possibilita a execução de código no lado do cliente, mesmo sem comunicação com um servidor. Comentário Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 87 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

Pessoal, lá no Contêiner Web, há uma tal de Servlet! O que é isso, professor? É uma API independente de plataforma, escrita em Java, que roda no servidor (Container Web) processando requisições de clientes e enviando respostas, e que pode ser traduzida como ‘servidorzinho’. Como é? É isso mesmo! Porque ele é utilizado para estender as funcionalidades de um servidor. Conforme vimos em aula, trata-se da terceira opção – todas as outras são absurdas! Gabarito: C 13. (VUNESP - 2013 - FUNDUNESP - Analista Programador Júnior) Considere o Servlet a seguir: import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class ClasseServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response){ response write html response write body response write Servlet em operação response write body response write html } }

Sobre o código do Servlet, é possível afirmar que: a) ao ser executado por um contêiner de Servlet, será exibida uma tela em branco no navegador. 16712855225

b) ao ser executado por um contêiner de Servlet, será exibida a mensagem “Servlet em operação!” na tela do navegador. c) não pode ser compilado, pois a classe HttpServletResponse não possui o método write. d) não pode ser compilado, pois HttpServlet é uma interface e, portanto, não pode ser estendida por uma classe.

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 88 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

e) o conteúdo exibido na tela do navegador não será codificado corretamente, pois a codificação da página não foi informada. Comentários: Vocês observarão um padrão muito comum em servlets. Qual, professor? Para devolver a resposta ao cliente, devemos primeiro definir o tipo de saída. Para tal, utilizamos a função setContentType do HttpServletResponse – nossa servlet definiu como text/html, i.e., teremos uma saída em HTML! A seguir, utilizamos o método getWriter para capturar os caracteres da resposta e inseri-los em um objeto out. Conforme vimos em aula, nós utilizamos o método getWriter para capturar a resposta e ar para um objeto PrintWriter. A HttpServletResponse não possui qualquer método write. Gabarito: C 14. (CESGRANRIO - -RO - Analista Judiciário - Tecnologia da Informação O método da interface javax.servlet.http.HttpSession, utilizado para finalizar uma sessão de usuário em um container J2EE, é a) cancel( ) b) delete( ) c) destroy( ) d) invalidate( ) e) release( ) Comentários: 16712855225

Galera, coloquei essa questão para que vocês saibam que nem sempre será possível responder todas as questões de uma prova. A banca tem o poder de cobrar o que ela quiser. E assim ela o faz, porque toda prova tem seus itens impossíveis. Não fiquem tristes, porque um item como esse ninguém acerta (exceto no chute). É inviável e não vale a pena estudar todos os métodos, parâmetros, objetos de uma linguagem ou tecnologia. Bem, no caso dessa questão, a resposta era invalidate( ). Gabarito: D ACERTEI

Prof. Diego Carvalho

ERREI

www.estrategiaconcursos.com.br

Pág. 89 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

JAVA SERVER FACES (JSF) Galera, vou contar uma historinha para vocês! Durante muito tempo, usuários se acostumaram com Aplicações Desktop. O que é isso, professor? É aquele programinha que você baixa e instala em seu computador local, ando diretamente bancos de dados ou gerenciadores de arquivos. Para criar essas aplicações eram utilizadas as tecnologias Visual Basic, Delphi, Swing (Java), etc. Pois é, esses programas em geral não necessitam de um navegador para rodar! Eles são construídos como um conjunto de componentes oferecidos pela plataforma de desenvolvimento para cada sistema operacional e estão associados a eventos, ações ou procedimentos que executam lógicas de negócio. Muitas das vezes, são componentes muito ricos. No entanto, sabe-se que Aplicações Desktop sofrem com problemas de manutenção e gerenciabilidade. Vejam que as regras de negócio rodam no cliente – aliás, uma cópia integral da aplicação está no cliente! Logo, se deu pau em alguma funcionalidade, eu tenho que propagar as alterações para todas as máquinas que têm o programa, visto que as regras de negócio estão no cliente! Para resolver esse tipo de problema, surgiram as Aplicações Web. Elas rodam em um servidor central onde os usuários podem á-las por meio de um navegador (Chrome, Firefox, etc) e um protocolo HTTP. Nesse caso, todas as regras de negócio aplicação se encontram no Servidor, sendo muito mais fácil gerenciá-las e, eventualmente, depurá-las. Ora, deu pau em alguma funcionalidade, eu vou lá no servidor central e conserto – não preciso ir em todas as máquinas que têm a aplicação! Claro, nem tudo são flores, é necessário conhecer diversas tecnologias, linguagens, scripts, entre outros – além de seguir um modelo de requisição/resposta. Agora vejam que interessante, eu posso combinar esses dois universos. 16712855225

É possível unir as melhores características desses dois mundos, com componentes ricos, abstraindo protocolos, etc. Vocês já ouviram falar da Arquitetura Model-ViewController (MVC)? Pois é, trata-se de uma arquitetura que divide os componentes de uma aplicação em camadas independentes (Modelo, Visão e Controle)! O Controle faz o meio campo entre a Visão e o Modelo.

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 90 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

Bem, ela foi amplamente utilizada em Aplicações Desktop até que um dia alguém pensou: Poxa, por que não utilizá-la na web? E resolveu assim fazê-lo! Como assim? Alguém decidiu então combinar a Arquitetura MVC com o modelo tradicional de desenvolvimento de páginas web dinâmicas! Qual seria esse modelo, professor? Trata-se da utilização de Servlets e JSP! O resultado foi a criação do framework Struts! Ele era uma implementação da Arquitetura MVC para desenvolvimento de páginas web dinâmicas! Bacana? Esse framework fez tanto sucesso que a Sun Microsystems junto com uma comunidade de desenvolvedores resolveu criar uma especificação padronizada baseada nesse framework, denominado Java Server Faces (JSF). Cuidado com as questões de prova que afirmam que se trata apenas de uma especificação – ele é tanto uma especificação quanto um framework . Cuidado também com aquelas que afirmam que só trata de interfaces gráficas. Ele trata de componentes de interface com usuário – as interfaces gráficas (GUI) são um tipo de interface com o usuário (UI). Essa tecnologia consiste em dois aspectos: Primeiro, uma API para representar componentes e gerenciar seus estados; manipular eventos; realizar validação server-side; converter dados; definir navegação de páginas; ar internacionalização e ibilidade; e prover extensibilidade. Segundo, taglibs (bibliotecas de tags) para adicionar componentes a páginas web e conectar componentes a objetos server-side. Galera, ele provê um modelo de programação bem definido e robusto, além de fornecer diversas taglibs – inclusive o desenvolver pode criar sua própria taglib. Essas taglibs contêm manipuladores de tags que implementam os componentes de tags. Essas características facilitam significativamente o peso da construção e manutenção de Aplicações Web com interfaces de usuário server-side. 16712855225

O Modelo de Componentes JSF define três taglibs:  HTML: possui componentes que representam diversos elementos HTML. o Namespace: xmlns:h=”http://java.sun.com/jsf/html”  CORE: responsável por internacionalização, validação, conversão e outros. o Namespace: xmlns:f=”http://java.sun.com/jsf/core”  FACELETS: fornece tags para criar templates para aplicações web. o Namespace: xmlns: =”http://java.sun.com/jsf/facelets” 14

As implementações da especificação mais famosas são Oracle Mojarra e o Apache MyFaces.

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 91 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

Com o mínimo de esforço é possível criar uma página web; adicionar componentes em uma página ao adicionar tags de componentes; vincular componentes de uma página a dados server-side; conectar eventos gerados por componentes ao código da aplicação; salvar e restaurar o estado da aplicação além da vida da requisição do servidor; e reutilizar e estender componentes por meio de customização. Podemos definir a Tecnologia JSF como uma tecnologia que nos permite criar Aplicações Web utilizando componentes visuais pré-prontos, de forma que o desenvolvedor não se procupe com Javascript ou HTML. funcionalidade fornecida por uma Aplicação JSF é similar a qualquer outra Aplicação Web. Ela possui as seguintes partes:       

Um conjunto de Páginas Web em que são colocados os componentes; Um conjunto de tags para adicionar componentes à página web; Um conjunto de Managed Beans (ou Beans Gerenciados); Um Descritor de Implantação Web (web.xml); Um ou mais arquivos de configuração (Ex: faces-config.xml); Um conjunto de objetos customizados (Ex: validadores, conversores, etc); Um conjunto de tags customizadas para representar objetos customizados;

Pessoal, o JSF oferece diversos validadores embutidos para validar seus Componentes UI – essa validação ocorre no lado do servidor. Eles podem ser invocados a partir de sua tag específica e podem validar o tamanho de um campo, tipo de entrada, range de um valor numérico, expressão regular, entre outros. É possível, inclusive, criar o seu próprio validador customizado.

16712855225

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 92 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

Observem a imagem acima! Uma Página Web myfacelet.xhtml é construída utilizando tags de Componentes JSF. Essas tags são usadas para adicionar componentes à visão (myView), que é uma representação server-side da página. Além dos componentes, uma página web pode referenciar objetos como listeners, validadores, conversores, entre outros. Em resposta a uma requisição do cliente, uma página web é renderizada por um contêiner web que implementa a tecnologia JSF! Uma de suas grandes vantagens é que ele oferece uma clara separação entre comportamento e apresentação. Ele mapeia solicitações HTTP para o tratamento de eventos específicos dos componentes e gerencia os componentes como objetos stateful no servidor. Outro importante objetivo é aproveitar componentes e conceitos já familiares aos programadores, sem limitá-los a uma tecnologia de script ou a uma linguagem de marcação específicas. Isso possibilita a utilização de diferentes tecnologias de apresentação, a criação de componentes próprios a partir das classes de componentes, e a geração de saídas para diversos dispositivos (Ex: Celular, Tablet). O JSF fornece uma maneira fácil e amigável para criar Aplicações Web por meio de, basicamente, três atividades:  Criar uma Página Web (usando tags de componentes);  Desenvolver Managed Beans;  E mapear a instância Fervlet. Aqui vamos fazer uma pequena pausa! Professor, o que é um Managed Bean? São apenas POJOs com a annotation @ManagedBeans. Pensem no seguinte: meu sistema precisa escrever “Olá, pessoal” no navegador. Bem, esse texto não precisa de nenhuma informação, não a nada, é muito simples – basta colocá-lo diretamente na camada de visão e mostrá-lo! 16712855225

E se eu tenho que dar um “Olá, X”, em que X é o nome da pessoa que ou o sistema? Em outras palavras, se eu ei, deve mostrar “Olá, Diego”; se o Messi ou, deve mostrar “Olá, Messi”! Para tal, eu vou precisar ar o banco de dados, buscar informações do sistema, talvez saber o horário de o, i.e., vou precisar interagir com o modelo, lógica de negócio ou componentes visuais. Ora, nós prezamos pela separação de responsabilidades! Logo, esse código ficará em uma classe de modelo e, jamais, na visão. Os Managed Beans são os objetos que intermediam a comunicação entre a visão e o modelo. Eles são registrados no Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 93 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

descritor de implantação (ou por meio de annotations) e tem seu ciclo de vida controlado e gerenciado pelo próprio JSF! As principais tarefas de um Managed Bean (ou Backing Beans) é fornecer dados que serão exibidos nas telas; receber dados enviados nas requisições; executar tarefas de acordo com as ações dos usuários; validar dados. E o que seria a Fervlet? uma servlet que gerencia o ciclo de vida do processamento de requisições de aplicações web que estão utilizando JSF para construir a interface com o usuário. Elas são responsáveis por receber as requisições da View, redirecioná-las para os Managed Beans do Model e respondê-las. Devemos configurá-la no descritor de implantação web.xml das aplicações web – ele faz a conexão entre Web Container e Web Application. Após isso, devemos configurar também o arquivo de configuração faces-config.xml, referente a uma aplicação específica que utiliza JSF. Ele é responsável por descrever e configurar elementos e subelementos que compõem o projeto, tais como conversores, managed beans validadores, fluxo da comunicação, configurações de localização e o mapeamento da navegação – ademais, ele faz a conexão entre View e Controller. Vamos resumir essa diferença entre esses dois arquivos? O faces-config.xml é mais específico, tratando de regras e mapeamento de navegação; definição de managed beans; configuração de detalhes de internacionalização; entre outros. Já o web.xml é mais genérico, tratando da especificação de detalhes de segurança; configuração de páginas de erro; mapeamento e declaração de servlets e filtros; configuração de parâmetros de inicialização; entre outros. faces-config.xml têm sido rapidamente substituído por annotations – novidade do JSF 2.0. Essa versão trouxe: e a facelets; utilização de templates para a aplicação; simplificação do desenvolvimento de componentes; e nativo a Ajax (f:ajax); navegação implícita e condicional; e ao Método GET; adição de novos escopos (Flash e View); composição de componentes customizados; etc. 16712855225

O JSF1 tinha os escopos Request (Default), Session e Application. A partir do JSF2, ganhamos o View, Flash, None e Custom. O @RequestScoped vive o tempo do ciclo de uma Requisição/Resposta HTTP; o @ViewScoped vive enquanto houver interação com a mesma view, i.e., enquanto persistir a mesma página; o @ApplicationScoped persiste toda a duração da aplicação web.

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 94 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

O @SessionScoped persiste o tempo que durar uma sessão, i.e., até invocar um método inválido ou o tempo acabar (lembrar de um carrinho de compras); o @FlashScoped dura um redirecionamento de página; o @NoneScoped indica que o escopo não está definido para a aplicação; por fim, o @CustomScoped é um escopo personalizado.

16712855225

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 95 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

Agora eu queria falar uma curiosidade interessante! Existe um Padrão de Projeto Java EE chamado Front Controller. Nesse padrão, todas as requisições do usuário são recebidas pelo mesmo componente. Dessa forma, tarefas que devem ser realizadas em todas as requisições podem ser implementadas por esse componente – evitando repetição de código e facilitando a manutenção do sistema. No JSF, esse componente é o Fervlet! Como mostra a imagem da estrutura geral de uma Aplicação JSF, o processamento de uma requisição enviada por um navegador começa na Fervlet. Observem que ela controla a execução das seis etapas do ciclo de vida, interagindo com o Model (Entidades e repositórios) e com as Views (Telas, Templates, etc). Os Managed Beans estão à disposição da Fervlet durante todo o processamento da requisição. Nas etapas Render Response e Restore View, a ela aciona os Managed Beans para recuperar os dados que devem ser usados na construção ou reconstrução da árvore de componentes. Na etapa Update Model, a Fervlet armazena nos Managed Beans os dados já convertidos e validados. Na etapa Invoke Application, a Fervlet dispara um método em um Managed Bean responsável pelo processamento da regra de negócio correspondente à requisição atual. Todas as regras de negócio são implementadas no modelo, que também istra os dados da aplicação. Os Managed Beans acionam o modelo para executar regras de negócio, recuperar dados istrados pelo modelo, etc. As telas da aplicação são definidas na camada de visão. A Fervlet a essa camada toda vez que necessita construir ou reconstruir a árvore de componentes de uma determinada tela. Isso ocorre nas etapas Restore View e Render Response. Aliás, vamos ver agora rapidamente – porque não cai muuuuito em provas – o ciclo de vida do JSF! Ele é apresentado na imagem abaixo: 16712855225

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 96 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

Pelo fato do framework JSF ser talvez uma evolução da linguagem JSP, o ciclo de vida do JSF é parecido com o do JSP. Por exemplo, quando o cliente faz uma Requisição HTTP para a página, o servidor responde com a página traduzida para HTML. Porém, ele é dividido em múltiplas fases, apresentando um modelo de componentes de interface com usuário mais sofisticado.  Restore View: restauram-se os objetos e estruturas de dados que representam a visão. Claro, se essa for a primeira visita à página, deve-se criar a visão. Quando o JSF cria e renderiza uma página JSF, ele cria objetos de interface com o usuário para cada componente da visão. Os componentes são armazenados em uma árvore de componentes e o estado da visão é salvo para requisições futuras.  Apply Request Values: qualquer dado que for enviado como parte da requisição é ado para os componentes apropriados. Essas visões atualizam seus estados com os valores dos dados. Dados podem vir de formulários, cookies enviados com a requisição ou por meio de cabeçalhos da requisição. Alguns dados são validados e, se houver erro, são adicionados à Fervlet.  Process Validation: os dados que foram submetidos com o formulário são validados (se já não o foram anteriormente). Assim como na fase anterior, isso ainda não atualiza os objetos de negócio na aplicação. Isso ocorre porque, se a Aplicação atualizar os objetos de negócio junto com a validação dos dados e uma parte da validação falhar, o modelo será atualizado com um estado inválido.  Update Model Values: após todas essas validações terminarem, os objetos de negócio que criam a aplicação são atualizados com os dados validados da requisição. Ademais, se qualquer um dos dados precisar ser convertido em um formato diferente para atualizar o modelo (Ex: String para Data), a conversão ocorrerá nessa fase. 16712855225

 Invoke Application: durante essa fase, os métodos de ação de qualquer botão ou link que foi ativado serão chamados. Além disso, todos os eventos que foram gerados durante as fases anteriores e que ainda não tenham sido manipulados são ados para a Aplicação Web para que ela possa concluir qualquer outro processamento da requisição que seja necessário.  Render Response: os Componentes UI de resposta são renderizados e a resposta é enviada para o cliente. O estado dos componentes é salvo de modo que a árvore de componente possa ser restaurada quando o cliente enviar outra Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 97 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

requisição. Em suma, essa fase renderizará a página de resposta requisitada pelo usuário. Lembrando que FacesContext (javax.faces.context) é o objeto utilizado para representar todas as informações de contexto associadas ao processamento da requisição de entrada e à criação da resposta correspondente. Ela é criada pela Fervlet, que é executada antes do início do ciclo de vida de processamento de requisições e é responsável por gerenciar a execução das etapas do ciclo de vida. Vamos falar um pouquinho sobre Component Binding! O que é isso, professor? Cara, essa é uma nova característica da tecnologia JSF que permite associar componentes de uma view e controlar todos os aspectos desse componente. Como assim? Algumas vezes, nós temos um componente visual que nos oferece alguma informação (Ex: um mapa em que o usuário escolhe estado). Bem, em geral, nós necessitamos apenas do valor, i.e., o usuário escolheu ‘DF’. O Component Binding permite que nós tenhamos o ao componente como um todo. Para que? Nós, eventualmente, podemos querer manipular o componente dinamicamente, por exemplo. Assim, é possível ar métodos do componente – se você quiser, pode até mudar seu comportamento. FACELETS

Pessoal, tem uma característica do JSF que é extremamente importante: Facelets! Trata-se de uma linguagem de declaração de página poderosa, apesar de leve. Antigamente, utiliza-se a tecnologia JSP como camada de visão do JSF, porém ele não a todas as características disponíveis na Plataforma Java EE – sendo considerada obsoleta para JSF! 16712855225

Facelets é uma parte da especificação JSF e também a tecnologia de apresentação preferida para construir aplicações JSF – substituindo JSP. Ela a todos os componentes de UI do JSF e constrói Árvores de Componentes; e Views (utilizando Templates HTML). Um tipo especial de template são os Componentes Compostos, que agem como um componente. Ademais, é bom destacar algumas características:    

Utilização de XHTML para criação de Páginas Web; e a Facelets Tag Libraries (além do JSFTL e JSTL); e a Linguagens de Expressão (Expression Languages); e a templates para componentes e páginas.

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 98 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

Em suma, a utilização de Facelets reduz o tempo e esforço gastos no desenvolvimento e implantação. Em geral, Facelets Views são criadas com Páginas HTML e XHTML (criadas em conformidade com Transation DTD). Além disso, elas utilizam linguagens de expressão para referenciar propriedades e Managed Beans. Para desenvolver uma Aplicação Facelets simples, é necessário:     

Desenvolver um Managed Bean; Criar páginas usando tags de componentes; Definir a navegação das páginas; Mapear a instância javax.faces.webapp.Fervlet; Adicionar declarações de Managed Beans.

FILTROS

Em JSF, um Filtro (do inglês, Filter) é um objeto capaz de realizar tarefas de filtragem tanto na requisição de um recurso (Servlet ou conteúdo estático), ou na resposta desse recurso, ou ambos para tal, eles utilizam o método doFilter. Todo Filtro possui o a um objeto FilterConfig, do qual ele pode obter seus parâmetros de inicialização; e a uma ServletContext, do qual ele pode carregar recursos. Os Filtros são configurados nos descritores de implantação de uma Aplicação Web. Ele possibilita o gerenciamento de todas as Requisições HTTP do Servidor, capaz de filtrar o endereço que está sendo ado. Dessa forma, quando um usuário ar uma determinada URL proibida, pode-se imediatamente redirecioná-lo para outro endereço, antes que a resposta seja dada ao cliente. Para tal, deve-se implementar a interface javax.servlet.Filter! Existem dezenas de aplicações para filtros, além da mostrada acima. Podemos ter filtros de autenticação; filtros de log e auditoria; filtros de conversão de imagens; filtros de compressão de dados; filtros de criptografia; filtros de tokenização; filtros XSLT; filtros que acionam eventos de o a recursos, entre outros. 16712855225

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 99 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

(CESPE - 2009 - SECONT-ES - Auditor do Estado – Tecnologia da Informação O JSF é um framework web embasado em interface gráfica, capaz de renderizar componentes e manipular eventos em aplicações web no padrão Java EE, no qual os componentes JSF são orientados a eventos. O JSF fornece, ainda, mecanismos para conversão, validação, execução de lógica de negócios e controle de navegação. Comentários: Primeiro, uma API para representar componentes e gerenciar seus estados; manipular eventos; realizar validação server-side; converter dados; definir navegação de páginas; ar internacionalização e ibilidade; e prover extensibilidade. Segundo, glibs (bibliotecas de tags) para adicionar componentes a páginas web e conectar componentes a objetos server-side. Conforme vimos em aula, a questão está perfeita! Gabarito: C (CESPE - 2010 - TRE-BA - Analista Judiciário - Análise de Sistemas Entre os itens que o padrão Java Server Faces (JSF) utiliza, estão os componentes, os eventos e a navegabilidade. 16712855225

Comentários: Primeiro, uma API para representar componentes e gerenciar seus estados; manipular eventos; realizar validação server-side; converter dados; definir navegação de páginas; ar internacionalização e ibilidade; e prover extensibilidade. Segundo, taglibs (bibliotecas de tags) para adicionar componentes a páginas web e conectar componentes a objetos server-side. Conforme vimos em aula, a questão está perfeita! Gabarito: C Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 100 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

(CESPE - 2012 - ANAC - Analista istrativo - Área 4 A validação de dados de um componente pode ser uma das funções de um backing bean, em uma aplicação JSF. Comentários: As principais tarefas de um Managed Bean (ou Backing Beans) é fornecer dados que serão exibidos nas telas; receber dados enviados nas requisições; executar tarefas de acordo com as ações dos usuários; validar dados. E o que seria a Fervlet? É uma servlet que gerencia o ciclo de vida do processamento de requisições de aplicações web que estão utilizando JSF para construir a interface com o usuário. Conforme vimos em aula, Backing Beans são Managed Beans, e essa pode ser uma de suas funções. Gabarito: C (CESPE - 2013 - SERPRO - Analista - Desenvolvimento de Sistemas O JSF provê uma linguagem de expressão exclusiva para o a objetos armazenados em bancos de dados. Comentários: Em suma, a utilização de Facelets reduz o tempo e esforço gastos no desenvolvimento e implantação. Em geral, Facelets Views são criadas com Páginas HTML e XHTML (criadas em conformidade com Transationl DTD). Além disso, elas utilizam linguagens de expressão para referenciar propriedades e Managed Beans. Para desenvolver uma Aplicação Facelets simples, é necessário: 16712855225

Conforme vimos em aula, ela serve para referenciar propriedades e Managed Beans. Gabarito: E (CESPE - 2010 – TCU – Analista de Sistemas) No desenvolvimento de conteúdos para apresentação, o uso de facelets traz vantagens em relação ao uso de JSP. Uma delas é a maior modularidade, com o uso de templates e componentes compostos (composite). Comentários: Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 101 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

Facelets é uma parte da especificação JSF e também a tecnologia de apresentação preferida para construir aplicações JSF – substituindo JSP. Ela a todos os componentes de UI do JSF e constrói Árvores de Componentes; e Views (utilizando Templates HTML). Um tipo especial de template são os Componentes Compostos, que agem como um componente. Ademais, é bom destacar algumas características: Conforme vimos em aula, ela faz uso de Templates e Componentes Compostos, que aumentam a modularidade e a reusabilidade. Gabarito: C (CESPE - 2012 – TJ/AL – Analista de Sistemas – B) Em um aplicativo Facelets, a tag f:ajax adiciona funcionalidades Ajax que necessitam de adicionais de codificação e configuração para as componentes de interface do usuário. Comentários:

faces-config.xml têm sido rapidamente substituído por annotations – novidade do JSF 2.0. Essa versão trouxe: e a facelets; utilização de templates para a aplicação; simplificação do desenvolvimento de componentes; e nativo a Ajax (f:ajax); navegação implícita e condicional; e ao Método GET; adição de novos escopos (Flash e View); composição de componentes customizados; etc. Conforme vimos em aula, o e é nativo. Logo, não é necessário codificação e configuração adicionais: “By using the f:ajax tag along with another standard component in a Facelets application. This method adds Ajax functionality to any UI component without additional coding and configuration”. 16712855225

Gabarito: E (CESPE - 2012 – TJ/RO – Analista de Sistemas – E) JNDI, parte do projeto de JSF, utiliza XHTML como tecnologia de apresentação dos dados, possibilitando a separação entre as camadas de negócio e de controle. Comentários: Em suma, a utilização de Facelets reduz o tempo e esforço gastos no desenvolvimento e implantação. Em geral, Facelets Views são criadas com Páginas HTML e XHTML

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 102 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

(criadas em conformidade com Transationl DTD). Além disso, elas utilizam linguagens de expressão para referenciar propriedades e Managed Beans. Para desenvolver uma Aplicação Facelets simples, é necessário: Conforme vimos em aula, a questão trata – na verdade – das Facelets. Gabarito: E (CESPE - 2013 – RM – Analista de Sistemas) Facelets são utilizadas para desenvolver visões (views) JavaServer Faces (JSF) com linguagem HTML e XHTML, em conformidade com a transitional document type definition, sendo, ainda, compatível com a biblioteca de tag JSF. Comentários: Em suma, a utilização de Facelets reduz o tempo e esforço gastos no desenvolvimento e implantação. Em geral, Facelets Views são criadas com Páginas HTML e XHTML (criadas em conformidade com Transationl DTD). Além disso, elas utilizam linguagens de expressão para referenciar propriedades e Managed Beans. Para desenvolver uma Aplicação Facelets simples, é necessário: Conforme vimos em aula, a questão está perfeita! Gabarito: C (CESPE 0 – TCU – Analista de Sistemas) Para ar a construção de aplicações com Ajax e JSF, recomenda-se aos desenvolvedores de páginas que usem a tag , relacionada ao processamento de pedidos http assíncronos. 16712855225

Comentários:

faces-config.xml têm sido rapidamente substituído por annotations – novidade do JSF 2.0. Essa versão trouxe: e a facelets; utilização de templates para a aplicação; simplificação do desenvolvimento de componentes; e nativo a Ajax (f:ajax); navegação implícita e condicional; e ao Método GET; adição de novos escopos (Flash e View); composição de componentes customizados; etc. Conforme vimos em aula, a questão está perfeita! Gabarito: C Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 103 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

10. (CESPE 0 – MPU – Analista de Sistemas) Uma aplicação web deve prover mecanismos de validação de dados. O JSF fornece vários validadores de dados padrões que podem ser utilizados no lado do cliente (client-side). Comentários: Pessoal, o JSF oferece diversos validadores embutidos para validar seus Componentes UI – essa validação ocorre no lado do servidor. Eles podem ser invocados a partir de sua tag específica e podem validar o tamanho de um campo, tipo de entrada, range de um valor numérico, expressão regular, entre outros. É possível, inclusive, criar o seu próprio validador customizado. Conforme vimos em aula, ocorre do lado servidor! Gabarito: E 11. (CESPE - 2014 - -SE - Analista Judiciário - Análise de Sistemas Antes de uma aplicação web desenvolvida nos moldes da JSF executar sua primeira página web, uma instância Fervlet é executada, a fim de gerenciar as requisições dessa aplicação. Comentários: Lembrando que FacesContext (javax.faces.context) é o objeto utilizado para representar todas as informações de contexto associadas ao processamento da requisição de entrada e à criação da resposta correspondente. Ela é criada pela Fervlet, que é executada antes do início do ciclo de vida de processamento de requisições e é responsável por gerenciar a execução das etapas do ciclo de vida. 16712855225

Conforme vimos em aula, a questão está perfeita! Gabarito: C 12. (CESPE - 2014 - -SE - Analista Judiciário - Análise de Sistemas Em aplicações web nos padrões da JSF, é possível utilizar recursos Ajax para criar páginas dinâmicas, como, por exemplo, por meio da tag f:ajax, conforme apresentado na sintaxe abaixo. h inputText value

Prof. Diego Carvalho

bean message

>

www.estrategiaconcursos.com.br

Pág. 104 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

Comentários:

faces-config.xml têm sido rapidamente substituído por annotations – novidade do JSF 2.0. Essa versão trouxe: e a facelets; utilização de templates para a aplicação; simplificação do desenvolvimento de componentes; porte nativo a Ajax (f:ajax); navegação implícita e condicional; e ao Método GET; adição de novos escopos (Flash e View); composição de componentes customizados; etc. Conforme vimos em aula, a questão está perfeita! Gabarito: C 13. (CESPE - 2014 - -SE - Analista Judiciário - Análise de Sistemas É possível utilizar XHTML no desenvolvimento de facelets para criar páginas web compatíveis com a JSF (JavaServer Faces) para apresentação dos dados. Na versão Java EE 7, essa forma de apresentação é mais indicada que a JSP (JavaServer Pages), uma vez que esta não a todos os novos recursos da versão Java EE 7. Comentários: Pessoal, tem uma característica do JSF que é extremamente importante: Facelets! Trata-se de uma linguagem de declaração de página poderosa, apesar de leve. Antigamente, utiliza-se a tecnologia JSP como camada de visão do JSF, porém ele não a todas as características disponíveis na Plataforma Java EE – sendo considerada obsoleta para JSF! Conforme vimos em aula, a questão está perfeita! 16712855225

Gabarito: C 14. (CESPE 5 – TCU - Analista de Sistemas A partir da interpretação do trecho JSF (JavaServer Faces), versão 2, no código a seguir, verifica-se que uma providência válida é configurar o managed-bean clientePage no arquivo facesconfig.xml.

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 105 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04 action {clientePage.cliente} />


Comentários: O faces-config.xml é mais específico, tratando de regras e mapeamento de navegação; definição de managed beans; configuração de detalhes de internacionalização; entre outros. Já o web.xml é mais genérico, tratando da especificação de detalhes de segurança; configuração de páginas de erro; mapeamento e declaração de servlets e filtros; configuração de parâmetros de inicialização; entre outros. Conforme vimos em aula, a questão está perfeita! É possível declarar managed beans por meio de anotações ou por meio do arquivo de configuração faces-config.xml. Gabarito: C 15. (CESPE 3 – INPI - Analista Judiciário - Análise de Sistemas Quando registrado em JSF 2 (Java Server Faces), um managed bean permanece no escopo de session. Comentários: JSF1 tinha os escopos Request (Default), Session e Application. A partir do JSF2, ganhamos o View, Flash, None e Custom. O @RequestScoped vive o tempo do ciclo de uma Requisição/Resposta HTTP; o @ViewScoped vive enquanto houver interação com a mesma view, i.e., enquanto persistir a mesma página; o @ApplicationScoped persiste toda a duração da aplicação web. No JSF2, o Escopo Request continua sendo o padrão (default)! 16712855225

Gabarito: E ACERTEI

Prof. Diego Carvalho

ERREI

www.estrategiaconcursos.com.br

Pág. 106 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

(FCC – 2013 – TRT/12 – Analista de Sistemas) Considere as instruções abaixo encontradas em um arquivo de uma aplicação que utiliza JSF: <managed-bean> <managed-bean-name>func <managed-bean-class>bean.Funcionario <managed-bean-scope>session

Essas instruções indicam a existência de um bean gerenciado (classe Funcionario.java) no pacote bean que poderá ser referenciado nas páginas JSP por meio da palavra func. O arquivo correto no qual essas instruções são colocadas é o: a) context.xml. b) web-inf.xml. c) web.xml. d) faces-config.xml. e) config-bean.xml. Comentários: Elas são responsáveis por receber as requisições da View, redirecioná-las para os Managed Beans do Model e respondê-las. Devemos configurá-la no descritor de implantação web.xml das aplicações web – ele faz a conexão entre Web Container e Web Application. Após isso, devemos configurar também o arquivo de configuração faces-config.xml, referente a uma aplicação específica que utiliza JSF. 16712855225

Conforme vimos em aula, o responsável é o faces-config.xml. Gabarito: D (FCC - 2012 - -PE - Programador de computador Em uma aplicação que utiliza JSF, para configurar o fluxo de comunicação presente na servlet de controle, é utilizado um arquivo de configuração:

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 107 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

a) webfaces.xml. b) actionform.xml. c) faces-config.xml. d) webcontext.xml. e) serverconfig.xml. Comentários: Elas são responsáveis por receber as requisições da View, redirecioná-las para os Managed Beans do Model e respondê-las. Devemos configurá-la no descritor de implantação web.xml das aplicações web – ele faz a conexão entre Web Container e Web Application. Após isso, devemos configurar também o arquivo de configuração faces-config.xml, referente a uma aplicação específica que utiliza JSF. Ele é responsável por descrever e configurar elementos e subelementos que compõem o projeto, tais como conversores, managed beans, validadores, fluxo da comunicação, configurações de localização e o mapeamento da navegação – ademais, ele faz a conexão entre View e Controller. Vamos resumir essa diferença entre esses dois arquivos? Conforme vimos em aula, trata-se do faces-config.xml. Gabarito: C (FCC – 2013 – TRT/9 – Analista de Sistemas) Uma aplicação utilizando o framework JSF e a IDE NetBeans gera automaticamente dois componentes essenciais assim descritos: I. É responsável por receber requisições dos componentes View do MVC, redirecioná-las para os beans gerenciados (managed beans) do componente Model do MVC e responder a essas requisições. 16712855225

II. É o arquivo principal de configuração de uma aplicação web que utiliza o framework JSF. É responsável por descrever os elementos e sub-elementos que compõem o projeto, tais como as regras de navegação, beans gerenciados, configurações de localização etc. As descrições I e II referem-se, respectivamente, aos componentes: a) servlet Controller.java e ao arquivo faces_config.xml Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 108 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

b) FaceletServlet e ao arquivo web_config.xml. c) Fervlet e ao arquivo faces-config.xml. d) servlet Controller e ao arquivo web-config.xml. e) servlet Facelet e ao arquivo web.xml. Comentários: Elas são responsáveis por receber as requisições da View, redirecioná-las para os Managed Beans do Model e respondê-las. Devemos configurá-la no descritor de implantação web.xml das aplicações web – ele faz a conexão entre Web Container e Web Application. Após isso, devemos configurar também o arquivo de configuração faces-config.xml, referente a uma aplicação específica que utiliza JSF. Ele é responsável por descrever e configurar elementos e subelementos que compõem o projeto, tais como conversores, managed beans, validadores, fluxo da comunicação, configurações de localização e o mapeamento da navegação – ademais, ele faz a conexão entre View e Controller. Vamos resumir essa diferença entre esses dois arquivos? Conforme vimos em aula, o primeiro é o Fervlet e o segundo faces-config.xml. Gabarito: C (FCC – 2012 – TST – Analista de Sistemas) O framework JavaServer Faces (JSF) é utilizado no desenvolvimento de aplicações web que utiliza o design pattern MVC. O JSF: a) disponibiliza controles pré-construídos e código para manipular eventos, estimulando o uso de código Java convencional no componente View do MVC. 16712855225

b) recebe requisições dos componentes da View do MVC, através do servlet FaveServerServlet. c) armazena os mapeamentos das ações e regras de navegação em projetos JSF nos arquivos WEB-INF.xml e FACES-CONFIG.xml. d) possui bibliotecas que am Ajax (Asynchronous JavaScript And XML). e) provê um conjunto de tags limitado para criar somente páginas HTML/XHTML.

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 109 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

Comentários: Ora, nós prezamos pela separação de responsabilidades! Logo, esse código ficará em uma classe de modelo e, jamais, na visão. Os Managed Beans são os objetos que intermediam a comunicação entre a visão e o modelo. Eles são registrados no descritor de implantação (ou por meio de annotations) e tem seu ciclo de vida controlado e gerenciado pelo próprio JSF! (a) Conforme vimos em aula, está incorreto, i.e., é desestimulado colocar código convencional (regras de negócio) na View, mas – sim – no Model. Elas são responsáveis por receber as requisições da View, redirecioná-las para os Managed Beans do Model e respondê-las. Devemos configurá-la no descritor de implantação web.xml das aplicações web – ele faz a conexão entre Web Container e Web Application. Após isso, devemos configurar também o arquivo de configuração faces-config.xml, referente a uma aplicação específica que utiliza JSF. (b) Conforme vimos em aula, de fato recebe requisições dos componentes da View, no entanto o nome da servlet é Fervlet. Elas são responsáveis por receber as requisições da View, redirecioná-las para os Managed Beans do Model e respondê-las. Devemos configurá-la no descritor de implantação web.xml das aplicações web – ele faz a conexão entre Web Container e Web Application. Após isso, devemos configurar também o arquivo de configuração faces-config.xml, referente a uma aplicação específica que utiliza JSF. Ele é responsável por descrever e configurar elementos e subelementos que compõem o projeto, tais como conversores, managed beans, validadores, fluxo da comunicação, configurações de localização e o mapeamento da navegação – ademais, ele faz a conexão entre View e Controller. Vamos resumir essa diferença entre esses dois arquivos? 16712855225

(c) Conforme vimos em aula, o mapeamento de ações e regras de navegação é responsabilidade somente do faces-config.xml.

faces-config.xml têm sido rapidamente substituído por annotations – novidade do JSF 2.0. Essa versão trouxe: e a facelets; utilização de templates para a aplicação; simplificação do desenvolvimento de componentes; e nativo a Ajax (f:ajax); navegação implícita e condicional; e ao Método GET; adição de novos escopos (Flash e View); composição de componentes customizados; etc. Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 110 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

(d) Conforme vimos em aula, a questão está perfeita! O Ajax não só é ado, esse e é nativo. Galera, ele provê um modelo de programação bem definido e robusto, além de fornecer diversas taglibs – inclusive o desenvolver pode criar sua própria taglib. Essas taglibs contêm manipuladores de tags que implementam os componentes de tags. Essas características facilitam significativamente o peso da construção e manutenção de Aplicações Web com interfaces de usuário server-side. (e) Conforme vimos em aula, não se trata de um conjunto limitado de tags. É possível criar suas próprias tags! Gabarito: D (FCC – 2012 – TST – Analista de Sistemas) Para criar as páginas XHTML de uma aplicação JSF é possível utilizar um conjunto de bibliotecas de tags JSF. Algumas dessas bibliotecas são HTML, Core e Facelets. Considere os fragmentos de códigos abaixo, que utilizam tags dessas bibliotecas:

16712855225

A correlação correta entre o fragmento de código e a biblioteca de tags utilizada é: a) I-Facelets, II-HTML e III-Core.

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 111 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

b) I-Core, II-Facelets, e III-HTML. c) I-HTML, II-Core, e III-Facelets. d) I-HTML, II-Facelets, e III-HTML. e) I-HTML, II-HTML, e III-Core. Comentários: O Modelo de Componentes JSF define três taglibs:  HTML: possui componentes que representam diversos elementos HTML. o Namespace: xmlns:h=”http://java.sun.com/jsf/html”  CORE: responsável por internacionalização, validação, conversão e outros. o Namespace: xmlns:f=”http://java.sun.com/jsf/core”  FACELETS: fornece tags para criar templates para aplicações web. o Namespace: xmlns: =”http://java.sun.com/jsf/facelets” Conforme vimos em aula, temos que olhar os namespaces. Dessa forma, o primeiro fragmento é referente a FACELETS; o segundo fragmento é referente a HTML; e o terceiro referente a CORE. Gabarito: A (FCC - 2012 - -PE - Analista Judiciário - Análise de Sistemas No JSF, o componente Controller do MVC é composto por uma classe servlet, por arquivos de configuração e por um conjunto de manipuladores de ações e observadores de eventos. Essa servlet é chamada de: a) ControllerServlet. b) Facelet. c) HttpServlet. d) FacesConfig. e) Fervlet.

16712855225

Comentários: As principais tarefas de um Managed Bean (ou Backing Beans) é fornecer dados que serão exibidos nas telas; receber dados enviados nas requisições; executar tarefas de acordo com as ações dos usuários; validar dados. E o que seria a Fervlet? É uma servlet que gerencia o ciclo de vida do processamento de requisições de aplicações web que estão utilizando JSF para construir a interface com o usuário. Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 112 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

Conforme vimos em aula, trata-se da Fervlet. Gabarito: E (FCC - 2012 - TRE- - Analista Judiciário - Análise de Sistemas No ciclo de vida do Java Server Faces trata-se da fase na qual o componente deve primeiro ser criado ou recuperado a partir do FacesContext, seguido por seus valores, que são geralmente recuperados dos parâmetros de request e, eventualmente, dos cabeçalhos ou cookies gerados. Trata-se da fase: a) Restore View. b) Apply Request Values. c) Process Validation. d) Update Model Values. e) Invoke Application. Comentários:  Apply Request Values: qualquer dado que for enviado como parte da requisição é ado para os componentes apropriados. Essas visões atualizam seus estados com os valores dos dados. Dados podem vir de formulários, cookies enviados com a requisição ou por meio de cabeçalhos da requisição. Alguns dados são validados e, se houver erro, são adicionados à Fervlet. Conforme vimos em aula, trata-se da fase Apply Request Values. Gabarito: B 16712855225

(FCC - 2012 - TRT - 11ª Região (AM) - Técnico Judiciário - Tecnologia da Informação Sobre o framework JavaServer Faces é correto afirmar: a) A grande limitação do JSF é a dificuldade de integração com outros frameworks como Spring, JPA e EJB. b) Expression Language (EL) é a linguagem utilizada para apresentação de conteúdo em aplicações que utilizam JSF. Sua principal limitação é a impossibilidade de ar valores e métodos em beans gerenciados.

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 113 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

c) Facelets é uma parte da especificação JSF e também a tecnologia para implementar as regras de negócio em aplicações que utilizam JSF. d) Disponibiliza as bibliotecas de tags core e html para criar as páginas que compõem a interface do usuário. e) Define uma única forma para realizar a validação de dados em formulários JSP, por meio da implementação de uma classe de validação que estende a interface Validator. Comentários: (a) Na verdade, está na Camada Web, facilmente integrável com Spring, JPA e EJB; (b) Na verdade, é facilmente possível; (c) Na verdade, Facelets tratam da camada de visão e, não, de regras de negócio; (d) Perfeito, basta utilizar várias taglibs prontas ou criá-las; (e) Na verdade, existem diversas formas. Gabarito: D (FCC - 2011 - TRE-AP - Técnico Judiciário - Programação de Sistemas O JSF extrai todos os valores digitados pelo usuário e guarda esse valor nos seus respectivos componentes. Se o valor digitado não coincidir com o componente, um erro vai ser adicionado na classe FacesContext e será mostrado na fase Render Response Phase. No ciclo de vida do JSF trata-se de um evento típico da fase: a) Process Validations Phase. b) Restore View Phase. c) Apply Request Values Phase. d) Update Model Values Phase. e) Invoke Application Phase.

16712855225

Comentários:  Apply Request Values: qualquer dado que for enviado como parte da requisição é ado para os componentes apropriados. Essas visões atualizam seus estados com os valores dos dados. Dados podem vir de formulários, cookies enviados com

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 114 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

a requisição ou por meio de cabeçalhos da requisição. Alguns dados são validados e, se houver erro, são adicionados à Fervlet. Conforme vimos em aula, trata-se da fase Apply Request Values. Gabarito: C 10. (FCC - 2011 - TRE-RN - Técnico Judiciário - Programação de Sistemas No ciclo de vida do JSF copiar os parâmetros de requisição para valores submetidos pelos componentes, é a tarefa típica da fase: a) Restaurar Visão (Restore view). b) Invocar aplicação (Invoke application). c) Aplicar valores de requisição (Apply request values). d) Processar validações (Process validation). e) Atualizar valores do modelo (Update model values). Comentários:  Apply Request Values: qualquer dado que for enviado como parte da requisição é ado para os componentes apropriados. Essas visões atualizam seus estados com os valores dos dados. Dados podem vir de formulários, cookies enviados com a requisição ou por meio de cabeçalhos da requisição. Alguns dados são validados e, se houver erro, são adicionados à Fervlet. Conforme vimos em aula, trata-se da fase Apply Request Values. Gabarito: C 16712855225

11. (FCC - 2010 - TRT - 22ª Região (PI) - Técnico Judiciário - Tecnologia da Informação É um framework MVC utilizado no desenvolvimento de aplicações para a internet de forma visual, que utiliza o recurso de arrastar e soltar os componentes na tela para definir suas propriedades: a) Enterprise JavaBeans. b) JavaServer Faces. c) Java 2 Enterprise Edition. d) Servlets. e) Java Server Pages.

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 115 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

Comentários: O resultado foi a criação do framework Struts! Ele era uma implementação da Arquitetura MVC para desenvolvimento de páginas web dinâmicas! Bacana? Esse framework fez tanto sucesso que a Sun Microsystems junto com uma comunidade de desenvolvedores resolveu criar uma especificação padronizada baseada nesse framework, denominado Java Server Faces (JSF). Conforme vimos em aula, trata-se do JSF! Gabarito: B ACERTEI

ERREI

16712855225

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 116 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

(FGV - 2013 – ALEMA - Analista de Sistemas Com relação à especificação Java Server Faces (JSF), assinale V para a afirmativa verdadeira e F para a falsa. ( ) Visa substituir a especificação Java Server Pages. ( ) Java Server Faces são usadas como uma fachada para Servlets e Java Server Pages. ( ) Define um framework MVC (Model View Controler) para aplicações Web. As afirmativas são, respectivamente, a) F, F e V. b) F, V e V. c) V, F e F. d) V, V e F. e) F, V e F. Comentários: Facelets é uma parte da especificação JSF e também a tecnologia de apresentação preferida para construir aplicações JSF – substituindo JSP. Ela a todos os componentes de UI do JSF e constrói Árvores de Componentes; e Views (utilizando Templates HTML). Um tipo especial de template são os Componentes Compostos, que agem como um componente. Ademais, é bom destacar algumas características: 16712855225

(F) Conforme vimos em aula, Facelets vieram para substituir JSP e, não, JSF! Essa eu vou explicar melhor, porque sempre me perguntar: se eu afirmar que o Facebook visava substituir o MSN, isso é certo ou errado? Errado, ele está em um contexto muito maior; uma de suas funcionalidades (chat) veio de fato a substituir o MSN! JSF é um framework imenso, com centenas de funcionalidades. Ora, eu não

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 117 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

posso afirmar que ele visa substituir JSP! Na verdade, uma de suas funcionalidades vem substituindo JSP, mas não o JSF como um todo. (F) Não, esse item não faz nenhum sentido. O resultado foi a criação do framework Struts! Ele era uma implementação da Arquitetura MVC para desenvolvimento de páginas web dinâmicas! Bacana? Esse framework fez tanto sucesso que a Sun Microsystems junto com uma comunidade de desenvolvedores resolveu criar uma especificação padronizada baseada nesse framework, denominado Java Server Faces (JSF). (V) Perfeito, implementa o padrão MVC! Gabarito: A ACERTEI

ERREI

16712855225

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 118 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

LISTA DE EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS) JAVA EE (CESPE – – INMETRO – Analista de Sistemas) São exemplos de tipos de componentes de software reusáveis desenvolvidos na plataforma JEE: JSP (Java Server Page); biblioteca de tags; Servlet; EJB. O grau de reúso provido por esses componentes, EJBs e JSPs, é usualmente superior a bibliotecas de TAG. (CESPE – – SERPRO – Analista de Sistemas) A tecnologia Enterprise JavaBeans (EJB) é uma arquitetura de componentes do tipo cliente que atua na plataforma J2EE. (CESPE - 2010 – TCU – Auditor Federal de Controle Externo) A web profile da plataforma JEE apresenta, em relação ao perfil application server definido em edições anteriores da plataforma Java, as seguintes vantagens: fornece e para POJOs (Plain Old Java Objects) e Annotations; possui modelo de empacotamento de componentes mais simples; a configuração dos seus descritores XML (extensible markup language) é mais fácil; é aderente ao padrão SOA. (CESPE - 2010 – TRE/MT – Analista Judiciário – Tecnologia da Informação – A) Clientes J2EE são necessariamente páginas web dinâmicas que normalmente não fazem os a banco de dados, nem executam regras de negócio complexas. (CESPE - 2010 – TRE/MT – Analista Judiciário – Tecnologia da Informação – D) Um componente J2EE é uma unidade funcional de software autocontida, escrito na linguagem de programação Java e executado exclusivamente em servidores. 16712855225

(CESPE - 2011 – PREVIC – Analista de Sistemas) Em uma aplicação multicamadas na plataforma Java EE, servlets, JavaServer Faces e JSP consistem em tecnologias utilizadas na camada web. (ESAF – 2012 – CGU – Analista de Finanças e Controle) Os níveis da plataforma J2EE são: a) Patrocinador. Web. Negócios. Sistemas de Computação Corporativos. b) Cliente. Web. Negócios. Sistemas de Informação Corporativos. c) Cliente. Interno. Externo. Negócios.

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 119 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

d) Fornecedor. Web. Político. Sistemas de Informação Camada. e) Cliente. Stakeholders. Negócios. Background corporativo. (CESGRANRIO – 2008 – BNDES – Analista de Sistemas) Uma aplicação empresarial contendo componentes EJB e módulos web deverá ser publicada em um servidor de aplicações compatível com J2EE. No contexto do empacotamento dessa aplicação para publicação (deploy), é correto afirmar que: a) não há como juntar componentes EJB e módulos web em uma mesma aplicação, pois deverão ser publicados separadamente. b) um arquivo EAR poderá conter arquivos WAR e JAR representativos dos módulos web e EJB. c) o tamanho do pacote, em bytes, sempre fica maior que o código original, em virtude do algoritmo empregado no empacotamento da aplicação em um arquivo EAR. d) módulos web não devem ser empacotados, pois isso inviabiliza seu o pela Internet. e) arquivos JAR servem apenas para empacotar componentes EJB. (FCC – 2011 – TRT/19 – Analista de Sistemas) A especificação Java EE define os seguintes componentes: I. Clientes da aplicação (Application Clients) e applets. II. Java Servlet, JavaServer Faces e JavaServer Pages. III. Enterprise Javabeans (EJB). 16712855225

Os componentes I, II e III rodam, respectivamente, em: a) cliente, cliente, servidor. b) servidor, cliente, servidor. c) cliente, servidor, servidor. d) servidor, cliente, cliente. e) cliente, servidor, cliente. 10. (FCC - 2011 - TRT - 1ª REGIÃO (RJ) - Analista Judiciário - Tecnologia da Informação) J2EE é uma plataforma de programação para servidores na Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 120 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

linguagem de programação Java, que integra uma série de especificações e containers, cada uma com funcionalidades distintas. Nesse contexto, é correto afirmar que são integrantes do J2EE: a) Servlets, Jcompany e JSP. b) JDBC, JSP, EJBs. c) EJBs, Servlets e JBoss. d) JDBC, Hibernate e JPA. e) JSP, JSF e Eclipse. 11. (FCC - 2010 - TRT - 8ª Região (PA e AP) - Analista Judiciário - Tecnologia da Informação) O Contêiner J2EE que fornece aos desenvolvedores o ambiente para rodar Java Server Pages (JSPs) e servlets é: a) Applet (Applet container). b) Enterprise Java Beans (EJB). c) Interface (Interface container). d) do cliente do aplicativo (Application client container). e) Web (Web container). 12. (FCC - 2010 - TCE- - Agente da Fiscalização Financeira - Informática - e de Web) São apenas tipos de componentes executados em servidores Web: a) Beans, Servlets e J2EE. b) JVM, Servlets e JSP. c) Beans, Servlets e JSP. d) Beans, Swing e JSP. e) Beans, Swing e JVM. 16712855225

13. (FCC - 2014 – TRT/2 – Analista de Sistemas) Um contêiner Java EE pode oferecer serviços como gestão de memória, ciclo de vida e estado de objetos, conexões, transações, serviços de nomes, segurança, tolerância a falhas, integração, clustering, alta disponibilidade, confiabilidade e web services. Um servidor Java EE completo disponibiliza dois tipos principais de contêiner, que são: a) Contêiner MVC e Contêiner EJB. b) Applet Container e Web Container. c) Contêiner Web e Contêiner EJB. d) Servlet Container e JSP Container. e) Application Client Container e Web Container. Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 121 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

14. (FCC – 2012 – TJ/PE – Analista de Sistemas) Sobre a plataforma Java EE 6, é correto afirmar: a) Simplifica a implantação sem a necessidade de descritores de implantação, com exceção do descritor de implantação exigido pela especificação servlet, o arquivo web.xml. b) Necessita do descritor de implantação ejb-jar.xml e entradas relacionadas aos web services no arquivo web.xml. c) Faz uso de anotações (annotations). Anotações são modificadores Java, semelhantes aos públicos e privados, que devem ser especificados nos arquivos de configuração XML. d) A especificação EJB 3, que é um subconjunto da especificação Java EE, define anotações apenas para o tipo bean. e) Anotações são marcados com um caracter # (cerquilha).

16712855225

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 122 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

LISTA DE EXERCÍCIOS COMENTADOS (CESPE) JSP (CESPE – 2013 – CNJ – Analista de Sistemas Como forma de incluir dinamismo em páginas JSP, é possível incluir blocos de código Java conhecidos como scriptlets. (CESPE – 2011 – PREVIC – Analista de Sistemas O container JSP provê uma lista de objetos instanciados, chamados de objetos implícitos. É através do objeto aplicação (application object) que são rastreadas as informações de um cliente específico entre múltiplas requisições. (CESPE – 2013 – TRT/10 – Analista de Sistemas Nas páginas JSP, combinam-se modelos estáticos, incluindo fragmentos de HTML ou XML, com o código para gerar conteúdo dinâmico e compilar páginas JSP dinamicamente em servlets, quando solicitado. (CESPE – 2013 – TRT/10 – Analista de Sistemas O JSP, cuja base é a linguagem de programação Java, tem portabilidade de plataforma, o que o permite ser executado em diversos sistemas operacionais, como o Windows e o Linux. (CESPE – 2013 – TRT/10 – Analista de Sistemas Para usar o JSP com Java embutido e algumas tags de marcação complexas, o programador tem de conhecer a fundo as complexidades do desenvolvimento de aplicações. (CESPE - 2013 - SERPRO - Analista - e Técnico Um scriptlet na tecnologia JSP (Java server pages) abrange todo o código entre "<#" e "#>". 16712855225

(CESPE - 2011 - CBM-DF - Oficial Bombeiro Militar Complementa - Informática O uso de Javabeans, o controle de transferência entre as páginas e o e independente de applets Java pelos browsers são possibilidades proporcionadas pela action tag da JSP. (CESPE - 2011 - PREVIC - Analista de Tecnologia da Informaç Em uma aplicação multicamadas na plataforma Java EE, servlets, JavaServer Faces e JSP consistem em tecnologias utilizadas na camada web.

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 123 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

LISTA DE EXERCÍCIOS COMENTADOS (FCC) JSP (FCC - 2012 - TRE- - Técnico Judiciário - Programação de Sistemas) As tags utilizadas em uma página JSP para importar classes de um pacote, habilitar o uso de bibliotecas de classes (por exemplo, JSTL) e incluir arquivos (por exemplo, JSP Fragments) são conhecidas como tags: a) b) c) d) e)

diretivas. de scriptlet. de declaração. de expressão. standard action.

(FCC - PGE- - Técnico Superior de Análise de Sistemas e Métodos) Blocos ou trechos de operações em código Java podem ser incluídos em uma página JSP por meio de: a) b) c) d) e)

diretiva page. diretiva include. comentário. taglib. scriptlet.

(FCC - 2010 - TRT - 20ª REGIÃO (SE) - Técnico Judiciário - Tecnologia da Informação) Na diretiva page, do JSP, podemos utilizar o atributo import que permite: 16712855225

a) configurar arquivos html. b) importar figuras. c) configurar pacotes. d) importar arquivos htm e) importar pacotes. (FCC - 2009 - TRT - 16ª REGIÃO (MA) - Técnico Judiciário - Tecnologia da Informação) Em JSP, a diretiva taglib define: a) uma biblioteca de tags para serem usadas na página.

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 124 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

b) um conjunto de classes importadas para serem usadas na página. c) uma nova tag para ser usada na página. d) uma biblioteca para ser inserida na página. e) um módulo logicamente coesivo. (FCC - 2008 - MPE-RS - Técnico em Informática - Área Sistemas) Para incluir blocos de código Java em uma página JSP utiliza-se a categoria de tags denominada: a) diretivas. b) expressões. c) declarações. d) scriptlets. e) comentários. (FCC - 2010 - METRÔ- - Analista - Tecnologia da Informação Na diretiva page, do JSP, utiliza-se o atributo import, que permite: a) configurar pacotes. b) importar arquivos html. c) importar pacotes. d) configurar arquivos html. e) importar figuras. (FCC - 2012 - TRE-SP - Técnico Judiciário - Programação de Sistemas No JavaServer Pages a tag <%=conteúdo %> é uma: a) Declaration tag. b) Directive tag. c) Scriplet tag. d) Action tag. e) Expression tag.

16712855225

(FCC - 2011 – TRE/AP – Analista de Sistemas – A) Em JSP o conceito de classes e objetos não leva em conta os princípios de proteção de dados tanto nas propriedades quanto nos métodos. (FCC - 2011 – TRE/AP – Analista de Sistemas – C) Em JSP pode-se chamar o construtor do objeto pai em qualquer parte do código e não há tratamento de exceções nos métodos nativos. Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 125 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

10. (FCC - 2010 – MPU – Analista de Sistemas O contêiner, que executa JSP, transforma o programa JSP em Servlet, assim, a expressão “<%= Math.Random()%>” se torna argumento para out.println(). 11. (FCC - 2011 – TRE/AP – Analista de Sistemas – A) Para que métodos estáticos de classes Java sejam executados a partir das funções da linguagem de expressão em JSP, é necessário que o nome da função coincida com o nome do método da classe Java. 12. (FCC - 2009 – TCE/SP – Analista de Sistemas – A) Quando se usa classes do tipo bean, não é necessário instanciar explicitamente um objeto da classe para poder ar seus métodos. A instância do objeto é criada pelo elemento especial: a) b) c) d) e)

<jsp:useJavaBean/> <jsp:useJava/> <jsp:useBean.Java/> <jsp:useJava.Bean/> <jsp:useBean/>

– TCE/ – Analista de Sistema Nas páginas dinâmicas escritas em 13. (FCC JSP, para declaração de atributos ou métodos, utilizam-se as tags: a) b) c) d) e)

<% %> <%! %> <%= %> <%-- --%> /* */ 16712855225

14. (FCC – 2012 – TST – Analista de Sistemas Páginas JavaServer Pages são páginas web: a) b) c) d) e)

que permitem combinar códigos Java, HTML estático, CSS, XML e JavaScript. escritas em Java, sem código HTML. Interpretadas e não compiladas. Transformadas em bytecode e executadas no cliente. Combinadas com servlets no desenvolvimento exclusivo de páginas estáticas.

15. (FCC – – TRT/3 – Analista de Sistemas) NÃO possui uma habilidade de armazenar e recuperar valores de atributos arbitrários o objeto implícito de JSP: Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 126 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

a) b) c) d) e)

Session. Request. Exception. Application. pageContext.

16. (FCC – 2007 – TRF/4 – Analista de Sistemas Uma ferramenta usada especificamente para gerar páginas dinâmicas de HTML, baseada em programação Java, é: a) b) c) d) e)

o WSDL. o DTD. a J. a XSL. o JSP.

17. (FCC – 2013 – ALERN – Analista de Sistemas) Em uma aplicação web desenvolvida utilizando a plataforma Java EE 6, há a seguinte classe Java: package dados; public class Cliente { private String nome; public Cliente() { } public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } }

16712855225

Em uma página JSP da mesma aplicação, para instanciar um objeto desta classe pode-se utilizar a tag: a) b) c) d) e)

<jsp:setBean name="cliente" class="dados.Cliente"/> <jsp:setBean id="cliente" class="dados.Cliente"/> <jsp:useBean name="cliente" class="dados.Cliente"/> <jsp:useBean id="cliente" class="dados.Cliente"/> <jsp:newInstance id="cliente" class= "dados.Cliente"/>

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 127 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

18. (FCC - 2012 - MPE-PE - Analista Ministerial - Informática Em uma aplicação web Java que utiliza JSP, as linhas de código comuns a diversas páginas podem ser criadas em um arquivo ..I.. , que pode ser incluído nas páginas utilizando-se a diretiva ..II.. . As lacunas I e II são preenchidas correta e respectivamente por a) I. Javascript, <%@page II. file="caminho/nome_do_arquivo"%>. b) I. Java Servlet, <%@include II. uri="caminho/nome_do_arquivo"%>. c) I. JSTL, <%@taglib II. uri="caminho/nome_do_arquivo"%>. d) I. JSF, <%@page II. import="caminho/nome_do_arquivo%>. e) I. JSPF, <%@include II. file="caminho/nome_do_arquivo"%>. 19. (FCC - 2012 - MPE-PE - Analista - Tecnologia da Informação) Em uma página JSP, para importar uma classe de um pacote e para fazer referência a uma biblioteca (como, por exemplo, JSTL) podem ser utilizadas, respectivamente, as diretivas: a) <%@page import=“pacote.Classe”%> e <%@taglib uri=“caminho/biblioteca” prefix=“prefixo”%>. b) <%@include import= “pacote.Classe”%> e <%@taglib uri=“caminho/biblioteca”%>. c) <%import= “pacote.Classe”%> e <%taglib uri=“caminho/biblioteca”%>. d) <%@page include= “pacote.Classe”%> e <%@library uri=“caminho/biblioteca”%>. e) <%@import class= “pacote.Classe”%> e <%@taglib urli=“caminho/biblioteca”%>. 16712855225

(FCC - 2012 - TRE- Analista Judiciário - Análise de Sistemas <%@ page atributo1="valor1" atributo2="valor2"... %> é a sintaxe típica da diretiva Page, em JSP. Um de seus atributos, se definido para true, indica o processamento normal do servlet quando múltiplas requisições podem ser adas simultaneamente na mesma instância de servlet. Trata-se do atributo: a) Extends. Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 128 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

b) Import. c) isThreadSafe. d) Session. e) AutoFlush. 21. (FCC - MPE-RS - Técnico em Informática - Área Sistemas) Se uma super classe de servlet deve ser gerada, será definida na diretiva page do JSP por meio do atributo: a) info. b) extends. c) session. d) import. e) autoFlush.

16712855225

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 129 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

LISTA DE EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS) JSP (FGV – Senado Federal – Analista de Sistemas) No contexto do Desenvolvimento WEB JAVA, analise as afirmativas a seguir, a respeito da tecnologia JSP ("JavaServer Page"): I. Disponibiliza uma tecnologia simples e rápida para criar páginas que exibem conteúdo gerado dinamicamente, define a interação entre o servidor e a página JSP, e descreve o formato e sintaxe da página. II. Emprega servlets - programas escritos na linguagem Java e executados no servidor, em oposição aos applets, executados no browser do cliente. III. Utiliza páginas JSP, com extensão .jsp ou .jspx, criadas pelo desenvolvedor da web e que incluem especificações JSP e tags customizadas, em combinação com outras tags estáticas, HTML ou XML. Assinale: a) se somente a afirmativa I estiver correta. b) se somente as afirmativas I e II estiverem corretas. c) se somente as afirmativas I e III estiverem corretas. d) se somente as afirmativas II e III estiverem corretas. e) se todas as afirmativas estiverem corretas. (CESGRANRIO – 2010 – BNDES – Analista de Sistemas É característica de um arquivo JSP a: 16712855225

a) b) c) d) e)

compilação em um servlet. presença maciça de código Assembly. impossibilidade de inclusão de comentários. execução exclusiva em sistemas Windows. execução exclusiva em sistemas Linux.

(NCE – – BNDES – Analista de Sistemas Considere as seguintes afirmativas sobre JSP e Servlets:

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 130 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

I. II. III. IV.

É possível usar uma página JSP para gerar um arquivo de imagem do tipo JPEG, GIF ou PNG. Um servlet é executado no servidor, ao o que uma página JSP é executada no browser do cliente. Uma página gerada por um servlet não pode conter código Javascript. Uma página JSP é executada no servidor enquanto que um servlet é executado no browser do cliente.

A quantidade de afirmativas corretas é: a) b) c) d) e)

0; 1; 2; 3; 4.

(CESGRANRIO – 2012 – CEF – Analista de Sistemas) Um objeto implícito é utilizado dentro de páginas JSP sem que haja necessidade de declará-lo. Que objeto é esse? a) b) c) d) e)

Integer. queryString. getParameter. String. Request.

(FMP-RS - 2013 - MPE-AC - Analist - Tecnologia da Informação) No contexto de arquitetura Java Enterprise Edition, ___________________ é uma tecnologia que simplifica o processo de gerar páginas dinamicamente, pois permite embutir Java diretamente em uma página HTML ou XML. 16712855225

Assinale a única alternativa que completa corretamente a lacuna acima: a) Java Virtual Machine (JVM) b) JavaServer Pages (JSP) c) Java ME (Java Micro Edition) d) Enterprise JavaBeans (EJB) e) Java Persistence API (JPA)

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 131 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

(CESGRANRIO - 2011 - FINEP - Analista senvolvimento de Sistemas Qual ação padrão do JSP interrompe o processamento das requisições pela página corrente e as direciona para outro componente Web? a) <jsp:invoke> b) <jsp:include> c) <jsp:forward> d) <jsp:plugin> e) <jsp:call> (ESAF - Analista istrativo - Tecnologia da Informação Desenvolvimento O mecanismo de inclusão, que permite o conteúdo dinâmico ser incluído em uma JSP em tempo de solicitação, é denominado: a) Ação <jsp:plugin>. b) Ação <jsp:include>. c) Diretiva include. d) Diretiva Page. e) Diretiva taglib.

16712855225

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 132 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

LISTA DE EXERCÍCIOS COMENTADOS (CESPE) SERVLETS (CESPE - 2013 - TRT - 10ª REGIÃO (DF e TO) - Técnico Judiciário - Tecnologia da Informação) No ciclo de vida de um servlet, o servidor recebe uma requisição e a rea para o container, que a delega a um servlet. O container carrega a classe na memória, cria uma instância da classe do servlet e inicia a instância chamando o método init( ). (CESPE – 2013 – DPE/SP – Analista de Sistemas) No ciclo de vida de um servlet, o servidor recebe uma requisição e a rea para o container, que a delega a um servlet. O container carrega a classe na memória, cria uma instância da classe do servlet e inicia a instância chamando o método init(). import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class BookStoreServlet extends HttpServlet { public void service (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Get the dispatcher; it gets the main page to the RequestDispatcher dispatcher = getServletContext().getRequestDispatcher( "/bookstore/bookstore.html"); if (dispatcher == null) { System.out.println("There was no dispatcher"); //No dispatcher means the html file could not be found. response.sendError(response.SC_NO_CONTENT); } else { System.out.println("There is a dispatcher"); // Get or start a new session for this HttpSession session = request.getSession(); // Send the the bookstore's opening page dispatcher.forward(request,response); } } public String getServletInfo() { return "The BookStore servlet returns the main web page " + "for Duke's Bookstore."; } } 16712855225

(CESPE – – MPE/RR – Analista de Sistemas) O nome completo da classe da qual herda a classe acima declarada é javax.servlet.HttpServlet. A classe indicada também herda, indiretamente, da classe java.lang.Object. Portanto, é correto afirmar que classes em Java podem ter herança múltipla.

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 133 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

(CESPE – – MPE/RR – Analista de Sistemas) Para a recuperação dos parâmetros que o browser envia para essa servlet, deve-se fazer o ao objeto apontado pela variável request, declarada na linha 3. (CESPE – – MPE/RR – Analista de Sistemas) Se, durante o processamento de um pedido por essa servlet, quando da execução da linha de código 10, o valor da variável dispatcher for null (nulo), então, a mensagem There was no dispatcher será apresentada na interface do usuário. (CESPE – – MPE/RR – Analista de Sistemas) Durante o funcionamento de uma aplicação web na qual esteja em uso a servlet acima declarada, cada pedido http enviado pelo browser e direcionado à servlet BookStoreServlet implicará a criação de uma nova instância da classe BookStoreServlet, bem como a criação de uma thread que invoca o método service(HttpServletRequest, HttpServletResponse), declarado no código apresentado. (CESPE – – TRT/5 – Analista de Sistemas) Java Servlets são componentes Java executados somente do lado do servidor.

(CESPE – 1 – /ES – Analista de Sistemas) Servlet pode ser considerado um applet que é executado no lado servidor. (CESPE – 2011 – TRE/ES – Analista de Sistemas) Um servlet é uma classe Java utilizada para ampliar a capacidade de o dos servidores a aplicações por meio do modelo requisição-resposta. Embora os servlets possam responder a um tipo específico de requisição hospedada em servidores web, os servlets não respondem a requisições genéricas. 16712855225

10. (CESPE – 2013 – CNJ – Analista de Sistemas) Apesar de serem independentes de plataforma, os servlets, para funcionarem, precisam utilizar o protocolo HTTP. 11. (CESPE – 2013 – TRE/MS – Analista de Sistemas – O servlet é uma classe de programa em Java utilizada para estender a capacidade dos servidores em aplicações web que trabalham com a filosofia requisição e resposta. 12. (CESPE - STJ - Analista Judiciário - Tecnologia da Informação Na plataforma J2EE, uma aplicação web para a Internet pode ser composta por servlets, Java Server Pages (JSP) e páginas HTML. Nessas aplicações, a apresentação dos dados pode ser separada da lógica do negócio, adotando-se Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 134 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

o estilo de arquitetura model view controller (MVC). Nesse caso, pode-se usar servlets operando como controladoras que recebem as solicitações dos usuários e providenciam o processamento das mesmas. Em uma mesma aplicação, entretanto, só pode existir um servlet operando como controladora. 13. (CESPE - 2010 - T -BA - Analista Judiciário - Análise de Sistemas Todo servlet pode interagir com o contexto no qual ele está inserido por meio dos métodos especificados na interface ServletContext. 14. (CESPE - 2011 - Correios - Analista de Correios - Analista de Sistemas - Produção Entre outras aplicações, os servlets são utilizados para escrever aplicativos web J2EE dinâmicos em servidores web. Um servlet pode utilizar seus recursos para realizar ações como, por exemplo, usar os registros (logging) para permitir que o servidor possa autenticar usuários. 15. (CESPE - 2009 - SECONT-ES - Auditor do Estado – Tecnologia da Informação No desenvolvimento de uma aplicação web que siga o padrão JEE, a tecnologia JSP (Java Server Pages) permite criar páginas web com componentes estáticos e dinâmicos; o AJAX permite a troca e manipulação de dados XML com comunicação assíncrona, utilizando XMLHttpRequest; e o servlet é exemplo de servidor de aplicações que contém diretórios como o bin e o webapps e é responsável por gerenciar requisições recebidas de clientes.

16712855225

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 135 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

LISTA DE EXERCÍCIOS COMENTADOS (FCC) SERVLETS (FCC - 2007 - TRE-SE - Analista Judiciário - Tecnologia da Informação) Quando um servlet é carregado pela primeira vez para a máquina virtual Java do servidor: a) ocorre um destroy() no processo cliente. b) o seu método init() é invocado. c) o método service() é definido. d) ocorre a execução do método getOutputStream(). e) o seu método stream() é invocado. (FCC – 2011 – TRT - 1ª REGIÃO – Analista de Sistemas Em relação às tecnologias Java, é INCORRETO afirmar que as Servlets: a) deixam para a API utilizada na sua escrita a responsabilidade com o ambiente em que elas serão carregadas e com o protocolo usado no envio e recebimento de informações. b) fornecem um mecanismo simples e consistente para estender a funcionalidade de um servidor Web. c) podem ser incorporadas em vários servidores Web diferentes. d) podem rodar em qualquer plataforma sem a necessidade de serem reescritas ou compiladas novamente. 16712855225

e) são carregadas apenas uma vez e, para cada nova requisição, a servlet gera uma nova thread. (FCC – 2010 – DPE/SP – Analista de Sistemas) Servlets são projetadas para fornecer aos desenvolvedores uma solução JAVA para criar aplicações web. Para criar Servlets é necessário importar as classes padrão de extensão dos pacotes: a) javax.servlet e javax.servlet.http. b) javax.servlet e javax.http.servlet. c) javax.servlet.html e javax.servlet.http. d) servlet.javax e servlet.javax.http.

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 136 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

e) javax.servlet.smtp e javax.servlet.html. (FCC – 2 – TRE/CE – Analista de Sistemas) No contexto do ciclo de vida de um servlet, considere: I. Quando o servidor recebe uma requisição, ela é reada para o container que, por sua vez, carrega a classe na memória e cria uma instância da classe do servlet. II. Quando um servlet é carregado pela primeira vez para a máquina virtual Java do servidor, o método init() é invocado, para preparar recursos para a execução do serviço ou para estabelecer conexão com outros serviços. III. Estando o servlet pronto para atender as requisições dos clientes, o container cria um objeto de requisição (ServletRequest) e de resposta (ServletResponse) e depois chama o método service(), ando os objetos como parâmetros. IV. O método destroy() permite liberar os recursos que foram utilizados, sendo invocado quando o servidor estiver concluindo sua atividade. Está correto o que se afirma em: a) I, II e III, apenas. b) I, II e IV, apenas. c) I, III e IV, apenas. d) II, III e IV, apenas. e) I, II, III e IV. (FCC – 3 – DPE/SP – Analista de Sistemas) Um Servlet Contêiner controla o ciclo de vida de uma servlet onde são invocados três métodos essenciais: um para inicializar a instância da servlet, um para processar a requisição e outro para descarregar a servlet da memória. Os itens a seguir representam, nessa ordem, o que ocorre quando um usuário envia uma requisição HTTP ao servidor: 16712855225

I. A requisição HTTP recebida pelo servidor é encaminhada ao Servlet Contêiner que mapeia esse pedido para uma servlet específica. II. O Servlet Contêiner invoca o método init da servlet. Esse método é chamado em toda requisição do usuário à servlet não sendo possível ar parâmetros de inicialização. Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 137 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

III. O Servlet Contêiner invoca o método service da servlet para processar a requisição HTTP, ando os objetos request e response. O método service não é chamado a cada requisição, mas apenas uma vez, na primeira requisição do usuário à servlet. IV. Para descarregar a servlet da memória, o Servlet Contêiner chama o método unload, que faz com que o garbage collector retire a instância da servlet da memória. Está correto o que se afirma em: a) I, II, III e IV. b) I, apenas. c) I e IV, apenas. d) II, III e IV, apenas. e) II e III, apenas. (FCC – 6 – BACEN – Analista de Sistemas) Para ser um servlet, uma classe deve estender a classe I e exceder as ações “doGet” ou “doPost” (ou ambas), dependendo se os dados estão sendo enviados por uma ação GET ou por uma ação POST. Estes métodos tomam dois argumentos: um II e um III em sua execução. Preenchem correta e respectivamente I, II e III:

16712855225

(FCC - 2007 - TRE-SE - Analista Judiciário - Tecnologia da Informação Em Java, a agem de dados de um formulário do cliente para o servlet pode ocorrer por meio do uso do método: a) import() b) return() c) catch() d) getParameter() e) nameComponent() Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 138 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

(FCC - 2012 - TRE- - Programador de computador A tecnologia Java Servlet é baseada na construção de classes servlet que executam no servidor recebendo dados de requisições do cliente, processando esses dados, opcionalmente ando recursos externos como bancos de dados, e respondendo ao cliente com conteúdo no formato HTML. Com relação ao tema, analise as asserções a seguir: Embora as servlets sejam muito boas no que fazem, tornou-se difícil responder ao cliente com conteúdo no formato HTML. PORQUE Geralmente quem trabalha com o conteúdo HTML é o web designer que normalmente não é programador Java experiente. Ao misturar HTML dentro de uma servlet, torna-se muito difícil separar as funções de web designer e desenvolvedor Java. Além disso, é difícil fazer alterações no conteúdo HTML, pois para cada mudança, uma recompilação da servlet tem que acontecer. Para contornar as limitações da tecnologia Java Servlet a Sun Microsystems criou a tecnologia JavaServer Pages (JSP). Acerca dessas asserções, é correto afirmar: a) Tanto a primeira quanto a segunda asserções são proposições falsas. b) A primeira asserção é uma proposição verdadeira e a segunda uma proposição falsa. 16712855225

c) A primeira asserção é uma proposição falsa e a segunda uma proposição verdadeira. d) As duas asserções são proposições verdadeiras, mas a segunda não é a justificativa correta da primeira. e) As duas asserções são proposições verdadeiras e a segunda é a justificativa correta da primeira. (FCC - 2013 - -RN - Analista Legislativo - Analista de Sistemas No Java EE 6 os métodos doPost e doGet podem ser sobrescritos em uma servlet criada na Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 139 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

aplicação para receberem as requisições vindas de páginas HTML. Quando sobrescritos na servlet, eles substituem seus métodos ancestrais existentes na classe abstrata: a) GenericServlet. b) HttpServlet. c) HttpServletRequest. d) HttpServletResponse. e) HttpServletObject. 10. (FCC - 2009 - TRT - 16ª REGIÃO (MA) - Técnico Judiciário - Tecnologia da Informação Para ler os parâmetros de inicialização do contexto de um servlet utiliza-se o método: a) String getInitParameter(String). b) Enumeration getInitParameterNames(). c) InputStream getResourceAsStream(). d) setAttribute(String nome, Object). e) Object getAttribute(String nome).

16712855225

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 140 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

LISTA DE EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS) SERVLETS (FMP/RS – 2013 – MPE/AC – Analista de Sistemas No contexto da arquitetura Java Enterprise Edition, __________________ são, em termos de estrutura, classes Java especializadas que se assemelham muito à estrutura dos applets Java, porém rodando em um servidor web e não no do cliente. Assinale a única alternativa que completa corretamente a lacuna acima. a) Java ME (Java Micro Edition) b) portlets c) Java Persistence API (JPA) d) Enterprise JavaBeans (EJB) e) servlets (VUNESP – 3 – FUNDUNESP – Analista de Sistemas) Na plataforma J2EE, a classe ServletRequest define: a) a estrutura do objeto principal do Servlet, permitindo que sejam feitas requisições ao Servlet. b) métodos que permitem que o Servlet faça requisições de forma assíncrona. c) métodos que permitem que o Servlet faça requisições aos clientes. d) propriedades que permitem que seja alterado o comportamento do Servlet. e) um objeto que fornecerá informações sobre a requisição feita pelo cliente ao Servlet. (CESGRANRIO – 2006 – DECEA – Analista de Sistemas – A) Servlets e arquivos JSP são executados no WEB Container. 16712855225

(CESGRANRIO – – DECEA – Analista de Sistemas – B) Applets e Servlets são compilados e executados no servidor. (CESGRANRIO – 2009 – BNDES – Analista de Sistemas – A) Ao estudar as especificações e frameworks Java EE, um Analista de Sistemas concluiu que o container WEB do servidor de aplicações é o responsável por gerenciar o ciclo de vida de servlets e de EJBs utilizados numa aplicação Java.

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 141 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

(CESGRANRIO – 2009 – BNDES – Analista de Sistemas – B) Ao estudar as especificações e frameworks Java EE, um Analista de Sistemas concluiu que no container WEB, uma página JSP transforma-se em um servlet, que é compilado, carregado e inicializado. (CESGRANRIO – 2012 – PETROBRÁS – Analista de Sistemas Seja o código a seguir:

Sobre esse código, do qual foram omitidas as declarações de importação e o método getServletInfo por concisão, considere as afirmativas a seguir. I - Como o método service() não foi redefinido, o container não saberá qual método chamar para cada tipo de pedido, gerando uma exceção. II - Como o método init() não foi redefinido, o construtor padrão da classe mãe será chamado. III - Como o método destroy() não foi redefinido, o container gerará um erro registrando-o no arquivo de logs ao terminar este aplicativo. 16712855225

É correto APENAS o que se afirma em: a) b) c) d) e)

I II III I e III II e III

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 142 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

(ESAF – – CGU – Analista de Sistemas – A) Servlets são classes de programação Java que geram conteúdo dinâmico (normalmente para páginas HTML) e interagem com os clientes, utilizando o modelo challenge/request. Normalmente utilizam o protocolo HTTP, apesar de não serem restritas a ele. (CIAAR - 2012 - CIAAR - Oficial Temporário - Análise de Sistemas O método chamado para liberar quaisquer recursos mantidos pelo servlet, quando o contëiner de servlets termina o servlet, denomina-se: a) get. b) post. c) destroy. d) prerender.

16712855225

10. (AO - 2012 - BRDE - Analista de Sistemas - Desenvolvimento de Sistemas (Prova TIPO 4) Sobre Servlets, analise as assertivas e assinale a alternativa que aponta as corretas. I. Servlets são implementadas como arquivos de classe da Linguagem Java.

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 143 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

II. Servlets são independentes de plataforma, de modo que podem ser executadas em diferentes servidores, em diferentes sistemas operacionais. III. As Servlets podem ar qualquer uma das APIs Java. Uma Servlet pode usar a API JDBC para ar e armazenar dados ou para ar objetos remotos. IV. Ao criar uma Servlet, somos obrigados a reescrever nove métodos presentes à interface que foi implementada. a) Apenas I e II. b) Apenas I e III. c) Apenas II e III. d) Apenas I, II e III. e) I, II, III e IV. 11. (VUNESP - 2013 - FUNDUNESP - Analista Programador Júnior Para criar um Servlet que processará as requisições HTTP na plataforma J2EE, deve-se: a) criar uma classe que implemente a interface Servlet. b) criar uma classe que estenda a classe HttpServlet. c) implementar o método processHttpHeader. d) instanciar a classe Servlet, ando para o parâmetro requestType o valor Servlet.HTTP_REQUEST. e) invocar o método Servlet.service(Servlet.HTTP_REQUEST) antes do processamento da requisição. 12. (FEPESE - 2013 - JUCESC - Analista Técnico em Gestão de Registro Mercantil Analista de Informática) Assinale a alternativa que defne corretamente um Servlet. 16712855225

a) É um método da JPA utilizado na persistência assíncrona de dados. b) É um componente que roda do lado do cliente para tratar problemas de comunicação. c) É uma classe Java utilizada para estender as capacidades de um servidor. d) É uma biblioteca JBOSS que emula servidores no lado do cliente. e) É uma JSP que possibilita a execução de código no lado do cliente, mesmo sem comunicação com um servidor.

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 144 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

13. (VUNESP - 2013 - FUNDUNESP - Analista Programador Júnior) Considere o Servlet a seguir: import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class ClasseServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response){ response write html response write body response write Servlet em operação response write body response write html } }

Sobre o código do Servlet, é possível afirmar que: a) ao ser executado por um contêiner de Servlet, será exibida uma tela em branco no navegador. b) ao ser executado por um contêiner de Servlet, será exibida a mensagem “Servlet em operação!” na tela do navegador. c) não pode ser compilado, pois a classe HttpServletResponse não possui o método write. d) não pode ser compilado, pois HttpServlet é uma interface e, portanto, não pode ser estendida por uma classe. e) o conteúdo exibido na tela do navegador não será codificado corretamente, pois a codificação da página não foi informada. 16712855225

14. (CESGRANRIO - -RO - Analista Judiciário - Tecnologia da Informação O método da interface javax.servlet.http.HttpSession, utilizado para finalizar uma sessão de usuário em um container J2EE, é a) cancel( ) b) delete( ) c) destroy( ) d) invalidate( ) e) release( ) Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 145 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

LISTA DE EXERCÍCIOS COMENTADOS (CESPE) JSF (CESPE - 2009 - SECONT-ES - Auditor do Estado – Tecnologia da Informação O JSF é um framework web embasado em interface gráfica, capaz de renderizar componentes e manipular eventos em aplicações web no padrão Java EE, no qual os componentes JSF são orientados a eventos. O JSF fornece, ainda, mecanismos para conversão, validação, execução de lógica de negócios e controle de navegação. (CESPE - 2010 - TRE-BA - Analista Judiciário - Análise de Sistemas Entre os itens que o padrão Java Server Faces (JSF) utiliza, estão os componentes, os eventos e a navegabilidade. (CESPE - 2012 - ANAC - Analista istrativo - Área 4 A validação de dados de um componente pode ser uma das funções de um backing bean, em uma aplicação JSF. (CESPE - 2013 - SERPRO - Analista - Desenvolvimento de Sistemas O JSF provê uma linguagem de expressão exclusiva para o a objetos armazenados em bancos de dados. (CESPE - 2010 – TCU – Analista de Sistemas) No desenvolvimento de conteúdos para apresentação, o uso de facelets traz vantagens em relação ao uso de JSP. Uma delas é a maior modularidade, com o uso de templates e componentes compostos (composite). (CESPE - 2012 – TJ/AL – Analista de Sistemas – B) Em um aplicativo Facelets, a tag f:ajax adiciona funcionalidades Ajax que necessitam de adicionais de codificação e configuração para as componentes de interface do usuário. 16712855225

(CESPE - 2012 – TJ/RO – Analista de Sistemas – E) JNDI, parte do projeto de JSF, utiliza XHTML como tecnologia de apresentação dos dados, possibilitando a separação entre as camadas de negócio e de controle. (CESPE - 2013 – RM – Analista de Sistemas) Facelets são utilizadas para desenvolver visões (views) JavaServer Faces (JSF) com linguagem HTML e

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 146 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

XHTML, em conformidade com a transitional document type definition, sendo, ainda, compatível com a biblioteca de tag JSF. (CESPE 0 – TCU – Analista de Sistemas) Para ar a construção de aplicações com Ajax e JSF, recomenda-se aos desenvolvedores de páginas que usem a tag , relacionada ao processamento de pedidos http assíncronos. 10. (CESPE 0 – MPU – Analista de Sistemas) Uma aplicação web deve prover mecanismos de validação de dados. O JSF fornece vários validadores de dados padrões que podem ser utilizados no lado do cliente (client-side). 11. (CESPE - 2014 - -SE - Analista Judiciário - Análise de Sistemas Antes de uma aplicação web desenvolvida nos moldes da JSF executar sua primeira página web, uma instância Fervlet é executada, a fim de gerenciar as requisições dessa aplicação. 12. (CESPE - 2014 - -SE - Analista Judiciário - Análise de Sistemas Em aplicações web nos padrões da JSF, é possível utilizar recursos Ajax para criar páginas dinâmicas, como, por exemplo, por meio da tag f:ajax, conforme apresentado na sintaxe abaixo. h inputText value

bean message

>

13. (CESPE - -SE - Analista Judiciário - Análise de Sistemas) É possível utilizar XHTML no desenvolvimento de facelets para criar páginas web compatíveis com a JSF (JavaServer Faces) para apresentação dos dados. Na versão Java EE 7, essa forma de apresentação é mais indicada que a JSP (JavaServer Pages), uma vez que esta não a todos os novos recursos da versão Java EE 7. 16712855225

14. (CESPE - 2015 – TCU - Analista de Sistemas) A partir da interpretação do trecho JSF (JavaServer Faces), versão 2, no código a seguir, verifica-se que uma providência válida é configurar o managed-bean clientePage no arquivo facesconfig.xml. 15. (CESPE - 2013 – INPI - Analista Judiciário - Análise de Sistemas) Quando registrado em JSF 2 (Java Server Faces), um managed bean permanece no escopo de session.

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 147 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

LISTA DE EXERCÍCIOS COMENTADOS (FCC) JSF (FCC – 2013 – TRT/12 – Analista de Sistemas) Considere as instruções abaixo encontradas em um arquivo de uma aplicação que utiliza JSF: <managed-bean> <managed-bean-name>func <managed-bean-class>bean.Funcionario <managed-bean-scope>session

Essas instruções indicam a existência de um bean gerenciado (classe Funcionario.java) no pacote bean que poderá ser referenciado nas páginas JSP por meio da palavra func. O arquivo correto no qual essas instruções são colocadas é o: a) context.xml. b) web-inf.xml. c) web.xml. d) faces-config.xml. e) config-bean.xml. (FCC - 2012 - -PE - Programador de computador Em uma aplicação que utiliza JSF, para configurar o fluxo de comunicação presente na servlet de controle, é utilizado um arquivo de configuração: a) webfaces.xml. b) actionform.xml. c) faces-config.xml. d) webcontext.xml. e) serverconfig.xml.

16712855225

(FCC – 2013 – TRT/9 – Analista de Sistemas) Uma aplicação utilizando o framework JSF e a IDE NetBeans gera automaticamente dois componentes essenciais assim descritos: I. É responsável por receber requisições dos componentes View do MVC, redirecioná-las para os beans gerenciados (managed beans) do componente Model do MVC e responder a essas requisições.

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 148 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

II. É o arquivo principal de configuração de uma aplicação web que utiliza o framework JSF. É responsável por descrever os elementos e sub-elementos que compõem o projeto, tais como as regras de navegação, beans gerenciados, configurações de localização etc. As descrições I e II referem-se, respectivamente, aos componentes: a) servlet Controller.java e ao arquivo faces_config.xml b) FaceletServlet e ao arquivo web_config.xml. c) Fervlet e ao arquivo faces-config.xml. d) servlet Controller e ao arquivo web-config.xml. e) servlet Facelet e ao arquivo web.xml. (FCC – 2012 – TST – Analista de Sistemas) O framework JavaServer Faces (JSF) é utilizado no desenvolvimento de aplicações web que utiliza o design pattern MVC. O JSF: a) disponibiliza controles pré-construídos e código para manipular eventos, estimulando o uso de código Java convencional no componente View do MVC. b) recebe requisições dos componentes da View do MVC, através do servlet FaveServerServlet. c) armazena os mapeamentos das ações e regras de navegação em projetos JSF nos arquivos WEB-INF.xml e FACES-CONFIG.xml. d) possui bibliotecas que am Ajax (Asynchronous JavaScript And XML). 16712855225

e) provê um conjunto de tags limitado para criar somente páginas HTML/XHTML. (FCC – 2012 – TST – Analista de Sistemas) Para criar as páginas XHTML de uma aplicação JSF é possível utilizar um conjunto de bibliotecas de tags JSF. Algumas dessas bibliotecas são HTML, Core e Facelets. Considere os fragmentos de códigos abaixo, que utilizam tags dessas bibliotecas:

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 149 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

A correlação correta entre o fragmento de código e a biblioteca de tags utilizada é: a) I-Facelets, II-HTML e III-Core. b) I-Core, II-Facelets, e III-HTML. c) I-HTML, II-Core, e III-Facelets. d) I-HTML, II-Facelets, e III-HTML. e) I-HTML, II-HTML, e III-Core. (FCC - 2012 - -PE - Analista Judiciário - Análise de Sistemas No JSF, o componente Controller do MVC é composto por uma classe servlet, por arquivos de configuração e por um conjunto de manipuladores de ações e observadores de eventos. Essa servlet é chamada de: 16712855225

a) ControllerServlet. b) Facelet. c) HttpServlet. d) FacesConfig. e) Fervlet. (FCC - 2012 - TRE- - Analista Judiciário - Análise de Sistemas No ciclo de vida do Java Server Faces trata-se da fase na qual o componente deve primeiro ser criado ou recuperado a partir do FacesContext, seguido por seus valores, que

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 150 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

são geralmente recuperados dos parâmetros de request e, eventualmente, dos cabeçalhos ou cookies gerados. Trata-se da fase: a) Restore View. b) Apply Request Values. c) Process Validation. d) Update Model Values. e) Invoke Application. (FCC - 2012 - TRT - 11ª Região (AM) - Técnico Judiciário - Tecnologia da Informação Sobre o framework JavaServer Faces é correto afirmar: a) A grande limitação do JSF é a dificuldade de integração com outros frameworks como Spring, JPA e EJB. b) Expression Language (EL) é a linguagem utilizada para apresentação de conteúdo em aplicações que utilizam JSF. Sua principal limitação é a impossibilidade de ar valores e métodos em beans gerenciados. c) Facelets é uma parte da especificação JSF e também a tecnologia para implementar as regras de negócio em aplicações que utilizam JSF. d) Disponibiliza as bibliotecas de tags core e html para criar as páginas que compõem a interface do usuário. e) Define uma única forma para realizar a validação de dados em formulários JSP, por meio da implementação de uma classe de validação que estende a interface Validator. 16712855225

(FCC - 2011 - TRE-AP - Técnico Judiciário - Programação de Sistemas O JSF extrai todos os valores digitados pelo usuário e guarda esse valor nos seus respectivos componentes. Se o valor digitado não coincidir com o componente, um erro vai ser adicionado na classe FacesContext e será mostrado na fase Render Response Phase. No ciclo de vida do JSF trata-se de um evento típico da fase: a) Process Validations Phase. b) Restore View Phase. c) Apply Request Values Phase. Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 151 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

d) Update Model Values Phase. e) Invoke Application Phase. 10. (FCC - 2011 - TRE-RN - Técnico Judiciário - Programação de Sistemas No ciclo de vida do JSF copiar os parâmetros de requisição para valores submetidos pelos componentes, é a tarefa típica da fase: a) Restaurar Visão (Restore view). b) Invocar aplicação (Invoke application). c) Aplicar valores de requisição (Apply request values). d) Processar validações (Process validation). e) Atualizar valores do modelo (Update model values). 11. (FCC - 2010 - TRT - 22ª Região (PI) - Técnico Judiciário - Tecnologia da Informação É um framework MVC utilizado no desenvolvimento de aplicações para a internet de forma visual, que utiliza o recurso de arrastar e soltar os componentes na tela para definir suas propriedades: a) Enterprise JavaBeans. b) JavaServer Faces. c) Java 2 Enterprise Edition. d) Servlets. e) Java Server Pages.

16712855225

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 152 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

LISTA DE EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS) JSF (FGV - 2013 – ALEMA - Analista de Sistemas Com relação à especificação Java Server Faces (JSF), assinale V para a afirmativa verdadeira e F para a falsa. ( ) Visa substituir a especificação Java Server Pages. ( ) Java Server Faces são usadas como uma fachada para Servlets e Java Server Pages. ( ) Define um framework MVC (Model View Controler) para aplicações Web. As afirmativas são, respectivamente, a) F, F e V. b) F, V e V. c) V, F e F. d) V, V e F. e) F, V e F.

16712855225

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 153 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

GABARITO DOS EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS) JAVA EE 1 E 11 E

2 E 12 C

3 E 13 C

4 E 14 A

5 E 15

6 C 16

7 B 17

8 B 18

9 C 19

10 B 20

GABARITO DOS EXERCÍCIOS COMENTADOS (CESPE) JSP 1 C

2 E

3 C

4 C

5 E

6 E

7 C

8 C

9

10

9 E 19 A 29

10 C 20 C 30

GABARITO DOS EXERCÍCIOS COMENTADOS (FCC) JSP 1 A 11 E 21 B

2 E 12 E 22

3 E 13 A 23

4 A 14 A 24

5 D 15 C 25

6 C 16 E 26

7 E 17 D 27

8 E 18 E 28

16712855225

GABARITO DOS EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS) JSP 1 D

2 A

3 B

4 E

5 B

6 C

7 B

8

9

GABARITO DOS EXERCÍCIOS COMENTADOS (CESPE) Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 154 de 156

10

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

SERVLETS 1 C 11 C

2 C 12 E

3 E 13 C

4 C 14 C

5 E 15 E

6 E 16

7 C 17

8 C 18

9 E 19

10 E 20

9 B

10 A

GABARITO DOS EXERCÍCIOS COMENTADOS (FCC) SERVLETS 1 B

2 A

3 A

4 E

5 B

6 D

7 D

8 E

GABARITO DOS EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS) SERVLETS 1 E 11 B

2 E 12 C

3 C 13 C

4 E 14 D

5 E 15

6 C 16

7 B 17

8 E 18

9 C 19

10 D 20

GABARITO DOS EXERCÍCIOS COMENTADOS (CESPE) JSF 16712855225

1 C 11 C

2 C 12 C

3 C 13 C

4 E 14 C

5 C 15 E

6 E 16

7 E 17

8 C 18

9 C 19

10 E 20

9

10

GABARITO DOS EXERCÍCIOS COMENTADOS (FCC) JSF 1

2

3

Prof. Diego Carvalho

4

5

6

7

www.estrategiaconcursos.com.br

8

Pág. 155 de 156

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 04

D 11 D

C 12

C 13

D 14

A 15

E 16

B 17

D 18

C 19

C 20

GABARITO DOS EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS) JSF 1 A

2

3

4

5

6

7

8

9

16712855225

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 156 de 156

10

Aula 05 Desenvolvimento de Software para Concursos - Curso Regular Professor: Diego Carvalho

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05

AULA 05

SUMÁRIO

PÁGINA 01 02 25 55 65 64 90

Apresentação - Java Persistence API (JPA) - Hibernate - Java Database Conectivity (JDBC) - Java Virtual Machine (JVM) Lista de Exercícios Comentados Gabarito

Lógica de Programação. Tipos de Dados. Operadores e Expressões. Estruturas de Controle, Seleção, Repetição e Desvio. Recursividade. Funções e Procedimentos. Complexidade de Algoritmos. Métodos de Ordenação. BubbleSort, InsertionSort, SelectionSort, QuickSort, ShellSort, MergeSort e HeapSort. Estruturas de Dados. Vetores e Matrizes. Lista Encadeada. Pilhas. Filas. Árvore. Grafos. Hashing. Estrutura de Arquivos. Padrões de Projeto GOF. Padrões de Projeto Java EE. Padrões de Projeto GRASP. Java SE. Conceitos Básicos. Plataforma Java. Compilação e Interpretação. agem por Valor e Referência. Empacotamento. Raiz. Identificadores. Blocos e Comandos. Comentários. Palavras Reservadas. Tipos Primitivos. Operadores. Vetores. Conversão de Tipos. Controle de Fluxos. Classes. Objetos. Atributos. Métodos. Herança. Encapsulamento. Interface. Polimorfismo. Interface Gráfica. Tipos Enumerados. Anotações. Classes Internas. Reflexão e Genéricos. Tratamento de Exceções. Sincronismo e Multithreading. Coleções. Streams e Serialização. Classes e Operações de I/O. Novidades Java 8. Arquitetura Java EE. JSP. Servlets. JSF. JPA. Hibernate. JDBC. JVM. Spring. Struts. JMS. JNDI. JTA. JSTL. HTML e CSS. JavaScript. JQuery. AJAX. DHTML. XHTML. XML. XSLT. XSD. Sistemas Móveis. Android. iOS. Segurança no Desenvolvimento. Compiladores e Interpretadores. Ferramentas de Controle de Versão. SVN. CVS. Git. Análise Estática de Código-Fonte. SonarQube. Integração Contínua (e outros) Framework .NET, C#, Visual Basic, ASP.NET e Visual Studio (Prof. Mayara Rosa) Delphi e PHP (Prof. Mayara Rosa). 16712855225

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 1 de 91

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05

JAVA PERSISTENCE API (JPA) Galera, Java começou a ficar extremamente popular em ambientes corporativos, mas havia um problema que estava incomodando os desenvolvedores: produtividade estava prejudicada porque eles estavam perdendo muito tempo nas codificações de Queries SQL e em seu respectivo código JDBC. E quando era necessário mudar o banco de dados por um de outro fabricante? O que fazer? Além disso, Java ajudou a popularizar o Paradigma Orientado a Objetos, em que informações eram representadas por meio de classes, atributos, herança, polimorfismo, encapsulamento, etc. Isso gerava conflito com o Paradigma Relacional dos bancos de dados, em que as informações eram representadas por meio de tabelas, colunas, linhas, chaves primárias, chaves estrangeiras, etc. Pois bem! Era trabalhoso transformar objetos de uma classe em registros de uma tabela e vice-versa. Logo, começaram a surgir algumas ferramentas que auxiliavam essa tarefa – são as famosas ORM – Object-Relational Mapping (ou Mapeamento Objeto-Relacional). As mais conhecidas eram Hibernate1 e TopLink – a primeira, open-source, tornou-se uma referência mundial. Essas ferramentas facilitam o mapeamento dos atributos de uma base de dados relacional para o modelo de objetos de uma aplicação por meio de Descritores de Implantação (XML) ou Anotações (Annotations) – principalmente para consultas e atualizações de dados. O desenvolvedor define como os objetos são mapeados e o framework faz o resto – a o Banco de Dados, gera Comandos SQL, etc. A utilização desses frameworks de mapeamento objeto-relacional permitiu preservar as vantagens do Paradigma Relacional (Robustez, Maturidade, Facilidade de Pesquisa, etc) para a Camada de Persistência; e preservar as vantagens do Paradigma Orientado a Objetos (Reúso, Modularidade, Herança, Polimorfismo, etc) para a Camada de Negócios. 16712855225

Antes de continuar, preciso que vocês entendam o conceito de POJO (Plain Old Java Object). Trata-se de objetos simples e comuns que não deveriam ter que:  Estender interfaces pré-especificadas: 1

Possui até uma versão para .NET chama-se NHibernate.

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 2 de 91

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05 public class Foo extends javax.servlet.http.HttpServlet { ...

 Implementar classes pré-especificadas: public class Bar implements javax.ejb.EntityBean { ...

 Conter anotações pré-especificadas: @javax.persistence.Entity public class Baz { ...

Galera, esse conceito é teórico! Na prática, por dificuldades técnicas (entre outras razões), consideram-se POJO também as classes que contenham anotações préespecificadas. Qual a vantagem de se utilizar POJO? Como ele não estende nada nem implementa interfaces, ele não possui dependências por frameworks corporativos e pode se focar somente na lógica de negócio. Ele também é importante para desacoplar o código da aplicação dos frameworks de infraestrutura. Mudou o framework? O POJO continuará funcionando – inclusive, a mudança será fácil e conterá menos riscos! Até a Especificação EJB 2.0, persistência de dados era parte da Plataforma EJB e era realizada por meio de Entity Beans – que eram uma espécie de POJO. Rapidamente: algumas pessoas me perguntam qual a diferença entre um POJO e um JavaBean! do JavaBean é um POJO, mas nem todo POJO um JavaBean. Eles são muito parecidos, mas o JavaBean segue diversas convenções de programação, tais como: nomenclatura dos métodos, construtor público padrão e sem parâmetros, entre outros. Para o JPA, o POJO é a unidade básica! Que tal, agora, entrar mais a fundo no JPA? Bem, os frameworks do mercado possuíam algumas diferenças! A Sun MicroSystems, então, fez uma proposta ao líder do Projeto Hibernate: fazer uma especificação com o objetivo de padronizar os frameworks de mapeamento objeto-relacional! Para tal, ele pegou as melhores ideias do Hibernate, TopLink, JDO, etc e condensou em uma especificação. 16712855225

FAQ: JPA Q: Why didn't you adopt Hibernate or JDO as the persistence API? A: We chose to combine the best ideas from many sources in the new persistence API and create a practical, easy to use API to meet the needs of a majority of Java EE and

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 3 de 91

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05

Java SE community . The Java Persistence API is not based on any single existing persistence framework but incorporates- and improves upon - ideas contributed by many popular frameworks, including Hibernate, TopLink, JDO, and others. E foi assim que surgiu o Java Persistence API (JPA)! Olha que engraçado: a especificação surgiu após as implementações! Como uma das vantagens, pode-se trocar de implementação (Ex: Hibernate para TopLink) sem a necessidade de modificar o código-fonte. Enfim, ele foi incorporado ao EJB 3.0 (apesar de ser independente deste), permitindo sua utilização Ambientes Java SE e Java EE. Em suma, podemos dizer que o JPA é um padrão para persistência de dados que fornece aos desenvolvedores um mapeamento objeto/relacional para gerenciamento de dados relacionais em Aplicações Java – em outras palavras, ele simplifica a persistência de dados. Ele pode ser utilizado pelo Container EJB, pelo Container Web ou pelo Application Client. É interessante notar um pouco da evolução do Java Persistence API (JPA) e como ele evolui harmonicamente com o Ambiente Java EE. Ele apareceu pela primeira vez no Java EE 5 (JSR220). Depois ele se transformou em JPA 2.0 no Java EE 6 (JSR 317) e, atualmente, temos o JPA 2.1 – no Java EE 7 (JSR 338). De todo modo, ele consiste em quatro partes:  Java Persistence API (JPA): define um mapeamento objeto/relacional para gerenciamento de dados relacionais;  Java Persistence Query Language (JPQL): define queries, em geral, estáticas para entidades e seus estados persistentes; 16712855225

 Java Persistence Criteria API (JPCA): define queries, em geral, dinâmicas para entidades e seus estados persistentes;  Mapeamento de Metadados O/R: define um mapeamento por meio de Descritores de Implantação (XML) ou Anotações (Annotations). Há duas formas de mapear classes de negócio em entidades de um banco de dados: Descritores de Implantação (XML) ou Anotações (Annotations)! O XML foi praticamente engolido pelas anotações, tanto que hoje em dia é muito raro utilizálo para certas tarefas. Por que, professor? Porque as anotações evitam a criação de complexos arquivos de configuração em XML. Vejamos algumas anotações: Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 4 de 91

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05

ANOTAÇÃO @Entity @Table @Column @Id @namedQuery @namedQueries @UniqueConstraint @Transient @Inheritance @ManyToOne @OneToMany @OneToOne

DESCRIÇÃO Indica que uma classe é uma entidade que deve ser persistida como tabela. Indica o nome de uma tabela para qual a entidade é mapeada. Indica que um atributo de uma classe é uma coluna de uma tabela. Indica que um atributo é a chave primária de uma entidade. Define uma consulta. Define várias consultas. Indica que uma propriedade não pode conter valores duplicados. Indica que uma propriedade não deve ser persistida no banco de dados. Define um relacionamento de herança à entidade. Mapeamento muitos para um (N:1). Mapeamento um para muitos (1:N). Mapeamento um para um (1:1).

Galera, vocês sabem o que é um EntityManager? Trata-se de uma interface que funciona como serviço centralizado para todas as ações de persistência – mapeando um conjunto de classes para um banco de dados particular. Em outras palavras, ele é responsável por realizar operações de sincronismo com o Banco de Dados (Inserir, Remover, Atualizar e Consultar), além de gerenciar o ciclo de vida das entidades.

16712855225

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 5 de 91

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05

    

EntityManager.persist(Object): persiste o objeto Object; EntityManager.remove(Object): remove o objeto Object; EntityManager.find(Object): busca o objeto Object; EntityManager.refresh(Object): atualiza o objeto Object; EntityManager.createQuery(String): realiza uma consulta String;

Sabe quando você deseja realizar uma inserção no banco de dados? Pois é, o objeto do EntityManager irá realizar essa tarefa! Esse gerenciador de entidades interage com um Persistence Context, que é um local em que ficam armazenados os objetos (entidades) que estão sendo manipulados pelo EntityManager corrente. Ele funciona como um contêiner que guarda as entidades gerenciadas pelo EntityManager. Um artigo do DevMedia faz uma excelente comparação entre Persistence Context e a Memória Cache de um Processador (aquela mais rápida): Imagine o Persistence Context como um container capaz de armazenar todas as entidades que serão manipuladas pelo EntityManager. No início da nossa aplicação, não temos Persistence Context ou EntityManager, pois não realizamos nenhuma operação com o banco. Então, você decide buscar o usuário “Mario” no BD e, neste momento, são criados 1 EntityManager + 1 PersistenceContext (ligados diretamente). O EntityManager vai até o Persistence Context e checa se o usuário “Mario” já está lá, e como não está, ele irá ao banco de dados realizar a consulta desejada retornando o objeto Mario preenchido e populado. Depois de retornar o usuário “Mario” do BD, o EntityManager grava esse objeto no Persistence Context (Nosso Cache). Assim, da próxima vez que precisar deste objeto, não precisará ir ao banco de dados. Então como você pode perceber no cenário acima, o EntityManager sempre consulta o Persistence Context, checando se o objeto já está lá e, caso não esteja, aí sim ele irá até o banco de dados. Quando o EntityManager é destruído (no fim de uma requisição) o Persistence Context também será destruído, impossibilitando de usá-los em outros EntityManager com outros PersistenceContext. 16712855225

Lá em cima, eu afirmei que um EntityManager mapeava um conjunto de classes para um banco de dados particular. Esse conjunto de classes é denominado Persistence Unit2. Antes mesmo de pensar em criar entidades ou consultá-las por meio do EntityManager, é necessário empacotar esse conjunto de classes em um Persistence Unit, que é definido no Descritor de Implantação (persistence.xml). 2

Ele especifica qual implementação será utilizada (Hibernate, Toplink, JDO, etc); conexão com banco, etc.

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 6 de 91

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05

O EntityManager pode ser criado ou pode ser obtido de um EntityManagerFactory – que seria uma espécie de fábrica de EntityManager. No Java SE, deve-se utilizar o EntityManagerFactory para obter o EntityManager, o que não é necessariamente exigido no Java EE. Para obter um EntityManager, devemos primeiro criar o EntityManagerFactory e, só depois, criar o EntityManager: EntityManagerFactory emf Persistence createEntityManagerFactory em = emf.createEntityManager();

Exemplo );

É importante notar que a classe javax.persistence.Persistence procura o Descritor de Implantação persistence.xml dentro de seu classpath. Ele procurará o Persistence Unit com o mesmo nome do parâmetro da função createEntityManagerFactory, i.e., xemplo”. Obtido o EntityManagerFactory, basta chamar a função createEntityManager.

16712855225

O ciclo de vida dos objetos de entidade consiste em quatro estados: Novo (New), Gerenciado (Managed), Removido (Removed) e Destacado (Detached Quando um objeto é criado inicialmente seu estado é Novo. Nesse estado, o objeto ainda não está associado a um EntityManager e não possui qualquer representação no banco de dados. Bacana? Um objeto se torna Gerenciado quando é persistido no banco de dados por meio do método de persistência do EntityManager, que deve ser invocado dentro de uma transação ativa. Quando se dá um Commit na transação, o objeto é persistido no Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 7 de 91

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05

banco de dados. Objetos recuperados do banco de dados por um EntityManager também estão no estado Gerenciado. Se um objeto Gerenciado é modificado dentro de uma transação ativa, a mudança é detectada pelo EntityManager e a atualização é propagada no banco de dados após o Commit. Um objeto Gerenciado também pode ser recuperado do banco de dados e marcado para remoção, utilizando o método remove do EntityManager dentro de uma transação ativa. O objeto modifica seu estado de Gerenciado para Removido, e é fisicamente deletado do banco de dados após o Commit. O último estado, Destacado, representa um objeto que foi desconectado do EntityManager Quando um objeto é Destacado, mudanças sucessivas não irão mais ser rastreadas e nenhuma sincronização automática do banco de dados será realizada.

16712855225

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 8 de 91

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05

(FCC – TRE/MS - Analista de Sistemas – A API de Persistência Java pode ser utilizada no container Web e/ou no container EJB e disponibiliza recursos de mapeamento objeto-relacional as aplicações Java EE. Comentários: Java Persistence API (JPA) é um padrão para persistência de dados que fornece aos desenvolvedores um mapeamento objeto/relacional para gerenciamento de dados relacionais em Aplicações Java – em outras palavras, ele simplifica a persistência de dados. Ele pode ser utilizado pelo Container EJB, pelo Container Web ou pelo Application Client. Conforme vimos em aula, a questão está completamente perfeita! Gabarito: C (CESPE - 2014 - -SE - Analista Judiciário - Banco de Dados) A JPA, que foi criada como alternativa para o Hibernate para conexão com os sistemas gerenciadores de banco de dados, está nativa no Java SE a partir da versão 1.3. Comentários: 16712855225

Que tal, agora, entrar mais a fundo no JPA? Bem, os frameworks do mercado possuíam algumas diferenças! A Sun MicroSystems, então, fez uma proposta ao líder do Projeto Hibernate: fazer uma especificação com o objetivo de padronizar os frameworks de mapeamento objeto-relacional! Para tal, ele pegou as melhores ideias do Hibernate, TopLink, JDO, etc e condensou em uma especificação. Conforme vimos em aula, JPA não é uma alternativa ao Hibernate! JPA é a especificação e Hibernate é a implementação dessa especificação (assim como TopLink, OpenJPA, JDO, etc). Gabarito: E

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 9 de 91

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05

(FCC - 2014 - TRT - 13ª Região (PB) - Técnico Judiciário - Tecnologia da Informação Java Persistence API (JPA) é uma API padrão da linguagem Java para persistência de dados em bancos de dados relacionais. Em uma aplicação que utiliza JPA: a) pode ser utilizada, como provedor de persistência, as bibliotecas EclipseLink, Hibernate, OracleTopLink, JBossSeam e JDBrovider. b) as classes de entidade do banco de dados permitem o mapeamento entre objetos da classe e tabelas do banco de dados, utilizando anotações como @Table, @Entity, @PrimaryKey, @Column, @Constraint, @Foreignkey e @EJB. c) todas as operações realizadas nas tabelas do banco de dados, como inserção de dados, alteração, consultas e exclusão, são realizadas sem o uso de instruções SQL, ou seja, o desenvolvedor não precisa conhecer SQL para programar. d) as configurações de o a banco de dados normalmente ficam no arquivo persistence.xml, ligado à aplicação, de forma que se for alterado o servidor de banco de dados não seja necessário alterar o código-fonte Java da aplicação. e) as relações existentes entre as tabelas do banco de dados não são refletidas nas classes de entidade criadas na aplicação, o que torna a execução mais rápida. O mapeamento de relações é feito em tempo de execução pelas bibliotecas do provedor de persistência. Comentários: (a) Provedor de Persistência é o framework que fornece meios de se fazer o mapeamento objeto/relacional – em geral, implementam a Especificação JPA. Dentro os listados, JBoss Seam e JDBrovider não realizam esse trabalho; (b) @EJB não auxilia no mapeamento entre objetos da classe e tabelas do banco de dados. (c) Vejam que ele citou as quatro operações básicas, mas existem outras e é possível que se necessite saber SQL para programar; (d) Perfeito, as configurações de o ao banco ficam no persistence.xml, permitindo mudanças de servidor de banco de dados sem a necessidade de alterar o código. (e) Claro que as relações devem ser refletidas nas classes de entidade (@OneToOne, @ManyToOne, etc). 16712855225

Gabarito: D

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 10 de 91

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05

(CESPE - 2010 – MPU – Analista de Sistemas A versão 3.0 da API de Persistência Java utiliza descritores de implantação, não permitindo uso de anotações. Comentários: É interessante notar um pouco da evolução do Java Persistence API (JPA) e como ele evolui harmonicamente com o Ambiente Java EE. Ele apareceu pela primeira vez no Java EE 5 (JSR220). Depois ele se transformou em JPA 2.0 no Java EE 6 (JSR 317) e, atualmente, temos o JPA 2.1 – no Java EE 7 (JSR 338). De todo modo, ele consiste em quatro partes: Essas ferramentas facilitam o mapeamento dos atributos de uma base de dados relacional para o modelo de objetos de uma aplicação por meio de Descritores de Implantação (XML) ou Anotações (Annotations) – principalmente para consultas e atualizações de dados. O desenvolvedor define como os objetos são mapeados e o framework faz o resto – a o banco, gera os comandos SQL, etc. Conforme vimos em aula, não existe JPA 3.0 – vocês acham que a banca anulou? De todo modo, a versão atual permite – sim – a utilização de Descritores de Implantação e Anotações. Gabarito: E (CESPE - 2010 – MPU – Analista de Sistemas A versão 3.0 da API de Persistência Java provê uma linguagem de consulta de persistência Java que é uma forma melhorada da linguagem de consulta do EJB. Comentários: 16712855225

É interessante notar um pouco da evolução do Java Persistence API (JPA) e como ele evolui harmonicamente com o Ambiente Java EE. Ele apareceu pela primeira vez no Java EE 5 (JSR220). Depois ele se transformou em JPA 2.0 no Java EE 6 (JSR 317) e, atualmente, temos o JPA 2.1 – no Java EE 7 (JSR 338). De todo modo, ele consiste em quatro partes:  

Java Persistence API (JPA): define um mapeamento objeto/relacional para gerenciamento de dados relacionais; Java Persistence Query Language (JPQL): define queries estáticas, em geral, para entidades e seus estados persistentes;

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 11 de 91

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05

 

Java Persistence Criteria API (JPCA): define queries dinâmicas, em geral, para entidades e seus estados persistentes; Mapeamento de Metadados O/R: define um mapeamento por meio de Descritores de Implantação (XML) ou Anotações (Annotations).

Conforme vimos em aula, não existe JPA 3.0 – vocês acham que a banca anulou? De todo modo, ele fornece – sim – uma linguagem de consulta de persistência: JPQL. De fato, ela é melhor que a EJB-QL, que existia anteriormente – vejamos o que diz o FAQ: Q: What are some of the main features of the Java Persistence API? A: The Java Persistence API is a POJO persistence API for object/relational mapping. It contains a full object/relational mapping specification ing the use of Java language metadata annotations and/or XML descriptors to define the mapping between Java objects and a relational database. It s a rich, SQL-like query language (which is a significant extension upon EJB QL) for both static and dynamic queries. It also s the use of pluggable persistence providers. Gabarito: C (CESPE - 2010 – MPU – Analista de Sistemas A API de Persistência Java é embasada em ideias contidas em frameworks líderes de mercado, como Hibernate, Oracle TopLink e Objetos de Dados Java. Comentários: Que tal, agora, entrar mais a fundo no JPA? Bem, os frameworks do mercado possuíam algumas diferenças! A Sun MicroSystems, então, fez uma proposta ao líder do Projeto Hibernate: fazer uma especificação com o objetivo de padronizar os frameworks de mapeamento objeto-relacional! Para tal, ele pegou as melhores ideias do Hibernate, TopLink, JDO, etc e condensou em uma especificação. 16712855225

Conforme vimos em aula, JPA pegou as melhores ideias dos frameworks líderes de mercado e condensou em uma especificação. Gabarito: C (CESPE - 2013 – TRE/MS – Analista de Sistemas Assinale a opção correspondente ao elemento que, além de ser utilizado para definir um meio de mapeamento Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 12 de 91

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05

objeto-relacional para objetos Java simples e comuns (POJOs), denominados beans de entidade, também é utilizado para gerenciar o desenvolvimento de entidades do modelo relacional em plataforma nativa Java SE e Java EE. a) JSF b) SVN c) JPA d) spring e) struts Comentários: Em suma, podemos dizer que o JPA é um padrão para persistência de dados que fornece aos desenvolvedores um mapeamento objeto/relacional para gerenciamento de dados relacionais em Aplicações Java – em outras palavras, ele simplifica a persistência de dados. Ele pode ser utilizado pelo Container EJB, pelo Container Web ou pelo Application Client. Rapidamente: algumas pessoas me perguntam qual a diferença entre um POJO e um JavaBean! Todo JavaBean é um POJO, mas nem todo POJO é um JavaBean. Eles são muito parecidos, mas o JavaBean segue diversas convenções de programação, tais como: nomenclatura dos métodos, construtor público padrão e sem parâmetros, entre outros. Para o JPA, o POJO é a unidade básica! E foi assim que surgiu o Java Persistence API (JPA)! Olha que engraçado: a especificação surgiu após as implementações! Como uma das vantagens, pode-se trocar de implementação (Ex: Hibernate para TopLink) sem a necessidade de modificar o código-fonte. Enfim, ele foi incorporado ao EJB 3.0 (apesar de ser independente deste), permitindo sua utilização em Ambientes Java SE e Java EE. 16712855225

Ele também é importante para desacoplar o código da aplicação dos frameworks de infraestrutura. Mudou o framework? O POJO continuará funcionando – inclusive, a mudança será fácil e conterá menos riscos! Até a Especificação EJB 2.0, a persistência de dados era parte da Plataforma EJB e era realizada por meio de Entity Beans – que eram uma espécie de POJO. Conforme vimos em aula, JPA é utilizado para realizar o mapeamento objeto/relacional, utilizando POJOs, em ambientes Java SE e Java EE. Gabarito: C Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 13 de 91

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05

(FCC - 2012 - -PE - Analista Judiciário - Análise de Sistemas Quando se utiliza JPA, um EntityManager mapeia um conjunto de classes a um banco de dados particular. Este conjunto de classes, definido em um arquivo chamado persistence.xml, é denominado: a) persistence context. b) persistence unit. c) entity manager factory. d) entity transaction. e) persistence provider. Comentários: Lá em cima, eu afirmei que um EntityManager mapeava um conjunto de classes para um banco de dados particular. Esse conjunto de classes é denominado Persistence Unit. Antes mesmo de pensar em criar entidades ou consultá-las por meio do EntityManager, é necessário empacotar esse conjunto de classes em um Persistence Unit, que é definido no Descritor de Implantação (persistence.xml). Conforme vimos em aula, trata-se do Persistence Unit. Gabarito: B (CESPE - 2013 - CNJ - Técnico Judiciário - Programação de Sistemas Os objetos mapeados na linguagem Java que devem ser persistidos como objetos precisam utilizar JPA (Java Persistence API), pois o JPA permite realizar o mapeamento objeto/relacional automatizado e transparente e sua persistência em um banco de dados relacional. 16712855225

Comentários: Em suma, podemos dizer que o JPA é um padrão para persistência de dados que fornece aos desenvolvedores um mapeamento objeto/relacional para gerenciamento de dados relacionais em Aplicações Java – em outras palavras, ele simplifica a persistência de dados. Ele pode ser utilizado pelo Container EJB, pelo Container Web ou pelo Application Client. Pessoal, olhem que questão maluca! Você precisa necessariamente do JPA? Não, eu posso usar frameworks que não implementam o JPA. Discordo do gabarito! Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 14 de 91

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05

Gabarito: C 10. (FGV - 2009 – MEC – Analista de Sistemas – C) JPA é uma tecnologia utilizada no desenvolvimento de aplicações para Web, similar às tecnologias Active Server Pages (ASP) da Microsoft ou PHP. Comentários: Em suma, podemos dizer que o JPA é um padrão para persistência de dados que fornece aos desenvolvedores um mapeamento objeto/relacional para gerenciamento de dados relacionais em Aplicações Java – em outras palavras, ele simplifica a persistência de dados. Ele pode ser utilizado pelo Container EJB, pelo Container Web ou pelo Application Client. Conforme vimos em aula, essa definição não faz sentido algum para JPA! No entanto, substituindo JPA por JSP, a definição seria perfeita! Gabarito: E 11. (CESPE - 2010 - TRE-BA - Programador de computador As tecnologias JPA e EJB permitem, com o uso da linguagem Java, a manipulação de dados que estão em um banco de dados. Comentários: Em suma, podemos dizer que o JPA é um padrão para persistência de dados que fornece aos desenvolvedores um mapeamento objeto/relacional para gerenciamento de dados relacionais em Aplicações Java – em outras palavras, ele simplifica a persistência de dados. Ele pode ser utilizado pelo Container EJB, pelo Container Web ou pelo Application Client. 16712855225

Conforme vimos em aula, está perfeito – lembrando que JPA faz parte da Especificação do EJB 3.0. Gabarito: C 12. (CESPE - 2013 - RM - Analista em Geociências - Sistemas) Java Persistence API (JPA) é uma solução para persistência de dados, utilizada, inclusive, quando há mapeamento do modelo orientado a objeto para bancos de dados relacionais. Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 15 de 91

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05

Comentários: Em suma, podemos dizer que o JPA é um padrão para persistência de dados que fornece aos desenvolvedores um mapeamento objeto/relacional para gerenciamento de dados relacionais em Aplicações Java – em outras palavras, ele simplifica a persistência de dados. Ele pode ser utilizado pelo Container EJB, pelo Container Web ou pelo Application Client. Conforme vimos em aula, está perfeito – praticamente idêntica à definição! Gabarito: C 13. (CESPE - 2013 – TRE/MS - Analista de Sistemas – C JPA é um framework MVC de aplicações web que se destina a simplificar o desenvolvimento de interfaces de usuário embasadas em web. Comentários: Em suma, podemos dizer que o JPA é um padrão para persistência de dados que fornece aos desenvolvedores um mapeamento objeto/relacional para gerenciamento de dados relacionais em Aplicações Java – em outras palavras, ele simplifica a persistência de dados. Ele pode ser utilizado pelo Container EJB, pelo Container Web ou pelo Application Client. Conforme vimos em aula, essa definição não faz sentido algum para JPA! No entanto, substituindo JPA por JSF, a definição seria perfeita! 16712855225

Gabarito: E

14. (CESPE - 2010 – TRE/MT - Analista de Sistemas – E) JPA lida com a forma como dados relacionais são mapeados para objetos Java e com a forma como esses objetos são armazenados em um banco de dados relacional. Comentários: Em suma, podemos dizer que o JPA é um padrão para persistência de dados que fornece aos desenvolvedores um mapeamento objeto/relacional para gerenciamento de dados relacionais em Aplicações Java – em outras palavras, ele simplifica a

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 16 de 91

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05

persistência de dados. Ele pode ser utilizado pelo Container EJB, pelo Container Web ou pelo Application Client. Conforme vimos em aula, a questão está perfeita! Gabarito: C 15. (CESGRANRIO - 2011 – PETROBRÁS - Analista de Sistemas – II) JPA é parte integrante da especificação EJB e serve para definir as interfaces de o local e/ou remoto de um componente EJB. Comentários: E foi assim que surgiu o Java Persistence API (JPA)! Olha que engraçado: a especificação surgiu após as implementações! Como uma das vantagens, pode-se trocar de implementação (Ex: Hibernate para TopLink) sem a necessidade de modificar o código-fonte. Enfim, ele foi incorporado ao EJB 3.0 (apesar de ser independente dessa), permitindo sua utilização em Ambientes Java SE e Java EE. Conforme vimos em aula, é parte integrante da Especificação EJB, mas é uma especificação de persistência para mapeamento objeto-relacional. Gabarito: E 16. (CESPE - 2012 -RO - Analista Judiciário - Análise de Sistemas – Desenvolvimento – A JPA, um framework utilizado na camada de persistência, define uma forma para mapear POJO (Plain Old Java Objects) para um banco de dados. 16712855225

Comentários: Rapidamente: algumas pessoas me perguntam qual a diferença entre um POJO e um JavaBean! Todo JavaBean é um POJO, mas nem todo POJO é um JavaBean. Eles são muito parecidos, mas o JavaBean segue diversas convenções de programação, tais como: nomenclatura dos métodos, construtor público padrão e sem parâmetros, entre outros. Para o JPA, o POJO é a unidade básica! Conforme vimos em aula, a questão já começa errada! JPA é uma especificação e, não, um framework. Como ela não foi anulada, vamos continuar nossa avaliação da questão. Antigamente, nós usávamos Entity Beans. Após o EJB 3.0 e o surgimento Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 17 de 91

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05

da Especificação JPA, amos a utilizar POJO – que são fracamente acoplados, simples e portáteis. Se ignorarmos o início, a questão está correta. Gabarito: C 17. (FCC - 2013 – MPE/MA - Analista de Sistemas) Considere a classe Java a seguir em uma aplicação que utiliza JPA, uma API que permite fazer o mapeamento de persistência objeto/relacional: package dao; import javax.persistence.*; public class ClienteDao { private EntityManagerFactory emf; private EntityManager em; private EntityTransaction et; private void iniciarTransacao() { emf = Persistence.createEntityManagerFactory("Exemplo"); em = emf.createEntityManager(); et = em.getTransaction(); et.begin(); } }

O parâmetro “Exemplo”, ado para o método createEntityManagerFactory da classe Persistence refere-se ao nome: a) da unidade de persistência definido na tag persistence-unit contida no arquivo persistence.xml. b) do arquivo de persistência Exemplo.xml que contém as tags com os parâmetros de conexão com o banco de dados. c) do banco de dados relacional ao qual a aplicação deseja se conectar. d) da tabela do banco de dados na qual os dados da aplicação serão persistidos. e) da classe que faz a conexão com o banco de dados relacional ao qual a aplicação deseja se conectar. 16712855225

Comentários: É importante notar que a classe javax.persistence.Persistence procura o Descritor de Implantação persistence.xml dentro de seu classpath. Ele procurará o Persistence Unit com o mesmo nome do parâmetro da função createEntityManagerFactory, i.e., “Exemplo”. Obtido o EntityManagerFactory, basta chamar a função createEntityManager.

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 18 de 91

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05

Conforme vimos em aula (e esse é um exemplo padrão, logo a questão veio com os mesmos nomes), o parâmetro é o Persistence Unit definido no Descritor de Implantação (persistence.xml). Gabarito: A 18. (FCC - 2012 - -PE - Programador de computador Em uma classe de entidade de uma aplicação que utiliza JPA, a anotação que define um atributo que não será salvo no banco de dados é a: a) @Optional. b) @Transient. c) @Stateless. d) @Stateful. e) @Local. Comentários:

ANOTAÇÃO @Entity @Table @Column @Id @namedQuery @namedQueries @UniqueConstraint @Transient @Inheritance @ManyToOne @OneToMany @OneToOne

DESCRIÇÃO Indica que uma classe é uma entidade que deve ser persistida como tabela. Indica o nome de uma tabela para qual a entidade é mapeada. Indica que um atributo de uma classe é uma coluna de uma tabela. Indica que um atributo é a chave primária de uma entidade. Define uma consulta. Define várias consultas. Indica que uma propriedade não pode conter valores duplicados. Indica que uma propriedade não deve ser persistida no banco de dados. Define um relacionamento de herança à entidade. Mapeamento muitos para um (N:1). Mapeamento um para muitos (1:N). Mapeamento um para um (1:1). 16712855225

Conforme vimos em aula, trata-se da anotação @Transient. Gabarito: B 19. (FCC - 2011 - TRT - 19ª Região (AL) - Técnico Judiciário - Tecnologia da Informação Os estados do ciclo de vida de uma instância de uma entidade, definidos na JPA 2.0, são: Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 19 de 91

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05

a) novo (new), gerenciado (managed), destacado (detached) e removido (removed). b) ativo (active), inativo (inactive) e removido (removed). c) novo (new), temporário (temporary), permanente (permanent) e destacado (detached). d) novo (new), temporário (temporary) e destacado (detached) e) gerenciado (managed), temporário (temporary), permanente (permanent) e destacado (detached). Comentários: O ciclo de vida dos objetos de entidade consiste em quatro estados: Novo (New), Gerenciado (Managed), Removido (Removed) e Destacado (Detached). Quando um objeto é criado inicialmente seu estado é Novo. Nesse estado, o objeto ainda não está associado a um EntityManager e não possui qualquer representação no banco de dados. Bacana? Conforme vimos em aula, trata-se da primeira opção! Gabarito: A (FEPESE - 2013 - JUCESC - Analista Técnico em Gestão de Registro Mercantil Analista de Informáti Em relação à JPA e Hibernate, considere as seguintes afirmativas. 16712855225

1. JPA especifica uma JSR. 2. Hibernate especifica uma JSR. 3. Hibernate cuida da camada de persistência enquanto JPA da camada de transação. 4. Hibernate é uma implementação de JSR. 5. JPA é uma implementação de JSR. Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 20 de 91

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05

Assinale a alternativa que indica todas as afirmativas corretas. a) São corretas apenas as afirmativas 1 e 4. b) São corretas apenas as afirmativas 2 e 3. c) São corretas apenas as afirmativas 3 e 4. d) São corretas apenas as afirmativas 1, 2 e 3. e) São corretas apenas as afirmativas 3, 4 e 5 Comentários: Que tal, agora, entrar mais a fundo no JPA? Bem, os frameworks do mercado possuíam algumas diferenças! A Sun MicroSystems, então, fez uma proposta ao líder do Projeto Hibernate: fazer uma especificação com o objetivo de padronizar os frameworks de mapeamento objeto-relacional! Para tal, ele pegou as melhores ideias do Hibernate, TopLink, JDO, etc e condensou em uma especificação. (1) Quando se cria uma especificação, dá-se um Número de JSR (Ex: JPA é JSR 338; JTA é JSR 907; JMS é JSR 914; JSF é JSR 314, etc), portanto JPA especifica, sim, uma JSR; (2) Não, Hibernate implementa uma JSR; (3) Não, JPA também cuida da Camada de Persistência; (4) Perfeito, é uma implementação de JSR; (4) Não, JPA é uma especificação de JSR. Gabarito: A 21. (FCC - 2011 – TCE/PR – Analista de Sistemas A JPA: a) pode ser usada fora de componentes EJB e fora da plataforma Java EE, em aplicações Java SE. 16712855225

b) utiliza persistência gerenciada por contêiner (CMP), ou seja, as classes de entidade e persistência necessitam de um contêiner presente em um servidor de aplicações para serem executadas. c) utiliza descritores XML para especificar informações do mapeamento relacional de objeto, mas não oferece e a anotações. d) a consultas dinâmicas nomeadas nas classes de entidade que são adas apenas por instruções SQL nativas.

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 21 de 91

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05

e) possui uma interface EntityBeans que padroniza operações Create Read Update Delete (CRUD) que envolvem tabelas. Comentários: E foi assim que surgiu o Java Persistence API (JPA)! Olha que engraçado: a especificação surgiu após as implementações! Como uma das vantagens, pode-se trocar de implementação (Ex: Hibernate para TopLink) sem a necessidade de modificar o código-fonte. Enfim, ele foi incorporado ao EJB 3.0 (apesar de ser independente dessa), permitindo sua utilização em Ambientes Java SE e Java EE. (a) Conforme vimos em aula, pode ser usada independente do EJB 3.0, inclusive em Ambiente Java SE. (b) Esse item é obsoleto atualmente. Não vale a pena discuti-lo, vai confundir a cabeça de vocês. Está errado! Essas ferramentas facilitam o mapeamento dos atributos de uma base de dados relacional para o modelo de objetos de uma aplicação por meio de Descritores de Implantação (XML) ou Anotações (Annotations) – principalmente para consultas e atualizações de dados. O desenvolvedor define como os objetos são mapeados e o framework faz o resto – a o banco, gera os comandos SQL, etc. (c) Conforme vimos em aula, pode-se utilizar Descritores de Implantação (XML) e Anotações (Annotations).  Java Persistence API (JPA): define um mapeamento objeto/relacional para gerenciamento de dados relacionais; 16712855225

 Java Persistence Query Language (JPQL): define queries, em geral, estáticas, para entidades e seus estados persistentes;  Java Persistence Criteria API (JPCA): define queries, em geral, dinâmicas para entidades e seus estados persistentes;  Mapeamento de Metadados O/R: define um mapeamento por meio de Descritores de Implantação (XML) ou Anotações (Annotations). (d) Conforme vimos em aula, pode-se utilizar JPQL e JPCA, com o feito por SQL ou Java. Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 22 de 91

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05

Galera, vocês sabem o que é um EntityManager? Trata-se de uma interface que funciona como serviço centralizado para todas as ações de persistência – mapeando um conjunto de classes para um banco de dados particular. Em outras palavras, ele é responsável por realizar operações de sincronismo com o Banco de Dados (Inserir, Remover, Atualizar e Consultar), além de gerenciar o ciclo de vida das entidades. (e) Conforme vimos em aula, o responsável por isso é a interface EntityManager. Gabarito: A (FCC - 2011 - TRT - 23ª REGIÃO (MT) - Técnico Judiciário - Tecnologia da Informação) Em relação à JPA (Java Persistence API) é INCORRETO afirmar que:

a) @NamedQuery é aplicada para definir várias consultas. b) @Entity define que haverá correspondência da classe com uma tabela do banco de dados. c) @Id define que o atributo que está mapeado com tal anotação corresponderá à chave primária da tabela. 16712855225

d) @Column(name = "id", nullable = false) define que o atributo da classe mapeado com tal anotação deve estar associado à coluna cujo nome é "id", além de definir que tal campo não pode ser nulo. e) @OneToMany indica que o atributo contém um conjunto de entidades que a referenciam. Comentários:

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 23 de 91

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05

ANOTAÇÃO @Entity @Table @Column @Id @namedQuery @namedQueries @UniqueConstraint @Transient @Inheritance @ManyToOne @OneToMany @OneToOne

DESCRIÇÃO Indica que uma classe é uma entidade que deve ser persistida como tabela. Indica o nome de uma tabela para qual a entidade é mapeada. Indica que um atributo de uma classe é uma coluna de uma tabela. Indica que um atributo é a chave primária de uma entidade. Define uma consulta. Define várias consultas. Indica que uma propriedade não pode conter valores duplicados. Indica que uma propriedade não deve ser persistida no banco de dados. Define um relacionamento de herança à entidade. Mapeamento muitos para um (N:1). Mapeamento um para muitos (1:N). Mapeamento um para um (1:1).

Conforme vimos em aula, namedQuery define apenas uma consulta! A Anotação namedQueries é quem define diversas consultas! Gabarito: A ACERTEI

ERREI

16712855225

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 24 de 91

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05

HIBERNATE

Galera, Java começou a ficar extremamente popular em ambientes corporativos, mas havia um problema que estava incomodando os desenvolvedores: produtividade estava prejudicada porque eles estavam perdendo muito tempo nas codificações de Queries SQL e em códigos JDBC. E quando era necessário mudar o banco de dados por um de outro fabricante? O que fazer? Além disso, Java ajudou a divulgar o Paradigma Orientado a Objetos, em que informações eram representadas por meio de classes, atributos, herança, polimorfismo, encapsulamento, etc. Isso gerava conflito com o Paradigma Relacional dos bancos de dados, em que as informações eram representadas por meio de tabelas, colunas, linhas, chaves primárias, chaves estrangeiras, etc. Pois bem! Era trabalhoso transformar objetos de uma classe em registros de uma tabela e vice-versa. Logo, começaram a surgir alguns frameworks que auxiliavam essa tarefa – são as famosas Ferramentas de ORM – Object-Relational Mapping (ou Mapeamento Objeto-Relacional). As mais conhecidas eram Hibernate e TopLink – a primeira, livre, open-source, tornou-se uma referência mundial3. Essas ferramentas facilitam o mapeamento dos atributos de uma base de dados relacional para o modelo de objetos de uma aplicação por meio de mapeamentos, como Descritores de Implantação (XML) ou Anotações (Annotations) – principalmente para consultas e atualizações de dados. O desenvolvedor define como os objetos são mapeados e o framework faz o resto. 16712855225

O trabalho do desenvolvedor é definir como os objetos são mapeados nas tabelas do banco de dados e o Hibernate faz todo o o ao banco, gerando inclusive o código SQL necessário – não é necessário fazer SELECT, UPDATE, INSERT, DELETE, etc!

3

Hibernate tornou-se um framework tão popular que acabou por ser utilizado como referência para construção da Especificação de Persistência Java (JPA). Apesar disso, ele também é oferecido para executar a mesma função na plataforma .NET é o famoso NHibernate.

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 25 de 91

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05

Permite fazer uma persistência automática entre classes e tabelas, propriedades e colunas, associações e chaves estrangeiras, tipos Java e tipos SQL, entre outros.

OBSERVAÇÕES O Mapeamento Objeto-Relacional (ORM) funciona com a transformação dos dados de um objeto em uma tupla (linha) de uma tabela de um banco de dados, ou de forma inversa, com a transformação de uma tupla (linha) da tabela em um objeto da aplicação – é um relacionamento bidirecional. Quando utilizamos o Hibernate para realizar consultas no banco de dados, temos a oportunidade de trabalhar com SQL (Structured Query Language), HQL (Hibernate Query Language) e com Criteria Query API. Esta última fornece uma maneira elegante de construção de queries dinâmicas para consultas no banco de dados. A API é uma alternativa às Consultas HQL e também ao SQL tradicional. Lembrando que o HQL é uma linguagem muito parecida com o SQL. No entanto, comparado a este último, o HQL é totalmente orientado a objetos, e compreende noções de herança, polimorfismo e associações. Dessa forma, ele se aproxima mais das regras de negócio das aplicações, visto que essas também são escritas em geral em um paradigma orientado a objetos. Vocês percebem a diferença entre essas duas linguagens de consulta? SQL é uma linguagem relacional e HQL é uma linguagem orientada a objetos. A sintaxe é bastante parecida, inclusive existem várias cláusulas em comum, mas elas operam sobre objetos persistentes e suas propriedades em vez de tabelas e colunas. Bacana? Nice! ;-) Christian Bauer afirma que o Hibernate é uma ferramenta que transforma os dados da estrutura lógica de um banco de dados em objetos definidos pel desenvolvedor. Usando o Hibernate, não há a necessidade de escrever muito do código de manipulação de banco de dados, pois ele utiliza HQL, acelerando a velocidade do seu desenvolvimento de uma forma fantástica. 16712855225

Ele continua por dizer que se pode mudar a qualquer momento o SGDB utilizado. O framework não é uma boa ferramenta para aplicações que fazem uso extensivo de stored procedures, triggers ou que implementam a maior parte da lógica da aplicação no banco de dados, contando com um modelo de objetos simples - não vai se beneficiar com o uso do Hibernate.

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 26 de 91

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05

Vocês sacaram? Ele é mais indicado para sistemas que contam com um modelo mais rico, em que a maior parte da lógica de negócios fica na própria aplicação, dependendo pouco de funções específicas do banco de dados. Ora, se a lógica de negócio estiver no banco de dados, não faz muito sentido utilizar o Hibernate, porque ele continuará manipulando o banco de dados diretamente.

OBSERVAÇÕES Quando da utilização de Hibernate, não é proibitiva a utilização de SQL! Galera... vejam só: é muito difícil trabalhar com dois paradigmas conceituais diferentes. Antigamente, perdia-se muito tempo criando instruções SQL para transformar objetos em tuplas do banco de dados - esse era um processo exaustivo e cheio de falhas. O Mapeamento Objeto-Relacional propõe a transformação de classes e objetos em tabelas e tuplas de maneira fácil e reutilizável. Em vez de o desenvolvedor criar todas as instruções SQL, ele pode utilizar um framework sem sair do paradigma de orientação a objetos e de maneira transparente. Assim, todo aquele trabalho árduo de codificação e testes se resume a algumas configurações e um mínimo de código, sem manter um contato direto com o banco de dados. O Hibernate fornece o papel de persistência, de forma praticamente transparente para o programador, i.e., ele praticamente só usa anotações e interfaces! Além do oferecer Mecanismos de ORM, o framework também pode trabalhar com um sistema de cache das informações do banco de dados, aumentando ainda mais a performance das aplicações. O esquema de cache é complexo e extensível, existindo diversas implementações possíveis. Um recurso interessante é o Query Cache, que permite fazer um cache das queries executadas diversas vezes. 16712855225

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 27 de 91

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05 HIBERNATE: ARQUITETURA

A imagem abaixo mostra de maneira absurdamente abstrata uma sugestão de arquitetura em que o Hibernate funciona como uma Camada de Persistência que conecta os objetos da aplicação a uma base de dados relacional. As classes, interfaces e outros componentes são definidos no pacote org.hibernate. Além disso, existem três arquivos de configuração: hibernate.cfg.xml, hibernate.properties e hbm.xml.

Qual a diferença entre eles, professor? O primeiro e o segundo executam a mesma função, i.e., configurar um serviço hibernate. Se ambos estiverem configurados, o primeiro sobrescreve o segundo. Ele contém informações sobre o local em que se encontra o banco de dados; conexões, usuário, senha, propriedades; tipo de cache utilizado; local onde se encontram os caminhos para os arquivos hbm.xml; etc: http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <session-factory> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver <property name="hibernate.connection.url">jdbc:mysql://localhost/banco_dados <property name="hibernate.connection.name"> <property name="hibernate.connection."/>senha <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect <property name="show_sql">true <property name="hibernate.format_sql">true <property name="hibernate.generate_statistics">true <mapping resource="classePOJO.hbm.xml"/> 16712855225

Observem também que ele configura a SessionFactory, que é a classe utilizada pelo Hibernate para interagir com o banco de dados por meio de sessões. Por fim, o arquivo hbm.xml é responsável por mapear o banco de dados, informando o nome da tabela, tipo de dados, identificadores, entre outros – como pode ser visto representado no código abaixo.

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 28 de 91

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05 http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <property column="nome" name="nome" length="50" type="java.lang.String"/> <property column="email" name="email" length="50" type="java.lang.String"/> <property column="data_nascimento" name="data_nascimento" type="java.util.Date"/>

Em outras palavras, o primeiro arquivo trata principalmente da interação com o banco de dados. Já o segundo trata do mapeamento de classe do modelo de domínio orientado a objetos para uma base de dados relacional. É uma boa prática de programação criar um arquivo de mapeamento hbm.xml individuais para cada classe de persistência4 e, então, referenciá-la e mapeá-la no cfg.xml.

Prosseguindo... há ainda uma forma de representar a arquitetura de maneira mais ampla, conforme é apresentado na imagem acima! Observem que entre a Aplicação e o Banco de Dados, temos uma camada de persistência do Hibernate (com seus componentes – alguns opcionais) e temos uma camada de APIs (JNDI, JDBC e JTA). Vamos ver alguns desses componentes responsáveis por controlar transações: 16712855225

 Session (org.hibernate.Session): trata-se de um objeto leve, single-threaded, de vida curta que representa uma comunicação entre a aplicação e os objetos persistentes, através de uma conexão JDBC. É criada por uma SessionFactory e é instanciada cada vez que uma interação com o banco de dados for necessária. É por meio dela que objetos persistentes são salvos e recuperados.

4

Classes Persistentes não precisam implementar interfaces ou herdar de uma classe-base especial!

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 29 de 91

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05

 SessionFactory (org.hibernate.SessionFactory): trata-se de um objeto pesado, thread-safe e imutável de coleções de mapeamentos objeto-relacional para um único banco de dados – deve existir apenas uma instância na aplicação. É uma fábrica de sessões e é necessário um SessionFactory por banco de dados utilizando um arquivo de configuração separado – semelhante ao EntityManagerFactory do JPA.  Transaction (org.hibernate.Transaction): trata-se de um objeto single-threaded de vida curta utilizado por uma aplicação para especificar unidades indivisíveis e atômicas de uma operação de manipulação de dados. Ele abstrai os detalhes de transações de camadas inferiores, sendo opcional – o desenvolvedor escolhe se o utiliza ou se gerencia transações em seu próprio código de aplicação.  Configuration (org.hibernate.Configuration): trata-se de um objeto utilizado para realizar as configurações de inicialização do Hibernate. Por meio dele, definem-se diversas configurações (driver de banco, dialeto, etc) e, a partir de uma instância desse objeto, indica-se como os mapeamentos entre classes e tabelas de banco de dados devem ser realizados.

OBSERVAÇÕES Classes Persistentes são aquelas que implementam as entidades de domínio de negócio! O Hibernate trabalha associando cada tabela do banco de dados a um POJO (Plain Old Java Object) – que nada mais é que um objeto simples que possui um construtor padrão sem argumentos.

16712855225

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 30 de 91

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05 HIBERNATE: CICLO DE VIDA DA PERSISTÊNCIA

Agora vamos falar um pouco sobre os estados de um objeto no Hibernate! Nas diversas aplicações existentes, sempre que for necessário propagar o estado de um objeto que está em memória para o banco de dados ou vice-versa, há a necessidade de que a aplicação interaja com uma camada de persistência. Isto é feito, invocando o gerenciador de persistência e as interfaces de consultas do Hibernate. Quando interagindo com o mecanismo de persistência, é necessário ter conhecimento sobre os estados do ciclo de vida. Em aplicações orientadas a objetos, a persistência permite que um objeto continue a existir mesmo após a destruição do processo que o criou. Na verdade, o que continua a existir é seu estado, já que pode ser armazenado em disco e então ser recriado em um novo objeto. 16712855225

Galera, um objeto de classes persistentes pode estar em um dos três diferentes estados: Transiente (Transient), Persistente (Persistent) ou Desanexado (Detached), como nós podemos ver representado na imagem acima! Bem, vamos falar agora um pouquinho sobre cada um desses estados – eu recomendo que vocês entendam bem o funcionamento:

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 31 de 91

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05

 Transiente: a instância não esteve nem está associada a um contexto persistente, isto é, não há uma representação no banco de dados, nem um valor identificador. Ela é instanciada, utilizada, destruída e não pode ser reconstruída de forma automática.  Persistente: a instância está atualmente associada a um contexto persistente, isto é, há uma representação no banco de dados e um valor identificador. Qualquer mudança em um objeto nesse estado é detectada e sincronizada com a base de dados.  Desanexado: a instância foi associada a um contexto persistente5, no entanto não está mais associada por alguma razão (Ex: Fim de sessão). Ainda existe uma referência, o objeto ainda pode ser modificado e essas modificações podem futuramente ser persistidas – trata-se de um estado intermediário. O processo funciona assim: cria-se, inicialmente, o objeto POJO! Ele estará em estado transiente, i.e., não foi persistido, não representa uma linha no banco de dados e não está associado a uma sessão. Quando o objeto é salvo ou atualizado, ele finalmente é persistido, i.e., representa uma linha no banco de dados e está associado a uma única sessão. Caso o objeto seja despejado, fechado ou o cache seja limpado, ele se torna desanexado, i.e., ele tem uma entrada no banco de dados, porém não está conectado a nenhuma sessão. Caso ele seja atualizado, salvo, atualizado ou trancado, ele volta para o estado persistente. E se, depois disso, ele for deletado, volta para o estado transiente.

16712855225

5

Contexto Persistente é outro nome para o objeto Session do Hibernate.

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 32 de 91

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05 HIBERNATE: ANOTAÇÕES E TIPOS DE MAPEAMENTO

Para finalizar, vamos falar um pouco sobre anotações! As anotações podem ser definidas como metadados que aparecem no código fonte e são ignorados pelo compilador. Qualquer símbolo em um código Java que comece com uma @ (arroba) é uma anotação. Este recurso foi introduzido na linguagem Java a partir da versão Java SE 5.0. As anotações mais comuns são:

ANOTAÇÃO

@Table

@Id

DESCRIÇÃO Utilizada para especificar detalhes da tabela que serão utilizados para persistir entidades na base de dados. Caso essa anotação seja omitida, não resultará em erro, porém será utilizado o nome da classe como valor default. Dessa forma, apenas definimos a anotação se quisermos sobrescrever o nome da classe. Possui os atributos: name, catalog, schema. Utilizada para especificar qual propriedade da tabela será a identificadora, isto é, será a chave primária. Pode ser um campo único ou a combinação de múltiplos campos dependendo da estrutura da tabela.

Utilizada para especificar detalhes da coluna para o qual um campo ou propriedade será mapeado. Pode-se utilizar essa anotação com os atributos: @Column name, length, nullable e unique.

Utilizada para marcar uma classe como uma Entidade ou POJO. Deve conter um construtor sem argumentos que seja visível com o menor escopo de proteção. 16712855225

@Entity

Em outras palavras, as anotações marcam partes de objetos de forma que tenham algum significado especial. Quanto ao mapeamento, devemos ter alguns cuidados especiais com seus tipos! Como assim, professor? Quando preparamos um documento de mapeamento de tipos, nós mapeamos tipos de dados Java para tipos de dados usados em bases de dados relacionais.

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 33 de 91

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05

Os tipos declarados e utilizados nos arquivos de mapeamento não são tipos de dados Java nem tipos de dados SQL – eles são denominados Tipos Hibernate e podem traduzir do Java para SQL e vice-versa. Entenderam bem? Eles podem até ter nomes parecidos, mas não são iguais (Hibernate: float; Java: Float; SQL: FLOAT). Vejamos a tabela abaixo com os tipos primitivos:

Tipo de Mapeamento integer long short float double big_decimal character string byte boolean yes/no true/false

Tipo Java int or java.lang.Integer long or java.lang.Long short or java.lang.Short float or java.lang.Float double or java.lang.Double java.math.BigDecimal java.lang.String java.lang.String byte or java.lang.Byte boolean or java.lang.Boolean boolean or java.lang.Boolean boolean or java.lang.Boolean

Tipo SQL INTEGER BIGINT SMALLINT FLOAT DOUBLE NUMERIC CHAR(1) VARCHAR TINYINT BIT CHAR(1) ('Y' or 'N') CHAR(1) ('T' or 'F')

Vamos ver um exemplo de uma Tabela EMPREGADO: create table EMPREGADO ( id INT NOT NULL auto_increment, primeiro_nome VARCHAR(20) default NULL, ultimo_nome VARCHAR(20) default NULL, salario INT default NULL, PRIMARY KEY (id) );

Abaixo podemos ver o mapeamento da Classe Empregado com anotações para mapear objetos definidos na tabela EMPREGADO: 16712855225

import javax.persistence.*; @Entity @Table(name = "EMPREGADO") public class Empregado { @Id @GeneratedValue @Column(name = "id") private int id; @Column(name = "primeiro_nome") private String primeiroNome; @Column(name = "ultimo_nome") private String ultimoNome;

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 34 de 91

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05 @Column(name = "salario") private int salario; public Empregado() {} public int getId() { return id; } public void setId( int id ) { this.id = id; } public String getPrimeiroNome() { return primeitoNome; } public void setPrimeiroNome( String primeiro_nome) { this.primeiroNome= primeiro_nome; } public String getUlitmoNome() { return ultimoNome; } public void setUltimoNome( String ultimo_nome) { this.ultimoNome = ultimo_nome; } public int getSalario() { return salario; } public void setSalario( int salario) { this.salario = salario; } }

Agora vamos analisar as anotações! O Hibernate detecta a anotação @Id em um campo, assume que ele deve ser uma chave primária e deverá ar as propriedades de um objeto diretamente através desse campo em tempo de execução. Se colocássemos essa anotação no método getId( ), permitiríamos o o às propriedades através de métodos getters e setters. Da mesma forma, todas as outras anotações também são colocadas em campos ou métodos, dependendo da estratégia adotada. A anotação @Entity marca a classe como um POJO, já a anotação @Table especifica detalhes da tabela que será persistida, isto é, seu nome será “EMPREGADO”. A anotação @GeneratedValue determina a chave primária mais apropriada em termos de portabilidade. 16712855225

Galera, vamos falar agora rapidamente também sobre as associações! O termo associação é utilizado para se referir aos relacionamentos entre as entidades. Os relacionamentos 1-para-1 (um-para-um), 1-para-n (um-para-muitos) e n-para-n (muitos-para-muitos) são os mais comuns entre as entidades de um banco de dados. Bacana? O relacionamento um-para-1) é bem simples de entender. Basta verificar relação noivo e noiva. Ora, um noivo só possui uma noiva e uma noiva só possui

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 35 de 91

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05

um noivo. Outro exemplo: um número de identidade só se refere a uma pessoa e uma pessoa só tem um número de identidade. Tranquilo de entender, não é? A anotação utilizada para esse mapeamento é @OneToOne. O relacionamento um-para-muitos (1-n) é bem simples de entender. Basta verificar a relação entre time de futebol e jogador . Ora, um time de futebol tem vários jogadores, mas um jogador só joga em um time de futebol. Outro exemplo: um órgão tem vários servidores, mas um servidor pertence a um único órgão. Tranquilo de entender, não é? A anotação utilizada para esse mapeamento é @OneToMany. O relacionamento muitos-para-muitos (n-n) é também bem fácil de entender. Basta verificar a relação entre times de futebol e campeonatos de futebol. Ora, um time de futebol joga vários campeonatos e um campeonato contém vários times de futebol. Tranquilo de entender, não é? A anotação utilizada para esse mapeamento é @ManyToMany. Certinho? Galera, a operação simples de ar uma base de dados é uma operação muito custosa, mesmo quando se trata de uma simples consulta. Aliás, uma simples consulta, por exemplo, envolve uma requisição para o servidor, o banco de dados deve compilar essa consulta, rodar e retornar um resultado que por sua vez será retornado ao cliente. A maioria das bases de dados utilizam caches para os resultados de uma consulta, caso essas consultas são executadas inúmeras vezes. Dessa forma, elimina-se o overhear de I/O do disco e tempo de compilação da consulta. No entanto, isso terá pouco valor caso exista um grande número de clientes fazendo diferentes solicitações. Além disso, mesmo quando temos um cache para os resultados, isso não elimina o tempo que levamos para transmitir a informação na rede, que é considerada a parte mais relevante do atraso. Algumas aplicações são capazes de tirar vantagens de aplicações contidas na própria base de dados, mas isso é uma exceção e tais bases de dados possuem suas limitações. 16712855225

Em vez disso, o mais apropriado é termos uma cache no cliente final que faz a conexão com a base de dados. Isto não é provido ou ado diretamente pela API JDBC, mas o Hibernate provê uma cache de nível um, também chamado de L1 ou simplesmente de cache, através da qual todas as requisições devem ar. Uma cache de segundo nível é opcional e configurável.

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 36 de 91

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05

A cache de nível um (L1) garante que dentro de uma session, requisições para um dado objeto da base de dados retornará sempre a mesma instância do objeto, prevenindo assim que um mesmo objeto seja carregado múltiplas vezes pelo Hibernate ou que a informação entre em conflito. Sobre esse assunto, é isso que vocês precisam saber.

16712855225

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 37 de 91

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05

(CESPE - 2010 - TRE-BA - Analista Judiciário - Análise de Sistemas No Hibernate, apenas a linguagem de consulta HQL (Hibernate Query Language) pode ser utilizada. A HQL executa os pedidos SQL sobre as classes de persistência do Java em vez de tabelas no banco de dados, o que diminui a distância entre o desenvolvimento das regras de negócio e o banco de dados. Comentários: Quando utilizamos o Hibernate para realizar consultas no banco de dados, temos a oportunidade de trabalhar com SQL (Structured Query Language), HQL (Hibernate Query Language) e com Criteria Query API. Esta última fornece uma maneira elegante de construção de queries dinâmicas para consultas no banco de dados. A API é uma alternativa às Consultas HQL e também ao SQL tradicional. Lembrando que o HQL é uma linguagem muito parecida com o SQL. No entanto, comparado a este último, o HQL é totalmente orientado a objetos, e compreende noções de herança, polimorfismo e associações. Dessa forma, ele se aproxima mais das regras de negócio das aplicações, visto que essas também são escritas em geral em um paradigma orientado a objetos. Conforme vimos em aula, pode-se utilizar SQL e Criteria Query API. A segunda parte afirma que o HQL atua sobre o modelo orientado a objetos em vez do modelo relacional, logo ele diminui a distância entre o desenvolvimento de regras de negócio e o banco de dados, porque – em geral – as regras de negócio são escritas seguindo o paradigma orientado a objetos. 16712855225

Gabarito: E (CESPE - 2009 - SECONT-ES - Auditor do Estado – Tecnologia da Informação O Hibernate, um framework de mapeamento objeto relacional (ORM), cria uma camada persistência na solução desenvolvida, o que permite ligar os objetos aos bancos de dados relacionais. Entre seus serviços, o Hibernate provê um meio de se controlar transações, por meio de métodos de suas interfaces session e

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 38 de 91

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05

transaction, tendo ainda e a herança e polimorfismo. É distribuído sob a licença LGPL, o que permite seu uso em projetos comerciais ou open source. Comentários: A imagem abaixo mostra de maneira absurdamente abstrata uma sugestão de arquitetura em que o Hibernate funciona como uma camada de persistência que conecta os objetos da aplicação a uma base de dados relacional. As classes, interfaces e outros componentes são definidos no pacote org.hibernate. Além disso, existem três arquivos de configuração: hibernate.cfg.xml, hibernate.properties e hbm.xml. Prosseguindo... há ainda uma forma de representar a arquitetura de maneira mais ampla, conforme é apresentado na imagem acima! Observem que entre a Aplicação e o Banco de Dados, temos uma camada de persistência do Hibernate (com seus componentes – alguns opcionais) e temos uma camada de APIs (JNDI, JDBC e JTA). Vamos ver alguns desses componentes responsáveis por controlar transações: Conforme vimos em aula, cria-se de fato uma camada de persistência, que contém componentes que controlam as transações com o banco de dados. Gabarito: C (CESPE - 2010 - TCU - Auditor Federal de Controle Externo - Tecnologia da Informação - Parte II Uma equipe de desenvolvimento de software recebeu a incumbência de desenvolver um sistema com as características apresentadas a seguir.  O sistema deverá ser integrado, interoperável, portável e seguro.  O sistema deverá apoiar tanto o processamento online, quanto o e a decisão e gestão de conteúdos.  O sistema deverá ser embasado na plataforma JEE (Java enterprise edition) v.6, envolvendo servlets, JSP (Java server pages), Ajax, JSF (Java server faces) 2.0, Hibernate 3.5, SOA e web services. 16712855225

O líder da equipe iniciou, então, um extenso processo de coleta de dados com o objetivo de identificar as condições limitantes da solução a ser desenvolvida e tomar decisões arquiteturais e tecnológicas que impactarão várias características funcionais e não funcionais do sistema, ao longo de seu ciclo de vida. A partir dessa coleta, o líder deverá apresentar à equipe um conjunto de informações e de decisões. A tecnologia Hibernate 3.5 é apropriada para o sistema a ser desenvolvido: entre as características que a credenciam, está o fato de ela possibilitar a recuperação de

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 39 de 91

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05

objetos por meio da formulação de queries em linguagens HQL (hibernate query language) e SQL (structured query language), bem como pelo uso de APIs (application programming interfaces) de busca por critério, entre outras. Comentários: Quando utilizamos o Hibernate para realizar consultas no banco de dados, temos a oportunidade de trabalhar com SQL (Structured Query Language), HQL (Hibernate Query Language) e com Criteria Query API. Esta última fornece uma maneira elegante de construção de queries dinâmicas para consultas no banco de dados. A API é uma alternativa às Consultas HQL e também ao SQL tradicional. Conforme vimos em aula, está perfeito! Vocês já notaram que isso cai bastante, né?! Gabarito: C ( SPE - CEHAP- Programador de computador No framework Hibernate, é comum que uma instância de uma classe persistente tenha três estados específicos. Assinale a opção que contém esses três estados. a) plugged, disconnected, timewait b) connected, disconnected, detached c) transient, persistent, detached d) transient, connected, timewait Comentários:

16712855225

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 40 de 91

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05

Conforme vimos em aula, trata-se do Transient, Persistent e Detached. Gabarito: C (CESPE - 2010 - DETRAN-ES - Analista de Sistemas O Hibernate, framework utilizado no desenvolvimento de consultas e atualização de dados em um banco relacional, foi criado para facilitar a integração entre programas em Java, funcionando também em ambientes .Net (NHibernate). Comentários: Nota de Rodapé: Hibernate tornou-se um framework tão popular que acabou por ser utilizado como referência para construção da Especificação de Persistência Java (JPA). Apesar disso, ele também é oferecido para executar a mesma função na plataforma .NET – é o famoso NHibernate. Conforme vimos em aula, está perfeito (com uma ressalva)! Ele não foi criado com o intuito de facilitar a integração entre Aplicações Java – não faz sentido! Ele foi criado com o intuito de facilitar a integração entre Aplicações Java e Bancos de Dados Relacionais, fazendo o mapeamento entre ambos os paradigmas. Bacana? Gabarito: C (CESPE - 2011 - Correios - Analista de Correios - Analista de Sistemas Desenvolvimento de Sistemas No Hibernate, o recurso Query Cache possibilita fazer o cache de queries que são executadas várias vezes. Comentários:

16712855225

Além do oferecer Mecanismos de ORM, o framework também pode trabalhar com um sistema de cache das informações do banco de dados, aumentando ainda mais a performance das aplicações. O esquema de cache é complexo e extensível, existindo diversas implementações possíveis. Um recurso interessante é o Query Cache, que permite fazer um cache das queries executadas diversas vezes. Conforme vimos em aula, a questão está perfeita! Gabarito: C

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 41 de 91

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05

(CESPE - 2013 - INPI - Analista de Planejamento - Desenvolvimento e Manutenção de Sistemas No Hibernate, caso o nome da classe seja diferente do nome da tabela mapeada, é necessário informar, na anotação @Table, o nome da tabela, por meio do atributo name. Comentários: ANOTAÇÃO @Table

DESCRIÇÃO Utilizada para especificar detalhes da tabela que serão utilizados para persistir entidades na base de dados. Caso essa anotação seja omitida, não resultará em erro, porém será utilizado o nome da classe como valor default. Dessa forma, apenas definimos a anotação se quisermos sobrescrever o nome da classe. Possui os atributos: name, catalog, schema.

Conforme vimos em aula, é exatamente isso! Sobrescreve-se o nome da tabela por meio do atributo name. Gabarito: C (CESPE - 2013 - SERPRO - Analista - Desenvolvimento de Sistemas Em Hibernate, a configuração de conexões de banco de dados deve ser feita somente por meio do uso de arquivo de propriedade. Comentários: A imagem abaixo mostra de maneira absurdamente abstrata uma sugestão de arquitetura em que o Hibernate funciona como uma camada de persistência que conecta os objetos da aplicação a uma base de dados relacional. As classes, interfaces e outros componentes são definidos no pacote org.hibernate. Além disso, existem três arquivos de configuração: hibernate.cfg.xml, hibernate.properties e hbm.xml. 16712855225

Qual a diferença entre eles, professor? O primeiro e o segundo executam a mesma função, i.e., configurar um serviço hibernate. Se ambos estiverem configurados, o primeiro sobrescreve o segundo. Ele contém informações sobre o local em que se encontra o banco de dados; conexões, usuário, senha, propriedades; tipo de cache utilizado; local onde se encontram os caminhos para os arquivos hbm.xml; etc: Conforme vimos em aula, pode ser feito por meio do arquivo de propriedades (hibernate.properties) ou arquivo de configuração (hibernate.cfg.xml). Gabarito: E

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 42 de 91

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05

(CESPE - 2014 - SUFRAMA - Analista de Sistemas) De acordo com o mapeamento mostrado abaixo, no Hibernate, a coluna Evento_ID manterá a chave primária da tabela Eventos.

Comentários:

ANOTAÇÃO

@Table

@Id

@Column

@Entity

DESCRIÇÃO Utilizada para especificar detalhes da tabela que serão utilizados para persistir entidades na base de dados. Caso essa anotação seja omitida, não resultará em erro, porém será utilizado o nome da classe como valor default. Dessa forma, apenas definimos a anotação se quisermos sobrescrever o nome da classe. Possui os atributos: name, catalog, schema. Utilizada para especificar qual propriedade da tabela será a identificadora, isto é, será a chave primária. Pode ser um campo único ou a combinação de múltiplos campos dependendo da estrutura da tabela. Utilizada para especificar detalhes da coluna para o qual um campo ou propriedade será mapeado. Pode-se utilizar essa anotação com os atributos: name, length, nullable e unique.

Utilizada para marcar uma classe como uma Entidade ou POJO. Deve conter um construtor sem argumentos que seja visível com o menor escopo de proteção. 16712855225

Conforme vimos em aula, houve o mapeamento da classe Evento para a Tabela Eventos, cujo atributo identificador “id” será a coluna “Evento_ID”. Gabarito: C 10. (CESPE - 2010 - TRE-BA - Programador de computador O Hibernate, um framework para o mapeamento objeto-relacional, é escrito na linguagem Java e, por isso, somente pode ser executado no ambiente Java.

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 43 de 91

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05

Comentários: Nota de Rodapé: Hibernate tornou-se um framework tão popular que acabou por ser utilizado como referência para construção da Especificação de Persistência Java (JPA). Apesar disso, ele também é oferecido para executar a mesma função na plataforma .NET – é o famoso NHibernate. Conforme vimos em aula, ele também pode ser executado em ambiente .NET. Gabarito: E 11. (CESPE - 2013 - MPOG - Técnico de Nível Superior - - Categoria Profissional 7 Quando se desenvolve um mapeamento com Hibernate, uma classe persistente criada não precisa implementar ou herdar qualquer classe especial do framework Hibernate. Comentários: Nota de Rodapé: Classes Persistentes não precisam implementar interfaces ou herdar de uma classe-base especial! Conforme vimos em aula, classes persistentes não precisam implementar interfaces ou herdar uma classe-base especial. Gabarito: C 12. (CESPE - 2013 - INPI - Analista de Planejamento - Desenvolvimento e Manutenção de Sistemas) O objeto Session Factory do Hibernate mantém o mapeamento objeto relacional na sessão. 16712855225

Comentários:  SessionFactory (org.hibernate.SessionFactory): trata-se de um objeto pesado, thread-safe e imutável de coleções de mapeamentos objeto-relacional para um único banco de dados – deve existir apenas uma instância na aplicação. É uma fábrica de sessões e é necessário um SessionFactory por banco de dados utilizando um arquivo de configuração separado – semelhante ao EntityManagerFactory do JPA. Conforme vimos em aula, é na sessão que se mantém o mapeamento objetorelacional. Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 44 de 91

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05

Gabarito: C 13. (CESPE - 2013 - INPI - Analista de Planejamento - Desenvolvimento e Manutenção de Sistemas) A Interface Criteria do Hibernate é utilizada para realizar consultas ao banco de dados. Comentários: Quando utilizamos o Hibernate para realizar consultas no banco de dados, temos a oportunidade de trabalhar com SQL (Structured Query Language), HQL (Hibernate Query Language) e com Criteria Query API. Esta última fornece uma maneira elegante de construção de queries dinâmicas para consultas no banco de dados. A API é uma alternativa às Consultas HQL e também ao SQL tradicional. Conforme vimos em aula, Criteria Query API é – sim – utilizada para consultas em bancos de dados. Gabarito: C 14. (CESPE - 2014 - SUFRAMA - Analista de Sistemas) Os tipos de mapeamento do Hibernate são considerados tipos de dados SQL e precisam de conversão para dados Java nas respectivas classes Java. Comentários: Os tipos declarados e utilizados nos arquivos de mapeamento não são tipos de dados Java nem tipos de dados SQL – eles são denominados Tipos Hibernate e podem traduzir do Java para SQL e vice-versa. Entenderam bem? Eles podem até ter nomes parecidos, mas não são iguais (Hibernate: date; Java: Date; SQL: DATE). Vejamos a tabela abaixo: 16712855225

Conforme vimos em aula, os tipos de mapeamento não são tipos SQL, muito menos Java – são Tipos Hibernate! Gabarito: E ACERTEI

Prof. Diego Carvalho

ERREI

www.estrategiaconcursos.com.br

Pág. 45 de 91

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05

(FCC - 2011 - TRT - 19ª Região (AL) - Técnico Judiciário - Tecnologia da Informação Linguagem de queries, fornecida pelo Hibernate, que é similar em aparência ao SQL e que, no entanto, é orientada a objeto e compreende noções como herança, polimorfismo e associação. Trata-se de: a) HiBD-QL. b) OOQL. c) ORM-QL. d) HQL. e) JEEQL. Comentários: Quando utilizamos o Hibernate para realizar consultas no banco de dados, temos a oportunidade de trabalhar com SQL (Structured Query Language), HQL (Hibernate Query Language) e com Criteria Query API. Esta última fornece uma maneira elegante de construção de queries dinâmicas para consultas no banco de dados. A API é uma alternativa às Consultas HQL e também ao SQL tradicional. Conforme vimos em aula, trata-se do HQL! Gabarito: D 16712855225

(FCC - 2010 - TRT - 8ª Região (PA e AP) - Analista Judiciário - Tecnologia da Informação Os três estados de objeto definidos pelo framework Hibernate são: a) Temporário (Temporary), Permanente (Permanent) e Resiliente (Resilient). b) Transiente (Transient), Persistente (Persistent) e Resiliente (Resilient). c) Temporário (Temporary), Persistente (Persistent) e Destacado (Detached). d) Transiente (Transient), Persistente (Persistent) e Destacado (Detached). e) Transiente (Transient), Permanente (Permanent) e Resiliente (Resilient). Comentários:

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 46 de 91

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05

Conforme vimos em aula, trata-se do Transiente, Persistente e Destacado. Gabarito: D (FCC - 2012 - TRE- Técnico Judiciário - Programação de Sistemas) Com relação ao framework Hibernate é correto afirmar: a) Permite fazer a persistência automatizada dos objetos em uma aplicação Java para as tabelas de um banco de dados relacional, utilizando metadados (descrição dos dados) que descrevem o mapeamento entre os objetos e o banco de dados. b) É uma boa opção apenas para sistemas que fazem muito uso de stored procedures, triggers ou que implementam a maior parte da lógica da aplicação no banco de dados vai se beneficiar mais com o uso do Hibernate. 16712855225

c) Permite enviar unidirecionalmente uma representação de dados de um banco de dados relacional para um modelo de objeto utilizando um esquema baseado exclusivamente em Hibernate Query Language (HQL). d) A Java Persistence API (JPA) implementa o Hibernate, que é parte do Enterprise JavaBeans 4.0.

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 47 de 91

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05

e) Em uma aplicação criada com Hibernate, para cada classe de persistência é necessário criar um arquivo de mapeamento XML que deve ser salvo obrigatoriamente com o nome da classe seguido pelo sufixo .map.xml. Comentários: O trabalho do desenvolvedor é definir como os objetos são mapeados nas tabelas do banco de dados e o Hibernate faz todo o o ao banco, gerando inclusive os comandos SQL necessários – não é necessário fazer SELECT, UPDATE, INSERT, DELETE, etc! Permite fazer uma persistência automática entre classes e tabelas, propriedades e colunas, associações e chaves estrangeiras, tipos Java e tipos SQL, entre outros. Essas ferramentas facilitam o mapeamento dos atributos de uma base de dados relacional para o modelo de objetos de uma aplicação por meio de mapeamentos, como Descritores de Implantação (XML) ou Anotações (Annotations) – principalmente para consultas e atualizações de dados. O desenvolvedor define como os objetos são mapeados e o framework faz o resto! (a) Conforme vimos em aula, tudo está perfeito! Ele continua por dizer que vale lembrar que se pode mudar a qualquer momento o SGDB utilizado. O framework não é uma boa ferramenta para aplicações que fazem uso extensivo de stored procedures, triggers ou que implementam a maior parte da lógica da aplicação no banco de dados, contando com um modelo de objetos simples - não vai se beneficiar com o uso do Hibernate. (b) Conforme vimos em aula, esses não irão se beneficiar! Quando utilizamos o Hibernate para realizar consultas no banco de dados, temos a oportunidade de trabalhar com SQL (Structured Query Language), HQL (Hibernate Query Language) e com Criteria Query API. Esta última fornece uma maneira elegante de construção de queries dinâmicas para consultas no banco de dados. A API é uma alternativa às Consultas HQL e também ao SQL tradicional. 16712855225

(c) Conforme vimos em aula, não é exclusivamente HQL – há ainda HQL e Criteria. Ademais, é uma relação bidirecional! Nota de Rodapé: Hibernate tornou-se um framework tão popular que acabou por ser utilizado como referência para construção da Especificação de Persistência Java

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 48 de 91

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05

(JPA). Apesar disso, ele também é oferecido para executar a mesma função na plataforma .NET – é o famoso NHibernate. (d) Conforme vimos em aula, Hibernate implementa JPA (e, não, o contrário)! Em outras palavras, o primeiro arquivo trata principalmente da interação com o banco de dados. Já o segundo trata do mapeamento de classe do modelo de domínio orientado a objetos para uma base de dados relacional. É uma boa prática de programação criar um arquivo de mapeamento hbm.xml individuais para cada classe de persistência e, então, referenciá-la e mapeá-la no cfg.xml. (e) Conforme vimos em aula, pode-se usar annotations. Ademais, o sufixo seria hbm.xml. Gabarito: A (FCC - 2010 - TRT - 22ª Região (PI) - Técnico Judiciário - Tecnologia da Informação) Hibernate é um framework: a) que separa as funções que envolvem a construção de aplicações Web, através da associação dos eventos do lado cliente com os manipuladores dos eventos do lado do servidor. b) pelo qual o programador utiliza a infraestrutura do servidor de aplicação voltada para o desenvolvimento de aplicações de missão crítica e de aplicações empresariais em geral. c) no qual as questões de infraestrutura, segurança, disponibilidade e escalabilidade são responsabilidade do servidor de aplicações, permitindo que o programador se concentre, apenas, nas necessidades do negócio do cliente. 16712855225

d) que permite ao desenvolvedor de páginas para internet produzir aplicações que em o banco de dados, manipulem arquivos no formato texto e capturem informações a partir de formulários. e) cujo objetivo é diminuir a complexidade entre os programas Java que precisam trabalhar com um banco de dados do modelo relacional. Comentários:

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 49 de 91

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05

O trabalho do desenvolvedor é definir como os objetos são mapeados nas tabelas do banco de dados e o Hibernate faz todo o o ao banco, gerando inclusive os comandos SQL necessários – não é necessário fazer SELECT, UPDATE, INSERT, DELETE, etc! Permite fazer uma persistência automática entre classes e tabelas, propriedades e colunas, associações e chaves estrangeiras, tipos Java e tipos SQL, entre outros. (e) Conforme vimos em aula, seu objetivo é fazer um mapeamento para persistência automática – reduzindo a complexidade entre programas que precisam trabalhar com o modelo relacional. Gabarito: E (FCC - 2007 - TRE-SE - Analista Judiciário - Tecnologia da Informação) Sendo um grupo de classes e componentes responsáveis pelo armazenamento e recuperação de dados, esta camada inclui necessariamente um modelo das entidades do domínio de negócios (mesmo que seja somente um modelo de metadados). No âmbito do mapeamento objeto-relacional (hibernate) esta é a camada de: a) negócio. b) restrição. c) apresentação. d) consistência. e) persistência. Comentários: A imagem abaixo mostra de maneira absurdamente abstrata uma sugestão de arquitetura em que o Hibernate funciona como uma Camada de Persistência que conecta os objetos da aplicação a uma base de dados relacional. As classes, interfaces e outros componentes são definidos no pacote org.hibernate. Além disso, existem três arquivos de configuração: hibernate.cfg.xml, hibernate.properties e hbm.xml. 16712855225

Conforme vimos em aula, a camada responsável pelo armazenamento e recuperação de dados é a Camada de Persistência. Gabarito: E (FCC - 2007 - MPU - Analista de Informática - Desenvolvimento de Sistemas) Objetos que têm uma representação no banco de dados, mas não fazem mais Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 50 de 91

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05

parte de uma sessão do Hibernate, o que significa que o seu estado pode não estar mais sincronizado com o banco de dados, são do tipo: a) transient. b) detached. c) attached. d) persistent. e) consistent. Comentários: Galera, um objeto de classes persistentes pode estar em um dos três diferentes estados: Transiente (Transient), Persistente (Persistent) ou Desanexado (Detached), como nós podemos ver representado na imagem acima! Bem, vamos falar agora um pouquinho sobre cada um desses estados – eu recomendo que vocês entendam bem o funcionamento:  Transiente: a instância não esteve nem está associada a um contexto persistente, isto é, não há uma representação no banco de dados, nem um valor identificador. Ela é instanciada, utilizada, destruída e não pode ser reconstruída de forma automática.  Persistente: a instância está atualmente associada a um contexto persistente, isto é, há uma representação no banco de dados e um valor identificador. Qualquer mudança em um objeto nesse estado é detectada e sincronizada com a base de dados.  Desanexado: a instância foi associada a um contexto persistente, no entanto não está mais associada por alguma razão (Ex: Fim de sessão). Ainda existe uma referência, o objeto ainda pode ser modificado e essas modificações podem futuramente ser persistidas – trata-se de um estado intermediário. 16712855225

Conforme vimos em aula, trata-se do Tipo Detached (Desanexado)! Gabarito: B (FCC - 2010 - TRT - 8ª Região (PA e AP) - Analista Judiciário - Tecnologia da Informação) Em sua essência, o Hibernate é um framework para: a) mapeamento objeto-relacional (ORM). Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 51 de 91

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05

b) desenvolvimento de aplicações de Internet rica (Rich Internet Application RIA). c) implementação da camada Controller do padrão MVC (Model - View Controller). d) construção de aplicações utilizando-se inversão de controle (IoC). e) injeção de dependência (dependency injection) em aplicativos. Comentários: Pois bem! Era trabalhoso transformar objetos de uma classe em registros de uma tabela e vice-versa. Logo, começaram a surgir alguns frameworks que auxiliavam essa tarefa – são as famosas Ferramentas de ORM – Object-Relational Mapping (ou Mapeamento Objeto-Relacional). As mais conhecidas eram Hibernate e TopLink – a primeira, livre, open-source, tornou-se uma referência mundial. Conforme vimos em aula, trata-se de um framework para mapeamento objetorelacional. Gabarito: A (FCC - 2012 - TRF - REGIÃO - Técnico Judiciário - Informática) Quando se cria uma aplicação Java utilizando um recurso de Mapeamento Objeto-Relacional como o Hibernate, o mapeamento entre classes e tabelas, propriedades e colunas, associações e chaves estrangeiras, tipos do Java e tipos do SQL, é feito através de metadados. Esses metadados normalmente podem ser colocados em arquivos XML ou diretamente nas classes, próximos da informação que eles descrevem. Quando são colocados nas classes, esses metadados são conhecidos como: 16712855225

a) mappings. b) annotations. c) descriptions. d) patterns. e) actions. Comentários: Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 52 de 91

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05

Essas ferramentas facilitam o mapeamento dos atributos de uma base de dados relacional para o modelo de objetos de uma aplicação por meio de mapeamentos, como Descritores de Implantação (XML) ou Anotações (Annotations) – principalmente para consultas e atualizações de dados. O desenvolvedor define como os objetos são mapeados e o framework faz o resto. Conforme vimos em aula, trata-se de Annotations! Gabarito: B (FCC - 2008 – TRF5 - Analista de Sistemas) Usando o Hibernate, as pesquisas podem ser realizadas em bancos de dados por meio de: a) HQL, apenas. b) Criteria Query API, apenas. c) Criteria Query API e HQL, apenas. d) Criteria Query API e SQL, apenas. e) Criteria Query API, HQL e SQL. Comentários: Quando utilizamos o Hibernate para realizar consultas no banco de dados, temos a oportunidade de trabalhar com SQL (Structured Query Language), HQL (Hibernate Query Language) e com Criteria Query API. Esta última fornece uma maneira elegante de construção de queries dinâmicas para consultas no banco de dados. A API é uma alternativa às Consultas HQL e também ao SQL tradicional. Conforme vimos em aula, trata-se do Criteria Query API, HQL e SQL. 16712855225

Gabarito: E ACERTEI

Prof. Diego Carvalho

ERREI

www.estrategiaconcursos.com.br

Pág. 53 de 91

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05

(CONSULPLAN - 2012 - TSE - Analista Judiciário - Análise de Sistemas) Por suas características, Hibernate 3.5 constitui uma ferramenta com a finalidade de realizar o seguinte tipo de mapeamento: a) objeto/relacional para Java. b) gerencial/operacional para sites interativos textuais. c) entidade/relacionamento para modelagem de dados. d) lógico/físico para desenvolvimento por meio da prototipação. Comentários: Pois bem! Era trabalhoso transformar objetos de uma classe em registros de uma tabela e vice-versa. Logo, começaram a surgir alguns frameworks que auxiliavam essa tarefa – são as famosas Ferramentas de ORM – Object-Relational Mapping (ou Mapeamento Objeto-Relacional). As mais conhecidas eram Hibernate e TopLink – a primeira, livre, open-source, tornou-se uma referência mundial. Conforme vimos em aula, trata-se de um mapeamento objeto-relacional em Java. Gabarito: A ACERTEI

Prof. Diego Carvalho

16712855225

www.estrategiaconcursos.com.br

ERREI

Pág. 54 de 91

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05

JAVA DATABASE CONECTIVITY (JDBC) De acordo com a documentação oficial: trata-se de uma API que fornece o universal a dados a partir da linguagem de programação Java. É possível ar praticamente qualquer fonte de dados, desde bancos de dados relacionais a planilhas ou arquivos simples. O JDBC também fornece uma base comum sobre a quais ferramentas e interfaces alternativas podem ser construídas. Ele estabelece conexões com um banco de dados, envia comandos SQL e processa os resultados. Aliás, com a utilização de JDBC, torna-se fácil enviar um comando SQL para diferentes bancos de dados relacionais. Em outras palavras, não é necessário escrever um programa para ar um banco de dados Oracle, outro para ar um banco de dados SQL Server, e assim por diante. Essa tecnologia permite invocar comandos SQL a partir de métodos em classes Java. Ela fornece uma API do tipo call-level para o a bancos de dados baseado em SQL. Os componentes dessa API estão localizados nos pacotes java.sql e javax.sql. Para conseguir o a diversos bancos de dados diferentes de maneira uniforme e padronizada, utilizam-se Drivers. Como assim, professor? O Driver faz a interface entre a Aplicação Web e o SGBD! Para eu me conectar a um banco de dados individual, eu preciso ter os drivers para aquele banco de dados específico. O JDBC permite a conexão com praticamente qualquer SGBD (Oracle, DB2, SQL Server, MySQL, PostgreSQL, etc). Existem, atualmente, quatro tipos de Drivers:  JDBC-ODBC Bridge: É o tipo mais simples. Utiliza ODBC para conectar-se com o banco de dados, convertendo métodos JDBC em chamadas às funções do ODBC. Esta ponte é normalmente usada quando não há um driver puro-Java para determinado banco de dados, pois seu uso é desencorajado devido à dependência de plataforma. 16712855225

 Native API: converte chamadas JDBC na API do cliente em chamadas para o SGBD Oracle, Sybase, Informix, etc. São escritos parcialmente em Java e parcialmente em código nativo. Requer que algum código binário específico do SO seja carregado em cada máquina cliente e usa uma biblioteca nativa específica no cliente para a fonte de dados para que eles se conectem.

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 55 de 91

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05

 Network Protocol: traduz chamadas JDBC em um protocolo de rede independente do SGBD, que é então convertido para um protocolo específico do SGBD por um middleware. Em geral, esta é a alternativa JDBC mais flexível de todas, em que fornecedores disponibilizam produtos adequados para uso na internet.  Database Protocol: permite chamada direta da máquina do cliente para o Servidor SGBD. Converte as chamadas JDBC diretamente no protocolo do banco de dados. Implementado em Java, normalmente é independente de plataforma e escrito pelos próprios desenvolvedores. É o tipo mais recomendado para ser usado. Open Database Connectivity (ODBC) é um padrão aberto desenvolvido para que linguagens de programação ou sistemas operacionais se comuniquem com bancos de dados de maneira independente de plataforma. O JDBC utiliza um driver específico para banco de dados; o ODBC utiliza sempre o mesmo Driver e depois configuram-se as propriedades do sistema para ar determinado banco. Dado que foi utilizado o driver adequado para o ao banco de dados, pode-se utilizar a classe Connection para estabelecer a conexão, de fato, com o banco. Essa classe se encontra no pacote java.sql – que contém uma biblioteca para o e processamento de dados em uma fonte de dados. As classes, métodos e interfaces dele mais importantes são:  Driver: interface pública abstrata que todo driver deve implementar para executar instruções SQL.  DriverManager: classe que contém o registro de cada driver, oferecendo métodos estáticos para gerenciá-los. 16712855225

 Connection: interface que representa uma conexão com o banco de dados – possui diversos métodos importantes.  Statement: interface pública abstrata que é utilizada para executar instruções SQL estáticas e obter os resultados de sua execução.  ResultSet: essa interface é uma tabela de dados que representa o resultado de uma instrução SQL em um banco de dados.

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 56 de 91

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05

 PreparedStatement: interface pública abstrata utilizada para estender a interface Statement e criar um objeto que represente uma instrução SQL.  CallableStatement: interface que permite executar funções ou procedimentos armazenados no banco. try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").getInstance(); Connection con = DriverManager.getConnection("jdbc:odbc:meusCdsDb","conta","senha"); } catch(SQLException e) { // Se o carregador não localizar o driver do banco para conexão, lança a // exceção java.lang.ClassNotFoundExeption e.printStackTrace(); }

Para ar um banco de dados, o primeiro o é estabelecer uma conexão! É possível fazer isso em duas etapas: primeiro, carrega-se o driver do banco de dados. Uma vez carregado, o driver se registra para o DriverManager e está disponível para a aplicação. Então usa-se o DriverManager para abrir uma conexão com o banco de dados. A interface Connection designa um objeto con para receber a conexão. Statement stm = con.createStatement(); String SQL = "Select coluna1, coluna2, coluna3 from TabelaX";

Estabelecida a conexão, podemos executar comandos SQL no banco de dados. Para realizar uma operação, podemos usar três interfaces. A primeira delas é a interface Statement, que permite a execução dos comandos fundamentais de SQL (SELECT, INSERT, UPDATE ou DELETE). A interface PreparedStatement nos permite usufruir de SQL armazenado ou pré-compilado no banco. 16712855225

ResultSet rs = stm.executeQuery(SQL);

A terceira interface é CallableStatement, e permite executar procedimentos e funções armazenados no banco (quando o banco ar este recurso). A interface ResultSet permite colher os resultados da execução de nossa query no banco de dados. Esta interface apresenta uma série de métodos para prover o o aos dados. Depois é só encerrar o o, liberando recursos. finally { try {

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 57 de 91

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05 con.close(); } catch(SQLException onConClose) { System.out.println("ERRO NO FECHAMENTO DA CONEXÃO"); onConClose.printStackTrace(); } }

Podemos fazer isso fechando o Statement, que libera os recursos associados à execução desta consulta, mas deixa a conexão aberta para a execução de uma próxima consulta; ou fechando diretamente a conexão, que encerra a comunicação com o banco de dados. Para termos certeza de que vamos encerrar esta conexão mesmo que uma exceção ocorra, reservamos o fechamento para a cláusula finally().

16712855225

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 58 de 91

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05

(FCC – – BACEN – Analista de Sistemas) O estabelecimento de conexão entre um aplicativo Java e um banco de dados, para processar instruções SQL de consulta e atualização, é possibilitado por meio do padrão aberto, desenvolvido pela Microsoft, denominado: a) API. b) ODBC. c) SGDB. d) JDBC. e) OLE. Comentários: Open Database Connectivity (ODBC) é um padrão aberto desenvolvido para que linguagens de programação ou sistemas operacionais se comuniquem com bancos de dados de maneira independente de plataforma. O JDBC utiliza um driver específico para banco de dados; o ODBC utiliza sempre o mesmo Driver e depois configuramse as propriedades do sistema para ar determinado banco. Conforme vimos em aula, trata-se do ODBC.

16712855225

Gabarito: B

(CESPE – – IPEA – Analista de Sistemas) O JDBC é usado, entre outras coisas, para o a bancos de dados sem SQL, por meio de Java. Comentários: De acordo com a documentação oficial: trata-se de uma API que fornece o universal a dados a partir da linguagem de programação Java. É possível ar praticamente qualquer fonte de dados, desde bancos de dados relacionais a planilhas ou arquivos simples. O JDBC também fornece uma base comum sobre a quais ferramentas e interfaces alternativas podem ser construídas.

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 59 de 91

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05

Conforme vimos em aula, ele pode ar praticamente qualquer coisa. Gabarito: C (FCC - TRT - 2ª REGIÃO (SP) - Analista Judiciário - Tecnologia da Informação A utilização de JDBC, em um programa Java, inicia com a indicação do pacote que contém a JDBC API pela declaração: a) import java.awt.*; b) import java.util.*; c) import java.sql.*; d) import java.swing.*; e) import java.jdbc.*; Comentários: Essa tecnologia permite invocar comandos SQL a partir de métodos em classes Java. Ela fornece uma API do tipo call-level para o a bancos de dados baseado em SQL. Os componentes dessa API estão localizados no pacote java.sql e javax.sql. Para conseguir o a diversos bancos de dados diferentes de maneira uniforme padronizada, utilizam-se Drivers. Conforme vimos em aula, trata-se do java.sql. Gabarito: C (ESAF - ANA - Analista istrativo - Tecnologia da Informação Desenvolvimento Em uma aplicação Java, se o carregador de classes não conseguir localizar a classe do driver de banco de dados para uma conexão JDBC, é lançada a exceção 16712855225

a) java.lang.ClassNotFoundException. b) java.io.FileNotFoundException. c) java.lang.SecurityException. d) java.io.IOException. e) java.util.InputMismatchException. Comentários:

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 60 de 91

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05 try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").getInstance(); Connection con = DriverManager.getConnection("jdbc:odbc:meusCdsDb","conta","senha"); } catch(SQLException e) { // Se o carregador não localizar o driver do banco para conexão, lança a // exceção java.lang.ClassNotFoundExeption e.printStackTrace(); }

Conforme vimos em aula, trata-se do java.lang.ClassNotFoundException. Gabarito: A (FGV - 2009 - MEC - Analista de Sistemas - Especialista) Observe o código abaixo, que se refere á implementação de Java no o a Banco de Dados em JDBC.

16712855225

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 61 de 91

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05

Analise a instrução a seguir: con = DriverManager.getConnection("jdbc:odbc:meusCdsDb", " conta ", " senha "); Assinale a alternativa que indique corretamente o significado da instrução acima. a) Abrir as tabelas do Banco de Dados. b) Fechar a conexão com o Banco de Dados. c) Liberar a conexão com o Banco de Dados. d) Estabelecer a conexão com o Banco de Dados. e) Criar uma variável para logon do Banco de Dados. Comentários: Para ar um banco de dados, o primeiro o é estabelecer uma conexão! É possível fazer isso em duas etapas: primeiro, carrega-se o driver do banco de dados. Uma vez carregado, o driver se registra para o DriverManager e está disponível para a aplicação. Então usa-se o DriverManager para abrir uma conexão com o banco de dados. A interface Connection designa um objeto con para receber a conexão. Conforme vimos em aula, trata-se do estabelecimento de uma conexão. Gabarito: D (FCC - 2012 - MPE-AP - Técnico Ministerial - Informática Analise as linhas a seguir presentes em um programa Java que não apresenta erros. a = DriverManager.getConnection("jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=E:\\bd.mdb", "", ""); b = a.createStatement( );

16712855225

c = b.executeQuery("select * from cliente where id = "+ valor +""); Considere que os objetos a, b e c são de interfaces contidas no pacote java.sql. Pode-se concluir que esses objetos são, respectivamente, das interfaces a) Connection, SessionStatement e Result. b) DriverManager, PreparedStatement e RecordSet. c) ConnectionStatement, PreparedStatement e RecordSet. d) Connection, Statement e ResultSet. e) DaoConnection, Statement e ResultSet. Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 62 de 91

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05

Comentários: Conforme vimos em aula: a = Connection; b = Statement; c = ResultSet. Gabarito: D (CESPE - 2012 -RO - Analista Judiciário - Análise de Sistemas – Desenvolvimento – B JDBC, uma biblioteca vinculada a API da arquitetura JEE, define como um cliente pode ar bancos de dados OO exclusivamente. Comentários: De acordo com a documentação oficial: trata-se de uma API que fornece o universal a dados a partir da linguagem de programação Java. É possível ar praticamente qualquer fonte de dados, desde bancos de dados relacionais a planilhas ou arquivos simples. O JDBC também fornece uma base comum sobre a quais ferramentas e interfaces alternativas podem ser construídas. Conforme vimos em aula, ele pode ar bancos de dados de quaisquer paradigmas (OO, Relacional, etc). Gabarito: E (COPEVE-UFAL - 2012 - ALGÁS - Analista de Tecnologia da Informação – I Na arquitetura do JDBC, a diferença entre os tipos Statement e PreparedStatement é o fato do PreparedStatement manter os dados criptografados durante o tráfego entre o cliente e o servidor do SGBD. 16712855225

Comentários: Não existe isso! De fato, o PreparedStatement é mais seguro, visto que ajuda a impedir SQL Injection. No entanto, ele não mantém dados criptografados. Gabarito: E (FGV - MEC - de Banco de Dados) O pacote "java.sql" da API Java consiste de um conjunto de classes e interfaces que permitem embutir código SQL em métodos Java para por meio de drivers JDBC ar diversos

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 63 de 91

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05

SGBDs. As alternativas a seguir apresentam interfaces do pacote "java.sql", à exceção de uma. Assinale-a. a) SQLData b) ResultSet c) Statement d) DriverManager e) Connection Comentários: Pegadinha de banca que não sabe avaliar conhecimento! DriverManager não é uma interface, é uma classe! Gabarito: D 10. (CESPE - HEMOBRÁS - Analista de Gestão Corporativa - de Banco de Dados O JDBC fornece a classe CallableStatementSQL, que permite que procedimentos ou funções SQL armazenados sejam chamados. Comentários: A terceira interface é CallableStatement, e permite executar procedimentos e funções armazenados no banco (quando o banco ar este recurso). A interface ResultSet permite colher os resultados da execução de nossa query no banco de dados. Esta interface apresenta uma série de métodos para prover o o aos dados. Depois é só encerrar o o, liberando recursos. Conforme vimos em aula, o nome correto é CallableStatement. 16712855225

Gabarito: E ACERTEI

Prof. Diego Carvalho

ERREI

www.estrategiaconcursos.com.br

Pág. 64 de 91

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05

JAVA VIRTUAL MACHINE (JVM) A Linguagem Java tem dois processos de execução de código-fonte: Compilação e Interpretação! Vamos lá... o programador escreve um código em Java em um editor de texto, por exemplo. Ele salva com a extensão .java e a por um compilador (JavaC)! Esse compilador transforma o arquivo .java em código de máquina em um arquivo .class, também chamado bytecode – como mostra a imagem abaixo.

O bytecode é um código intermediário, que é posteriormente interpretado e executado por uma Java Virtual Machine (JVM). O que é isso, professor? É um programa que carrega e executa os aplicativos Java, convertendo bytecodes em código executável. Lembram que eu falei que Java é uma Linguagem WORA? Pois é, isso ocorre em grande parte por conta do bytecode e da Máquina Virtual Java.

16712855225

Por conta deles, programas escritos em Java podem funcionar em qualquer plataforma de hardware e software que possua uma JVM, tornando assim essas aplicações independentes da plataforma, como apresenta a imagem acima (Win32,

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 65 de 91

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05

UNIX e MacOS)! Galera, qualquer plataforma... desde um computador a uma geladeira. A imagem abaixo é similar à anterior, apenas para solidificar!

Uma observação importante: Código Java é sempre compilado em um bytecode No entanto, nem todo bytecode é proveniente de Código Java. Como assim, professor? É isso mesmo! Por exemplo: eu posso compilar o Código Ada em um bytecode e rodá-lo em uma JVM! E quais outras linguagens? Temos também Eiffel, Pascal, Python, C. A JVM é capaz de entender bytecodes – assim como nós somos fluentes em português, ela é fluente em bytecode. Para criar bytecodes, basta seguir um conjunto de regras de formação. Logo, se existe um compilador que seja capaz de transformar o código-fonte (de qualquer linguagem) em uma bytecode guindo as especificações corretamente, o bytecode poderá ser interpretado por uma JVM. 16712855225

CURIOSIDADE: A Sun Microsystems declarou recentemente que existem atualmente cerca de 5.5 bilhões de dispositivos executando uma Java Virtual Machine (JVM).

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 66 de 91

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05

(CESGRANRIO - 2011 – TRANSPETRO - Analista de Sistemas) Muito utilizada para desenvolvimento de aplicativos Web, a tecnologia Java tem como principal característica gerar aplicações que rodam em qualquer dispositivo que tenha o a Internet, utilizando, entre outros recursos, o software: a) JBC (Java Bytecode Console) b) JDB (Java Developer Builder) c) JMS (Java Management Server) d) JAC (Java Application Controler) e) JVM (Java Virtual Machine) Comentários: Por conta deles, programas escritos em Java podem funcionar em qualquer plataforma de hardware e software que possua uma JVM, tornando assim essas aplicações independentes da plataforma, como apresenta a imagem acima (Win32, UNIX e MacOS)! Galera, qualquer plataforma... desde um computador a uma geladeira. A imagem abaixo é similar à anterior, apenas para solidificar! Conforme vimos em aula, trata-se da JVM (Java Virtual Machine). Gabarito: E 16712855225

(CESPE - 2004 – ABIN - Analista de Sistemas) A máquina virtual Java (Java Virtual Machine — JVM) é especificada para interpretar instruções expressas em bytecodes e compiladas a partir de uma linguagem de programação do tipo Java, mas não necessariamente Java. Comentários: Uma observação importante: Código Java é sempre compilado em um bytecode. No entanto, nem todo bytecode é proveniente de Código Java. Como assim, professor? É isso mesmo! Por exemplo: eu posso compilar o Código Ada em um bytecode e

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 67 de 91

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05

rodá-lo em uma JVM! E quais outras linguagens? Temos também Eiffel, Pascal, Python, C. Conforme vimos em aula, não é necessariamente de Java! Gabarito: C (CESPE - 2010 – TRE/MT - Analista de Sistemas – A) JVM é um tipo de linguagem de máquina, resultado da compilação do código-fonte Java, que é interpretado e executado pela máquina virtual Java. Comentários: O bytecode é um código intermediário, que é posteriormente interpretado e executado por uma Java Virtual Machine (JVM). O que é isso, professor? É um programa que carrega e executa os aplicativos Java, convertendo bytecodes em código executável. Lembram que eu falei que Java é uma Linguagem WORA? Pois é, isso ocorre em grande parte por conta do bytecode e da Máquina Virtual Java. Conforme vimos em aula, não se trata de um tipo de linguagem, mas um programa! Gabarito: E (CESPE - 2011 – TJ/ES - Analista de Sistemas) O JVM (Java Virtual Machine) é um interpretador que atribui portabilidade à linguagem Java, possibilitando, consequentemente, a sua execução em qualquer sistema operacional. Comentários: 16712855225

Por conta deles, programas escritos em Java podem funcionar em qualquer plataforma de hardware e software que possua uma JVM, tornando assim essas aplicações independentes da plataforma, como apresenta a imagem acima (Win32, UNIX e MacOS)! Galera, qualquer plataforma... desde um computador a uma geladeira. A imagem abaixo é similar à anterior, apenas para solidificar! Conforme vimos em aula, está perfeito! Observem que a questão afirma que “possibilita a sua execução em qualquer sistema operacional”. De fato, o Sistema Operacional deverá ter uma JVM implementada para ele. No entanto, a questão afirma apenas que possibilita (desde que haja essa JVM). De fato, possibilita!

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 68 de 91

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05

Gabarito: C (CESPE - 2008 - -DF - Analista Judiciário - Tecnologia da Informação) Na linguagem Java, durante a interpretação do código, a JVM (Java Virtual Machine) verifica se o applet faz tentativas de forjar ponteiros, de violar restrições de o em membros de classes privadas e de gerar falhas na pilha. Comentários: Perfeito! A JVM realiza algumas verificações de segurança importantes, principalmente, para o desenvolvimento de aplicações web. Gabarito: C (CONSULPLAN - 2012 - TSE - Programador de computador) Diferentemente de outras linguagens de programação como C ou Pascal, Java utiliza uma linguagem intermediária da Java Virtual Machine – JVM. Essa linguagem intermediária denomina-se a) bytecode. b) appletcode. Comentários: A Linguagem Java tem dois processos de execução de código-fonte: Compilação e Interpretação! Vamos lá... o programador escreve um código em Java em um editor de texto, por exemplo. Ele salva com a extensão .java e a por um compilador (JavaC)! Esse compilador transforma o arquivo .java em código de máquina e em um arquivo .class, também chamado bytecode – como mostra a imagem abaixo. 16712855225

Conforme vimos em aula, trata-se do bytecode! Gabarito: A (FCC - 2014 - SABESP - Tecnólogo – Sistemas – O processo híbrido combina a execução eficiente e a portabilidade de programas. A base é a existência de um código intermediário, mais fácil de ser interpretado e não específico de uma plataforma computacional. O método é dividido em duas etapas: compilação para um código intermediário e interpretação desse código. Um exemplo é o Java e a JVM. Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 69 de 91

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05

Comentários: O bytecode é um código intermediário, que é posteriormente interpretado e executado por uma Java Virtual Machine (JVM). O que é isso, professor? É um programa que carrega e executa os aplicativos Java, convertendo bytecodes em código executável. Lembram que eu falei que Java é uma Linguagem WORA? Pois é, isso ocorre em grande parte por conta do bytecode e da Máquina Virtual Java. Conforme vimos em aula, está perfeito! Essa é a conhecida Compilação Híbrida – implementada pela JVM! Gabarito: C ACERTEI

ERREI

16712855225

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 70 de 91

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05

LISTA DE EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS) JPA (FCC – TRE/MS - Analista de Sistemas – A API de Persistência Java pode ser utilizada no container Web e/ou no container EJB e disponibiliza recursos de mapeamento objeto-relacional as aplicações Java EE. (CESPE - 2014 - -SE - Analista Judiciário - Banco de Dados) A JPA, que foi criada como alternativa para o Hibernate para conexão com os sistemas gerenciadores de banco de dados, está nativa no Java SE a partir da versão 1.3. (FCC - 2014 - TRT - 13ª Região (PB) - Técnico Judiciário - Tecnologia da Informação Java Persistence API (JPA) é uma API padrão da linguagem Java para persistência de dados em bancos de dados relacionais. Em uma aplicação que utiliza JPA: a) pode ser utilizada, como provedor de persistência, as bibliotecas EclipseLink, Hibernate, OracleTopLink, JBossSeam e JDBrovider. b) as classes de entidade do banco de dados permitem o mapeamento entre objetos da classe e tabelas do banco de dados, utilizando anotações como @Table, @Entity, @PrimaryKey, @Column, @Constraint, @Foreignkey e @EJB. c) todas as operações realizadas nas tabelas do banco de dados, como inserção de dados, alteração, consultas e exclusão, são realizadas sem o uso de instruções SQL, ou seja, o desenvolvedor não precisa conhecer SQL para programar. 16712855225

d) as configurações de o a banco de dados normalmente ficam no arquivo persistence.xml, ligado à aplicação, de forma que se for alterado o servidor de banco de dados não seja necessário alterar o código-fonte Java da aplicação. e) as relações existentes entre as tabelas do banco de dados não são refletidas nas classes de entidade criadas na aplicação, o que torna a execução mais rápida. O mapeamento de relações é feito em tempo de execução pelas bibliotecas do provedor de persistência. (CESPE - 2010 – MPU – Analista de Sistemas A versão 3.0 da API de Persistência Java utiliza descritores de implantação, não permitindo uso de anotações.

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 71 de 91

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05

(CESPE - 2010 – – Analista de Sistemas A versão 3.0 da API de Persistência Java provê uma linguagem de consulta de persistência Java que é uma forma melhorada da linguagem de consulta do EJB. (CESPE - 2010 – MPU – Analista de Sistemas A API de Persistência Java é embasada em ideias contidas em frameworks líderes de mercado, como Hibernate, Oracle TopLink e Objetos de Dados Java. (CESPE - 2013 – TRE/MS – Analista de Sistemas Assinale a opção correspondente ao elemento que, além de ser utilizado para definir um meio de mapeamento objeto-relacional para objetos Java simples e comuns (POJOs), denominados beans de entidade, também é utilizado para gerenciar o desenvolvimento de entidades do modelo relacional em plataforma nativa Java SE e Java EE. a) JSF b) SVN c) JPA d) spring e) struts (FCC - 2012 - -PE - Analista Judiciário - Análise de Sistemas Quando se utiliza JPA, um EntityManager mapeia um conjunto de classes a um banco de dados particular. Este conjunto de classes, definido em um arquivo chamado persistence.xml, é denominado: a) persistence context. b) persistence unit. c) entity manager factory. d) entity transaction. e) persistence provider.

16712855225

(CESPE - 2013 - CNJ - Técnico Judiciário - Programação de Sistemas Os objetos mapeados na linguagem Java que devem ser persistidos como objetos precisam utilizar JPA (Java Persistence API), pois o JPA permite realizar o mapeamento objeto/relacional automatizado e transparente e sua persistência em um banco de dados relacional.

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 72 de 91

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05

10. (FGV - 2009 – MEC – Analista de Sistemas – C) JPA é uma tecnologia utilizada no desenvolvimento de aplicações para Web, similar às tecnologias Active Server Pages (ASP) da Microsoft ou PHP. 11. (CESPE - 2010 - TRE-BA - Programador de computador As tecnologias JPA e EJB permitem, com o uso da linguagem Java, a manipulação de dados que estão em um banco de dados. 12. (CESPE - 2013 - RM - Analista em Geociências - Sistemas) Java Persistence API (JPA) é uma solução para persistência de dados, utilizada, inclusive, quando há mapeamento do modelo orientado a objeto para bancos de dados relacionais. 13. (CESPE - 2013 – TRE/MS - Analista de Sistemas – C JPA é um framework MVC de aplicações web que se destina a simplificar o desenvolvimento de interfaces de usuário embasadas em web. 14. (CESPE - 2010 – TRE/MT - alista de Sistemas – E) JPA lida com a forma como dados relacionais são mapeados para objetos Java e com a forma como esses objetos são armazenados em um banco de dados relacional. 15. (CESGRANRIO - 2011 – PETROBRÁS - Analista de Sistemas – II) JPA é parte integrante da especificação EJB e serve para definir as interfaces de o local e/ou remoto de um componente EJB. 16. (CESPE - 2012 -RO - Analista Judiciário - Análise de Sistemas – Desenvolvimento – A JPA, um framework utilizado na camada de persistência, define uma forma para mapear POJO (Plain Old Java Objects) para um banco de dados. 16712855225

17. (FCC - 2013 – MPE/MA - Analista de Sistemas) Considere a classe Java a seguir em uma aplicação que utiliza JPA, uma API que permite fazer o mapeamento de persistência objeto/relacional: package dao; import javax.persistence.*; public class ClienteDao { private EntityManagerFactory emf; private EntityManager em; private EntityTransaction et; private void iniciarTransacao() { emf = Persistence.createEntityManagerFactory("Exemplo"); em = emf.createEntityManager(); et = em.getTransaction();

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 73 de 91

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05 et.begin(); } }

O parâmetro “Exemplo”, ado para o método createEntityManagerFactory da classe Persistence refere-se ao nome: a) da unidade de persistência definido na tag persistence-unit contida no arquivo persistence.xml. b) do arquivo de persistência Exemplo.xml que contém as tags com os parâmetros de conexão com o banco de dados. c) do banco de dados relacional ao qual a aplicação deseja se conectar. d) da tabela do banco de dados na qual os dados da aplicação serão persistidos. e) da classe que faz a conexão com o banco de dados relacional ao qual a aplicação deseja se conectar. 18. (FCC - 2012 - -PE - Programador de computador Em uma classe de entidade de uma aplicação que utiliza JPA, a anotação que define um atributo que não será salvo no banco de dados é a: a) @Optional. b) @Transient. c) @Stateless. d) @Stateful. e) @Local. 16712855225

19. (FCC - 2011 - TRT - 19ª Região (AL) - Técnico Judiciário - Tecnologia da Informação Os estados do ciclo de vida de uma instância de uma entidade, definidos na JPA 2.0, são: b) novo (new), gerenciado (managed), destacado (detached) e removido (removed). b) ativo (active), inativo (inactive) e removido (removed). c) novo (new), temporário (temporary), permanente (permanent) e destacado (detached). Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 74 de 91

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05

d) novo (new), temporário (temporary) e destacado (detached) e) gerenciado (managed), temporário (temporary), permanente (permanent) e destacado (detached). (FEPESE - 2013 - JUCESC - Analista Técnico em Gestão de Registro Mercantil Analista de Informática Em relação à JPA e Hibernate, considere as seguintes afirmativas. 1. JPA especifica uma JSR. 2. Hibernate especifica uma JSR. 3. Hibernate cuida da camada de persistência enquanto JPA da camada de transação. 4. Hibernate é uma implementação de JSR. 5. JPA é uma implementação de JSR. Assinale a alternativa que indica todas as afirmativas corretas. a) São corretas apenas as afirmativas 1 e 4. b) São corretas apenas as afirmativas 2 e 3. c) São corretas apenas as afirmativas 3 e 4. d) São corretas apenas as afirmativas 1, 2 e 3. e) São corretas apenas as afirmativas 3, 4 e 5 16712855225

21. (FCC - 2011 – TCE/PR – Analista de Sistemas A JPA: a) pode ser usada fora de componentes EJB e fora da plataforma Java EE, em aplicações Java SE. b) utiliza persistência gerenciada por contêiner (CMP), ou seja, as classes de entidade e persistência necessitam de um contêiner presente em um servidor de aplicações para serem executadas. c) utiliza descritores XML para especificar informações do mapeamento relacional de objeto, mas não oferece e a anotações. Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 75 de 91

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05

d) a consultas dinâmicas nomeadas nas classes de entidade que são adas apenas por instruções SQL nativas. e) possui uma interface EntityBeans que padroniza operações Create Read Update Delete (CRUD) que envolvem tabelas. (FCC - 2011 - TRT - 23ª REGIÃO (MT) - Técnico Judiciário - Tecnologia da Informação) Em relação à JPA (Java Persistence API) é INCORRETO afirmar que:

a) @NamedQuery é aplicada para definir várias consultas. b) @Entity define que haverá correspondência da classe com uma tabela do banco de dados. c) @Id define que o atributo que está mapeado com tal anotação corresponderá à chave primária da tabela. d) @Column(name = "id", nullable = false) define que o atributo da classe mapeado com tal anotação deve estar associado à coluna cujo nome é "id", além de definir que tal campo não pode ser nulo. 16712855225

e) @OneToMany indica que o atributo contém um conjunto de entidades que a referenciam.

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 76 de 91

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05

LISTA DE EXERCÍCIOS COMENTADOS (CESPE) HIBERNATE (CESPE - 2010 - TRE-BA - Analista Judiciário - Análise de Sistemas No Hibernate, apenas a linguagem de consulta HQL (Hibernate Query Language) pode ser utilizada. A HQL executa os pedidos SQL sobre as classes de persistência do Java em vez de tabelas no banco de dados, o que diminui a distância entre o desenvolvimento das regras de negócio e o banco de dados. (CESPE - 2009 - SECONT-ES - Auditor do Estado – Tecnologia da Informação O Hibernate, um framework de mapeamento objeto relacional (ORM), cria uma camada persistência na solução desenvolvida, o que permite ligar os objetos aos bancos de dados relacionais. Entre seus serviços, o Hibernate provê um meio de se controlar transações, por meio de métodos de suas interfaces session e transaction, tendo ainda e a herança e polimorfismo. É distribuído sob a licença LGPL, o que permite seu uso em projetos comerciais ou open source. (CESPE - 2010 - TCU - Auditor Federal de Controle Externo - Tecnologia da Informação - Parte II Uma equipe de desenvolvimento de software recebeu a incumbência de desenvolver um sistema com as características apresentadas a seguir.  O sistema deverá ser integrado, interoperável, portável e seguro.  O sistema deverá apoiar tanto o processamento online, quanto o e a decisão e gestão de conteúdos.  O sistema deverá ser embasado na plataforma JEE (Java enterprise edition) v.6, envolvendo servlets, JSP (Java server pages), Ajax, JSF (Java server faces) 2.0, Hibernate 3.5, SOA e web services. 16712855225

O líder da equipe iniciou, então, um extenso processo de coleta de dados com o objetivo de identificar as condições limitantes da solução a ser desenvolvida e tomar decisões arquiteturais e tecnológicas que impactarão várias características funcionais e não funcionais do sistema, ao longo de seu ciclo de vida. A partir dessa coleta, o líder deverá apresentar à equipe um conjunto de informações e de decisões. A tecnologia Hibernate 3.5 é apropriada para o sistema a ser desenvolvido: entre as características que a credenciam, está o fato de ela possibilitar a recuperação de objetos por meio da formulação de queries em linguagens HQL (hibernate query language) e SQL (structured query language), bem como pelo uso de APIs (application programming interfaces) de busca por critério, entre outras.

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 77 de 91

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05

(CESPE - CEHAP- Programador de computador No framework Hibernate, é comum que uma instância de uma classe persistente tenha três estados específicos. Assinale a opção que contém esses três estados. a) plugged, disconnected, timewait b) connected, disconnected, detached c) transient, persistent, detached d) transient, connected, timewait (CESPE - 2010 - DETRAN-ES - Analista de Sistemas O Hibernate, framework utilizado no desenvolvimento de consultas e atualização de dados em um banco relacional, foi criado para facilitar a integração entre programas em Java, funcionando também em ambientes .Net (NHibernate). (CESPE - 2011 - Correios - Analista de Correios - Analista de Sistemas Desenvolvimento de Sistemas No Hibernate, o recurso Query Cache possibilita fazer o cache de queries que são executadas várias vezes. (CESPE - 2013 - INPI - Analista de Planejamento - Desenvolvimento e Manutenção de Sistemas No Hibernate, caso o nome da classe seja diferente do nome da tabela mapeada, é necessário informar, na anotação @Table, o nome da tabela, por meio do atributo name. (CESPE - 2013 - SERPRO - Analista - Desenvolvimento de Sistemas Em Hibernate, a configuração de conexões de banco de dados deve ser feita somente por meio do uso de arquivo de propriedade. (CESPE - 2014 - SUFRAMA - Analista de Sistemas) De acordo com o mapeamento mostrado abaixo, no Hibernate, a coluna Evento_ID manterá a chave primária da tabela Eventos. 16712855225



Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 78 de 91

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05

10. (CESPE - 2010 - TRE-BA - Programador de computador O Hibernate, um framework para o mapeamento objeto-relacional, é escrito na linguagem Java e, por isso, somente pode ser executado no ambiente Java. 11. (CESPE - 2013 - MPOG - Técnico de Nível Superior - - Categoria Profissional 7 Quando se desenvolve um mapeamento com Hibernate, uma classe persistente criada não precisa implementar ou herdar qualquer classe especial do framework Hibernate. 12. (CESPE - 2013 - INPI - Analista de Planejamento - Desenvolvimento e Manutenção de Sistemas) O objeto Session Factory do Hibernate mantém o mapeamento objeto relacional na sessão. 13. (CESPE - 2013 - INPI - Analista de Planejamento - Desenvolvimento e Manutenção de Sistemas) A Interface Criteria do Hibernate é utilizada para realizar consultas ao banco de dados. 14. (CESPE - 2014 - SUFRAMA - Analista de Sistemas) Os tipos de mapeamento do Hibernate são considerados tipos de dados SQL e precisam de conversão para dados Java nas respectivas classes Java.

16712855225

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 79 de 91

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05

LISTA DE EXERCÍCIOS COMENTADOS (FCC) HIBERNATE (FCC - 2011 - TRT - 19ª Região (AL) - Técnico Judiciário - Tecnologia da Informação Linguagem de queries, fornecida pelo Hibernate, que é similar em aparência ao SQL e que, no entanto, é orientada a objeto e compreende noções como herança, polimorfismo e associação. Trata-se de: a) HiBD-QL. b) OOQL. c) ORM-QL. d) HQL. e) JEEQL. (FCC - 2010 - TRT - 8ª Região (PA e AP) - Analista Judiciário - Tecnologia da Informação Os três estados de objeto definidos pelo framework Hibernate são: a) Temporário (Temporary), Permanente (Permanent) e Resiliente (Resilient). b) Transiente (Transient), Persistente (Persistent) e Resiliente (Resilient). c) Temporário (Temporary), Persistente (Persistent) e Destacado (Detached). d) Transiente (Transient), Persistente (Persistent) e Destacado (Detached). e) Transiente (Transient), Permanente (Permanent) e Resiliente (Resilient). (FCC - 2012 - TRE- Técnico Judiciário - Programação de Sistemas) Com relação ao framework Hibernate é correto afirmar: a) Permite fazer a persistência automatizada dos objetos em uma aplicação Java para as tabelas de um banco de dados relacional, utilizando metadados (descrição dos dados) que descrevem o mapeamento entre os objetos e o banco de dados. 16712855225

b) É uma boa opção apenas para sistemas que fazem muito uso de stored procedures, triggers ou que implementam a maior parte da lógica da aplicação no banco de dados vai se beneficiar mais com o uso do Hibernate. c) Permite enviar unidirecionalmente uma representação de dados de um banco de dados relacional para um modelo de objeto utilizando um esquema baseado exclusivamente em Hibernate Query Language (HQL).

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 80 de 91

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05

d) A Java Persistence API (JPA) implementa o Hibernate, que é parte do Enterprise JavaBeans 4.0. e) Em uma aplicação criada com Hibernate, para cada classe de persistência é necessário criar um arquivo de mapeamento XML que deve ser salvo obrigatoriamente com o nome da classe seguido pelo sufixo .map.xml. (FCC - 2010 - TRT - 22ª Região (PI) - Técnico Judiciário - Tecnologia da Informação) Hibernate é um framework: a) que separa as funções que envolvem a construção de aplicações Web, através da associação dos eventos do lado cliente com os manipuladores dos eventos do lado do servidor. b) pelo qual o programador utiliza a infraestrutura do servidor de aplicação voltada para o desenvolvimento de aplicações de missão crítica e de aplicações empresariais em geral. c) no qual as questões de infraestrutura, segurança, disponibilidade e escalabilidade são responsabilidade do servidor de aplicações, permitindo que o programador se concentre, apenas, nas necessidades do negócio do cliente. d) que permite ao desenvolvedor de páginas para internet produzir aplicações que em o banco de dados, manipulem arquivos no formato texto e capturem informações a partir de formulários. e) cujo objetivo é diminuir a complexidade entre os programas Java que precisam trabalhar com um banco de dados do modelo relacional. 16712855225

(FCC - 2007 - TRE-SE - Analista Judiciário - Tecnologia da Informação) Sendo um grupo de classes e componentes responsáveis pelo armazenamento e recuperação de dados, esta camada inclui necessariamente um modelo das entidades do domínio de negócios (mesmo que seja somente um modelo de metadados). No âmbito do mapeamento objeto-relacional (hibernate) esta é a camada de: a) negócio. b) restrição. c) apresentação.

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 81 de 91

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05

d) consistência. e) persistência. (FCC - 2007 - MPU - Analista de Informática - Desenvolvimento de Sistemas) Objetos que têm uma representação no banco de dados, mas não fazem mais parte de uma sessão do Hibernate, o que significa que o seu estado pode não estar mais sincronizado com o banco de dados, são do tipo: a) transient. b) detached. c) attached. d) persistent. e) consistent. (FCC - 2010 - TRT - 8ª Região (PA e AP) - Analista Judiciário - Tecnologia da Informação) Em sua essência, o Hibernate é um framework para: a) mapeamento objeto-relacional (ORM). b) desenvolvimento de aplicações de Internet rica (Rich Internet Application RIA). c) implementação da camada Controller do padrão MVC (Model - View Controller). d) construção de aplicações utilizando-se inversão de controle (IoC). e) injeção de dependência (dependency injection) em aplicativos. 16712855225

(FCC - 2012 - TRF - 2ª REGIÃO - Técnico Judiciário - Informática) Quando se cria uma aplicação Java utilizando um recurso de Mapeamento Objeto-Relacional como o Hibernate, o mapeamento entre classes e tabelas, propriedades e colunas, associações e chaves estrangeiras, tipos do Java e tipos do SQL, é feito através de metadados. Esses metadados normalmente podem ser colocados em arquivos XML ou diretamente nas classes, próximos da informação que eles descrevem. Quando são colocados nas classes, esses metadados são conhecidos como: a) mappings. b) annotations. Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 82 de 91

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05

c) descriptions. d) patterns. e) actions. (FCC - 2008 – TRF5 - Analista de Sistemas) Usando o Hibernate, as pesquisas podem ser realizadas em bancos de dados por meio de: a) HQL, apenas. b) Criteria Query API, apenas. c) Criteria Query API e HQL, apenas. d) Criteria Query API e SQL, apenas. e) Criteria Query API, HQL e SQL.

16712855225

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 83 de 91

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05

LISTA DE EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS) HIBERNATE (CONSULPLAN - 2012 - TSE - Analista Judiciário - Análise de Sistemas) Por suas características, Hibernate 3.5 constitui uma ferramenta com a finalidade de realizar o seguinte tipo de mapeamento: a) objeto/relacional para Java. b) gerencial/operacional para sites interativos textuais. c) entidade/relacionamento para modelagem de dados. d) lógico/físico para desenvolvimento por meio da prototipação.

16712855225

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 84 de 91

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05

LISTA DE EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS) JDBC (FCC – – BACEN – Analista de Sistemas) O estabelecimento de conexão entre um aplicativo Java e um banco de dados, para processar instruções SQL de consulta e atualização, é possibilitado por meio do padrão aberto, desenvolvido pela Microsoft, denominado: a) b) c) d) e)

API. ODBC. SGDB. JDBC. OLE.

(CESPE – – IPEA – Analista de Sistemas) O JDBC é usado, entre outras coisas, para o a bancos de dados sem SQL, por meio de Java. (FCC - TRT - 2ª REGIÃO (SP) - Analista Judiciário - Tecnologia da Informação A utilização de JDBC, em um programa Java, inicia com a indicação do pacote que contém a JDBC API pela declaração: a) import java.awt.*; b) import java.util.*; c) import java.sql.*; d) import java.swing.*; e) import java.jdbc.*; 16712855225

(ESAF - ANA - Analista istrativo - Tecnologia da Informação Desenvolvimento Em uma aplicação Java, se o carregador de classes não conseguir localizar a classe do driver de banco de dados para uma conexão JDBC, é lançada a exceção a) java.lang.ClassNotFoundException. b) java.io.FileNotFoundException. c) java.lang.SecurityException. d) java.io.IOException. e) java.util.InputMismatchException.

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 85 de 91

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05

(FGV - 2009 - MEC - Analista de Sistemas - Especialista) Observe o código abaixo, que se refere á implementação de Java no o a Banco de Dados em JDBC.

Analise a instrução a seguir: con = DriverManager.getConnection("jdbc:odbc:meusCdsDb", " conta ", " senha "); Assinale a alternativa que indique corretamente o significado da instrução acima. 16712855225

a) Abrir as tabelas do Banco de Dados. b) Fechar a conexão com o Banco de Dados. c) Liberar a conexão com o Banco de Dados. d) Estabelecer a conexão com o Banco de Dados. e) Criar uma variável para logon do Banco de Dados. (FCC - 2012 - MPE-AP - Técnico Ministerial - Informática Analise as linhas a seguir presentes em um programa Java que não apresenta erros. a = DriverManager.getConnection("jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=E:\\bd.mdb", "", "");

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 86 de 91

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05

b = a.createStatement( ); c = b.executeQuery("select * from cliente where id = "+ valor +""); Considere que os objetos a, b e c são de interfaces contidas no pacote java.sql. Pode-se concluir que esses objetos são, respectivamente, das interfaces a) Connection, SessionStatement e Result. b) DriverManager, PreparedStatement e RecordSet. c) ConnectionStatement, PreparedStatement e RecordSet. d) Connection, Statement e ResultSet. e) DaoConnection, Statement e ResultSet. (CESPE - 2012 -RO - Analista Judiciário - Análise de Sistemas – Desenvolvimento – B JDBC, uma biblioteca vinculada a API da arquitetura JEE, define como um cliente pode ar bancos de dados OO exclusivamente. (COPEVE-UFAL - 2012 - ALGÁS - Analista de Tecnologia da Informação – I Na arquitetura do JDBC, a diferença entre os tipos Statement e PreparedStatement é o fato do PreparedStatement manter os dados criptografados durante o tráfego entre o cliente e o servidor do SGBD. (FGV - MEC - de Banco de Dados) O pacote "java.sql" da API Java consiste de um conjunto de classes e interfaces que permitem embutir código SQL em métodos Java para por meio de drivers JDBC ar diversos SGBDs. As alternativas a seguir apresentam interfaces do pacote "java.sql", à exceção de uma. Assinale-a. 16712855225

a) SQLData b) ResultSet c) Statement d) DriverManager e) Connection 10. (CESPE - HEMOBRÁS - Analista de Gestão Corporativa - de Banco de Dados) O JDBC fornece a classe CallableStatementSQL, que permite que procedimentos ou funções SQL armazenados sejam chamados.

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 87 de 91

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05

LISTA DE EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS) JVM (CESGRANRIO - 2011 – TRANSPETRO - Analista de Sistemas) Muito utilizada para desenvolvimento de aplicativos Web, a tecnologia Java tem como principal característica gerar aplicações que rodam em qualquer dispositivo que tenha o a Internet, utilizando, entre outros recursos, o software: a) JBC (Java Bytecode Console) b) JDB (Java Developer Builder) c) JMS (Java Management Server) d) JAC (Java Application Controler) e) JVM (Java Virtual Machine) (CESPE - 2004 – ABIN - Analista de Sistemas) A máquina virtual Java (Java Virtual Machine — JVM) é especificada para interpretar instruções expressas em bytecodes e compiladas a partir de uma linguagem de programação do tipo Java, mas não necessariamente Java. (CESPE - 2010 – TRE/MT - Analista de Sistemas – A) JVM é um tipo de linguagem de máquina, resultado da compilação do código-fonte Java, que é interpretado e executado pela máquina virtual Java. (CESPE - 2011 – TJ/ES - Analista de Sistemas) O JVM (Java Virtual Machine) é um interpretador que atribui portabilidade à linguagem Java, possibilitando, consequentemente, a sua execução em qualquer sistema operacional. (CESPE - 2008 - -DF - Analista Judiciári - Tecnologia da Informação) Na linguagem Java, durante a interpretação do código, a JVM (Java Virtual Machine) verifica se o applet faz tentativas de forjar ponteiros, de violar restrições de o em membros de classes privadas e de gerar falhas na pilha. 16712855225

(CONSULPLAN - 2012 - TSE - Programador de computador) Diferentemente de outras linguagens de programação como C ou Pascal, Java utiliza uma linguagem intermediária da Java Virtual Machine – JVM. Essa linguagem intermediária denomina-se a) bytecode.

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 88 de 91

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05

b) appletcode. (FCC - 2014 - SABESP - Tecnólogo – Sistemas – O processo híbrido combina a execução eficiente e a portabilidade de programas. A base é a existência de um código intermediário, mais fácil de ser interpretado e não específico de uma plataforma computacional. O método é dividido em duas etapas: compilação para um código intermediário e interpretação desse código. Um exemplo é o Java e a JVM.

16712855225

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 89 de 91

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05

GABARITO DOS EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS) JPA 1 C 11 C 21 A

2 E 12 C 22 A

3 D 13 E 23

4 E 14 C 24

5 C 15 E 25

6 C 16 C 26

7 C 17 A 27

8 B 18 B 28

9 C 19 A 29

10 E 20 A 30

GABARITO DOS EXERCÍCIOS COMENTADOS (CESPE) HIBERNATE 1 E 11 C

2 C 12 C

3 C 13 C

4 C 14 E

5 C 15

6 C 16

7 C 17

8 E 18

9 C 19

10 E 20

9 E

10

GABARITO DOS EXERCÍCIOS COMENTADOS (FCC) HIBERNATE 1 D

2 D

3 A

4 E

5 E

6 B

7 A

8 B

16712855225

GABARITO DOS EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS) HIBERNATE 1 A

2

3

4

5

6

7

8

9

GABARITO DOS EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS) Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 90 de 91

10

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 05

JDBC 1 B

2 C

3 C

4 A

5 D

6 D

7 E

8 E

9 D

10 E

GABARITO DOS EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS) JVM 1 E

2 C

3 E

4 C

5 C

6 A

7 C

8

9

16712855225

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 91 de 91

10

Aula 06 Desenvolvimento de Software para Concursos - Curso Regular Professor: Diego Carvalho

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 06

AULA 06

SUMÁRIO Apresentação - Spring Framework - Struts - Java Message Service (JMS) - Jndi (Java Naming And Directory Interface) - Java Transaction Api (JTA) - Javaserver Pages Standard Tag Library (JSTL) Lista de Exercícios Comentados Gabarito

PÁGINA 01 02 11 18 24 30 33 41 50

Lógica de Programação. Tipos de Dados. Operadores e Expressões. Estruturas de Controle, Seleção, Repetição e Desvio. Recursividade. Funções e Procedimentos. Complexidade de Algoritmos. Métodos de Ordenação. BubbleSort, InsertionSort, SelectionSort, QuickSort, ShellSort, MergeSort e HeapSort. Estruturas de Dados. Vetores e Matrizes. Lista Encadeada. Pilhas. Filas. Árvore. Grafos. Hashing. Estrutura de Arquivos. Padrões de Projeto GOF. Padrões de Projeto Java EE. Padrões de Projeto GRASP. Java SE. Conceitos Básicos. Plataforma Java. Compilação e Interpretação. agem por Valor e Referência. Empacotamento. Raiz. Identificadores. Blocos e Comandos. Comentários. Palavras Reservadas. Tipos Primitivos. Operadores. Vetores. Conversão de Tipos. Controle de Fluxos. Classes. Objetos. Atributos. Métodos. Herança. Encapsulamento. Interface. Polimorfismo. Interface Gráfica. Tipos Enumerados. Anotações. Classes Internas. Reflexão e Genéricos. Tratamento de Exceções. Sincronismo e Multithreading. Coleções. Streams e Serialização. Classes e Operações de I/O. Novidades Java 8. Arquitetura Java EE. JSP. Servlets. JSF. JPA. Hibernate. JDBC. JVM. Spring. Struts. JMS. JNDI. JTA. JSTL. HTML e CSS. JavaScript. JQuery. AJAX. DHTML. XHTML. XML. XSLT. XSD. Sistemas Móveis. Android. iOS. Segurança no Desenvolvimento. Compiladores e Interpretadores. Ferramentas de Controle de Versão. SVN. CVS. Git. Análise Estática de Código-Fonte. SonarQube. Integração Contínua (e outros) Framework .NET, C#, Visual Basic, ASP.NET e Visual Studio (Prof. Mayara Rosa) Delphi e PHP (Prof. Mayara Rosa). 16712855225

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 1 de 51

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 06

SPRING FRAMEWORK

Spring é um framework open-source de desenvolvimento para Plataforma Java! Trata-se de uma tecnologia não-intrusiva (aplicação não depende do framework em si) cujo intuito é desenvolver aplicações mais fáceis de usar e promover (e, não, impor) boas práticas por meio de um modelo de programação baseada em POJO. Ele veio como alternativa ao modelo baseado em EJB! E quais são seus benefícios?

BENEFÍCIOS Leveza (Lightweight) Não-Intrusivo

DESCRIÇÃO Trata-se de um framework leve, quando se trata de tamanho e transparência. A versão básica tem cerca de 2MB. Trata-se de um framework em que o código da lógica de aplicação não depende do em si do Framework Spring. Se algum dia eu quiser modificar o framework, o código estará preparado. Trata-se de um framework que promove baixo acoplamento por meio do padrão arquitetural de Inversão de Controle. Os objetos oferecem suas dependências em vez de criarem ou procurarem objetos dependentes. Trata-se de um framework orientado a aspectos que separa a lógica de negócio da aplicação dos serviços de e do sistema. 16712855225

Inversão de Controle (IOC) Orientada a Aspectos Container

Trata-se de um framework que gerencia o ciclo de vida e configuração de objetos da aplicação por meio de um container.

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 2 de 51

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 06

MVC Gerenciamento de Transação Tratamento de Exceções

Trata-se de um framework desenhado para o Padrão MVC, que oferece diversas alternativas a frameworks web – permite construir aplicações robustas e manuteníveis. Trata-se de um framework que provê uma interface consistente de gerenciamento de transações que pode variar de uma transação global a uma transação local. Trata-se de um framework capaz de traduzir exceções de uma tecnologia específica em outros tipos de exceções hierarquicamente.

Trata-se de um framework que fornece um mecanismo de segurança Spring Security declarativo, que é um aspecto crítico de diversas aplicações.

Vamos a algumas explicações mais detalhadas sobre algumas características citadas acima – comecemos com a Inversão de Controle! Imaginem que vocês implementam uma classe de usuário, e dentro dessa classe vocês precisam utilizar a classe de e-mail. O que vocês fazem? Instanciam a classe de e-mail dentro da classe de usuário. O que isso gera? Acoplamento (i.e., dependência entre as partes). Agora a classe de usuário depende da classe de e-mail. Um dos problemas que a inversão de controle veio resolver é o de módulos de mais alto nível (Ex: Classe de Usuário) dependendo de módulos de mais baixo nível (Ex: Classe de E-mail). O que é mais importante: usuário ou e-mail? Ora, usuário – o e-mail, em geral, é apenas um ório do usuário! Vamos ver um exemplo mais claro: Deem uma olhada na casa de vocês e contem quantos dispositivos têm baterias que precisam ser recarregadas de alguma maneira: câmera fotográfica, celular, fone de ouvido sem-fio, controle de videogame, ipod, máquina de barbear, etc. Ora, esses dispositivos não têm uma interface de recarga de bateria comum, i.e., um usa microusb, o outro mini-usb, outro usb, apple sempre inventa algo diferente, enfim... 16712855225

Qual o resultado disso? Você não possui um único carregador para recarregar todos os seus dispositivos – você é obrigado a ter um carregador para cada um deles! E se você mudar de celular? Lá se vai mais um carregador. Se você der um upgrade no ipod? Outro carregador! O que acontece no final? Aposto que vocês (como bons nerds) possuem uma gaveta lotada de carregadores diferentes!  Eu sei que vocês entenderam a história, mas eu gostaria que vocês internalizassem a ideia principal! Em vez de os carregadores dependerem dos dispositivos, os

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 3 de 51

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 06

dispositivos estão dependendo dos carregadores. Isso não soa absurdo? É o mais importante dependendo do menos importante; é o essencial dependendo do ório; é o “poste mijando no cachorro”. Bem, um dos princípios do Spring Framework é a Inversão de Controle (ou Inversão de Dependência). É uma forma de subverter essa lógica! Vamos fazer classes de baixo nível dependerem de classes de alto nível. Vamos programar para interfaces e, não, para implementações. Como podemos fazer isso, professor? Por meio da Injeção de Dependências (não confundam, são conceitos independentes!).

Professor, o que seria a injeção de dependências? Trata-se de um padrão de desenvolvimento de software utilizado para inverter controles e manter o baixo acoplamento entre os módulos de um sistema. Ela visa remover dependências desnecessárias entre as classes ou torná-las mais suaves, e ajuda a ter um design de software que seja mais fácil de manter e de evoluir. 16712855225

Lembram-se do exemplo anterior? Para eu utilizar uma classe de e-mail na classe de usuário, eu teria que instanciar a classe de e-mail dentro da classe de usuário. Ora, isso já acoplaria as classes, fazendo com que a classe de usuário dependesse da classe de e-mail, ou seja, a classe de alto nível estaria dependendo da classe de baixo nível. Vamos resolver esse problema com a Injeção de Dependência!

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 4 de 51

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 06

Grosso modo, injetar dependências nada mais é que ar uma classe (que será utilizada) para outra classe (que irá consumi- ). Ora, realmente a classe de usuário precisa da classe de e-mail, mas é possível utilizá-la sem acoplá-las. Como? Delegando a responsabilidade de criação do objeto da classe e-mail a outra parte do sistema. Quem pode fazer isso? O Container! Ele é responsável por criar, gerenciar, conectar e configurar objetos e seus ciclos de vida. O padrão de Injeção de Dependência é baseado no padrão Builder, que é aquele cara responsável por construir objetos e armazená-los. Ele permite a separação da construção de um objeto complexo da sua representação, de forma que o mesmo processo de construção possa criar diferentes representações. O que acontece? a-se a responsabilidade de criar um objeto para o container (que funciona como o builder), indicando qual interface desejamos que seja implementada. Ele criará a o objeto que implementa a interface e injeta essa dependência em outra classe. Em nosso caso, ele criará o objeto de e-mail e injetará no objeto de pessoa. O container é capaz de resolver dependências complexas transparentemente, i.e., eu não estou nem ligando para como ele vai resolver. O container é simplesmente um mapeador de dependências que as suas classes necessitam com a lógica de criação dessas dependências (por meio de XML/Annotation). Ele trata todos os objetos sob seu gerenciamento como beans. Podemos afirmar, então, que a injeção de dependência desacopla a construção das suas classes da construção de suas dependências. Professor, deu nó na cabaça! frase apenas afirma que a responsabilidade para a criação da classe E-mail não é mais da classe Usuário, é do container. Bacana? Dessa forma, quebramos o acoplamento e invertemos o controle. 16712855225

Em vez de depender de uma classe concreta, amos a depender de uma abstração. O código estará mais desacoplado, modular, flexível – sendo mais fácil a manutenção e a evolução. É possível injetar dependências de três formas: Injeção por Construtor; Injeção por Propriedade (Setter); e Injeção por Interface – esse último é injeção de dependência sem inversão de controle. Continuando nosso papo: Spring faz praticamente tudo que EJB faz (e mais uma pancada de coisas). Ele pode ser utilizado por qualquer Aplicação Java, mas possui diversas extensões específicas para Java EE! Ele é composto por diversos módulos,

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 5 de 51

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 06

todos construídos sobre o Core Container. Ele é livre para escolher quais características ele necessita e eliminar módulos que ele não deseja utilizar. A imagem abaixo apresenta os containers. Nós não vamos ver todos eles, vamos ar pelos mais importantes – começando pelo mais importante de todos: Core! Container Core é o responsável por fornecer Inversão de Controle e Injeção de Dependência. O Módulo Beans é o responsável pelo BeanFactory, que é uma implementação do padrão Factory1. O que esse padrão faz? Ele cria beans por meio de configurações XML – tudo isso por meio da interface: org.springframework.beans.factory.BeanFactory. O Módulo AOP fornece uma implementação orientada a objetos que permite definir, por exemplo, interceptadores. Já o Módulo DAO fornece uma camada de abstração para JDBC, eliminando grande parte da codificação necessária para interagir com um banco de dados.

16712855225

O Módulo ORM fornece camadas de integração para mapeamento objetorelacional com tecnologias como JPA, Hibernate, etc. O Módulo JMS fornece a possibilidade de produzir e consumir mensagens, com integração nativa com JMS. 1

Atualmente, recomenda-se utilizar ApplicationContext (org.springframework.context.ApplicationContext) em vez de BeanFactory, porque ele fornece mais funcionalidades. Enquanto o primeiro permite a instanciação e conexão (wire) de beans, o segundo permite também i18n, publicação de eventos, automatizações, etc.

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 6 de 51

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 06

Galera, vamos falar um pouco agora sobre Spring Security! Trata-se de um framework que fornece diversos serviços de segurança a Aplicações Java EE. Ele faz isso de maneira amigável e flexível para o desenvolvedor, aderindo às práticas bem estabelecidas e introduzidas pelo Spring Framework. Ele tenta endereçar todas as camadas de segurança dentro da aplicação. Além disso, vem com um conjunto de opções de configuração que o torna bastante poderoso. Sua principal função é fornecer autenticação e autorização sobre o Spring Framework. Apenas para lembrar esses conceitos, a autenticação é o processo de estabelecer se alguém é quem afirma ser, e a autorização é o processo de decidir se alguém pode ou não realizar alguma ação em uma aplicação. Ele pode ser utilizado em conjunto com aplicações web ou standalone. Além disso, é capaz de proteger de ataques como: session fixation, clickjacking, cross site request forgery, etc. Ele é capaz de lidar com diversos modelos de autenticação – e isso é muito atrativo para desenvolvedores. Pode fornecer segurança em nível de visões, métodos, serviços, URL, domínios, etc. Antes que eu me esqueça, ele é open-source – claro, é parte dos Projetos Spring, junto com Spring Batch, Spring Integration, Spring Web Services, Spring Social, Spring Web Flow e Spring Data. As configurações de segurança são realizadas no arquivo applicationContext-security.xml no diretório WEB-INF. Para que qualquer página ou diretório sejam seguros, é necessário adicionar a esse arquivo o elemento . Como, professor? Mais ou menos assim: . É isso, galera! Acredito que isso seja suficiente...

16712855225

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 7 de 51

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 06

(CESPE - 2012 – PEFO/CE – Analista de Sistemas) No Spring, as configurações de segurança são realizadas no arquivo applicationContext-security.xml, e, para que qualquer página ou diretório seja seguro, é necessário adicionar a esse arquivo o elemento . Comentários: As configurações de segurança são realizadas no arquivo applicationContext-security.xml no diretório WEB-INF. Para que qualquer página ou diretório sejam seguros, é necessário adicionar a esse arquivo o elemento . Como, professor? Mais ou menos assim: . É isso, galera! Acredito que isso seja suficiente... Conforme vimos em aula, a questão está perfeita! Gabarito: C (FCC 0 – TRT/8 – Analista de Sistemas) Interface que representa o container IoC (Inversão de Controle) do framework Spring: a) org.springframework.pojo.factory.PojoFactory. b) org.springframework.ioc.factory.IOCFactory. c) org.springframework.beans.factory.BeanFactory. d) org.springframework.mvc.factory.MVCContainer. e) org.springframework.beans.factory.CoreContainer. 16712855225

Comentários: Ele cria beans por meio de configurações XML – tudo isso por meio da interface: org.springframework.beans.factory.BeanFactory. O Módulo AOP fornece uma implementação orientada a objetos que permite definir, por exemplo, interceptadores. Já o Módulo DAO fornece uma camada de abstração para JDBC, eliminando grande parte da codificação necessária para interagir com um banco de dados.

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 8 de 51

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 06

Conforme vimos em aula, trata-se da BeanFactory. Gabarito: C (FCC 1 – TRT/23 – Analista de Sistemas) Na estrutura do Spring o módulo que provê uma camada de abstração para JDBC, eliminando grande parte da codificação necessária para interagir com um banco de dados é o: a) Spring Core b) Spring ORM c) Spring Context d) Spring DAO e) Spring AOP Comentários: Ele cria beans por meio de configurações XML – tudo isso por meio da interface: org.springframework.beans.factory.BeanFactory. O Módulo AOP fornece uma implementação orientada a objetos que permite definir, por exemplo, interceptadores. Já o Módulo DAO fornece uma camada de abstração para JDBC, eliminando grande parte da codificação necessária para interagir com um banco de dados. Conforme vimos em aula, trata-se do Módulo Spring DAO. Gabarito: D (FCC - 2014 – PRODAM/AM – Analista de Sistemas) O framework Spring permite a troca de mensagens entre clientes através do e nativo ao: 16712855225

a) SpringMessaging Service(SMS). b) JavaMessaging Service(JMS). c) SpringChat Service(SCS). d) JavaChat Service(SCS). e) Chat andMessaging Service(CMS). Comentários: O Módulo ORM fornece camadas de integração para mapeamento objeto-relacional com tecnologias como JPA, Hibernate, etc. O Módulo JMS fornece a possibilidade de Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 9 de 51

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 06

produzir e consumir mensagens, com integração nativa com JMS. Galera, vamos falar um pouco agora sobre Spring Security! Trata-se de um framework que se foca em fornecer autenticação e autorização a Aplicações Java. Conforme vimos em aula, trata-se do Módulo JMS! Gabarito: B (CONSULPLAN - 2012 – TSE – Analista de Sistemas) No contexto do framework Spring existem, basicamente, dois tipos de injeção de dependência, sendo que em um deles, a dependência é resolvida por meio de um construtor do objeto a receber o objeto dependente. Este tipo é conhecido por: a) Bean Injection. b) Setter Injection. c) Factory Injection. d) Constructor Injection. Comentários: Em vez de depender de uma classe concreta, amos a depender de uma abstração. O código estará mais desacoplado, modular, flexível – sendo mais fácil a manutenção e a evolução. É possível injetar dependências de três formas: Injeção por Construtor; Injeção por Propriedade (Setter); e Injeção por Interface – esse último é injeção de dependência sem inversão de controle. Conforme vimos em aula, são três tipos. Acredito que a questão deixou de fora o último por ele não realizar a inversão de controle. De todo modo, trata-se do Constructor Injection. 16712855225

Gabarito: D ACERTEI

Prof. Diego Carvalho

ERREI

www.estrategiaconcursos.com.br

Pág. 10 de 51

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 06

STRUTS

Apache Struts é um framework livre, aberto, extensível, moderno e ágil para criação de Aplicações Web Java pequenas ou grandes. Ele é resultado da junção do Struts com WebWork. Ele preconiza convenções acima de configurações e facilita o gerenciamento, reutilização e manutenção de código. Vamos ver agora algumas características importantes do Struts 2:  Linguagem Java: utiliza infraestrutura oferecida pelas bibliotecas do Java e se concentram mais em negócios e menos em detalhes de infraestrutura. Aproveita-se da maturidade da linguagem para construir aplicações mais robustas e multiplataforma.  Plug-ins: permite a utilização de plug-ins disponibilizados por terceiros, dessa forma o framework Struts 2 oferece em si apenas funcionalidades básicas e se utiliza de outras funcionalidades fornecidas por terceiros (Ex: REST, Hibernate, jQuery, Rome, JFreechart, etc).  Convenções ao invés de configurações: sempre que possível a configuração foi eliminada do Struts 2. Ao não usar configurações, nomes de classes podem oferecer mapeamento de ações, e valores de resultados retornados podem oferecer nomes para a páginas JSP serem renderizadas. 16712855225

 Anotação ao invés de configuração XML: seguindo a tendência de todos os frameworks atuais, o Struts 2 disponibiliza anotações para serem utilizadas nas classes, reduzindo a configuração XML e mantendo a configuração mais perto da classe de ação.  Conversão de dados: a conversão de valores de campos de formulários baseados em String em objetos ou tipos primitivos é tratada pela estrutura de e (e vice-versa), removendo a necessidade de prover este código de infraestrutura na classe da ação.

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 11 de 51

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 06

 Injeção de dependência: seguindo mais um padrão que está sendo utilizado pela maioria dos frameworks, o Struts 2 a a injeção de dependências, reduzindo assim o acoplamento entre as camadas do aplicativo, tornando-o muito mais simples e mais fácil de testar.  Testabilidade: em uma época em que o TDD se torna quase uma obrigação em qualquer projeto de software de médio e grande porte, o Struts 2 facilita a vida dos desenvolvedores, tornando mais simples o teste das ações, interceptadores e outras classes do Struts 2.

Como mostra a imagem acima, Struts 2 possui em sua base duas importantes tecnologias! No coração de todas as aplicações, encontram-se as trocas entre cliente e servidor do Protocolo HTTP. A API Servlet funciona como uma abstração de comunicação entre o Framework Struts 2 e o Protocolo HTTP, facilitando troca de requisições e respostas Entendido?

16712855225

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 12 de 51

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 06

O design do Struts 2 segue um padrão de projeto muito bem estabelecido: MVC (Model/View/Controller)! Ele provê uma separação de responsabilidades que permite o gerenciamento da complexidade de grandes sistemas de software ao dividi-las em três componentes de alto nível! No Struts 2, eles são implementados por uma Action, um Result e um FilterDispatcher, respectivamente.  Controller (FilterDispatcher): o papel do Controller é mapear requisições em ações. Em uma aplicação web, as requisições HTTP podem ser vistas como comandos que o usuário envia para a aplicação. Uma das tarefas principais de uma aplicação web é rotear essas requisições para as ações apropriadas. Metaforicamente, é como um controlador de tráfego de um aeroporto! O papel do Controller é feito por um objeto chamado FilterDispatcher. Trata-se de uma servlet que inspeciona cada requisição para determinar qual ação irá lidar com ela. O programador apenas precisa dizer ao framework qual URL da requisição é mapeada para qual ação. Isso pode ser feito facilmente por meio de um Arquivo de Configuração XML ou por @Annotations em Java 2.  Model (Action): como afirma o renomado autor Donald Brown, o Model é o estado interno da aplicação! Esse estado é composto de dados em si e das regras de negócio. Por exemplo, se você está se logando em uma aplicação, tanto os dados quanto as regras de negócio estarão envolvidas no processo de autenticação. As regras de negócio fornecerão um método de autenticação que usará um Nome de Usuário e uma Senha para verificar os dados recebidos contra os dados persistidos no banco de dados. Isso irá gerar um estado “Autenticado” ou um estado “Não-Autenticado”. Nem os dados nem as regras de negócio separadamente podem produzir esses estados. 16712855225

Uma Action, portanto, é um conjunto encapsulado de chamadas a regras de negócio e também servem como um local de transferência de dados. Em suma: o Controller receberá requisições, consultará seus mapeamentos e determinará quais Actions devem ser acionadas, que preparará os dados necessários para executar a regra de negócio e ará o resultado para a View.

2

A tendência atualmente é utilizar o mínimo possível de Arquivos de Configuração XML e utilizar o máximo de @Annotations ou simplesmente convenções.

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 13 de 51

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 06

 View (Result): o resulta retorna a página para o navegador. Essa página é uma interface que apresenta uma representação do estado da aplicação ao usuário. Em geral, trata-se de Páginas JSP. É muito simples: a View traduz o estado da aplicação em uma representação visual em que seja possível a interação com o usuário. Esse é bem simples...

16712855225

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 14 de 51

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 06

(CESPE 8 – MPE/AM – Analista de Sistemas) O ambiente de trabalho Struts é organizado para ajudar os desenvolvedores a criar aplicações web que utilizem a arquitetura MVC (model-view-controller), na qual o modelo (model) representa o código referente ao negócio ou ao banco de dados, a visão (view) representa o código de desenho da página e o controlador (controller) representa o código de navegação. Comentários: Perfeito, é exatamente isso! Gabarito: C (CESPE 8 – SERPRO – Analista de Sistemas) O Tiles é um componente do framework Struts que facilita a organização de leiautes. Apesar de ter sido desenvolvido para ser usado junto com o Struts, o Tiles pode também ser usado separadamente. Comentários: Perfeito! Ele é um sistema de tamplates que pode ser utilizado sem o Struts. 16712855225

Gabarito: C (CESPE – SERPRO – Analista de Sistemas) O framework Struts, embasado no modelo MVC, é uma implementação em código aberto e tem sido adotado por aplicações web em Java. Comentários: Perfeito, é exatamente isso! Gabarito: C

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 15 de 51

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 06

(CESPE 9 – INMETRO – Analista de Sistemas) A tecnologia Struts é empregada para a construção de aplicações web conforme o modelo MVC, no qual o modelo é representado por beans programados em Java, a view é representada por JSPs e o controller é parcialmente descrito em arquivos XML. Comentários: Perfeito, é exatamente isso! Os dados e as regras de negócio podem ser encapsulados em beans. Gabarito: C (CONSULPLAN - 2012 – TSE - Técnico Judiciário Struts 2 é um framework opensource utilizado para a construção de aplicações Java para a Web. Nesse contexto, observe a figura que representa o ciclo de vida numa requisição Struts 2.

16712855225

De todos os elementos que compõem a arquitetura, uma lida com todas as requisições feitas e é responsável por executar as Actions e o conteúdo estático (HTML, CSS, SCRIPTS) e um outro, é a unidade básica de trabalho, que pode ser

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 16 de 51

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 06

associada a uma requisição HTTP. Nessa ordem, esses elementos são conhecidos, respectivamente, por: a) Filter Dispatcher e Template. b) Action Mapper e Template. c) Filter Dispatcher e Action. d) Action Mapper e Action. Comentários: Dilter Dispatcher lida com as requisições e Action é a unidade básica de trabalho. Gabarito: C (CESPE - 1 – SERPR – Analista de Sistemas) Se a arquitetura for no padrão MVC (modelo, visualização e controle), Pedro poderá escolher como framework o Struts, por ser um software de fonte aberta e que favorece o desenvolvimento de aplicações Web. Comentários: Perfeito, é exatamente isso! Gabarito: C (CESPE 3 – SERPRO – Analista de Sistemas) Em Struts, recursos como mapas de ação podem ter suas configurações controladas por meio de arquivos de configuração. 16712855225

Comentários: Perfeito, é possível fazer o mapeamento de ações por meio de arquivos de configuração. Gabarito: C ACERTEI

Prof. Diego Carvalho

ERREI

www.estrategiaconcursos.com.br

Pág. 17 de 51

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 06

JAVA MESSAGE SERVICE (JMS) Java Message Service (JMS) é uma API Java que possui o intuito de permitir que aplicativos escritos em Java possam criar, receber e enviar mensagens destinadas ou oriundas de outros aplicativos. Galera, esse é um tema que cai pouquíssimo em prova! Quando cai, em geral, basta saber a definição e as características básicas de seu funcionamento. Podemos defini-lo de diversas formas:  Trata-se de uma especificação para envio e processamento de mensagens entre componentes de software distribuídos.  Trata-se de uma tecnologia para envio de mensagens entre dois ou mais clientes distintos.  Trata-se de um middleware que permite que aplicações possam criar, enviar, receber e ler mensagens.  Trata-se de uma API que permite a comunicação entre diferentes componentes de uma aplicação distribuída. Todas essas definições estão corretas! Além disso, ele realiza processamentos fracamente acoplados, em que todas as operações que envolvem a troca de mensagens são feitas de forma assíncrona, fazendo com que as aplicações participantes não precisem ficar bloqueadas esperando o término de alguma computação remotamente solicitada (por meio de RPC ou RMI). Ele define um grupo de interfaces e semânticas que permitem que aplicações Java possam ar os serviços de qualquer MOM! Professor, o que é isso? É o acrônimo de Message-Oriented Middleware, i.e., um middleware que promove a integração das operações de troca de mensagens intra e entre corporações, possibilitando que elementos de negócio sejam intercambiados de forma confiável. 16712855225

JMS é importante? Sim! Primeiro, a especificação inclui duas estratégias populares de envio de mensagem: ponto a ponto e publish/subscribe. Segundo, ele a o envio de mensagens síncronas e assíncronas. Terceiro, ele apoia uma abordagem orientada a eventos para recepção de mensagens. Quarto, muitas implementações fornecem extensiva segurança integrada (Certificação Digital, Criptografias, etc).

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 18 de 51

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 06

Sobre as estratégias de envio de mensagens citadas acima, temos ponto-a-ponto e publish/subscribe – ambas são bastante parecidas. No primeiro caso, o emissor cria uma fila de mensagens no servidor e envia as mensagens para essa fila. O receptor se registra no servidor para receber as mensagens enviadas para essa fila. Há um relacionamento um-para-um (Unicast) entre o cliente emissor e o cliente receptor. Nesse caso, apenas um receptor irá ler a mensagem. Como se trata de uma comunicação assíncrona, não é necessário que o emissor esteja em execução no momento em que o consumidor lê a mensagem. Da mesma forma, não é necessário que o receptor esteja em execução no momento em que o produtor envia a mensagem. Quando lida a mensagem, o receptor envia um aviso para o emissor.

No segundo caso, o emissor cria um tópico no servidor e publica mensagens para esse tópico. Os receptores se registram (i.e., dão subscribe) no servidor para receber mensagens por tópico. Há um relacionamento um-para-muitos (Multicast) entre o emissor e os receptores. Dessa forma, diversos receptores podem ler a mensagem publicada no servidor. Existe também uma dependência temporal entre o emissor e o receptor de um tópico. O receptor deve permanecer continuamente ativo para receber mensagens. Uma observação de nomenclatura: no primeiro caso, chamamos o emissor de produtor e o receptor de consumidor; no segundo caso, chamamos o emissor de publicador e o receptor de (subscriber). 16712855225

A Arquitetura JMS possui três elementos principais:

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 19 de 51

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 06

 Provedor: sistema de mensagem que implementa Interfaces JMS e fornece componentes istrativos e de controle.  Cliente: programas ou componentes, escritos em Java, que produzem e consomem mensagens. Qualquer aplicação Java EE pode ser um cliente.  Mensagem: trata-se dos objetos que comunicam informações entre Clientes JMS – os dados em si.

16712855225

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 20 de 51

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 06

(CESGRANRIO - 2013 - BNDES - Profissional Básico - Análise de Sistemas e Java Message Service (JMS) é uma tecnologia voltada para o envio e processamento de mensagens na qual o a) modelo ponto a ponto de troca de mensagens estabelece que cada mensagem enviada para uma fila deve ser recebida por um único consumidor. b) modelo ponto a ponto de troca de mensagens permite que cada mensagem enviada para uma fila seja lida várias vezes por diferentes consumidores. c) modelo publish/subscribe de troca de mensagens estabelece que até dois consumidores podem ler o conteúdo de uma mensagem enviada. d) modelo publish/subscribe de troca de mensagens estabelece que somente um consumidor pode ler o conteúdo de uma mensagem enviada. e) conceito de tópico de mensagens é usado no modelo ponto a ponto para o envio de uma mensagem em multicast, enquanto o conceito de filas de mensagens é usado no modelo publish/subscribe para o envio de uma mensagem para no máximo um consumidor. Comentários:

16712855225

Sobre as estratégias de envio de mensagens citadas acima, temos ponto-a-ponto e publish/subscribe – ambas são bastante parecidas. No primeiro caso, o emissor cria uma fila de mensagens no servidor e envia as mensagens para essa fila. O receptor se registra no servidor para receber as mensagens enviadas para essa fila. Há um relacionamento um-para-um (Unicast) entre o cliente emissor e o cliente receptor. Conforme vimos em aula, ele possui duas abordagens para envio e processamento de mensagens: ponto-a-ponto e publish/subscribe. No primeiro caso, cada mensagem enviada para uma fila deve ser recebida por um único consumidor (Unicast).

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 21 de 51

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 06

Gabarito: A (CESGRANRIO – PETROBRÁS - Analista de Sistemas – D) Para se garantir a entrega de uma mensagem para um único destinatário, o modelo de troca de mensagens publish/subscribe do JMS com o modo de entrega persistente e um durável é mais indicado, enquanto que se a mensagem for para vários destinatários, pode-se utilizar o modelo ponto a ponto do JMS com um modo de entrega persistente. Comentários: Sobre as estratégias de envio de mensagens citadas acima, temos ponto-a-ponto e publish/subscribe – ambas são bastante parecidas. No primeiro caso, o emissor cria uma fila de mensagens no servidor e envia as mensagens para essa fila. O receptor se registra no servidor para receber as mensagens enviadas para essa fila. Há um relacionamento um-para-um (Unicast) entre o cliente emissor e o cliente receptor. No segundo caso, o emissor cria um tópico no servidor e publica mensagens para esse tópico. Os receptores se registram (i.e., dão subscribe) no servidor para receber mensagens por tópico. Há um relacionamento um-para-muitos (Multicast) entre o emissor e os receptores. Dessa forma, diversos receptores podem ler a mensagem publicada no servidor. Conforme vimos em aula, a questão está invertida! O Modelo Publish/Subscribe é um-para-muitos (Multicast) e o Modelo Ponto-a-Ponto é um-para-um (Unicast). Gabarito: E 16712855225

(CESPE – 2010 – SERPRO - Analista de Sistemas) A API JMS é usada para a construção de sistemas de mensageria na plataforma JEE, sendo algumas de suas características relevantes a assincronia das mensagens, a arquitetura peerto-peer e o e ao estilo de mensageria publish-subscribe. Comentários: JMS é importante? Sim! Primeiro, a especificação inclui duas estratégias populares de envio de mensagem: ponto a ponto e publish/subscribe. Segundo, ele a o envio de mensagens síncronas e assíncronas. Terceiro, ele apoia uma abordagem orientada

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 22 de 51

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 06

a eventos para recepção de mensagens. Quarto, muitas implementações fornecem extensiva segurança integrada (Certificação Digital, Criptografias, etc). Conforme vimos em aula, a questão está perfeita! Gabarito: C ACERTEI

ERREI

16712855225

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 23 de 51

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 06

JNDI (JAVA NAMING AND DIRECTORY INTERFACE) JNDI é uma API Java que fornece uma interface padrão para localizar usuários, máquinas, redes, objetos e serviços. Por exemplo, você pode utilizá-la para localizar uma impressora em sua intranet corporativa, bem como para localizar um objeto Java ou conectar a um banco de dados. A JNDI é utilizada em EJB, RMI-IIOP, JDBC, etc. É a maneira padrão de procurar algo na rede. Um serviço de nomeação genérico é semelhante a uma telefonista 3. Quando quer falar com alguém por telefone e não sabe o número da pessoa, você chama a telefonista do serviço de informações da companhia telefônica para procurar a pessoa com quem quer falar. Você fornece o nome da pessoa à telefonista que então pesquisa o número e o disca para você, conectando-o à pessoa. Um serviço de nomeação genérico é uma entidade que realiza as seguintes tarefas:  Associa os nomes aos objetos. Nós chamamos isso de vinculação de nomes a objetos. É semelhante ao serviço de uma empresa de telefonia associar o nome de uma pessoa a um número telefônico de uma residência específica.  Fornece um recurso para localizar um objeto com base em um nome. Chamamos isso de procurar um objeto. É semelhante a uma telefonista localizar o número de telefone com base no nome e conectar duas pessoas. Um serviço de diretório é um serviço de nomeação que foi estendido e aprimorado para fornecer operações de manipulação de atributos de objetos diretório. Um diretório é um sistema de objetos diretório interconectados. Alguns exemplos de produtos de diretório são Directory Server da Netscape e o Active Directory da Microsoft. 16712855225

A JNDI é um sistema para clientes baseados em Java para interagir com os sistemas de nomeação e de diretório. Ela é uma ponte entre serviços de nomeação e de diretório, fornecendo uma interface comum para diretórios diferentes. Os usuários

3

Outros exemplos:

Um Sistema de Arquivos conecta um caminho a um bloco de memória [c:\temp\dados.txt]  16A0:0C00]; Um Sistema DNS conecta um nome de domínio a um Endereço IP [www.globo.com  200.206.192.193].

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 24 de 51

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 06

que precisam ar um diretório LDAP usam a mesma API que os usuários que desejam ar um diretório NIS ou diretório da Novell. Todas as operações de diretório são feitas pela interface da JNDI, o que fornece uma estrutura comum. Agora vamos ver alguns benefícios:  Você só precisa aprender uma única API para ar todos os tipos de informações do serviço de diretório, como credenciais de segurança, números de telefone, endereços eletrônico e de rede, preferências, etc.  A JNDI isola a aplicação em relação ao protocolo e aos detalhes de implementação. Ademais, pode utilizá-la para utilizar a JNDI para ler e gravar objetos Java inteiros a partir de diretórios.  É possível vincular diferentes tipos de diretórios, como um diretório LDAP com um NDS, e fazer com que a combinação pareça um diretório grande, federado, o qual aparece para o cliente como um único diretório contíguo. No Java EE, você pode utilizar a JNDI para muitos propósitos! Você pode utilizá-lo para adquirir uma referência para a interface Java Transaction API (JTA) Transaction; você pode utilizá-lo para conectar-se às fábricas de recursos, como drivers de JDBC ou de Java Message Service (JMS); ou, por fim, você pode utilizá-lo para pesquisar outros beans. A JNDI é composta por metades: a API cliente e a Service Provider Interface (SPI). A primeira permite que o código Java realize operações de diretório. Essa API é uniforme para todos os tipos de diretórios. Você gastará a maior parte do tempo utilizando a API cliente. A JNDI SPI é uma interface à qual os fornecedores de serviços de nomeação e de diretório podem se conectar. 16712855225

A SPI é o oposto da API: enquanto esta permite que os clientes codifiquem uma única interface unificada, a SPI possibilita aos fornecedores de serviço de nomeação e de diretório ajustarem seus protocolos proprietários particulares no sistema. Isso permite que o código de cliente alavanque os serviços de nomeação e de diretório proprietários em Java enquanto mantém um alto nível de portabilidade de código. Por fim, gostaria de falar também sobre contextos e sistemas de nomes! Um contexto é um conjunto de conexões nome-objeto, i.e., um objeto que tem zero ou mais ligações. Se o objeto contido no contexto for também um contexto, ele será

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 25 de 51

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 06

um subcontexto4. Um sistema de nomes é um conjunto interligado de contextos que respeitam a mesma convenção e possuem um conjunto comum de operações. A imagem abaixo apresenta a Arquitetura JNDI em camadas:

16712855225

4

E

usr é contexto, bin é subcontexto de usr, etc;

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 26 de 51

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 06

(CESPE - 2006 – DATAPREV – Analista de Sistemas) O uso de contextos de nomes JNDI se faz necessário junto aos módulos Web Container e EJB Container. Comentários: Perfeito! Contextos de nomes JNDI são necessários junto ao Web Container e EJB Container. Gabarito: C (CESPE – MEC – Analista de Sistemas) JNDI (Java Naming and Directory Interface) é um framework de desenvolvimento Java que unifica e padroniza classes e interfaces para o a diretórios baseados em LDAP. Comentários: Framework de Desenvolvimento Java? Não! Gabarito: E (CESPE 2 – TJ/AL – Analista de Sistemas – C) No ambiente de nomeação JNDI, sempre que um componente é personalizado, é necessário ar ou alterar o código-fonte do componente. 16712855225

Comentários: Não, visto que o o ocorre pela interface padronizada. Gabarito: E (CESPE - 2012 – TJ/ – Analista de Sistemas) JNDI, parte do projeto de JSF, utiliza XHTML como tecnologia de apresentação dos dados, possibilitando a separação entre as camadas de negócio e de controle. Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 27 de 51

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 06

Comentários: Einh?! Não há NADA certo nesse item, impressionante... Gabarito: E (CESPE - 2013 – RM – Analista de Sistemas) Java Naming and Directory Interface (JNDI), na JEE7, permite que componentes localizem outros componentes em aplicações distribuídas. Assim, é possível que um servlet execute métodos remotos que estejam em outro recurso. Comentários: Perfeito! É um serviço de diretórios para dados e objetos; é possível que um servlet execute métodos remotos que estejam em outro recurso. Gabarito: C (CESPE - 2013 – TRE/MS – Analista de Sistemas) A arquitetura JNDI consiste em uma application programming interface (API) e uma service provider interface (SPI), em que as aplicações Java utilizam a JNDI SPI para ar os serviços de diretórios tais como LDAP e NDS que são, nessa arquitetura, diretamente ligados a JNDI API. Comentários: Na verdade, é o inverso! Aplicações Java utilizam a JNDI API para ar os serviços de diretórios tais como LDAP e NDS que são, nessa arquitetura, diretamente ligados a JNDI SPI. 16712855225

Gabarito: E (CESGRANRIO - 2005 – CASA DA MOEDA – Analista de Sistemas – C) As aplicações J2EE podem utilizar a API JNDI para ar serviços de nomeação e diretório como LDAP e NIS. Comentários: Perfeito, podem utilizar para ar qualquer um desses serviços de diretório. Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 28 de 51

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 06

Gabarito: C (FGV – MEC – Analista de Sistemas – B) O JNDI é a API J2EE que fornece uma interface padrão para localizar usuários, máquinas, objetos, redes e serviços. Comentários: Perfeito, é exatamente isso! Gabarito: C ACERTEI

ERREI

16712855225

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 29 de 51

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 06

JAVA TRANSACTION API (JT Esse é um tema raro em concursos – eu procurei em centenas de provas e encontrei apenas quatro questões, logo vamos ser breves. Bacana? Bem, o Java EE possui uma API que permite que aplicações executem transações distribuídas, ou seja, transações que am e atualizam dados em dois ou mais recursos do computador conectados em rede – trata-se da Java Transaction API (JSR 907). Ele especifica um conjunto de interfaces padronizadas entre um gerenciador (monitor) de transações e as partes envolvidas em um sistema de transação distribuída: a aplicação, o servidor de aplicações, um adaptador de recursos e o gerenciador de recursos, que controla o o aos recursos compartilhados afetados por essas transações. Antes de continuar, vamos definir alguns conceitos. Uma transação define uma unidade lógica de trabalho que ou é completamente bem sucedida ou não produz absolutamente nenhum resultado – ou é tudo ou é nada! Uma transação distribuída é simplesmente uma transação que a e atualiza dados em dois ou mais recursos compartilhados em rede e, portanto, deve ser coordenada entre esses recursos. Essa especificação busca padronizar o uso e tratamento de transações distribuídas, permitindo gerenciar transações (Ex: fazer Commit e Rollback), controlando concorrência, paralelismo, integridade de dados e, isso tudo, sem precisar utilizar transações diretamente por meio de um Driver JDBC. As interfaces mais importantes são Transaction, Transaction Manager, Transaction, XA Resource e Xid. 16712855225

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 30 de 51

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 06

(CESPE - 2010 – TRE/BA - Analista de Sistemas) Em um sistema de transação distribuído, o Java Transaction API (JTA) permite especificar um conjunto de interfaces entre o gerenciador de transações e as partes envolvidas. Comentários: Ele especifica um conjunto de interfaces padronizadas entre um gerenciador (monitor) de transações e as partes envolvidas em um sistema de transação distribuída: a aplicação, o servidor de aplicações, um adaptador de recursos e o gerenciador de recursos, que controla o o aos recursos compartilhados afetados por essas transações. Antes de continuar, vamos definir alguns conceitos. Conforme vimos em aula, essa especificação contém um conjunto de interfaces para coordenar todas as partes envolvidas. Gabarito: C (CESPE - 2010 – TRE/BA - Analista de Sistemas) JTA pode ser utilizado para o gerenciamento de transações distribuídas. Comentários: Esse é um tema raro em concursos – eu procurei em centenas de provas e encontrei apenas sete questões, logo vamos ser breves. Bacana? Bem, o Java EE possui uma API que permite que aplicações executem transações distribuídas, ou seja, transações que am e atualizam dados em dois ou mais recursos do computador conectados em rede – trata-se da Java Transaction API (JTA). 16712855225

Conforme vimos em aula, é exatamente essa a função dele! Gabarito: C

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 31 de 51

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 06

(FGV – FGV – Analista de Sistemas – B) JTA é uma API da linguagem Java que permite a componentes baseados em Java/J2EE criar, enviar, receber e ler mensagens. Comentários: Não, essa questão tenta confundir JTA e JMS! Gabarito: E UMARC – BDMG – Analista de Sistemas – JTA é uma API que padroniza o tratamento de transações dentro de uma aplicação Java. Comentários: Essa especificação busca padronizar o uso e tratamento de transações distribuídas, permitindo gerenciar transações (Ex: fazer Commit e Rollback), controlando concorrência, paralelismo, integridade de dados e, isso tudo, sem precisar utilizar transações diretamente por meio de um Driver JDBC. As interfaces mais importantes são Transaction, Transaction Manager, Transaction, XA Resource e Xid. Conforme vimos em aula, ele de fato padroniza o tratamento de transações dentro de uma Aplicação Java. Gabarito: C ACERTEI

ERREI 16712855225

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 32 de 51

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 06

JAVASERVER PAGES STANDARD TAG LIBRARY (JSTL) O JavaServer Pages Standard Tag Library (JSTL) é um componente da plataforma Java EE! Ele estende a especificação JSP ao adicionar uma biblioteca de tags que encapsula as principais funcionalidades comuns a diversas aplicações, tais como: controle de fluxo; manipulação de XML; internacionalização; o a banco de dados (SQL); etc. Há quem afirme que ela se trata de um conjunto de bibliotecas, cada uma com um propósito bem definido, que encapsula em tags simples toda a funcionalidade necessária para o desenvolvimento de algumas páginas web. O JSTL permite empregar um único conjunto padrão de tags. Galera, por que essa padronização é importante? Ora, porque ela permite que você implante suas aplicações em qualquer contêiner que tenha e à tecnologia JSTL. Galera, ela reduz ou até elimina o uso de scriplets. E daí, professor? Cara, scriplets desorganizam o código-fonte e dificultam a integração entre designers e programadores. A simplicidade das bibliotecas oferecidas pelo JSTL ajuda bastante na lógica de apresentação de uma Página JSP. Claro, essas tags podem acabar agregando maior sobrecarga no servidor. Tanto os scriplets quando as bibliotecas são compiladas em servlets, as quais são executadas por um contêiner. O código das scriplets são basicamente copiados na servlet resultante, já as tags geram um pouco mais de código. Além disso, sejamos sinceros: scriplets são mais poderosas que as Tags JSTL. Bem, essa tecnologia divide as tags basicamente em cinco áreas funcionais: 16712855225

ÁREA FUNCIONAL CORE

XML

DESCRIÇÃO

LISTA DE TAGS

Compreende funções remove, set, choose, forEach, forTokens, if, import, básicas, como loops, redirect, url, catch, out, otherwise, param, when. condicionais e E/S. Compreende funções out, parse, set, choose, forEach, if, transform, de manipulação de otherwise, param, when. XML.

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 33 de 51

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 06

BANCO DE DADOS

Compreende funções setDataSource, query, transaction, update, param, de manipulação de dateParam. dados (SQL).

INTERNACIONA- Compreende funções setLocale, requestEncoding, bundle, message, formação setBundle, formatNumber, formatDate, parseDate, LIZAÇÃO (I18N) de internacional. parseNumber, setTimeZone, timeZone, param. FUNÇÕES

Compreende funções Length, toUpperCase, toLowerCase, split, substring, genéricas e substringAfter, contains, , substringBefore, misturadas. trim, replace, indexOf, startsWith, endsWith, containsIgnoreCase, escapeXml

16712855225

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 34 de 51

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 06

(CESPE 6 – SGA/AC - Analista de Sistemas - I As tags , <switch>, <while> e são tags padronizadas pela JSTL. Comentários:

ÁREA FUNCIONAL

DESCRIÇÃO

LISTA DE TAGS

CORE

Compreende funções remove, set, choose, forEach, forTokens, if, import, básicas, como loops, redirect, url, catch, out, otherwise, param, when. condicionais e E/S.

XML

Compreende funções out, parse, set, choose, forEach, if, transform, de manipulação de otherwise, param, when. XML.

BANCO DE DADOS

Compreende funções setDataSource, query, transaction, update, param, de manipulação de dateParam. dados (SQL).

INTERNACIONA- Compreende funções setLocale, requestEncoding, bundle, message, formação setBundle, formatNumber, formatDate, parseDate, LIZAÇÃO (I18N) de internacional. parseNumber, setTimeZone, timeZone, param. 16712855225

FUNÇÕES

Compreende funções Length, toUpperCase, toLowerCase, split, substring, genéricas e substringAfter, contains, , substringBefore, misturadas. trim, replace, indexOf, startsWith, endsWith, containsIgnoreCase, escapeXml

Conforme vimos em aula, não existe as tags <switch> ou <while>. No entanto, a banca considerou o item verdadeiro :-(

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 35 de 51

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 06

Gabarito: C (CESPE – MPE/AM - Analista de Sistemas) A biblioteca JSTL (JavaServer Pages Standard Tag Library) reúne funcionalidades comuns de aplicações web, provendo e para tarefas estruturais como iterações e condições, etiquetas (tags) para manipular documentos XML, etiquetas para internacionalização e etiquetas SQL. Comentários: O JavaServer Pages Standard Tag Library (JSTL) é um componente da plataforma Java EE! Ele estende a especificação JSP ao adicionar uma biblioteca de tags que encapsula as principais funcionalidades comuns a diversas aplicações, tais como: controle de fluxo; manipulação de XML; internacionalização; o a banco de dados (SQL); etc. Conforme vimos em aula, é exatamente isso! Lembrando que o controle de fluxo trata justamente de sequência, seleção e iteração. Gabarito: C (CESPE - 1 – INMETRO - Analista de Sistemas - B As tags define, inputText, commandButton e message pertencem ao JSP Standard Tag Library 1.0 (JSTL 1.0). Comentários:

ÁREA FUNCIONAL

DESCRIÇÃO

16712855225

LISTA DE TAGS

CORE

Compreende funções remove, set, choose, forEach, forTokens, if, import, básicas, como loops, redirect, url, catch, out, otherwise, param, when. condicionais e E/S.

XML

Compreende funções out, parse, set, choose, forEach, if, transform, de manipulação de otherwise, param, when. XML.

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 36 de 51

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 06

BANCO DE DADOS

Compreende funções setDataSource, query, transaction, update, param, de manipulação de dateParam. dados (SQL).

INTERNACIONA- Compreende funções setLocale, requestEncoding, bundle, message, formação setBundle, formatNumber, formatDate, parseDate, LIZAÇÃO (I18N) de internacional. parseNumber, setTimeZone, timeZone, param. FUNÇÕES

Compreende funções Length, toUpperCase, toLowerCase, split, substring, genéricas e substringAfter, contains, , substringBefore, misturadas. trim, replace, indexOf, startsWith, endsWith, containsIgnoreCase, escapeXml

Conforme vimos em aula, apenas a tag message pertence ao JSTL. Gabarito: E (FCC - 2010 – TRT/8ª REGIÃO - Analista de Sistemas) A biblioteca de tags padrão do Java Server Pages (JSTL) é uma coleção de tags padronizadas para tarefas comuns a muitas aplicações JSP. Estas tags estão divididas em 5 áreas funcionais: a) Web, XML, Banco de Dados, Internacionalização (I18n) e Funções. b) Core, XML, Banco de Dados, Internacionalização (l18n) e Funções. c) Core, Estatística, Banco de Dados, Internacionalização (I18n) e Funções. d) Web, Matemática, Banco de Dados, Internacionalização (I18n) e Funções. e) Core, Web, Matemática, Internacionalização (I18n) e Funções. Comentários: 16712855225

ÁREA FUNCIONAL CORE

DESCRIÇÃO

LISTA DE TAGS

Compreende funções remove, set, choose, forEach, forTokens, if, import, básicas, como loops, redirect, url, catch, out, otherwise, param, when. condicionais e E/S.

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 37 de 51

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 06

XML

Compreende funções out, parse, set, choose, forEach, if, transform, de manipulação de otherwise, param, when. XML.

BANCO DE DADOS

Compreende funções setDataSource, query, transaction, update, param, de manipulação de dateParam. dados (SQL).

INTERNACIONA- Compreende funções setLocale, requestEncoding, bundle, message, formação setBundle, formatNumber, formatDate, parseDate, LIZAÇÃO (I18N) de internacional. parseNumber, setTimeZone, timeZone, param. FUNÇÕES

Compreende funções Length, toUpperCase, toLowerCase, split, substring, genéricas e substringAfter, contains, , substringBefore, misturadas. trim, replace, indexOf, startsWith, endsWith, containsIgnoreCase, escapeXml

Conforme vimos em aula, trata-se de Core, XML, Banco de Dados, i18n e Funções. Gabarito: B (CESPE 9 – CEHAP/PB - Analista de Sistemas) Assinale a opção incorreta acerca de JSTL. a) O JSTL não possui e nativo a SQL. Para tanto, é utilizada em conjunto com a biblioteca nativa SQL do J2EE. b) Uma página JSTL pode ser definida como uma página JSP contendo um conjunto de tags JSTLs. 16712855225

c) Em uma página JSTL, cada tag realiza determinado tipo de processamento. d) O JSTL permite ao programador escrever páginas JSPs sem necessariamente utilizar códigos Java, facilitando a integração entre webdesigners e programadores. Comentários:

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 38 de 51

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 06

O JavaServer Pages Standard Tag Library (JSTL) é um componente da plataforma Java EE! Ele estende a especificação JSP ao adicionar uma biblioteca de tags que encapsula as principais funcionalidades comuns a diversas aplicações, tais como: controle de fluxo; manipulação de XML; internacionalização; o a banco de dados (SQL); etc. (a) Conforme vimos em aula, o e é nativo – é até uma área funcional; O JavaServer Pages Standard Tag Library (JSTL) é um componente da plataforma Java EE! Ele estende a especificação JSP ao adicionar uma biblioteca de tags que encapsula as principais funcionalidades comuns a diversas aplicações, tais como: controle de fluxo; manipulação de XML; internacionalização; o a banco de dados (SQL); etc. (b) Conforme vimos em aula, JSTL é JavaServer Pages (JSP) Tag Library. Logo, nada mais é que uma biblioteca de tags para uma Página JSP.

ÁREA FUNCIONAL

DESCRIÇÃO

LISTA DE TAGS

CORE

Compreende funções remove, set, choose, forEach, forTokens, if, import, básicas, como loops, redirect, url, catch, out, otherwise, param, when. condicionais e E/S.

XML

Compreende funções out, parse, set, choose, forEach, if, transform, de manipulação de otherwise, param, when. XML. 16712855225

BANCO DE DADOS

Compreende funções setDataSource, query, transaction, update, param, de manipulação de dateParam. dados (SQL).

INTERNACIONA- Compreende funções setLocale, requestEncoding, bundle, message, formação setBundle, formatNumber, formatDate, parseDate, LIZAÇÃO (I18N) de internacional. parseNumber, setTimeZone, timeZone, param.

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 39 de 51

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 06

FUNÇÕES

Compreende funções Length, toUpperCase, toLowerCase, split, substring, genéricas e substringAfter, contains, , substringBefore, misturadas. trim, replace, indexOf, startsWith, endsWith, containsIgnoreCase, escapeXml

(c) Conforme vimos em aula, cada conjunto de tags tem uma função genérica e cada tag dentro desse conjunto tem uma função específica. Por exemplo: a tag url cria uma UTL com parâmetros de consulta opcionais. Ora, porque ela permite que você implante suas aplicações em qualquer contêiner que tenha e à tecnologia JSTL. Galera, ela reduz ou até elimina o uso de scriplets. E daí, professor? Cara, scriplets desorganizam o código-fonte e dificultam a integração entre designers e programadores. A simplicidade das bibliotecas oferecidas pelo JSTL ajuda bastante na lógica de apresentação de uma Página JSP. (d) Conforme vimos em aula, este item está perfeito! Gabarit ACERTEI

ERREI

16712855225

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 40 de 51

A

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 06

LISTA DE EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS) SPRING (CESPE - 2012 – PEFO/CE – Analista de Sistemas) No Spring, as configurações de segurança são realizadas no arquivo applicationContext-security.xml, e, para que qualquer página ou diretório seja seguro, é necessário adicionar a esse arquivo o elemento . (FCC 0 – TRT/8 – Analista de Sistemas) Interface que representa o container IoC (Inversão de Controle) do framework Spring: a) org.springframework.pojo.factory.PojoFactory. b) org.springframework.ioc.factory.IOCFactory. c) org.springframework.beans.factory.BeanFactory. d) org.springframework.mvc.factory.MVCContainer. e) org.springframework.beans.factory.CoreContainer. (FCC 1 – TRT/2 – Analista de Sistemas) Na estrutura do Spring o módulo que provê uma camada de abstração para JDBC, eliminando grande parte da codificação necessária para interagir com um banco de dados é o: a) Spring Core b) Spring ORM c) Spring Context d) Spring DAO e) Spring AOP (FCC - 2014 – PRODAM/AM – Analista de Sistemas) O framework Spring permite a troca de mensagens entre clientes através do e nativo ao: 16712855225

a) SpringMessaging Service(SMS). b) JavaMessaging Service(JMS). c) SpringChat Service(SCS). d) JavaChat Service(SCS). e) Chat andMessaging Service(CMS). (CONSULPLAN - 2012 – TSE – Analista de Sistemas) No contexto do framework Spring existem, basicamente, dois tipos de injeção de dependência, sendo que

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 41 de 51

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 06

em um deles, a dependência é resolvida por meio de um construtor do objeto a receber o objeto dependente. Este tipo é conhecido por: a) Bean Injection. b) Setter Injection. c) Factory Injection. d) Constructor Injection.

16712855225

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 42 de 51

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 06

LISTA DE EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS) STRUTS (CESPE 8 – MPE/AM – Analista de Sistemas) O ambiente de trabalho Struts é organizado para ajudar os desenvolvedores a criar aplicações web que utilizem a arquitetura MVC (model-view-controller), na qual o modelo (model) representa o código referente ao negócio ou ao banco de dados, a visão (view) representa o código de desenho da página e o controlador (controller) representa o código de navegação. (CESPE 8 – SERPRO – Analista de Sistemas) O Tiles é um componente do framework Struts que facilita a organização de leiautes. Apesar de ter sido desenvolvido para ser usado junto com o Struts, o Tiles pode também ser usado separadamente. (CESPE – SERPRO – Analista de Sistemas) O framework Struts, embasado no modelo MVC, é uma implementação em código aberto e tem sido adotado por aplicações web em Java. (CESPE 9 – INMETRO – Analista de Sistemas) A tecnologia Struts é empregada para a construção de aplicações web conforme o modelo MVC, no qual o modelo é representado por beans programados em Java, a view é representada por JSPs e o controller é parcialmente descrito em arquivos XML. (CONSULPLAN - 2012 – TSE - Técnico Judiciário Struts 2 é um framework opensource utilizado para a construção de aplicações Java para a Web. Nesse contexto, observe a figura que representa o ciclo de vida numa requisição Struts 2. 16712855225

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 43 de 51

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 06

De todos os elementos que compõem a arquitetura, uma lida com todas as requisições feitas e é responsável por executar as Actions e o conteúdo estático (HTML, CSS, SCRIPTS) e um outro, é a unidade básica de trabalho, que pode ser associada a uma requisição HTTP. Nessa ordem, esses elementos são conhecidos, respectivamente, por: a) Filter Dispatcher e Template. b) Action Mapper e Template. c) Filter Dispatcher e Action. d) Action Mapper e Action. (CESPE - 1 – SERPR – Analista de Sistemas) Se a arquitetura for no padrão MVC (modelo, visualização e controle), Pedro poderá escolher como framework o Struts, por ser um software de fonte aberta e que favorece o desenvolvimento de aplicações Web. 16712855225

(CESPE 3 – SERPRO – Analista de Sistemas) Em Struts, recursos como mapas de ação podem ter suas configurações controladas por meio de arquivos de configuração.

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 44 de 51

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 06

LISTA DE EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS) JMS (CESGRANRIO - 2013 - BNDES - Profissional Básico - Análise de Sistemas e Java Message Service (JMS) é uma tecnologia voltada para o envio e processamento de mensagens na qual o a) modelo ponto a ponto de troca de mensagens estabelece que cada mensagem enviada para uma fila deve ser recebida por um único consumidor. b) modelo ponto a ponto de troca de mensagens permite que cada mensagem enviada para uma fila seja lida várias vezes por diferentes consumidores. c) modelo publish/subscribe de troca de mensagens estabelece que até dois consumidores podem ler o conteúdo de uma mensagem enviada. d) modelo publish/subscribe de troca de mensagens estabelece que somente um consumidor pode ler o conteúdo de uma mensagem enviada. e) conceito de tópico de mensagens é usado no modelo ponto a ponto para o envio de uma mensagem em multicast, enquanto o conceito de filas de mensagens é usado no modelo publish/subscribe para o envio de uma mensagem para no máximo um consumidor. (CESGRANRIO – PETROBRÁS - Analista de Sistemas – D) Para se garantir a entrega de uma mensagem para um único destinatário, o modelo de troca de mensagens publish/subscribe do JMS com o modo de entrega persistente e um durável é mais indicado, enquanto que se a mensagem for para vários destinatários, pode-se utilizar o modelo ponto a ponto do JMS com um modo de entrega persistente. 16712855225

(CESPE – 2010 – SERPRO - Analista de Sistemas) A API JMS é usada para a construção de sistemas de mensageria na plataforma JEE, sendo algumas de suas características relevantes a assincronia das mensagens, a arquitetura peerto-peer e o e ao estilo de mensageria publish-subscribe.

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 45 de 51

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 06

LISTA DE EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS) JNDI (CESPE - 2006 – DATAPREV – Analista de Sistemas) O uso de contextos de nomes JNDI se faz necessário junto aos módulos Web Container e EJB Container. (CESPE – MEC – Analista de Sistemas) JNDI (Java Naming and Directory Interface) é um framework de desenvolvimento Java que unifica e padroniza classes e interfaces para o a diretórios baseados em LDAP. (CESPE 2 – TJ/AL – Analista de Sistemas – C) No ambiente de nomeação JNDI, sempre que um componente é personalizado, é necessário ar ou alterar o código-fonte do componente. (CESPE - 2012 – TJ/ – Analista de Sistemas) JNDI, parte do projeto de JSF, utiliza XHTML como tecnologia de apresentação dos dados, possibilitando a separação entre as camadas de negócio e de controle. (CESPE - 2013 – RM – Analista de Sistemas) Java Naming and Directory Interface (JNDI), na JEE7, permite que componentes localizem outros componentes em aplicações distribuídas. Assim, é possível que um servlet execute métodos remotos que estejam em outro recurso. (CESPE - 2013 – TRE/MS – Analista de Sistemas) A arquitetura JNDI consiste em uma application programming interface (API) e uma service provider interface (SPI), em que as aplicações Java utilizam a JNDI SPI para ar os serviços de diretórios tais como LDAP e NDS que são, nessa arquitetura, diretamente ligados a JNDI API. 16712855225

(CESGRANRIO - 2005 – CASA DA MOEDA – Analista de Sistemas – C) As aplicações J2EE podem utilizar a API JNDI para ar serviços de nomeação e diretório como LDAP e NIS. (FGV – MEC – Analista de Sistemas – B) O JNDI é a API J2EE que fornece uma interface padrão para localizar usuários, máquinas, objetos, redes e serviços.

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 46 de 51

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 06

LISTA DE EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS) JTA (CESPE - 2010 – TRE/BA - Analista de Sistemas) Em um sistema de transação distribuído, o Java Transaction API (JTA) permite especificar um conjunto de interfaces entre o gerenciador de transações e as partes envolvidas. (CESPE - 2010 – TRE/BA - Analista de Sistemas) JTA pode ser utilizado para o gerenciamento de transações distribuídas. (FGV – FGV – Analista de Sistemas – B) JTA é uma API da linguagem Java que permite a componentes baseados em Java/J2EE criar, enviar, receber e ler mensagens. UMARC – BDMG – Analista de Sistemas – JTA é uma API que padroniza o tratamento de transações dentro de uma aplicação Java.

16712855225

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 47 de 51

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 06

LISTA DE EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS) JSTL (CESPE 6 – SGA/AC - Analista de Sistemas - I As tags , <switch>, <while> e são tags padronizadas pela JSTL. (CESPE – MPE/AM - Analista de Sistemas) A biblioteca JSTL (JavaServer Pages Standard Tag Library) reúne funcionalidades comuns de aplicações web, provendo e para tarefas estruturais como iterações e condições, etiquetas (tags) para manipular documentos XML, etiquetas para internacionalização e etiquetas SQL. (CESPE - 1 – INMETRO - Analista de Sistemas - B As tags define, inputText, commandButton e message pertencem ao JSP Standard Tag Library 1.0 (JSTL 1.0). (FCC - 2010 – TRT/8ª REGIÃO - Analista de Sistemas) A biblioteca de tags padrão do Java Server Pages (JSTL) é uma coleção de tags padronizadas para tarefas comuns a muitas aplicações JSP. Estas tags estão divididas em 5 áreas funcionais: a) Web, XML, Banco de Dados, Internacionalização (I18n) e Funções. b) Core, XML, Banco de Dados, Internacionalização (l18n) e Funções. c) Core, Estatística, Banco de Dados, Internacionalização (I18n) e Funções. d) Web, Matemática, Banco de Dados, Internacionalização (I18n) e Funções. e) Core, Web, Matemática, Internacionalização (I18n) e Funções. (CESPE 9 – CEHAP/PB - Analista de Sistemas) Assinale a opção incorreta acerca de JSTL. 16712855225

a) O JSTL não possui e nativo a SQL. Para tanto, é utilizada em conjunto com a biblioteca nativa SQL do J2EE. b) Uma página JSTL pode ser definida como uma página JSP contendo um conjunto de tags JSTLs. c) Em uma página JSTL, cada tag realiza determinado tipo de processamento.

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 48 de 51

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 06

d) O JSTL permite ao programador escrever páginas JSPs sem necessariamente utilizar códigos Java, facilitando a integração entre webdesigners e programadores.

16712855225

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 49 de 51

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 06

GABARITO DOS EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS) SPRING 1 C

2 C

3 D

4 B

5 D

6

7

8

9

10

GABARITO DOS EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS) STRUTS 1 C

2 C

3 C

4 C

5 C

6 C

7 C

8

9

10

GABARITO DOS EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS) JMS 1 A

2 E

3 C

4

5

6

7

8

9

10

GABARITO DOS EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS) JNDI 1 C

2 E

3 E

4 E

5 C

16712855225

6 E

7 C

8 C

9

10

GABARITO DOS EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS) JTA 1 C

2 C

3 E

4 C

5

6

7

8

9

GABARITO DOS EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS) Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 50 de 51

10

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 06

JSTL 1 C

2 C

3 E

4 B

5 A

6

7

8

9

16712855225

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 51 de 51

10

Aula 07 Desenvolvimento de Software para Concursos - Curso Regular Professor: Diego Carvalho

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 07

AULA 07

SUMÁRIO

PÁGINA 01 02 63 101 127

Apresentação - HTML - CSS (Cascading Style Sheets) Lista de Exercícios Comentados Gabarito

Lógica de Programação. Tipos de Dados. Operadores e Expressões. Estruturas de Controle, Seleção, Repetição e Desvio. Recursividade. Funções e Procedimentos. Complexidade de Algoritmos. Métodos de Ordenação. BubbleSort, InsertionSort, SelectionSort, QuickSort, ShellSort, MergeSort e HeapSort. Estruturas de Dados. Vetores e Matrizes. Lista Encadeada. Pilhas. Filas. Árvore. Grafos. Hashing. Estrutura de Arquivos. Padrões de Projeto GOF. Padrões de Projeto Java EE. Padrões de Projeto GRASP. Java SE. Conceitos Básicos. Plataforma Java. Compilação e Interpretação. agem por Valor e Referência. Empacotamento. Raiz. Identificadores. Blocos e Comandos. Comentários. Palavras Reservadas. Tipos Primitivos. Operadores. Vetores. Conversão de Tipos. Controle de Fluxos. Classes. Objetos. Atributos. Métodos. Herança. Encapsulamento. Interface. Polimorfismo. Interface Gráfica. Tipos Enumerados. Anotações. Classes Internas. Reflexão e Genéricos. Tratamento de Exceções. Sincronismo e Multithreading. Coleções. Streams e Serialização. Classes e Operações de I/O. Novidades Java 8. Arquitetura Java EE. JSP. Servlets. JSF. JPA. Hibernate. JDBC. JVM. Spring. Struts. JMS. JNDI. JTA. JSTL. HTML e CSS. JavaScript. JQuery. AJAX. DHTML. XHTML. XML. XSLT. XSD. Sistemas Móveis. Android. iOS. Segurança no Desenvolvimento. Compiladores e Interpretadores. Ferramentas de Controle de Versão. SVN. CVS. Git. Análise Estática de Código-Fonte. SonarQube. Integração Contínua (e outros) Framework .NET, C#, Visual Basic, ASP.NET e Visual Studio (Prof. Mayara Rosa) Delphi e PHP (Prof. Mayara Rosa).

16712855225

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 1 de 127

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 07

HTML HTML (HyperText Markup Language) é uma linguagem de marcação inventada na década de noventa por Tim Berners-Lee. A finalidade inicial era tornar possível o o e a troca de informações e de documentação de pesquisas entre cientistas de diferentes universidades. O projeto tornou-se um sucesso jamais imaginado pelo autor. Ao inventar o HTML, ele lançou as fundações da Internet tal como a conhecemos atualmente. Sinistro, não? A World Wide Web (WWW) é composta primariamente de Documentos HTML transmitidos de um servidor web para outro servidor web, utilizando primariamente o protocolo HTTP. Pois é, ela roda no servidor e pode ser ado por meio de sua URL! Outra informação importante é que, diferentemente do XHTML, o HTML não é case-sensitive – logo, ele não diferencia maiúsculas e minúsculas. Essa linguagem possibilita apresentar informações na Internet. Aquilo que você vê quando a uma página é a interpretação que seu navegador faz do código HTML. Professor, o que significa a sigla? Bem, Hyper é o oposto de linear – ou seja, você pode ir (por meio de hyperlinks) a qualquer lugar da internet! O que é Text? É texto – a princípio, a linguagem foi feita para a visualização de textos.

16712855225

Logo, o hypertext é um texto que contém links! Sempre que você clicar em uma palavra que te leve a uma nova página, aquilo era um hipertexto. O que é Markup Language? É uma linguagem de marcação1 (ou tags) utilizada para fazer com que o

1

Sendo bastante purista, HTML é uma linguagem de marcação e, não, programação.

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 2 de 127

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 07

texto fique melhor organizado dentro da página. Ademais, ela pode estruturar textos, imagens, links, tabelas, listas, entre outros. Em outras palavras, HTML é uma linguagem de marcação para visualização de textos (entre outros) e que permite ir a qualquer lugar da internet. Professor, o que são essas tags? São rótulos utilizados para informar ao navegador como o site deve ser apresentado. Elas geralmente vêm em pares, com uma tag de abertura e uma tag de fechamento (com uma “/”). Vamos ver um exemplo: <nome da tag> Texto qualquer...

É importante observar as tags como parênteses, i.e., é recomendável fechá-las sempre que forem abertas. Além disso, elas podem ser aninhadas! Dessa forma, não basta que elas sejam fechadas, elas devem ser fechadas na ordem correta. E que ordem é essa, professor? A tag mais recentemente aberta deve ser a primeira a ser fechada. Vejamos outro exemplo: <primeira tag> <segunda tag> Texto qualquer...

A estrutura do documento é dividida em duas partes: Cabeça (Head) e Corpo (Body). No entanto, antes de tudo isso, devemos sempre declarar logo na primeira linha de código qual tipo de documento o navegador deverá esperar, por meio da instrução: . Atenção: isso não é uma tag – é uma instrução para indicar ao navegador o tipo de documento que deve renderizar e a versão da linguagem.

IMPORTANTE: Galera, a função principal da linguagem HTML é estruturar a página, seu esqueleto! Ele é capaz de manipular alguns elementos e atributos para apresentação, mas essa não é sua função precípua. Para tal, recomenda-se a utilização de Folhas de Estilo, visto que as versões mais recentes da linguagem têm depreciado diversos desses elementos. Alguns navegadores ainda oferecem e por compatibilidade, mas a tendência é que isso acabe em um futuro próximo. 16712855225

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 3 de 127

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 07 HTML: CABEÇALHO (HEAD)

Agora, sim! Vamos falar sobre as partes estruturantes do Documento HTML! Galera, recomenda-se que tudo em nosso documento (exceto o !DOCTYPE) fique entre
. A partir daí, devemos declarar o cabeçalho! O que isso faz, professor? O Cabeçalho (Head) contém informações sobre o arquivo (Ex: Título – Aquele nome da página que vemos na barra ou aba do navegador).

Estratégia Concursos 6g1i6c Cursos Online para Concursos ...

16712855225

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 4 de 127

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 07

A partir do HTML5, há apenas duas coisas obrigatórias para que um Documento HTML seja válido: !DOCTYPE . Pois é 2m19v isso é o mínimo necessário para validar uma página web. No entanto, é altamente recomendável adquirir dois hábitos: fechar todas as tags abertas; e usar as tags estruturantes <html>, <head> e <body>. Vamos ver agora quais outros elementos podem ir dentro do <head>:<br /> <br /> ELEMENTO <title> <style> <base> <link> <meta> <script> <noscript><br /> <br /> DESCRIÇÃO Especifica o título de um Documento HTML (Janela ou Aba) Especifica informações de estilo do Documento HTML. Especifica um endereço base para as URLs do documento. Especifica um link entre um documento e uma fonte externa. Especifica metadados sobre o próprio Documento HTML. Especifica um script client-side (ex: Javascript). Especifica um conteúdo alternativo para o não-uso de scripts.<br /> <br /> Galera, muitas vezes os sites apresentam problemas na codificação do texto, por conta de acentuação, cedilha, entre outros (Ex: S£ o Paulo). Hoje em dia, a maioria dos servidores e dos bancos de dados já são configurados com a codificação correta, mas se esse problema ocorrer, podemos utilizar a tag <meta> com o atributo charset – há outras soluções, mas essa é a mais recomendada.  Solução: <meta charset="utf-8"/> 16712855225<br /> <br /> Em pesquisa recente, foi constatado que mais de 80% das páginas web utilizavam essa codificação. Ela é popular, porque reconhece praticamente todos os sistemas de escrita utilizados do mundo. Há quem use a codificação ISO-8859-1, por ser mais performática, mas há menos opções de caracteres. Apesar disso, ele está em segundo lugar com cerca de 10% das páginas web do mercado atual.<br /> <br /> Prof. Diego Carvalho<br /> <br /> www.estrategiaconcursos.com.br<br /> <br /> Pág. 5 de 127<br /> <br /> Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 07 HTML: CORPO (BODY)<br /> <br /> Já o Corpo (Body) é o local onde se coloca o conteúdo (Ex: Texto, Imagens, etc), que será visível na página para o leitor. Vamos colocar dois parágrafos no corpo: <!DOCTYPE html> <html> <head> <title> Esse será o título da minha página \o/

E aí, Estratégia Concursos! Tudo bacana?

Observem como o arquivo é dividido em Head e Body



Professor, e se eu quiser colocar uma citação? Aí, nós podemos utilizar as tags e – esse nome vem de quotations:

Confúcio disse: Estudar é polir a pedra preciosa; cultivando o espírito, purificamo-lo.



16712855225

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 6 de 127

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 07 HTML: HEADING TAGS E PARÁGRAFOS

Pessoal, nós podemos inserir parágrafos direto no corpo – como no exemplo acima –, mas todos estarão no mesmo nível. Para níveis diferentes, usamos Heading Tags: Cabeçalhos e Parágrafos 1v1p3t

Está ficando menor! 2j4q32

Está ficando menor! 2j4q32

Está ficando menor! 2j4q32

Está ficando menor! 2j4q32

Está ficando menor! 2j4q32
Está ficando menor! 2j4q32


As Heading Tags (h1, h2, h3, h4, h5 e h6) são recursos de programação HTML utilizados para destacar títulos e subtítulos de uma página. h1 é a abreviação do inglês para Header 1, ou Cabeçalho 1, logo, o mais importante dos Headers. Conceitualmente, o h1 possui um destaque maior, uma fonte maior, e é geralmente o elemento de texto mais visível da página – conforme vimos no exemplo abaixo. 16712855225

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 7 de 127

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 07

16712855225

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 8 de 127

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 07 HTML: HIPERLINKS

Nós também podemos colocar parágrafos dentro das heading tags! Enfim... vocês podem brincar à vontade com isso em compiladores online. Agora vamos falar de hiperlinks! Todo mundo sabe o que é, né?! É aquele link que envia o usuário para outra parte do próprio website ou para outro website. Vamos ver como é possível fazer isso? Utilizamos a tag : Este site te fará ar!

Essa tag define um hiperlink que é utilizado para conectar uma página a outra. Ele tem vários atributos, mas o mais comum e o utilizado é o atributo href, que recebe um valor (website ao qual o usuário será redirecionado). Podemos também colocar o nome do link! Observem que o atributo href diz o endereço, mas o nome do link é o conteúdo da tag . Vejamos como fica:

16712855225

Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 9 de 127

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 07

HTML: IMAGENS

Vamos aprender agora como inserir uma imagem e, para tal, podemos utilizar a tag . Ela é um pouquinho diferente das demais por duas razões: (1) o conteúdo não virá entre as tags, virá no atributo src – ele conterá o endereço para obter a imagem; (2) não há tag de fechamento propriamente dita, apenas />. Vejam o exemplo abaixo de o código para inserir uma imagem linda ao seu website:

16712855225

Vocês já sabem como criar uma imagem e um link! Professor, como criar uma imagem que é um link? Basta colocar a imagem como conteúdo de um hiperlink:


Prof. Diego Carvalho

www.estrategiaconcursos.com.br

Pág. 10 de 127

Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 07

HTML: LISTAS ORDENADAS E DESORDENADAS

Agora vamos ver como criamos listas ordenadas! Que é isso, professor? É simplesmente uma lista sequencial. Para tal, podemos utilizar a tag
    – responsável por criar uma Ordered List. Dentro, podemos inserir itens com uma tag
  1. – responsável por criar um st Item. No exemplo abaixo, criei uma lista dos melhores filmes do David Fincher:

    Melhores filmes de David Fincher l65

    1. Fight Club
    2. Seven
    3. Social Network
    4. Zodiac
    5. Gone Girl


    Percebam que a lista acima está ordenada (1 a 5). No entanto, se eu mudar a tag
      para
      ; quando vocês desejarem bullets, utilizem
    DESCRIÇÃO Define uma tabela. Define uma célula de cabeçalho em uma tabela. Define uma linha em uma tabela. Define uma célula em uma tabela. Define uma descrição de tabela. Define um grupo de colunas em uma tabela para formatação. Define propriedades de colunas para cada coluna . Agrupa o conteúdo da primeira linha de uma tabela. Agrupa o conteúdo do corpo de uma tabela. Agrupa o conteúdo da última linha de uma tabela. 16712855225 Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 20 de 127 Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 07 HTML: FORMULÁRIOS Nem todo mundo gosta de formulários, mas o HTML5 traz grandes melhorias, tanto para os desenvolvedores que criam formulários quanto para os usuários que os preenchem. Com os novos elementos, atributos e tipos de entrada de formulário, a validação baseada no navegador, as técnicas de estilo CSS3 e o objeto FormData, ficou mais fácil e, espera-se, mais agradável criar formulários. Formulários são definidos por meio do elemento . Vamos ver alguns atributos do elemento de formulários: ATRIBUTO DESCRIÇÃO acceptcharset Especifica a codificação de caracteres que serão utilizadas para a submissão dos formulários. Especifica aonde enviar os dados do formulário quando o formulário for submetido. Especifica se o formulário deve ter a função de auto-completar ou não. action autocomplete enctype method name novalidate Especifica como os dados do formulário devem ser codificados quando submetidos ao servidor (apenas quando method = “post”); Especifica o Método HTTP que será utilizado no envio de dados do formulário (GET ou POST). Especifica o nome de um formulário. Especifica que o formulário não deve ser validado quando submetido. 16712855225 target Especifica aonde exibir a resposta que é recebida após submeter o formulário. A linguagem HTML5 apresenta um conjunto de novos valores possíveis para o atributo type do elemento , com objetivo de definir melhor os tipos de dados de entrada nos campos dos formulários. Quando visualizados em um navegador sem e, estes tipos de entrada são convertidos em entrada de texto. Vejamos esses novos valores: VALOR Prof. Diego Carvalho DESCRIÇÃO www.estrategiaconcursos.com.br Pág. 21 de 127 Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 07 tel search url email datetime date month Usado para inserir um número de telefone. Solicita aos usuários que digitem o texto pelo qual desejam buscar. Usado para inserir um URL único. Usado para inserir um único endereço de e-mail ou uma lista de endereços de e-mail. Usado para inserir data e hora com o fuso horário em UTC. Usado para inserir uma data sem fuso horário. Usado para inserir uma data com ano e mês, sem fuso horário. Para inserir uma data formada por um número de ano e um número de semana, mas sem fuso horário. Usado para inserir um valor de horário com hora, minuto, segundos e fração de time segundos, mas sem fuso horário. datetime- Para inserir data e hora sem fuso horário. local Para entrada numérica. number week range> color Para entrada numérica, mas ao contrário de number, o valor real não é importante. Usado para escolher a cor em um controle de cores. 16712855225 Há, ainda, vários novos atributos para o elemento de entrada de dados ( ATRIBUTO autofocus placeholder DESCRIÇÃO Foca a entrada no elemento quando a página é carregada. Dá ao usuário a dica sobre qual tipo de dado inserir. Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 22 de 127 Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 07 form required Especifica um ou mais formulários aos quais o elemento de entrada pertence. Um atributo boleano que significa que o elemento é obrigatório. Especifica que um campo não deve ser preenchido automaticamente ou préautocomplete preenchido pelo navegador de acordo com as entradas anteriores de um usuário. Usado para validar o valor de um elemento com relação a uma expressão pattern regular. Usado para substituir o atributo action no elemento de formulário. formaction formenctype formmethod formnovalidate formtarget Usado para substituir o atributo enctype no elemento de formulário. Usado para substituir o atributo method no elemento de formulário. Usado para substituir o atributo novalidate no elemento de formulário. Usado para substituir o atributo target no elemento de formulário. Pessoal, validar formulários sempre demandou algum tempo e dependências como bibliotecas JavaScript. Com HTML5, podemos ar essa responsabilidade para o navegador, ganhando tempo de desenvolvimento e economizando no peso da página. Olha que beleza: agora podemos utilizar o próprio HTML para validar formulários! Isso é de chorar... HTML5 inclui um mecanismo bastante sólido na validação de formulários com base nos atributos da tag input: type, pattern e require. Graças a esses novos atributos, você pode delegar algumas funções de verificação de dados para o navegador. O primeiro atributo indica o tipo de controle de entrada de dados como o popular para manipulação de dados de texto simples. 16712855225 Alguns controles de formulários herdam sistemas de validação sem a necessidade de escrever qualquer código. Por exemplo, valida o campo para garantir que o dado digitado seja de fato um endereço de e-mail válido. Se o campo tiver um dado inválido, o formulário não vai poder ser submetido até que esse erro seja corrigido. Vejam a imagem abaixo: Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 23 de 127 Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 07 Há também o , e para validar números, URLs e telefones respectivamente. Os formatos de números de telefone variam de país para país devido à inconsistência nos tamanhos e formatos. Como resultado, a especificação não define um algoritmo para validá-los, portanto não é ado nos navegadores web no momento da escrita. Já o atributo pattern especifica um formato (na forma de expressão regular do JavaScript) em que o valor do campo é testado. Expressões regulares são uma linguagem usada para analisar e manipular texto. Elas são frequentemente utilizadas para executar operações complexas de search-and-replace, e para garantir que os dados de texto estão corretos. Hoje em dia, as expressões regulares estão incluídas na maioria das linguagens de programação, assim como em muitas linguagens de script, editores, aplicações, bancos de dados e ferramentas de linha de comando. Expressões regulares (RegEX) oferecem um poderoso, conciso e flexível meio para encontrar string ou textos com caracteres particulares, palavras ou padrões de caracteres. Ao armos uma string RegEX como valor para o atributo pattern, conseguimos definir qual valor é aceitável pelo campo do formulário e também informar ao usuário de possíveis erros. Vamos pensar nos números de telefone no Brasil – ele segue o formato XX-XXXX (Ex: 61. A RegEX correspondente poderia ser: ^\d{2}-\d{4}-\d{4}$. 16712855225 Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 24 de 127 Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 07 Por fim, o atributo required é um booleano utilizado para indicar que um determinado campo de formulário é obrigatório para o envio do mesmo. Ao adicionar esse atributo a um campo de formulário, o navegador obriga o usuário a inserir dados naquele campo antes de enviar o formulário. Essa validação substitui a validação básica de formulário implementada com JavaScript. O campo acima é obrigatório, logo o HTML não permitirá que você submeta um formulário sem inserir valores nesse campo. Nem todos os navegadores am HTML5 e nem toda entrada de texto enviada para seu script virá do formulário. Isso significa que validação do lado do servidor também deve estar antes do envio dos dados para o processamento do servidor. Bacana? 16712855225 Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 25 de 127 Curso Regular de Desenvolvimento de Software Curso de Teoria e Exercícios - 2016 Prof. Diego Carvalho – Aula 07 HTML: NOVIDADES Desde 1999, aguardava-se uma nova versão da linguagem – imaginem só tudo que saiu, mudou ou surgiu nesses mais de dez anos. Pois é, há melhorias significativas trazidas por novas funcionalidades de semântica, ibilidade, tratamento de exceção, independência de plataforma, além de melhorar o e aos mais recentes conteúdos multimídias. HTML é definido de tal forma que seja reversamente compatível com a maneira em que agentes de usuário (Ex: Browser) manipulam conteúdo. Para manter a linguagem relativamente simples para os desenvolvedores web, vários elementos e atributos mais velhos não estão incluídos na nova versão, tais como elementos de apresentação/formatação, que são melhor tratados utilizando CSS. No entanto, os agentes de usuário sempre terão e a esses elementos e atributos mais antigos. Comecemos vendo os elementos obsoletos, i.e., aqueles que não devem ser utilizados por desenvolvedores web, mas que agentes de usuário ainda terão que oferecer e. Comecemos pelos elementos que não estão mais na linguagem por seu efeito era puramente de apresentação: ELEMENTO DESCRIÇÃO Esse elemento era utilizado para especificar a cor e o tamanho da fonte principal de uma página – recomenda-se utilizar elementos da folha de estilo.