Apostila Java Web
Apostila Java Web
Autores:
Pedro Henrique Chagas Freitas,
Raphael Henrique Lacerda
Aula 05
25 de Fevereiro de 2020
Sumário
2 - JAKARTA EE ........................................................................................................................................ 9
FACELETS .............................................................................................................................................. 59
FILTROS ................................................................................................................................................. 60
Declarações ............................................................................................................................................ 85
Expressões .............................................................................................................................................. 85
Scriptlets ................................................................................................................................................ 86
Comentários ........................................................................................................................................... 87
Ações ...................................................................................................................................................... 87
Diretivas ................................................................................................................................................. 88
AngularJS ..............................................................................................................................................131
JEE E JAKARTA EE
Vamos lá! Bem, galera... nosso foco aqui é Java EE1! Empresas de tecnologia da informação sofrem
atualmente com a altíssima competitividade. Não é raro ver uma gigante, que todo mundo achava que
seria eterna, desmoronando-se por conta de uma nova tecnologia que surgiu ou paradigma que apareceu!
Ou alguém aí ainda usa IRC, ICQ, MSN para se comunicar?
É verdade, professor! As empresas de Tecnologia da Informação têm vida curta! Não são só elas! Hoje em dia,
empresas de quaisquer áreas precisam de aplicações para satisfazer as suas necessidades de negócio,
que estão se tornando cada vez mais complexas. E tudo isso se torna mais complicado com a globalização
– as empresas estão cada vez mais espalhadas por cidades, países e continentes.
E, ainda assim, realizam seus negócios 24/7 por meio da internet, com um bocado de data centers e sistemas
internacionalizados para lidar com diferentes línguas, moedas, fusos-horários, etc. E elas param de trabalhar
em algum momento? Não! Estão sempre tentando diminuir seus custos, tempo de resposta de seus
serviços, armazenar mais dados de maneira confiável e segura, entre outros.
E tudo isso de forma transparente para o cliente, que simplesmente acessa uma interface gráfica amigável
achando que isso tudo é muito simples (mal sabem o que ocorre por trás). Pessoal, tudo tem que funcionar
para o usuário não reclamar ou trocar de prestadora de serviço – e, claro, sem perder dinheiro, i.e., tem que
haver prevenção de falhas, alta disponibilidade, redundância, escalabilidade e segurança.
Além disso, as corporações têm de enfrentar constantes mudanças de requisitos, tecnologias, políticas, leis,
etc. Em 2014, grande parte do que citamos é oferecido pelo Java Enterprise Edition (Java EE). Mas,
então, o que é de fato o Java EE? É um conjunto de especificações destinadas ao desenvolvimento de
aplicações distribuídas, robustas, potentes, escaláveis, multicamadas e de alta disponibilidade.
Rapaziada, vamos ver agora algumas novidades trazidas pela Plataforma Java EE 6: conceito de profiles
ou perfis; Java API for RESTful Web Services (JAX-RS); Managed Beans; Contexts and Dependency Injection
(CDI); Dependency Injection for Java; Bean Validation; entre outras tecnologias concernentes a Enterprise
JavaBeans, JavaServer Faces e Servlets.
Como ele oferece tudo isso, nós veremos por meio do estudo de um assunto muito importante: Arquitetura
Java EE – apresentada na imagem abaixo:
1
Esse nome já mudou repetidas vezes! Inicialmente, chamava-se J2EE; depois foi modificado para JEE;
e atualmente é conhecido como Java EE.
3
O Client System é a Camada do Cliente; Web Container é a Camada Web; o EJB Container é a Camada de
Negócio; e o Database é a Camada de Dados2. No entanto, há quem condense a Camada Web e a Camada
de Negócio em uma camada chamada Servidor Java EE, representada pelo retângulo maior à direita –
veremos com detalhes mais à frente!
2
É também conhecida como Camada EIS (Enterprise Information System), que disponibiliza informações relevantes ao negócio e,
diferente do que apresenta a imagem, não trata apenas do banco de dados, mas também de sistemas legados, processamento de
transações de mainframe, sistemas externos, entre outros.
4
Vamos falar um pouco agora sobre o Modelo de Aplicações Java EE! Galera, Java EE é projetado para
suportar aplicações que implementam serviços corporativos para clientes, empregados, fornecedores,
parceiros e outros que demandem ou contribuem com a organização! Essas aplicações são inerentemente
complexas, acessando dados de diversas fontes e distribuindo as aplicações entre os clientes.
O Modelo de Aplicações Java EE define uma arquitetura para implementação de serviços como aplicações
multicamadas que fornecem escalabilidade, acessibilidade e gerenciabilidade necessários para aplicações
corporativas. Dessa forma, a lógica de apresentação e a lógica de negócio são implementadas pelo
desenvolvedor e os outros serviços são fornecidos pela plataforma Java EE!
Conforme mostra a imagem acima, existem duas aplicações multicamadas Java EE divididas em níveis
descritos como se segue:
Galera, a imagem abaixo apresenta um pouco da evolução do Java EE e a tabela que segue apresenta as
APIs do Java EE:
A versão Java EE 6 traz o conceito de profile (ou perfil)! O que é isso, professor? Um perfil busca definir um
subconjunto das tecnologias dentre aquelas da plataforma Java EE. Como assim? Bem, pensem comigo:
cada aplicação tem sua particularidade, portanto não é necessário implementar obrigatoriamente
todas as tecnologias da plataforma, i.e., eu posso criar perfis – cada um com sua configuração!
Imaginem que vamos fazer um sisteminha pequeno! Eu preciso implementar tudo que está na plataforma?
Não, posso criar um perfil que implementa somente um subconjunto de funcionalidades! Existem dois
perfis importantes: Web Profile e Full Profile! O primeiro perfil é um subconjunto do segundo e ajuda
desenvolvedores a criarem aplicações mais leves que podem rodar em um Servlet Container.
Observem que a tabela abaixo apresenta o EJB 3.1 como parte do Web Profile. Na verdade, no Web Profile,
trata-se do EJB 3.1 Lite, que é mais leve. Como assim, professor? Assim como os perfis, ele possui um
subconjunto dos features do EJB 3.1 Full. Por que? Porque é uma API utilizada especificamente para
aplicações web. Vejam a diferença de acordo com a tabela abaixo.
Percebam que o EJB 3.1 Lite deixa de fora funcionalidades que são pouco utilizadas em aplicações web. De
forma similar o Web Profile não oferece suporte a JAX-WS, JAX-RPC, JAXR, SAAJ, JAX-RS, JAXB, JMS, JAAS,
JASPIC, JACC, JCA, JavaMail, Management Specification e Deployment Specification – além disso, ele não
oferece suporte a Arquivos EAR (apenas Arquivos WAR).
Para finalizar, vamos entender algumas coisinhas! O processo de implantar (para alguns, instalar) uma
aplicação em um Servidor Java EE é chamado Deploy ou Deployment. Sabe-se que componentes são
agrupados em módulos, compactados em .ZIP e, na Implantação, mapeia-se cada componente do Java
EE para seu contêiner correspondente. Existem três tipos básicos de módulo:
MÓDULO DESCRIÇÃO
EAR Também chamado Enteprise Application Archives, contém a aplicação completa, com todos os seus
módulos e componentes. É composta por vários arquivos .war e .jar.
WAR Também chamado Web Application Archives, contém a Aplicação Web (JSP, HTML, Servlets, Arquivos
de Configuração, Imagens, etc) – é o que forma uma página em si.
JAR Também chamado Java Application Archives, contém a Aplicação EJB, Aplicação Cliente e Applets3,
além de arquivos de configuração dos aplicativos.
RAR Também chamado Resource Adapter, contém interfaces, classes, bibliotecas, etc.
2 - JAKARTA EE
Pessoal vamos lá! Esse tema tem tudo para ser o novo alvo de cobranças em concursos, principalmente nos
próximos anos, onde as bancas vão explorar temas ainda não explorados. Vamos então esclarecer os
principais pontos sobre o Jakarta EE (Futuro do JAVA EE).
Já alguns anos tem sido discutido o futuro do Java na web. A razão disso é que desde 2018 o JEE tem migrado
das mãos da ORACLE para as mãos da fundação Eclipse, que trouxe a mudança de nome de Java EE para
Jakarta EE.
Em suma, tudo começa assim com o: Em 2001 foi idealizado e doado a um consórcio formado por
importantes empresas do segmento de tecnologia, a famosa IDE Eclipse. Em 2004 nasceu a Eclipse
Foundation, uma fundação sem fins lucrativos, mas como uma hierarquia bem definida, possibilitando que
novos parceiros chegassem e apoiassem os atuais e futuros projetos. Já em meado de 2018 foi anunciada a
transição do JEE para o Jakarta EE. Tudo foi ocorrendo na seguinte ordem:
O Jakarta nasceu como um importante projeto, elaborado pela Apache Foundation. Entre os projetos que
faziam parte do Jakarta tínhamos o Apache Tomcat, Struts, Commons, Velocity, Maven, entre vários
outros. Entretanto, o Jakarta foi descontinuado em 2011 e os projetos remanescentes se mantiveram
separados desde então. Por ter tido uma contribuição importante no mundo Java, o nome Jakarta foi
3
A bem da verdade, todos os módulos são Arquivos JAR com a extensão modificada. Por que essa
mudança? Para que o servidor possa diferenciar o que está sendo implantado.
9
sugerido como substituição ao Java EE e generosamente doado pela Apache Foundation a Eclipse
Foundation.
O grande objetivo então do Jakarta EE é manter o Java corporativo sempre atual em relação as tendências
e demandas do mercado. Evitando assim, que longos e burocráticos processos tomem muito tempo e
atrasem o lançamento de atualizações e novas especificações, o que estava acontecendo nos últimos anos
sob o comando da Oracle. Embora a Oracle não seja mais responsável pelo Java EE, a empresa se
comprometeu a ter uma participação ativa no futuro do Jakarta EE. Isso é importante porque para você
rodar qualquer software baseado em Java EE ou Jakarta EE é necessário ter uma máquina virtual Java (JRE)
e a Oracle ainda tem os direitos sobre ela.
Outro processo importante que depende diretamente da participação da Oracle é o de migração do então
Java EE 8 para a fundação Eclipse. Será a partir do Java EE 8 que o Jakarta EE será desenvolvido. A ideia é
lançar o Jakarta EE 8 e para esse processo a Oracle já cedeu alguns projetos importantes como o Grizzly,
OpenMQ, Mojarra, JMS, Tyrus, JAX-RS, Jersey, WebSocket API, JSON Processing. Conforme informações
serão trinta projetos migrados para a Eclipse Foundation pela Oracle.
Embora o Jakarta EE passe a ser a nova especificação da plataforma EE Java, a marca que comandará os
projetos envolvidos foi nomeada como EE4J (Eclipse Enterprise for Java). Ela contemplará o Jakarta EE, o
novo órgão EFSP (Eclipse Foundation Specification Process) em substituição ao JCP e também as normas
TCK para a certificação das implementações. Este processo de migração do Java EE para o EE4J foi tão
significativo que duas importantes empresas fazem parte do grupo de apoiadores e colaboradores do
projeto Jakarta EE, são elas a Microsoft e a Pivotal, esta última, detentora dos direitos sobre o Spring
Framework. Além delas, outras grandes empresas de tecnologia são membros do projeto Jakarta EE como
a RedHat, IBM, Fujitsu, Cloud Bees, SAP, Vaadin, entre outras.
A migração JEE para Jakarta atualmente, segundo o eclipse.org está em andamento e inclui várias etapas,
com o seguinte status:
10
Quando tudo estiver pronto, teremos um lançamento da API do Jakarta EE 8 que possui uma assinatura
idêntica à API do Java EE 8 de onde se origina, mas que é totalmente construído, licenciado, testado e
certificado via / pela Eclipse Foundation e seus processos.
QUESTÕES COMENTADAS
Comentários:
Galera, vamos responder isso intuitivamente! Como uma Página JSP ou um Componente EJB poderia oferecer
maior reusabilidade que uma biblioteca? Ora, essa é uma das principais características de uma biblioteca: sua
reusabilidade! Logo, isso não faz sentido! Bibliotecas de Tags são mais reusáveis.
Gabarito: E
2. (CESPE – 2005 – SERPRO – Analista de Sistemas) A tecnologia Enterprise JavaBeans (EJB) é uma
arquitetura de componentes do tipo cliente que atua na plataforma J2EE.
Comentários:
11
Conforme vimos em aula, Enterprise Java Bean (EJB) não é uma arquitetura, é um componente da
Arquitetura J2EE. Além disso, é do tipo Servidor (veja a imagem acima).
Gabarito: E
3. (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 suporte 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.
Comentários:
Lembrando: Imaginem que vamos fazer um sisteminha pequeno! Eu preciso implementar tudo que está na
plataforma? Não, posso criar um perfil que implementa somente um subconjunto de funcionalidades!
Existem dois perfis importantes: Web Profile e Full Profile! O primeiro perfil é um subconjunto do segundo e
ajuda desenvolvedores a criarem aplicações mais leves que podem rodar em um Servlet Container.
12
Conforme vimos em aula, primeiro, não existe Application Server Profile – existe apenas Web Profile e Full
Profile. Segundo, o conceito de Perfis foi introduzido apenas no Java EE 6 – eu calculo que ele esteja
considerando Full Profile como Application Server Profile. Terceiro, POJOs e Annotations são tecnologias
do Java EE 5. Quarto, pode-se dizer que é aderente ao SOA por conta do JAX-RS, no entanto o Full Profile
também é (inclusive é aderente ao JAX-RS também). Logo, a questão está errada desde o início.
Gabarito: E
4. (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 acessos a banco de dados, nem
executam regras de negócio complexas.
Comentários:
Conforme vimos em aula, os clientes Java EE não são necessariamente Páginas Web Dinâmicas (Browser).
A imagem acima mostra que eles podem ser também uma Aplicação Cliente.
Gabarito: E
Comentários:
13
Conforme vimos em aula, um componente Java EE é uma unidade autocontida, porque pode ser reusada
sem a necessidade de incluir ou depender de outros componentes. Ademais, eles são escritos na linguagem
de programação Java, no entanto não são necessariamente executados exclusivamente em servidores,
podem ser executados no cliente (conforme imagem acima).
Gabarito: E
6. (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.
Comentários:
Conforme vimos em aula, a Camada Web é composta por JSP, JSF e Servlets.
14
Gabarito: C
7.(ESAF – 2012 – CGU – Analista de Finanças e Controle) Os níveis da plataforma J2EE são:
Comentários:
Conforme vimos em aula, os níveis são: Cliente, Web, Negócios e Sistemas de Informação Corporativos
(EIS).
Gabarito: B
15
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 acesso pela Internet.
Comentários:
Para finalizar, vamos entender algumas coisinhas! O processo de implantar (para alguns, instalar) uma
aplicação em um Servidor Java EE é chamado Deployment. Sabe-se que componentes são agrupados em
módulos, compactados em .ZIP e, na Implantação, mapeia-se cada componente da Arquitetura Java EE para
seu contêiner correspondente. Existem três tipos básicos de módulo:
Conforme vimos em aula, a primeira opção está errada, porque pode-se junta ambos em um Arquivo EAR;
a segunda opção está correta e justifica a primeira; a terceira opção está errada, porque são arquivos
compactados em .ZIP; a quarta opção está errada, porque simplesmente não faz nenhum sentido; e a última
opção está errada porque arquivo JAR pode empacotar componentes EJB, Cliente e Applet.
Gabarito: B
Comentários:
Conforme vimos em aula, tanto aplicações clientes como applets rodam no cliente; Servlets, JSF e JSP
rodam no Servidor, assim como o EJBs.
Gabarito: C
10. (FCC - 2011 - TRT - 1ª REGIÃO (RJ) - Analista Judiciário - Tecnologia da Informação) J2EE é uma
plataforma de programação para servidores na 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:
17
Comentários:
Conforme vimos em aula, trata-se do JDBC, JSP e EJB! Muitas pessoas me perguntam: “Professor, Hibernate
não é integrante do J2EE?”. Galera, o Hibernate é um framework que implementa a especificação JPA. Logo,
ele não faz parte do J2EE ou Java EE. Beleza?
Gabarito: B
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 é:
Comentários:
18
Gabarito: E
12. (FCC - 2010 - TCE-SP - Agente da Fiscalização Financeira - Informática - Suporte de Web) São apenas
tipos de componentes executados em servidores Web:
Comentários:
19
Conforme vimos em aula, JSP e Servlets são fáceis! E os beans? Pois é, excepcionalmente eles podem ser
executados em Servidores Web (Contêiner Web).
Gabarito: C
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:
Comentários:
20
Gabarito: C
14. (FCC – 2012 – TJ/PE – Analista de Sistemas) Sobre a plataforma Java EE 6, é correto afirmar:
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.
Comentários:
(a) Correto. Pessoal, a plataforma Java EE realmente simplifica a implantação removendo a necessidade de
descritores de implantação, mas há uma exceção: o arquivo web.xml;
(b) Descritores de implantação, como o ejb-jar.xml e entradas relacionadas aos Web services no web.xml,
já estão obsoletos – não se usa mais!
(c) A Plataforma Java EE utiliza Anotações, que são modificadores Java, semelhantes aos públicos e
privados. No entanto, eles são especificados no código!
21
(d) Ele define anotações para o tipo Bean, tipo de Interface, referências de recurso, atributos de transação,
segurança, etc;
Gabarito: A
ACERTEI ERREI
22
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 acessadas 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, acessando 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)!4 ;)
4
Oracle afirma: “A servlet can almost be thought of as an applet that runs on the server side”.
23
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!
24
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.
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 java.io.*;
import java.text.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
res.setContentType("text/html");
PrintWriter out = res.getWriter();
out.println("<html>");
out.println("<body bgcolor = \"white\">");
out.println("<h1>Hello Servlet</h1>");
out.println("</body>");
out.println("</html>");
}
}
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:
25
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 HttpServlet5. 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 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 acessado por meio do objeto ServletConfig.
5
Seu nome completo é: javax.servlet.http.HttpServlet.
26
==14aad3==
Voltando ao nosso código: importamos os dois pacotes, estendemos essa classe abstrata e passamos
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.
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 para vocês verem como é possível receber dados de entrada do
usuário e manipulá-los dinamicamente.
27
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?
É importante entender também como funciona um dos métodos mais importantes da interface
HttpServletRequest: método getParameter6! Bem, ele retorna o valor do parâmetro de uma requisição
6
Já o Método getInitParameter retorna o valor do parâmetro de inicialização.
28
como uma String; E por que é importante? Porque ele é útil na passagem 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 repassa para o Servlet
Container. Já existe uma instância7 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!
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!
7
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 passa para ela.
29
1. (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:
Comentários:
O Servidor recebe uma Requisição HTTP e a repassa 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!
Gabarito: B
2. (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.
e) são carregadas apenas uma vez e, para cada nova requisição, a servlet gera uma nova thread.
30
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
3. (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:
Gabarito: A
31
4. (FCC – 2012 – TRE/CE – Analista de Sistemas) No contexto do ciclo de vida de um servlet, considere:
I. Quando o servidor recebe uma requisição, ela é repassada 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(),
passando 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.
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 repassa 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) 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 repassa 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
32
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
5. (FCC – 2013 – 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:
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 passar parâmetros de inicialização.
33
III. O Servlet Contêiner invoca o método service da servlet para processar a requisição HTTP, passando
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.
Comentários:
Conforme a imagem acima, o Servidor recebe uma Requisição HTTP e a repassa 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 repassa 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!
(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
34
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) 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
6. (FCC – 2006 – 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:
Comentários:
Voltando ao nosso código: importamos os dois pacotes, estendemos essa classe abstrata e passamos como
parâmetro as duas interfaces. Se a Requisição HTTP foi feita utilizando o Método GET, executaremos o
35
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.
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
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 passagem 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 ;)
Gabarito: D
36
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).
d) As duas asserções são proposições verdadeiras, mas a segunda não é 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?
Roubei esse parágrafo da aula de JSP! Observem que ambas as assertivas estão corretas e a segunda
justifica a primeira.
Gabarito: E
37
9. (FCC - 2013 - AL-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.
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).
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
38
uma String; E por que é importante? Porque ele é útil na passagem 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
11. (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.
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
12. (VUNESP – 2013 – 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.
39
e) um objeto que fornecerá informações sobre a requisição feita pelo cliente ao Servlet.
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
13. (CESGRANRIO – 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.
Gabarito: C
14. (CESGRANRIO – 2006 – DECEA – Analista de Sistemas – B) Applets e Servlets são compilados e
executados no servidor.
40
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, servlets rodam no servidor, mas applets rodam no cliente.
Gabarito: E
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 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
Comentários:
Isso é da aula de Páginas JSP, no entanto é sabido que Pásginas JSP se transformam em Servlets!
Gabarito: C
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.
42
a) I
b) II
c) III
d) I e III
e) II e III
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.
(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
18. (ESAF – 2008 – 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.
Comentários:
43
A documentação oficial afirma que se trata de uma classe java pura utilizada para estender as capacidades dos
servidores que hospedam aplicações acessadas 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, acessando o banco de dados, etc.
Gabarito: E
19. (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!
Gabarito: C
20. (AOCP - 2012 - BRDE - Analista de Sistemas - Desenvolvimento de Sistemas - (Prova TIPO 4)) Sobre
Servlets, analise as assertivas e assinale a alternativa que aponta as corretas.
44
II. Servlets são independentes de plataforma, de modo que podem ser executadas em diferentes
servidores, em diferentes sistemas operacionais.
III. As Servlets podem acessar qualquer uma das APIs Java. Uma Servlet pode usar a API JDBC para
acessar e armazenar dados ou para acessar 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.
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 acessar APIs Java como qualquer outra.
IV. Não, somos obrigados a implementar, se for Servlet HTTP, os métodos doGet ou doPost.
Gabarito: D
21. (VUNESP - 2013 - FUNDUNESP - Analista Programador Júnior) Para criar um Servlet que processará
as requisições HTTP na plataforma J2EE, deve-se:
45
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:
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.
46
Gabarito: B
22. (FEPESE - 2013 - JUCESC - Analista Técnico em Gestão de Registro Mercantil - Analista de
Informática) Assinale a alternativa que defne corretamente um Servlet.
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, trata-se da terceira opção – todas as outras são absurdas!
Gabarito: C
23. (VUNESP - 2013 - FUNDUNESP - Analista Programador Júnior) Considere o Servlet a seguir:
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
47
response.write(“<html>”);
response.write(“<body>”);
response.write(“Servlet em operação!”);
response.write(“</body>”);
response.write(“</html>”);
}
}
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.
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.
48
Conforme vimos em aula, nós utilizamos o método getWriter para capturar a resposta e passar para um
objeto PrintWriter. A HttpServletResponse não possui qualquer método write.
Gabarito: C
24. (CESGRANRIO - 2008 - TJ-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:
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 ERREI
49
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, acessando 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.
Para resolver esse tipo de problema, surgiram as Aplicações Web. Elas rodam em um servidor central onde
os usuários podem acessá-las por meio de um navegador (Chrome, Firefox, etc) e um protocolo HTTP.
Nesse caso, todas as regras de negócio da 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.
É possível unir as melhores características desses dois mundos, com componentes ricos, abstraindo
protocolos, etc. Vocês já ouviram falar da Arquitetura Model-View-Controller (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.
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
50
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 framework8. 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; suportar internacionalização e
acessibilidade; 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.
8
As implementações da especificação mais famosas são Oracle Mojarra e o Apache MyFaces.
51
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.
A funcionalidade fornecida por uma Aplicação JSF é similar a qualquer outra Aplicação Web. Ela possui
as seguintes partes:
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.
52
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:
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 acessa nada, é muito simples – basta colocá-lo
diretamente na camada de visão e mostrá-lo!
E se eu tenho que dar um “Olá, X”, em que X é o nome da pessoa que acessou o sistema? Em outras palavras,
se eu acessei, deve mostrar “Olá, Diego”; se o Messi acessou, deve mostrar “Olá, Messi”! Para tal, eu vou
precisar acessar o banco de dados, buscar informações do sistema, talvez saber o horário de acesso, 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 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 FacesServlet? É 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?
54
O faces-config.xml tem sido rapidamente substituído por annotations – novidade do JSF 2.0. Essa versão
trouxe: suporte a facelets; utilização de templates para a aplicação; simplificação do desenvolvimento de
componentes; suporte nativo a Ajax (f:ajax); navegação implícita e condicional; suporte ao Método GET;
adição de novos escopos (Flash e View); composição de componentes customizados; etc.
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.
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.
55
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.
56
No JSF, esse componente é o FacesServlet! 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 FacesServlet. 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).
Na etapa Invoke Application, a FacesServlet 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 administra os dados da aplicação. Os Managed Beans acionam
o modelo para executar regras de negócio, recuperar dados administrados pelo modelo, etc.
As telas da aplicação são definidas na camada de visão. A FacesServlet acessa 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:
57
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 é passado 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 à FacesServlet.
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.
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 passados para a Aplicação Web para que ela possa concluir
qualquer outro processamento da requisição que seja necessário.
58
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 acesso ao componente como um todo. Para que? Nós, eventualmente, podemos
querer manipular o componente dinamicamente, por exemplo. Assim, é possível acessar 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 suporta todas as características disponíveis na Plataforma
Java EE – sendo considerada obsoleta para JSF!
Facelets é uma parte da especificação JSF e também a tecnologia de apresentação preferida para
construir aplicações JSF – substituindo JSP. Ela suporta 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:
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 acesso 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
acessado. Dessa forma, quando um usuário acessar 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 acesso a recursos, entre outros.
QUESTÕES JSF
<managed-bean>
<managed-bean-name>func</managed-bean-name>
<managed-bean-class>bean.Funcionario</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
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.
60
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.
Gabarito: D
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; suportar internacionalização e
acessibilidade; e prover extensibilidade. Segundo, taglibs (bibliotecas de tags) para adicionar componentes
a páginas web e conectar componentes a objetos server-side.
Gabarito: C
61
3. (FCC - 2012 - TJ-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.
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?
Gabarito: C
4. (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.
Comentários:
62
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; suportar internacionalização e
acessibilidade; e prover extensibilidade. Segundo, taglibs (bibliotecas de tags) para adicionar componentes a
páginas web e conectar componentes a objetos server-side.
Gabarito: C
5. (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.
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.
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.
63
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?
Gabarito: C
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 FacesServlet? É 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
7. (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.
64
c) armazena os mapeamentos das ações e regras de navegação em projetos JSF nos arquivos WEB-
INF.xml e FACES-CONFIG.xml.
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 é FacesServlet.
65
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?
(c) Conforme vimos em aula, o mapeamento de ações e regras de navegação é responsabilidade somente
do faces-config.xml.
O faces-config.xml têm sido rapidamente substituído por annotations – novidade do JSF 2.0. Essa versão
trouxe: suporte a facelets; utilização de templates para a aplicação; simplificação do desenvolvimento de
componentes; suporte nativo a Ajax (f:ajax); navegação implícita e condicional; suporte ao Método GET;
adição de novos escopos (Flash e View); composição de componentes customizados; etc.
(d) Conforme vimos em aula, a questão está perfeita! O Ajax não só é suportado, esse suporte é 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
66
8. (CESPE - 2013 - SERPRO - Analista - Desenvolvimento de Sistemas) O JSF provê uma linguagem de
expressão exclusiva para acesso 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:
Conforme vimos em aula, ela serve para referenciar propriedades e Managed Beans.
Gabarito: E
9. (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:
67
Comentários:
o Namespace: xmlns:h=”http://java.sun.com/jsf/html”
o Namespace: xmlns:f=”http://java.sun.com/jsf/core”
o Namespace: xmlns:ui=”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
10. (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).
68
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 suporta 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
11. (FCC - 2012 - TJ-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) FacesServlet.
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 FacesServlet? É 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.
69
Gabarito: E
12. (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:
O faces-config.xml têm sido rapidamente substituído por annotations – novidade do JSF 2.0. Essa versão
trouxe: suporte a facelets; utilização de templates para a aplicação; simplificação do desenvolvimento de
componentes; suporte nativo a Ajax (f:ajax); navegação implícita e condicional; suporte ao Método GET;
adição de novos escopos (Flash e View); composição de componentes customizados; etc.
Conforme vimos em aula, o suporte é 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”.
Gabarito: E
13. (FCC - 2012 - TRE-CE - 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:
70
Apply Request Values: qualquer dado que for enviado como parte da requisição é passado 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 à FacesServlet.
Gabarito: B
14. (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:
Gabarito: E
15. (FCC - 2012 - TRT - 11ª Região (AM) - Técnico Judiciário - Tecnologia da Informação) Sobre o
framework JavaServer Faces é correto afirmar:
71
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 acessar 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.
Comentários:
(a) Na verdade, está na Camada Web, facilmente integrável com Spring, JPA e EJB;
Gabarito: D
72
16. (CESPE - 2013 – CPRM – 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:
Gabarito: C
17. (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.
Comentários:
Apply Request Values: qualquer dado que for enviado como parte da requisição é passado para os
componentes apropriados. Essas visões atualizam seus estados com os valores dos dados. Dados podem
73
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 à FacesServlet.
Gabarito: C
18. (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.
Comentários:
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.
Gabarito: E
19. (CESPE - 2010 – TCU – Analista de Sistemas) Para suportar a construção de aplicações com Ajax e JSF,
recomenda-se aos desenvolvedores de páginas que usem a tag <f:ajax>, relacionada ao processamento
de pedidos http assíncronos.
Comentários:
74
O faces-config.xml têm sido rapidamente substituído por annotations – novidade do JSF 2.0. Essa versão
trouxe: suporte a facelets; utilização de templates para a aplicação; simplificação do desenvolvimento de
componentes; suporte nativo a Ajax (f:ajax); navegação implícita e condicional; suporte ao Método GET;
adição de novos escopos (Flash e View); composição de componentes customizados; etc.
Gabarito: C
20. (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:
Comentários:
Apply Request Values: qualquer dado que for enviado como parte da requisição é passado 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 à FacesServlet.
Gabarito: C
75
21. (CESPE - 2010 – 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.
Gabarito: E
22. (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.
d) Servlets.
e) Java Server Pages.
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).
76
Gabarito: B
23. (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 faces-config.xml.
<f:view>
<h:form id=”clienteForm”>
<h:outputLabel for=”informeNome” value=”Informe Nome”/>
<h:inputText id=”informeNome” value =”#{clientePage.nome}”/>
<h:commandButton value=”Nome do Cliente”
action=”#{clientePage.cliente}”/>
</h:form>
</f:view>
Comentários:
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
24. (CESPE - 2014 - TJ-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 FacesServlet é
executada, a fim de gerenciar as requisições dessa aplicação.
77
Comentários:
Gabarito: C
25. (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.
( ) Java Server Faces são usadas como uma fachada para Servlets e Java Server Pages.
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:
78
Facelets é uma parte da especificação JSF e também a tecnologia de apresentação preferida para
construir aplicações JSF – substituindo JSP. Ela suporta 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:
(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 posso afirmar que ele visa substituir JSP! Na verdade, uma de suas funcionalidades vem substituindo
JSP, mas não o JSF como um todo.
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).
Gabarito: A
26. (CESPE - 2014 - TJ-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}”>
<f:ajax />
</h:inputText>
79
Comentários:
O faces-config.xml têm sido rapidamente substituído por annotations – novidade do JSF 2.0. Essa versão
trouxe: suporte a facelets; utilização de templates para a aplicação; simplificação do desenvolvimento de
componentes; suporte nativo a Ajax (f:ajax); navegação implícita e condicional; suporte ao Método GET;
adição de novos escopos (Flash e View); composição de componentes customizados; etc.
Gabarito: C
27. (CESPE - 2014 - TJ-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 suporta 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 suporta todas as características disponíveis na Plataforma Java EE – sendo
considerada obsoleta para JSF!
Gabarito: C
ACERTEI ERREI
80
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 acesso, tratamento de exceções, entre outros.
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.
Professor, como funciona esse tal de JSP? Cara, Páginas JSP utilizam tags XML e Scriptlets 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?
Cara, Páginas JSP tipicamente se tornam uma Servlet! Vocês podem me perguntar: Por que, então,
precisamos da tecnologia JSP se já temos a tecnologia de Servlets? Teoricamente, é possível escrever apenas
Servlets para desenvolver suas aplicações web. No entanto, a Tecnologia JSP foi desenhada para simplificar
o processo de criação de páginas ao separar a apresentação do conteúdo.
Em muitas aplicações, a resposta enviada ao cliente é a combinação dos dados de apresentação (template)
com dados de conteúdo gerados dinamicamente. Nesse caso, é muito mais fácil trabalhar com Páginas JSP
do que fazer tudo com Servlets. Galera, basta pensar nos conceitos de coesão, acoplamento e
modularidade. Vocês entenderam a sacada do negócio?
É mais simples, organizado e legível utilizar uma tecnologia para fazer a apresentação e outra para gerar
dados dinamicamente – assim, mantém-se a divisão de responsabilidades, a independência entre os
módulos, entre outros benefícios. Você ainda não entendeu? Acho que sei como fazer isso entrar na sua
cabeça: vamos ver agora uma Servlet e uma Página JSP!
81
<html>
<head>
<title>
<%="Hello World"%>
</title>
</head>
<body>
<%out.println("Hello Again!");%>
</body>
</html>
//Definições e importações.
out.println("<html><head><title>");
out.println("HelloWorld");
out.println("</title></head><body>");
out.println("HelloAgain");
out.println("</body></html>");
out.flush();
out.close();
}
Galera, esses códigos são semelhantes: o primeiro é uma Página JSP (Arquivo .jsp ou .jspx9) 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 insuportá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 suportar comportamento dinâmico em páginas web.
9
.jspx refere-se ao Arquivo JSP que obedecer às regras de formação do XML.
82
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)!10 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); suportam criptografia de dados; suportam a utilização de cookies e
sessões; suportam a manipulação de Arquivos XML; suportam 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
suporte 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, o processamento da Página JSP passa 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.
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.,
10
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.
83
declarações, expressões, scriptlets, comentários, ações e diretivas. Antes de partir para as sintaxes, vamos
ver um pouco sobre os objetos implícitos!
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
response Objeto do tipo HttpServletResponse e contém a resposta HTTP que vai ser enviada ao
cliente. Não é usado com frequência.
pageContext Objeto do tipo PageContext e contém informações de contexto para execução da página.
application Objeto do tipo ServletContext que permite compartilhar informações entre todos os
componentes web da aplicação.
out Objeto da classe JspWriter que permite imprimir para o response através do método
println.
config 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.
exception É o objeto Throwable que é resultante de uma situação de erro numa página JSP.
84
Declarações
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 scriptlets. Alguns alunos me perguntam como eu decoro isso! Bem, uma
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
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 acessar 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 Scriptlets!
//Expressões JSP
85
Scriptlets
Scriptlets são importantíssimos e, de todos, é facilmente o que mais cai em prova11! 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 scriptlet! 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 scriptlet é 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 scriptlet pode ser acessada de qualquer lugar dentro da Página JSP.
Dentro das scriptlets, estamos lidando com Java. Abaixo a instrução manda escrever “Bem vindo!”.
Vocês se lembram que eu falei que expressões são similares a scriptlets? Pois é, a 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 scriptlet <% out.println(expressão) %>. Entenderam
agora a similaridade entre ambos? ;)
//Scriptlets JSP
<html>
<body>
<%! String mensagem = "Bem vindo!"; %>
<% out.println(mensagem); %>
</body>
</html>
11
Apesar disso, hoje em dia, é considerado má prática utilizar Scriptlets em Páginas JSP.
86
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: <!-- Comentário HTML -->
Ações
Ações permitem acessar e alterar regras de negócio por meio das propriedades de JavaBeans 12. 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:
Essas ações ajudam a controlar o comportamento da Engine da Servlet. As ações mais famosas e
conhecidas são:
12
JavaBeans são componentes reutilizáveis de software que podem ser manipulados visualmente com a
ajuda de uma ferramenta de desenvolvimento.
87
//Ações JSP
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:
ATRIBUTO PROPÓSITO
13
Ele ajuda a localizar a instanciar Componentes JavaBean. Dessa forma, não é necessário instanciar
explicitamente um objeto da classe para acessar seus métodos.
88
//Diretiva PAGE
// Page pode usar 11 atributos: Info; Language; ContentType; Extends; Import; Session; Buffer;
AutoFlush; isThreadSafe; errorPage; isErrorPage.
//Diretiva INCLUDE
//Diretiva TAGLIB
Por fim, vamos falar um pouquinho sobre Expression Language! Como vimos, podemos utilizar Scriptlets 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 Language14!
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 utiliza-se uma string, como é mostrado abaixo:
${expressão}
Os operadores mais comuns do JSPEL são “.” e “[ ]”. Esses dois operadores (ponto e colchetes)
permitem acessar 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.
14
O JSP 2.1 trouxe suporte 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.
90
Vejam que o Valor do Perímetro do Cubo é dado pela expressão contida em value presente na segunda linha.
O operador Ponto permite acessar 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[“1”]} // É exatamente igual ao anterior
${Lista[“Carro”]}
${Lista.Carro} // É exatamente igual ao anterior
A JSPEL suporta 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 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.
91
1. (FCC - 2012 - TRE-SP - 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) diretivas.
b) de scriptlet.
c) de declaração.
d) de expressão.
e) 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.
Gabarito: A
2. (FCC - 2009 - PGE-RJ - 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) diretiva page.
b) diretiva include.
92
c) comentário.
d) taglib.
e) scriptlet.
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.
Gabarito: E
3. (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:
Comentários:
ATRIBUTO PROPÓSITO
93
Conforme vimos em aula, ele especifica uma lista de pacotes ou classes importadas.
Gabarito: E
4. (FCC - 2009 - TRT - 16ª REGIÃO (MA) - Técnico Judiciário - Tecnologia da Informação) Em JSP, a
diretiva taglib define:
Comentários:
//Diretiva TAGLIB
94
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
5. (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.
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.
Gabarito: D
6. (FCC - 2010 - METRÔ-SP - Analista - Tecnologia da Informação) Na diretiva page, do JSP, utiliza-se o
atributo import, que permite:
95
a) configurar pacotes.
b) importar arquivos html.
c) importar pacotes.
d) configurar arquivos html.
e) importar figuras.
Comentários:
ATRIBUTO PROPÓSITO
Conforme vimos em aula, ele especifica uma lista de pacotes ou classes importadas.
Gabarito: C
7. (FCC - 2012 - TRE-SP - Técnico Judiciário - Programação de Sistemas) No JavaServer Pages a tag
<%=conteúdo %> é uma:
96
a) Declaration tag.
b) Directive tag.
c) Scriplet tag.
d) Action tag.
e) Expression tag.
Comentários:
Gabarito: E
8. (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:
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 acesso, tratamento de exceções, entre outros.
97
Gabarito: E
9. (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 acesso, 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
98
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!
Vocês se lembram que eu falei que expressões são similares a scriplets? Pois é, a 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:
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.
99
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 acessar seus métodos. A instância do objeto é
criada pelo elemento especial:
a) <jsp:useJavaBean/>
b) <jsp:useJava/>
c) <jsp:useBean.Java/>
d) <jsp:useJava.Bean/>
e) <jsp:useBean/>
Comentários:
Essas ações ajudam a controlar o comportamento da Engine da Servlet. As ações mais famosas e conhecidas
são:
100
Gabarito: E
13. (FCC - 2008 – TCE/SP – 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:
Gabarito: B
101
14. (FCC – 2012 – TST – Analista de Sistemas) Páginas JavaServer Pages são páginas web:
a) que permitem combinar códigos Java, HTML estático, CSS, XML e JavaScript.
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 – 2009 – 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) Session.
102
b) Request.
c) Exception.
d) Application.
e) pageContext.
Comentários:
OBJETO DESCRIÇÃO
Response Objeto do tipo HttpServletResponse e contém a resposta HTTP que vai ser enviada ao
cliente. Não é usado com frequência.
pageContext Objeto do tipo PageContext e contém informações de contexto para execução da página.
Application Objeto do tipo ServletContext que permite compartilhar informações entre todos os
componentes web da aplicação.
Out Objeto da classe JspWriter que permite imprimir para o response através do método
println.
Config 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.
Exception É o objeto Throwable que é resultante de uma situação de erro numa página JSP.
Observem que todos eles manipulam informações (atributos arbitrários), exceto o Objeto Exception, que
apenas retorna erros.
103
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) o WSDL.
b) o DTD.
c) a JCP.
d) a XSL.
e) 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.
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:
package dados;
104
Em uma página JSP da mesma aplicação, para instanciar um objeto desta classe pode-se utilizar a tag:
Comentários:
Essas ações ajudam a controlar o comportamento da Engine da Servlet. As ações mais famosas e conhecidas
são: (...)
Gabarito: D
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.. .
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:
//Diretiva INCLUDE
106
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.
Gabarito: 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:
Comentários:
ATRIBUTO PROPÓSITO
107
Conforme vimos em aula, podemos usar a Diretiva page com o Atributo import e a Diretiva taglib.
Gabarito: A
20. (FCC - 2012 - TRE-CE - 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 acessadas
simultaneamente na mesma instância de servlet. Trata-se do atributo:
a) Extends.
b) Import.
c) isThreadSafe.
d) Session.
e) AutoFlush.
Comentários:
ATRIBUTO PROPÓSITO
108
Gabarito: C
21. (FCC - 2008 - 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:
ATRIBUTO PROPÓSITO
109
Gabarito: B
22. (FGV - 2008 – 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:
Comentários:
110
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
suporte 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?
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?
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
111
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.
Gabarito: D
a) compilação em um servlet.
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?
Gabarito: A
112
24. (NCE – 2005 – BNDES – Analista de Sistemas) Considere as seguintes afirmativas sobre JSP e Servlets:
I. É possível usar uma página JSP para gerar um arquivo de imagem do tipo JPEG, GIF ou PNG.
II. Um servlet é executado no servidor, ao passo que uma página JSP é executada no browser do cliente.
III. Uma página gerada por um servlet não pode conter código Javascript.
IV. Uma página JSP é executada no servidor enquanto que um servlet é executado no browser do cliente.
a) 0;
b) 1;
c) 2;
d) 3;
e) 4.
Comentários:
ATRIBUTO PROPÓSITO
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.
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.
Gabarito: B
25. (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?
114
a) Integer.
b) queryString.
c) getParameter.
d) String.
e) Request.
Comentários:
OBJETO DESCRIÇÃO
response Objeto do tipo HttpServletResponse e contém a resposta HTTP que vai ser enviada ao
cliente. Não é usado com frequência.
pageContext Objeto do tipo PageContext e contém informações de contexto para execução da página.
application Objeto do tipo ServletContext que permite compartilhar informações entre todos os
componentes web da aplicação.
out Objeto da classe JspWriter que permite imprimir para o response através do método
println.
config 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.
exception É o objeto Throwable que é resultante de uma situação de erro numa página JSP.
115
Gabarito: E
26. (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.
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 acesso, tratamento de exceções, entre outros.
Gabarito: B
27. (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?
116
a) <jsp:invoke>
b) <jsp:include>
c) <jsp:forward>
d) <jsp:plugin>
e) <jsp:call>
Comentários:
Essas ações ajudam a controlar o comportamento da Engine da Servlet. As ações mais famosas e conhecidas
são: (...)
Gabarito: C
a) Ação <jsp:plugin>.
b) Ação <jsp:include>.
c) Diretiva include.
d) Diretiva Page.
e) Diretiva taglib.
117
Comentários:
Essas ações ajudam a controlar o comportamento da Engine da Servlet. As ações mais famosas e conhecidas
são: (...)
Gabarito: B
ACERTEI ERREI
118
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; acesso 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 suporte à
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.
119
XML Compreende funções out, parse, set, choose, forEach, if, transform,
de manipulação de otherwise, param, when.
XML.
1. (CESPE - 2006 – SGA/AC - Analista de Sistemas - I) As tags <if>, <switch>, <while> e <forEach> são
tags padronizadas pela JSTL.
Comentários:
120
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.
Conforme vimos em aula, não existe as tags <switch> ou <while>. No entanto, a banca considerou o item
verdadeiro :-(
Gabarito: C
121
2. (CESPE - 2008 – MPE/AM - Analista de Sistemas) A biblioteca JSTL (JavaServer Pages Standard Tag
Library) reúne funcionalidades comuns de aplicações web, provendo suporte 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; acesso 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
3. (CESPE - 2010 – 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:
122
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.
Gabarito: E
4. (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:
123
Comentários:
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.
124
Conforme vimos em aula, trata-se de Core, XML, Banco de Dados, i18n e Funções.
Gabarito: B
5. (CESPE - 2009 – CEHAP/PB - Analista de Sistemas) Assinale a opção incorreta acerca de JSTL.
a) O JSTL não possui suporte 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.
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:
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; acesso a banco
de dados (SQL); etc.
(a) Conforme vimos em aula, o suporte é nativo – é até uma área funcional;
125
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; acesso 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.
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.
(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 suporte à
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.
Gabarito: A
ACERTEI ERREI
127
REACT JS
O ReactJS é uma biblioteca para construir interfaces de usuários com JavaScript. Uma coisa
interessante é que essa biblioteca foi criada pela galera do Facebook e Instagram. É interessante notar
que a documentação oficial coloca o ReactJS como o V (Visão) do Modelo MVC, i.e., permitindo a criação
de seus próprios componentes reutilizáveis de interface. Como assim, professor?
Professor, eu conheço o AngularJS – ReactJS é a mesma coisa? Não, o AngularJS é um framework, ou seja,
um conjunto de ferramentas para resolver vários tipos de coisas. Já uma biblioteca serve para resolver
uma coisa específica – no caso do React é renderizar componentes. Como ele foi desenvolvido para
resolver um problema particular, ele é extremamente performático. Vamos ver algumas de suas vantagens:
Pois é, a grande sacada do ReactJS é o Virtual DOM! Todo mundo sabe que manipular o DOM da página é
muito custoso e lento. Costuma-se evitar ao máximo manipulá-lo em excesso, porque isso exige
bastante do navegador. O ReactJS minimiza a quantidade de manipulação do DOM mantendo seu próprio
DOM virtual e somente renderizando quando necessário.
15
Search Engine Optimization – trata-se de um conjunto de estratégias com o objetivo de potencializar
e melhorar o posicionamento de um site nas páginas de resultados naturais nos sites de busca.
128
https://www.youtube.com/watch?v=BYbgopx44vo
O que vocês precisam de fato saber é que o DOM da página raramente é manipulado diretamente. Opta-se
por manipular um DOM virtual e aplicam-se apenas as mudanças no DOM real. Como isso se relaciona com
a componentização? Bem, todo componente React possui dois atributos principais: estado (state) e
propriedades (props) – no React, tudo precisa ser subclasse da classe Component.
Toda vez que o estado de um componente é alterado, ele é renderizado — este é o famoso JavaScript reativo
(que dá nome à biblioteca). Da mesma forma que criamos nossas Classes e Métodos, devemos pensar o
mesmo para os nossos componentes e seguir o princípio da responsabilidade única. Onde uma classe
deve fazer apenas uma coisa, deve fazê-la bem e deve fazer somente ela.
No ReactJS, os componentes são máquinas de estado, sendo que o fluxo de informações tende a ser
unidirecional no ReactJS. Por fim, cabe salientar que os componentes ReactJS são tipicamente escritos em
JSX (uma sintaxe de extensão Javascript que permite escrever tags HTML dentro do JavaScript para
renderizar subcomponentes). É isso, pessoal! Quem quiser conhecer mais:
https://www.youtube.com/watch?v=XxVg_s8xAms
QUESTÕES: REACT JS
129
ANGULAR
Pessoal, antes de apresentar os dois frameworks, vou contar um pouco da história de como eles
começaram...
Galera, quem nasceu antes dos anos 90, vai lembrar que o início da internet aconteceu com páginas HTML
estáticas, ou com pouquíssimo nível de dinamicidade (um contador de cliques aqui, um nome de usuário em
tela ali...). Nessa época a internet era lenta, e os navegadores extremamente simples.
Pessoal, um dos grandes fatores que fez o Google bombar foi porque eles pensaram: oras, podemos fazer
aplicações inteiras rodarem dentro dos navegadores! Isso é uma maneira completamente diferente de pensar
na arquitetura server-side, onde você processa a página inteira do lado servidor, e retorna somente um
HTML para ser mostrado no navegador do cliente.
A arquitetura proposta pelo Google foi enviar todo HTML (na verdade HTML, Javascript e CSS) para o
navegador do cliente na primeira requisição, e através de códigos Javascript, o próprio navegador vai
montando a página. O navegador só precisa pedir os dados (normalmente JSON) para preencher a
130
parte de conteúdo. Perceba a diferença: ao invés de pedir HTML montado e só mostrar o resultado, o
navegador passou a pedir dados JSON, e ele mesmo montar a tela.
Galera, esse modelo de receber todo layout/estrutura na primeira requisição (e depois só pedir dados) é o
que se chama de SPA – Single Page Aplication. Por um lado, ele é muito mais responsivo e eficiente (o
cliente consulta só dados, ao invés de dados+html), mas por outro lado existe muito mais processamento
do lado cliente (exige-se muito mais do navegador).
Nesse contexto surgiu o AngularJS – O primeiro framework SPA “endossado” pelo Google.
AngularJS
Galera, vocês já devem conhecer o Modelo MVC! Ele é bastante utilizado por desenvolvedores back-end
com o intuito de separar o código de maneira mais organizada e facilitar a manutenção! Já os
desenvolvedores front-end tinham mais dificuldades de organizar seu código. Dessa forma, alguém teve a
ideia de também utilizar o mesmo modelo para o desenvolvimento front-end.
A partir daí, foram lançados um bocado de frameworks de desenvolvimento front-end que utilizam o
Modelo MVC. Quais, professor? Knockout, Backbone.js, Ember, batman.js, e... AngularJS! Trata-se de um
framework JavaScript (MVC), criado pela Google, cujo objetivo é construir aplicações web client-side
simples e fáceis de manter por meio de componentes reusáveis e modulares.
O AngularJS é escrito inteiramente em JavaScript! Ele é um potencializador para aplicações HTML – ele
adota uma abordagem mais ligada à sintaxe HTML, funcionando como uma extensão da linguagem e
enriquecendo seu vocabulário. Além disso, ele é extremamente modularizado, facilitando a automação de
testes (ngMock)! Ele oferece suporte a Single Page Applications (SPA) e Web Mobile.
Ele fornece a infraestrutura necessária para integrar com o back-end por meio de Ajax – tudo isso
embarcado no framework, sem necessidade de outras ferramentas ou bibliotecas. O AngularJS não é uma
biblioteca JavaScript (como JQuery); ele não é uma plataforma (como Java ou .Net); ele não é uma
linguagem (como C#); ele não é um plug-in; e ele também não é uma extensão do navegador.
Ele se encaixa melhor na definição de um framework, mesmo que seja muito mais leve do que um
framework típico e é por isso que muitos o confundem com uma biblioteca. Ele é totalmente JavaScript,
131
totalmente client-side e é compatível com desktop e navegadores móveis. Dessa forma, ele definitivamente
não é um plug-in ou alguma outra extensão do navegador nativo.
No parágrafo anterior eu escrevi algo que deve ter deixado uma pulga atrás da orelha de vocês: AngularJS
é totalmente client-side! Pois é! A aplicação roda inteiramente no navegador do cliente. Professor, funciona
em todos os navegadores? Em geral, sim – tanto desktop quanto mobile. Professor, e a performance? Bem,
pesa um pouquinho o cliente, mas em geral são aplicações leves.
Pessoal, uma das coisas mais legais do AngularJS é uma coisa chamada Two-Way Databind (Associação de
Dados e Mão-Dupla). Com essa forma, podemos associar uma variável Javascript a um campo HTML, de tal
forma que se a variável mudar, o HTML será atualizado, e vice-versa. Existem alguns mecanismos para fazer
isso acontecer. Veja o exemplo abaixo, associando a variável firstname ao conteúdo que será mostrado
dentro de <p> no HTML:
Código Javascript
<p ng-bind="firstname"></p>
Pessoal, veja no exemplo acima duas formas de fazer o Two-Way Databind. Ambas precisam que exista a
variável firstname dentro de $scope no Javascript. Mas podemos fazer a associação de 2 formas no HTML:
via ng-bind, ou via interpolação de string. O ng-bind utiliza o nome da variável, e modifica o conteúdo da
tag <p> com o valor da variável. O segundo chama-se interpolação de strings, mas tem como apelido
“bigodes” (por causa das chaves {{ }}). Nesse segundo, AngularJS vai tentar resolver o que estiver entre os
132
bigodes, e retornará o resultado para aparecer no HTML. São formas semelhantes de obter o mesmo
resultado.
E quanto à segurança? Pois é, seu código trafega abertamente até o front-end, no entanto é possível
minificar o código, i.e., remover todos os caracteres desnecessários do código-fonte sem modificar sua
funcionalidade. Torna-se impossível roubar um código? Não, mas dificulta um bocado! Vejam a imagem
abaixo como é complicado entender alguma coisa assim.
Por fim, por que usar AngularJS? Porque se ganha muito em produtividade por conta dos componentes
reusáveis; porque o risco de ele ser descontinuado é muito baixo – lembrem-se que ele é mantido pelo
Google; a comunidade é absurdamente ativa, auxiliando os desenvolvedores; porque a curva de
aprendizado é relativamente baixa; entre tantas outras vantagens.
Spoiler Alert: Apesar de todos os motivos para dar certo, o AngularJS foi descontinuado! O Angular 2 passou
a ser seu sucessor...
133
Angular (2,3,4..)
Mas, professor... a moda agora é o Angular 2! É verdade, rapaziada. O que aconteceu foi que, apesar de
todos os motivos para o AngularJS dar certo, ele não deu. Começaram a aparecer grandes concorrentes
“roubando” o mercado do desenvolvimento WEB, como o Vue.js, React e Ember. Foi aí que surgiu o Angular
2.0.
E o que é o Angular 2.0? Ele é um framework JavaScript e foi completamente reescrito, guardando poucas
coisas do AngularJS. De fato, Angular.JS e Angular 2 estão tão próximos como Java e Javascript... O
Framework perdeu o “.js” no final, e passou a ser conhecido apenas como Angular. Um ponto a ressaltar é
que, a partir da versão 2, todas as versões seguintes são evoluções naturais da anteriores. Assim, Angular 2
evoluiu para o 3, depois para o 4, e assim por diante. A única mudança que rompeu completamente com a
estrutura anterior foi do Angular.JS para Angular 2. Para fins de nomenclatura, chamaremos sempre que
você vir Angular sem o JS, entenda que são as versões 2+.
Aplicações Angular são desenvolvidas, por padrão, em TypeScript. TypeScript é uma linguagem de
programação que pode ser vista como uma evolução do Javascript. De fato, TypeScript permite fazer tudo
que Javascript faz, mas inclui diversos outros recursos como Tipagem Forte, Orientação a Objetos, e, além
de tudo isso, o código TypeScript ainda é compilado para Javascript no final.
A utilização TypeScript, ainda que padrão, não é obrigatória. Podemos usar também JavaScript ou Dart.
Apesar de ser bem diferente, com algum esforço, é possível conectar o Angular com aplicações Angular JS.
O código do framework Angular é composto de módulos (trata-se de um arquivo por módulo), que são
combinados em bibliotecas, que - por sua vez - são agrupadas logicamente em pacotes (ufa!). Alguns
pacotes são os @angular/core e @angular/common. A aplicação Angular deve carregar esses pacotes antes
do código em si. Beleza até aqui?
134
Todos os elementos de uma aplicação mais simples podem estar localizados em um módulo (o módulo root,
obrigatório), mas nada impede de haver mais módulos, o que é comum em aplicações mais complexas. Em
termos de sintaxe, um módulo é uma classe anotada com um decorador NgModule. A peça chave de uma
aplicação Angular são os componentes. Atenção aqui!
Cada componente consiste de duas partes: uma visão que define a interface do usuário e a classe que
implementa a lógica por trás da visualização. Qualquer aplicação Angular é representada por uma hierarquia
de componentes “empacotadas” em módulos. Uma aplicação deve conter ao menos um módulo com um
componente, o componente root.
O componente root não tem nada de especial, qualquer componente marcado com a propriedade
“bootstrap” do módulo se torna um componente root. Galerinha, tudo muito legal, mas que tal ver o código
na prática? Pois é, para criar um componente é só declararmos uma classe e anotar com @Component
(espero que todos saibam o que é uma anotação).
Cada anotação @Component deve definir as propriedades selector e template (ou templateUrl), que
determinam como o componente deve ser descoberto e renderizado na página, respectivamente. Como
nós já vimos na aula, cada componente deve definir uma visão, que é especificada pelo atributo
template ou templateUrl:
@Component({
selector: 'app-component',
class AppComponent {}
Para aplicações web, o template contém código HTML. Podemos utilizar outras linguagens de marcação
para diferentes tipos de renderização (para aplicações móveis, por exemplo). Galerinha, nós podemos
definir estilos para os componentes com CSS. Podemos utilizar a propriedade styles para definir o estilo
na forma inline e a propriedade styleUrls para referenciar arquivos externos com estilo CSS.
135
O decorador @Directive nos permite incluir comportamentos customizados aos elementos HTML. Um
exemplo é incluir autocomplete em elementos do tipo <input>. Cada componente é basicamente uma
diretiva que tem uma visão associada, sendo que a última não possui uma visão. Pessoal, não caiu nada
em prova, mas quando cair imagino que serão cobradas as diferenças entre o AngularJS e Angular.
1. (CESPE – 2015 – STJ - Programação de Sistemas) O atributo ngBind informa ao AngularJS para atualizar o
conteúdo do texto, quando o valor da expressão for alterado.
Comentários:
Galera, é inviável que vocês decorem cada função do AngularJS (são dezenas!). Vamos comentá-las apenas se
houver exercícios. Bem, o ngBind diz para o AngularJS substituir o conteúdo textual de um elemento HTML
com o valor da expressão dada, e manter o conteúdo atualizado sempre que o valor da expressão mudar:
“The ngBind attribute tells Angular to replace the text content of the specified HTML element with the value of
a given expression, and to update the text content when the value of that expression changes”.
Gabarito: CERTO
2. (Cesgranrio – 2018– BASA – Técnico Científico – tecnologia da informação) É um exemplo de uma expressão
Angular (Angular Expression) em AngularJS:
Comentários:
136
Pessoal, lembre-se dos “bigodes” – {{ }}. É uma das formas de fazer a análise de expressões em AngularJS.
Gabarito: A
3. (CESPE – 2018 – STM – Técnico – tecnologia da informação) O serviço Angular JS $http é usado para fazer
uma chamada Ajax para o servidor.
Comentários:
Pessoal, o serviço $http permite fazer chamadas Ajax para uma URL, usando os métodos HTTP. É exatamente
essa sua função no framework.
Gabarito: CERTO
4. (CESPE – 2018 – STM – Técnico – tecnologia da informação) Após ser executada, a expressão Angular
JS
<div ng-app="">
<p>Resultado: {( 5 + 12 )}</p>
</div>
Comentários:
Mais uma vez, lembre-se dos “bigodes” – {{ }}. Na questão, ao invés de colocar chaves duplas, o examinador
colocou chaves e parêntesis {( )}, e isso não é nada na arquitetura AngularJS. Portanto, item errado.
Gabarito: ERRADO
ACERTEI ERREI
137
2. (CESPE – 2005 – SERPRO – Analista de Sistemas) A tecnologia Enterprise JavaBeans (EJB) é uma
arquitetura de componentes do tipo cliente que atua na plataforma J2EE.
3. (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 suporte 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.
4. (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 acessos a banco de dados, nem
executam regras de negócio complexas.
6. (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.
138
7. (ESAF – 2012 – CGU – Analista de Finanças e Controle) Os níveis da plataforma J2EE são:
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 acesso pela Internet.
139
10. (FCC - 2011 - TRT - 1ª REGIÃO (RJ) - Analista Judiciário - Tecnologia da Informação) J2EE é uma
plataforma de programação para servidores na 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:
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 é:
12. (FCC - 2010 - TCE-SP - Agente da Fiscalização Financeira - Informática - Suporte de Web) São apenas
tipos de componentes executados em servidores Web:
140
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:
14. (FCC – 2012 – TJ/PE – Analista de Sistemas) Sobre a plataforma Java EE 6, é correto afirmar:
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.
141
d) A especificação EJB 3, que é um subconjunto da especificação Java EE, define anotações apenas para
o tipo bean.
1. (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:
2. (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.
e) são carregadas apenas uma vez e, para cada nova requisição, a servlet gera uma nova thread.
3. (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:
142
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.
4. (FCC – 2012 – TRE/CE – Analista de Sistemas) No contexto do ciclo de vida de um servlet, considere:
I. Quando o servidor recebe uma requisição, ela é repassada 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(),
passando 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.
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.
5. (FCC – 2013 – 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:
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 passar parâmetros de inicialização.
143
III. O Servlet Contêiner invoca o método service da servlet para processar a requisição HTTP, passando
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.
6. (FCC – 2006 – 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:
7. (FCC - 2007 - TRE-SE - Analista Judiciário - Tecnologia da Informação) Em Java, a passagem 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()
144
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).
d) As duas asserções são proposições verdadeiras, mas a segunda não é a justificativa correta da
primeira.
9. (FCC - 2013 - AL-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.
145
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).
11. (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.
12. (VUNESP – 2013 – 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.
13. (CESGRANRIO – 2006 – DECEA – Analista de Sistemas – A) Servlets e arquivos JSP são executados no
WEB Container.
146
14. (CESGRANRIO – 2006 – DECEA – Analista de Sistemas – B) Applets e Servlets são compilados e
executados no servidor.
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.
147
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.
a) I
b) II
c) III
d) I e III
e) II e III
18. (ESAF – 2008 – 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.
19. (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.
20. (AOCP - 2012 - BRDE - Analista de Sistemas - Desenvolvimento de Sistemas - (Prova TIPO 4)) Sobre
Servlets, analise as assertivas e assinale a alternativa que aponta as corretas.
II. Servlets são independentes de plataforma, de modo que podem ser executadas em diferentes
servidores, em diferentes sistemas operacionais.
148
III. As Servlets podem acessar qualquer uma das APIs Java. Uma Servlet pode usar a API JDBC para
acessar e armazenar dados ou para acessar 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.
21. (VUNESP - 2013 - FUNDUNESP - Analista Programador Júnior) Para criar um Servlet que processará
as requisições HTTP na plataforma J2EE, deve-se:
22. (FEPESE - 2013 - JUCESC - Analista Técnico em Gestão de Registro Mercantil - Analista de
Informática) Assinale a alternativa que defne corretamente um Servlet.
23. (VUNESP - 2013 - FUNDUNESP - Analista Programador Júnior) Considere o Servlet a seguir:
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
149
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.
24. (CESGRANRIO - 2008 - TJ-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( )
150
d) invalidate( )
e) release( )
<managed-bean>
<managed-bean-name>func</managed-bean-name>
<managed-bean-class>bean.Funcionario</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
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.
3. (FCC - 2012 - TJ-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.
151
c) faces-config.xml.
d) webcontext.xml.
e) serverconfig.xml.
4. (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.
5. (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.
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.
7. (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.
152
c) armazena os mapeamentos das ações e regras de navegação em projetos JSF nos arquivos WEB-
INF.xml e FACES-CONFIG.xml.
8. (CESPE - 2013 - SERPRO - Analista - Desenvolvimento de Sistemas) O JSF provê uma linguagem de
expressão exclusiva para acesso a objetos armazenados em bancos de dados.
9. (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:
153
10. (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).
11. (FCC - 2012 - TJ-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) FacesServlet.
12. (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.
13. (FCC - 2012 - TRE-CE - 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.
154
14. (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.
15. (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 acessar 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.
16. (CESPE - 2013 – CPRM – 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.
17. (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.
155
18. (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.
19. (CESPE - 2010 – TCU – Analista de Sistemas) Para suportar a construção de aplicações com Ajax e JSF,
recomenda-se aos desenvolvedores de páginas que usem a tag <f:ajax>, relacionada ao processamento
de pedidos http assíncronos.
20. (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:
21. (CESPE - 2010 – 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).
22. (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.
156
d) Servlets.
e) Java Server Pages.
23. (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 faces-config.xml.
<f:view>
<h:form id=”clienteForm”>
<h:outputLabel for=”informeNome” value=”Informe Nome”/>
<h:inputText id=”informeNome” value =”#{clientePage.nome}”/>
<h:commandButton value=”Nome do Cliente”
action=”#{clientePage.cliente}”/>
</h:form>
</f:view>
24. (CESPE - 2014 - TJ-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 FacesServlet é
executada, a fim de gerenciar as requisições dessa aplicação.
25. (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.
( ) Java Server Faces são usadas como uma fachada para Servlets e Java Server Pages.
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.
157
26. (CESPE - 2014 - TJ-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}”>
<f:ajax />
</h:inputText>
27. (CESPE - 2014 - TJ-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 suporta todos os novos recursos da versão Java EE 7.
158
1. (FCC - 2012 - TRE-SP - 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) diretivas.
b) de scriptlet.
c) de declaração.
d) de expressão.
e) standard action.
2. (FCC - 2009 - PGE-RJ - 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) diretiva page.
b) diretiva include.
c) comentário.
d) taglib.
e) scriptlet.
3. (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:
4. (FCC - 2009 - TRT - 16ª REGIÃO (MA) - Técnico Judiciário - Tecnologia da Informação) Em JSP, a
diretiva taglib define:
5. (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.
6. (FCC - 2010 - METRÔ-SP - 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.
7. (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.
160
8. (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.
9. (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.
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 ) Quando se usa classes do tipo bean, não é necessário
instanciar explicitamente um objeto da classe para poder acessar seus métodos. A instância do objeto é
criada pelo elemento especial:
a) <jsp:useJavaBean/>
b) <jsp:useJava/>
c) <jsp:useBean.Java/>
d) <jsp:useJava.Bean/>
e) <jsp:useBean/>
13. (FCC - 2008 – TCE/SP – Analista de Sistema) Nas páginas dinâmicas escritas em JSP, para declaração
de atributos ou métodos, utilizam-se as tags:
a) <% %>
161
b) <%! %>
c) <%= %>
d) <%-- --%>
e) /* */
14. (FCC – 2012 – TST – Analista de Sistemas) Páginas JavaServer Pages são páginas web:
a) que permitem combinar códigos Java, HTML estático, CSS, XML e JavaScript.
15. (FCC – 2009 – 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) Session.
b) Request.
c) Exception.
d) Application.
e) 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, é:
162
a) o WSDL.
b) o DTD.
c) a JCP.
d) a XSL.
e) 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;
Em uma página JSP da mesma aplicação, para instanciar um objeto desta classe pode-se utilizar a tag:
163
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.. .
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:
20. (FCC - 2012 - TRE-CE - 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 acessadas
simultaneamente na mesma instância de servlet. Trata-se do atributo:
a) Extends.
b) Import.
c) isThreadSafe.
d) Session.
e) AutoFlush.
21. (FCC - 2008 - 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:
164
a) info.
b) extends.
c) session.
d) import.
e) autoFlush.
22. (FGV - 2008 – 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) compilação em um servlet.
24. (NCE – 2005 – BNDES – Analista de Sistemas) Considere as seguintes afirmativas sobre JSP e Servlets:
I. É possível usar uma página JSP para gerar um arquivo de imagem do tipo JPEG, GIF ou PNG.
II. Um servlet é executado no servidor, ao passo que uma página JSP é executada no browser do cliente.
III. Uma página gerada por um servlet não pode conter código Javascript.
IV. Uma página JSP é executada no servidor enquanto que um servlet é executado no browser do cliente.
a) 0;
b) 1;
c) 2;
d) 3;
e) 4.
25. (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) Integer.
b) queryString.
166
c) getParameter.
d) String.
e) Request.
26. (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.
27. (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>
a) Ação <jsp:plugin>.
b) Ação <jsp:include>.
c) Diretiva include.
d) Diretiva Page.
e) Diretiva taglib.
167
1. (CESPE - 2006 – SGA/AC - Analista de Sistemas - I) As tags <if>, <switch>, <while> e <forEach> são
tags padronizadas pela JSTL.
2. (CESPE - 2008 – MPE/AM - Analista de Sistemas) A biblioteca JSTL (JavaServer Pages Standard Tag
Library) reúne funcionalidades comuns de aplicações web, provendo suporte para tarefas estruturais
como iterações e condições, etiquetas (tags) para manipular documentos XML, etiquetas para
internacionalização e etiquetas SQL.
3. (CESPE - 2010 – INMETRO - Analista de Sistemas - B) As tags define, inputText, commandButton e message
pertencem ao JSP Standard Tag Library 1.0 (JSTL 1.0).
4. (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:
5. (CESPE - 2009 – CEHAP/PB - Analista de Sistemas) Assinale a opção incorreta acerca de JSTL.
a) O JSTL não possui suporte 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.
d) O JSTL permite ao programador escrever páginas JSPs sem necessariamente utilizar códigos Java,
facilitando a integração entre webdesigners e programadores.
1. (CESPE – 2015 – STJ - Programação de Sistemas) O atributo ngBind informa ao AngularJS para atualizar o
conteúdo do texto, quando o valor da expressão for alterado.
2. (Cesgranrio – 2018– BASA – Técnico Científico – tecnologia da informação) É um exemplo de uma expressão
Angular (Angular Expression) em AngularJS:
3. (CESPE – 2018 – STM – Técnico – tecnologia da informação) O serviço Angular JS $http é usado para fazer
uma chamada Ajax para o servidor.
4. (CESPE – 2018 – STM – Técnico – tecnologia da informação) Após ser executada, a expressão Angular JS
<div ng-app="">
<p>Resultado: {( 5 + 12 )}</p>
169
</div>
170
GABARITO
GABARITO: JAVA EE
1 2 3 4 5 6 7 8 9 10
E E E E E C B B C B
11 12 13 14 15 16 17 18 19 20
E C C A
GABARITO: SERVLETS
1 2 3 4 5 6 7 8 9 10
B A A E B D D E B A
11 12 13 14 15 16 17 18 19 20
E E C E E C B E C D
21 22 23 24 25 26 27 28 29 30
B C C D
GABARITO: JSF
1 2 3 4 5 6 7 8 9 10
D C C C C C D E A C
11 12 13 14 15 16 17 18 19 20
E E B E D C C E C C
21 22 23 24 25 26 27 28 29 30
E B C C A C C
171
GABARITO: JSTL
1 2 3 4 5 6 7 8 9 10
C C E B A
1 2 3 4
CERTO A CERTO ERRADO
GABARITO: JSP
1 2 3 4 5 6 7 8 9 10
A E E A D C E E E C
11 12 13 14 15 16 17 18 19 20
E E B A C E D E A C
21 22 23 24 25 26 27 28 29 30
B D A B E B C B
www.estrategiaconcursos.com.br 172