Aula14-Java EE - COMENTADO
Aula14-Java EE - COMENTADO
AULA 14
SUMÁRIO PÁGINA
Apresentação 01
- Java EE 03
- JSP 20
- Servlet 52
- EJB 78
Lista de Exercícios Comentados 97
Gabarito 124
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?
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.
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;
1
Esse nome já mudou repetidas vezes! Inicialmente, chamava-se J2EE; depois foi modificado para JEE; e
atualmente é conhecido como Java EE.
Como ele oferece tudo isso, nós veremos por meio do estudo de um assunto muito
importante: Arquitetura Java EE – apresentada na imagem abaixo:
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.
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.
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!
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).
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.
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.
Comentários:
Gabarito: E
Comentários:
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
Comentários:
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
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:
Gabarito: E
Comentários:
Conforme vimos em aula, a Camada Web é composta por JSP, JSF e Servlets.
Gabarito: C
Comentários:
Gabarito: B
d) módulos web não devem ser empacotados, pois isso inviabiliza seu acesso
pela Internet.
Comentários:
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
Comentários:
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:
Gabarito: E
Comentários:
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:
Gabarito: C
Comentários:
(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!
(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
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.
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?
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.
<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 .jspx4) e o segundo é uma Servlet (Arquivo .java). Vocês percebem que no primeiro
código nós temos código HTML com algumas coisas de Java? Já no segundo nós
temos Java com algumas coisas de HTML? Vejam como é chato escrever o segundo
código – é preciso colocar as tags HTML dentro das funções de escrita do Java.
Já imaginaram que 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.
4
.jspx refere-se ao Arquivo JSP que obedecer às regras de formação do XML.
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, 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., declarações, expressões, scriplets,
comentários, ações e diretivas. Antes de partir para as sintaxes, vamos ver um pouco
sobre os objetos implícitos!
5
Antes, para cada mudança no Código HTML, uma recompilação da servlet era necessária. Para fazer essa
separação que foi criada a Tecnologia JSP.
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.
DECLARAÇÕES
//Declarações JSP
EXPRESSÕES
//Expressões JSP
SCRIPLETS
Quando transformamos Páginas JSP em Servlets, tudo aquilo que for scriplet é
traduzido para chamadas out.println() no método _jspService da servlet gerada. A
variável de uma linguagem de programação criada dentro de um scriplet pode ser
acessada de qualquer lugar dentro da Página JSP. Dentro das scriplets, 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 scriplets? Pois é,
expressão <% expressão %> equivale a out.println(expressão), visto que o valor da
expressão é convertido em uma string e inserido no objeto implícito out. A partir
daí, funciona como um scriplet <% out.println(expressão) %>. Entenderam agora a
similaridade entre ambos? ;)
//Scriplets JSP
6
Apesar disso, hoje em dia, é considerado má prática utilizar Scriplets em Páginas JSP.
COMENTÁRIOS
//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
JavaBeans7. Ademais, disponibilizam comando para redirecionamento de
Requisições JSP para outra Servlet ou Página JSP. Esse também é tranquilo de
decorar, porque é o único que utiliza a sigla jsp. Professor, você pode dar um exemplo
de Ação JSP? Claro, meu querido! Temos vinte delas:
7
JavaBeans são componentes reutilizáveis de software que podem ser manipulados visualmente com a ajuda
de uma ferramenta de desenvolvimento.
//Ações JSP
DIRETIVAS
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
8
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.
//Diretiva INCLUDE
//Diretiva TAGLIB
Por fim, vamos falar um pouquinho sobre Expression Language! Como vimos,
podemos utilizar Scriplets e Expressões para recuperar atributos e parâmetros em
Páginas JSP por meio de Código Java e utilizá-los para propósitos de Apresentação
(ou Visão). No entanto – para Web Designers –, Código Java é difícil de entender e
foi para isso que foi criada a Expression Language9!
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:
9
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.
${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.
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 // É exatamente igual ao anterior
Lista Carro
${Lista.Carro} // É exatamente igual ao anterior
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
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.
a) diretivas.
b) de scriptlet.
c) de declaração.
d) de expressão.
e) standard action.
Comentários:
Gabarito: A
a) diretiva page.
b) diretiva include.
c) comentário.
d) taglib.
e) scriptlet.
Comentários:
Gabarito: E
Comentários:
ATRIBUTO PROPÓSITO
Conforme vimos em aula, ele especifica uma lista de pacotes ou classes importadas.
Gabarito: E
Comentários:
//Diretiva TAGLIB
Gabarito: A
a) diretivas.
b) expressões.
c) declarações.
d) scriptlets.
e) comentários.
Comentários:
Gabarito: D
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
a) Declaration tag.
b) Directive tag.
c) Scriplet tag.
d) Action tag.
e) Expression tag.
Comentários:
Gabarito: E
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: E
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:
Vocês se lembram que eu falei que expressões são similares a scriplets? Pois é,
expressão <% expressão %> equivale a out.println(expressão), visto que o valor da
expressão é convertido em uma string e inserido no objeto implícito out. A partir daí,
funciona como um scriplet <% out.println(expressão) %>. Entenderam agora a
similaridade entre ambos? ;)
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.
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:
Gabarito: E
a) <% %>
b) <%! %>
c) <%= %>
d) <%-- --%>
e) /* */
Comentários:
Gabarito: A
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.
b) escritas em Java, sem código HTML.
c) Interpretadas e não compiladas.
d) Transformadas em bytecode e executadas no cliente.
e) Combinadas com servlets no desenvolvimento exclusivo de páginas estáticas.
Comentários:
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
a) Session.
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.
Gabarito: C
a) o WSDL.
b) o DTD.
c) a JCP.
d) a XSL.
e) o JSP.
Comentários:
Sabe aquelas questões que você não pode errar de tão fácil? Ei-la!
Gabarito: E
Em uma página JSP da mesma aplicação, para instanciar um objeto desta classe
pode-se utilizar a tag:
Comentários:
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
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
Comentários:
ATRIBUTO PROPÓSITO
Conforme vimos em aula, podemos usar a Diretiva page com o Atributo import e a
Diretiva taglib.
Gabarito: A
a) Extends.
b) Import.
c) isThreadSafe.
d) Session.
e) AutoFlush.
Comentários:
ATRIBUTO PROPÓSITO
Gabarito: C
a) info.
b) extends.
c) session.
d) import.
e) autoFlush.
Comentários:
ATRIBUTO PROPÓSITO
Gabarito: B
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.
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:
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?
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.
Gabarito: D
a) compilação em um servlet.
b) presença maciça de código Assembly.
c) impossibilidade de inclusão de comentários.
d) execução exclusiva em sistemas Windows.
e) execução exclusiva em sistemas Linux.
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
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
III. Não existe isso! JavaScript roda no browser do cliente, logo é completamente
possível ter código JavaScript em uma Página JSP.
Gabarito: B
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.
exception É o objeto Throwable que é resultante de uma situação de erro numa página JSP.
Gabarito: E
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
a) <jsp:invoke>
b) <jsp:include>
c) <jsp:forward>
d) <jsp:plugin>
e) <jsp:call>
Comentários:
Gabarito: C
a) Ação <jsp:plugin>.
b) Ação <jsp:include>.
c) Diretiva include.
d) Diretiva Page.
e) Diretiva taglib.
Comentários:
Gabarito: B
ACERTEI ERREI
SERVLETS
Pessoal, lá no Contêiner Web, há uma tal de Servlet! O que é isso, professor? É uma
API independente de plataforma, escrita em Java, que roda no servidor (Container
Web) processando requisições de clientes e enviando respostas, e que pode ser
traduzida como ‘servidorzinho’. Como é? É isso mesmo! Porque ele é utilizado para
estender as funcionalidades de um servidor.
A documentação oficial afirma que se trata de uma classe java pura utilizada para
estender as capacidades dos servidores que hospedam aplicações 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)!10 ;)
10
O A servlet can almost be
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!
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:
11
Seu nome completo é: javax.servlet.http.HttpServlet.
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!
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.
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?
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 ;)
Na prática, método service determina qual Método HTTP (GET/POST) deve ser
chamado na servlet. Por fim, o contêiner chama o método destroy a fim de remover
a instância da servlet da memória e liberar os recursos e os dados. Tanto o método
init quanto o método destroy são executados apenas uma vez durante o ciclo de
vida da servlet. Professor, quem gerencia tudo nisso? O Servlet Container!
13
A cada nova thread, cria-se uma nova instância? Não, existe apenas uma instância e a cada nova requisição
do cliente, o contêiner gera um novo par de objetos request e response, cria uma nova thread e os passa para
ela.
Comentários:
Gabarito: B
e) são carregadas apenas uma vez e, para cada nova requisição, a servlet gera
uma nova thread.
Comentários:
Gabarito: A
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
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
(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.
(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
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.
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!
(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
Comentários:
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:
Gabarito: D
Embora as servlets sejam muito boas no que fazem, tornou-se difícil responder
ao cliente com conteúdo no formato HTML.
PORQUE
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
a) GenericServlet.
b) HttpServlet.
c) HttpServletRequest.
d) HttpServletResponse.
e) HttpServletObject.
Comentários:
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:
é ú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: A
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
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
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
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
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
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.
a) I
b) II
c) III
d) I e III
e) II e III
Comentários:
Gabarito: B
Comentários:
A documentação oficial afirma que se trata de uma classe java pura utilizada para
estender as capacidades dos servidores que hospedam aplicações 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.
barito: E
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
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
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
Conforme vimos em aula, quando queremos criar uma Servlet que processará
especificamente requisições HTTP, devemos criar uma classe que estenda a classe
HttpServlet – como mostrado na imagem.
Gabarito: B
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
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
a) ao ser executado por um contêiner de Servlet, será exibida uma tela em branco
no 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.
Comentários:
Gabarito: C
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
Existem vários formatos (Ex: EAR, WAR, JAR) para padronizar o encapsulamento da
lógica de negócio sob uma única interface – e o EJB é o núcleo da Tecnologia Java
EE. Bem, esse componente é executado no Container EJB de um Servidor de
Aplicação! Professor, o que tem de tão especial nessa tecnologia? Cara, ela permite
o desenvolvimento rápido e simplificado de aplicações complexas.
14
Programadores precisam escrever apenas a lógica de negócio em Componentes EJB. Não precisa implementar
nenhuma programação ou serviço em nível de sistema, tais como transações ou segurança, pois isso é oferecido
pelo Container EJB.
A Arquitetura EJB será a arquitetura de componentes padrão para construção de aplicações corporativas
orientadas a objetos em Java.
A Arquitetura EJB facilitará a escrita de aplicações: desenvolvedores não terão que entender detalhes de
transação, gerenciamento de estados, multithreading, etc.
Aplicações EJB – após desenvolvidas – poderão implantadas em múltiplas plataformas sem necessidade de
recompilação ou modificação do código-fonte.
A Arquitetura EJB definirá os contratos que habilitam ferramentas de vários fabricantes a desenvolver e
implantar componentes interoperáveis em runtime.
A Arquitetura EJB fornecerá interoperabilidade entre Beans Corporativos e componentes do Java EE, bem
como aplicações de outras linguagens (não Java).
A Arquitetura EJB será compatível com as plataformas de servidores existentes. Fornecedores serão
capazes de estender seus produtos para apoiar EJBs.
A Arquitetura EJB será compatível com outras APIs da linguagem de programação Java.
Novo tipo de componente (Singleton Session Bean) que implementa o Padrão Singleton e permite capturar
eventos de inicialização e encerramento da aplicação
Interface opcional para componentes - Flexibilização na criação de componentes EJBs sem a obrigatoriedade
da criação de uma interface remota ou local.
Melhorias no serviço de agendamento que permitem novas possibilidades através de uma notação similar
ao Unix Cron e agendamento de forma declarativa.
Deploy de EJBs na camada web (.war) - Permite o uso de EJBs diretamente na camada Web.
Chamadas assíncronas a métodos - Uma alternativa simplificada à MDBs para chamada assíncrona que pode
ser utilizada em cenários menos complexos.
Nomes JNDI globais padronizados - Esse recurso facilita ainda mais a portabilidade.
EJB Lite - Define uma versão mais leve para um conteiner de EJBs.
Existem três tipos de EJB, mas o Entity Bean é opcional a partir do EJB 3.2. Ele só
existe na especificação por questão de compatibilidade com versões anteriores, mas
sabe-se que ele já foi substituído pela Java Persistence API (JPA). Ademais, como é
um Enterprise JavaBean, eles encapsulam uma lógica de negócio. Pois bem, sobram
dois tipos – Message-driven Beans e Session Beans:
Stateless Session Beans: são objetos de negócio que não mantém estado entre
invocações de métodos. Após cada chamada de método, o contêiner pode
escolher destruir, recriar ou manter o Bean. Eles podem ter variáveis de instância
Observem o ciclo de vida mostrado acima e percebam que ele tem dois estados:
no estágio Does Not Exist, a instância simplesmente ainda não existe; no estágio
Ready, diversas instâncias podem ser criadas e posicionadas em um pool – prontas
para serem utilizadas. Percebam que ela nunca entra em modo passivo para
economizar recursos.
Stateful Session Beans: são objetos de negócio que mantém estado entre
chamadas de métodos. São projetados, em geral, para situações que requerem
várias requisições simultâneas ou transações. Aqui as variáveis de instância
representam o estado de uma sessão. Decorem isso: são objetos que mantém o
estado entre as chamadas de métodos.
Observem o ciclo de vida mostrado acima e percebam que ele tem três estados:
no estágio Does Not Exist, a instância simplesmente ainda não existe; no estágio
Ready, a instância está vinculada a um determinado cliente e ocupada em uma
conversação; no estágio Passive, a instância sai da memória principal para a
memória secundária para economizar recursos.
Singleton Session Beans: são objetos de negócio instanciados uma única vez pela
aplicação e existem por todo ciclo de vida da aplicação. São utilizados quando
um Enterprise Bean é compartilhado e acesso por vários clientes. Percebam que
ele também nunca entra em modo passivo para economizar recursos – assim
como os Stateless Session Beans.
Observem o ciclo de vida mostrado acima e percebam que ele tem apenas dois
estados: no estágio Does Not Exist, a instância simplesmente ainda não existe; já no
estágio Ready, uma única instância é criada e estará pronta para ter seus métodos
de negócio invocados pelos clientes. Trata-se de um ciclo de vida bastante
simples, concordam?
Por fim, gostaria de falar um pouco sobre o CDI (Context and Dependency Injection).
Alguém sabe o que é Injeção de Dependência? Trata-se de um design pattern que
consiste na passagem de uma classe para outra, sendo que esta última irá utilizá-
(consumi-la), visando eliminar o forte acoplamento geralmente existente entre os
módulos da aplicação e facilitar a realização de testes.
Pessoal, imaginem que eu preciso fazer vários testes unitários. Ora, se toda classe
que eu for testar tiver dependendo de outra classe, eu terei que sair instanciando
tudo para poder fazer um mero teste unitário. Ademais, se eu faço uma estrutura
fracamente acoplada entre classes e módulos, pode-se ganhar em extensibilidade
e reusabilidade.
Ela fornece uma arquitetura que permite que os componentes Java EE existam
dentro do ciclo de vida de um aplicativo com escopos bem definidos. Além disso,
os serviços CDI permitem que os componentes Java EE, tais como EJB Session Beans
e JSF Managed Beans, sejam injetados e interajam de uma maneira acoplada flexível,
iniciando e observando eventos.
(FCC – 2011 – TRT/19 – Analista de Sistemas) Tipo de session bean EJB 3.1 cujas
instâncias não têm estado conversacional, isto é, todas as instâncias são
equivalentes quando não estão envolvidas em atender um método invocado
pelo cliente. Trata-se de:
a) Stateful.
b) Stateless.
c) Singleton.
d) Message driven.
e) Entity.
Comentários:
Stateless Session Beans: são objetos de negócio que não mantém estado entre
invocações de métodos. Após cada chamada de método, o contêiner pode
escolher destruir, recriar ou manter o Bean. Eles podem ter variáveis de instância,
no entanto elas serão compartilhadas por vários usuários (entretanto, não de
forma concorrente).
Conforme vimos em aula, são os Stateless Session Beans que não mantêm estado
(conversacional)!
Gabarito: B
Comentários:
Gabarito: E
c) Os serviços CDI permitem aos componentes do Java EE, como beans de sessão
EJB e beans gerenciados do JavaServer Faces (JSF), serem injetados e interagir
de maneira acoplada e flexível iniciando e observando eventos.
Comentários:
remoto. Como não são persistentes, o cliente não acessa um MDB diretamente, mas
por meio do JMSm enviando mensagens para o destinatário.
(b) Conforme vimos em aula, pode ser invocado de forma local, remota ou por WS.
(e) Conforme vimos em aula, a questão trata do MDBs.
Ela fornece uma arquitetura que permite que os componentes Java EE existam dentro
do ciclo de vida de um aplicativo com escopos bem definidos. Além disso, os serviços
CDI permitem que os componentes Java EE, tais como EJB Session Beans e JSF
Managed Beans, sejam injetados e interajam de uma maneira acoplada flexível,
iniciando e observando eventos.
Gabarito: C
Comentários:
Ela fornece uma arquitetura que permite que os componentes Java EE existam dentro
do ciclo de vida de um aplicativo com escopos bem definidos. Além disso, os serviços
CDI permitem que os componentes Java EE, tais como EJB Session Beans e JSF
Managed Beans, sejam injetados e interajam de uma maneira acoplada flexível,
iniciando e observando eventos.
Gabarito: A
Comentários:
O Contêiner EJB é um recipiente (em tempo de execução) para Enterprise Beans que
são implantados em um Servidor de Aplicação. Ele é criado automaticamente quando
o servidor é inicializado e oferece serviços como: gerenciamento de ciclo de vida,
geração de código, gerenciamento de persistência, gerenciamento de segurança,
gerenciamento de transações, controle de concorrência, etc. Vejamos:
Gabarito: A
Comentários:
Servidor de Aplicação! Professor, o que tem de tão especial nessa tecnologia? Cara,
ela permite o desenvolvimento rápido e simplificado de aplicações complexas.
Gabarito: C
Comentários:
Gabarito: C
Comentários:
Existem três tipos de EJB, mas o Entity Bean é opcional a partir do EJB 3.2. Ele só existe
na especificação por questão de compatibilidade com versões anteriores, mas sabe-
se que ele já foi substituído pela Java Persistence API (JPA). Ademais, como é um
Enterprise JavaBean, eles encapsulam uma lógica de negócio. Pois bem, sobram dois
tipos – Message-driven Beans e Session Beans:
Conforme vimos em aula, ainda existem três tipos fundamentais, mas – a partir do
EJB 3.1 – os Entity Beans foram substituídos pelo JPA (e, hoje, são mantidos como
opcionais por questão de compatibilidade).
Gabarito: C
Comentários:
Observem o ciclo de vida mostrado acima e percebam que ele tem três estados: no
estágio Does Not Exist, a instância simplesmente ainda não existe; no estágio Ready, a
instância está vinculada a um determinado cliente e ocupada em uma conversação;
no estágio Passive, a instância sai da memória principal para a memória secundária
para economizar recursos.
Gabarito: B
Comentários:
Gabarito: E
IV. Um session bean representa um único cliente dentro do servidor J2EE. Para
acessar um aplicativo que é instalado no servidor, o cliente invoca os métodos
do session bean.
Comentários:
Java Servlet
SERVIDOR Web JavaServer Pages (JSP)
JavaServer Faces (JSF)
EJB Enterprise Beans
Gabarito: A
Comentários:
Existem três tipos de EJB, mas o Entity Bean é opcional a partir do EJB 3.2. Ele só existe
na especificação por questão de compatibilidade com versões anteriores, mas sabe-
se que ele já foi substituído pela Java Persistence API (JPA). Ademais, como é um
Enterprise JavaBean, eles encapsulam uma lógica de negócio. Pois bem, sobram dois
tipos – Message-driven Beans e Session Beans:
Gabarito: B
Comentários:
Conforme vimos em aula, eles fazem parte do Java EE; são extremamente reusáveis;
e são executados em Servidores de Aplicação – como o JBoss.
Gabarito: C
Comentários:
Conforme vimos em aula, eles são compostos por Enterprise Beans e, não, Servlets
e JPS.
Gabarito: E
a) javax.ejb.EJBLocalObject
b) javax.ejb.EJBHome
c) javax.ejb.EJBObject
d) javax.ejb.EntityBean
e) javax.ejb.EJBMetaData.
Comentários:
Gabarito: B
Comentários:
Gabarito: E
Comentários:
O Contêiner EJB é um recipiente (em tempo de execução) para Enterprise Beans que
são implantados em um Servidor de Aplicação. Ele é criado automaticamente quando
o servidor é inicializado e oferece serviços como: gerenciamento de ciclo de vida,
geração de código, gerenciamento de persistência, gerenciamento de segurança,
gerenciamento de transações, controle de concorrência, etc. Vejamos:
Gabarito: D
ACERTEI ERREI
d) módulos web não devem ser empacotados, pois isso inviabiliza seu acesso
pela Internet.
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 é:
13. (FCC - 2014 – TRT/2 – Analista de Sistemas) Um contêiner Java EE pode oferecer
serviços como gestão de memória, ciclo de vida e estado de objetos, conexões,
transações, serviços de nomes, segurança, tolerância a falhas, integração,
clustering, alta disponibilidade, confiabilidade e web services. Um servidor Java
EE completo disponibiliza dois tipos principais de contêiner, que são:
a) diretivas.
b) de scriptlet.
c) de declaração.
d) de expressão.
e) standard action.
a) diretiva page.
b) diretiva include.
c) comentário.
d) taglib.
e) scriptlet.
a) diretivas.
b) expressões.
c) declarações.
d) scriptlets.
e) comentários.
a) configurar pacotes.
b) importar arquivos html.
c) importar pacotes.
d) configurar arquivos html.
e) importar figuras.
a) Declaration tag.
b) Directive tag.
c) Scriplet tag.
d) Action tag.
e) Expression tag.
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/>
a) <% %>
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.
b) escritas em Java, sem código HTML.
c) Interpretadas e não compiladas.
d) Transformadas em bytecode e executadas no cliente.
e) Combinadas com servlets no desenvolvimento exclusivo de páginas estáticas.
a) Session.
b) Request.
c) Exception.
d) Application.
e) pageContext.
a) o WSDL.
b) o DTD.
c) a JCP.
d) a XSL.
e) o JSP.
package dados;
Em uma página JSP da mesma aplicação, para instanciar um objeto desta classe
pode-se utilizar a tag:
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"%>.
a) Extends.
b) Import.
c) isThreadSafe.
d) Session.
e) AutoFlush.
a) info.
b) extends.
c) session.
d) import.
e) autoFlush.
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.
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.
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.
a) Integer.
b) queryString.
c) getParameter.
d) String.
e) Request.
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.
e) são carregadas apenas uma vez e, para cada nova requisição, a servlet gera
uma nova thread.
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.
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.
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.
a) import()
b) return()
c) catch()
d) getParameter()
e) nameComponent()
Embora as servlets sejam muito boas no que fazem, tornou-se difícil responder
ao cliente com conteúdo no formato HTML.
PORQUE
a) GenericServlet.
b) HttpServlet.
c) HttpServletRequest.
d) HttpServletResponse.
e) HttpServletObject.
10. (FCC - 2009 - TRT - 16ª REGIÃO (MA) - Técnico Judiciário - Tecnologia da
Informação Para ler os parâmetros de inicialização do contexto de um servlet
utiliza-se o método:
a) String getInitParameter(String).
b) Enumeration getInitParameterNames().
c) InputStream getResourceAsStream().
d) setAttribute(String nome, Object).
e) Object getAttribute(String nome).
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.
a) I
b) II
c) III
d) I e III
e) II e III
a) get.
b) post.
c) destroy.
d) prerender.
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.
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
d) não pode ser compilado, pois HttpServlet é uma interface e, portanto, não
pode ser estendida por uma classe.
a) cancel( )
b) delete( )
c) destroy( )
d) invalidate( )
e) release( )
(FCC – 2011 – TRT/19 – Analista de Sistemas) Tipo de session bean EJB 3.1 cujas
instâncias não têm estado conversacional, isto é, todas as instâncias são
equivalentes quando não estão envolvidas em atender um método invocado
pelo cliente. Trata-se de:
a) Stateful.
b) Stateless.
c) Singleton.
d) Message driven.
e) Entity.
c) Os serviços CDI permitem aos componentes do Java EE, como beans de sessão
EJB e beans gerenciados do JavaServer Faces (JSF), serem injetados e interagir
de maneira acoplada e flexível iniciando e observando eventos.
IV. Um session bean representa um único cliente dentro do servidor J2EE. Para
acessar um aplicativo que é instalado no servidor, o cliente invoca os métodos
do session bean.
a) javax.ejb.EJBLocalObject
b) javax.ejb.EJBHome
c) javax.ejb.EJBObject
d) javax.ejb.EntityBean
e) javax.ejb.EJBMetaData.
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
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 A 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
1 2 3 4 5 6 7 8 9 10
B E C A A C C C B E
11 12 13 14 15 16 17 18 19 20
A B C E B E D