Servlets, JSF, AJAX e MVC — Guia prático e perguntas
Classificado em Computação
Escrito em em
português com um tamanho de 65,08 KB
Servlets, JSF, AJAX e MVC — Perguntas e respostas
1. O que é um Servlet?
Pergunta: O que é um Servlet?
Resposta: São classes Java que processam dinamicamente requisições do cliente, constroem respostas e as devolvem ao cliente.
2. Arquitetura de um aplicativo Servlet
Desenhe uma das arquiteturas possíveis para um aplicativo Servlet em um servidor WEB.
3. O que é um contêiner (container) Servlet? Cite dois exemplos
Resposta: É uma aplicação que auxilia no desenvolvimento e na execução de aplicações J2EE, oferecendo suporte à execução de Servlets e outras especificações web.
Exemplos: Tomcat, GlassFish
4. Explique o código abaixo
Trecho XML/Web descriptor:
<?xml version='1.0' encoding='ISO-8859-1'?> <!DOCTYPE web-app PUBLIC '-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN' 'http://java.sun.com/dtd/web-app_2_3.dtd'> <web-app> <servlet> <servlet-name>Testando</servlet-name> <servlet-class>TestandoServlet</servlet-class> </servlet> </web-app>
Explicação: O elemento <servlet-name> está mapeando o nome 'Testando' à classe 'TestandoServlet'. Em conjunto com um <servlet-mapping> apropriado (url-pattern), esse servlet ficará acessível via navegador.
5. Quais são os principais métodos da classe HttpServlet?
- doPost(): envia e recupera dados no corpo da requisição (headers + body).
- doGet(): recupera e envia informações por meio da URL (query string).
- doPut(): permite enviar/atualizar arquivos/recursos no servidor (se permitido).
- doDelete(): apaga recursos no servidor (se permitido).
- doHead(): lê e manipula apenas os headers da resposta (sem corpo).
- doTrace(): retorna o caminho percorrido da requisição (usado para diagnóstico).
- doOptions(): recupera os métodos/serviços HTTP disponíveis para o recurso.
6. Quando os métodos doXxx() são chamados?
Resposta: Quando ocorre uma requisição HTTP para o servlet que corresponde a um dos métodos suportados (GET, POST, PUT, DELETE etc.).
7. Principais métodos da interface HttpServletRequest
- getPathInfo(): recupera informações adicionais do caminho da requisição (path extra após o mapeamento do servlet).
- getPathTranslated(): recupera as informações adicionais do caminho já traduzidas para um caminho físico do servidor.
- getRequestURI(): retorna o URI da requisição (o caminho completo solicitado pelo cliente).
- getServletPath(): retorna o caminho do servlet (a parte do URI que acionou o servlet).
8. Principais métodos da interface HttpServletResponse
- setContentType(): define o tipo MIME (content type) que o servlet retorna ao cliente.
- getWriter(): obtém um PrintWriter para escrever a saída para o cliente (saída do browser).
- addCookie(): adiciona um cookie no lado do cliente.
- setHeader(): acrescenta um campo e um valor no cabeçalho da resposta.
- sendRedirect(): realiza um redirecionamento para outra página/URL.
9. O que são parâmetros de contexto? Diferença entre parâmetros de contexto e de inicialização
Resposta: São valores iniciais definidos no início da aplicação, formados por um nome e um valor.
Parâmetros de Inicialização: fornecem valores para um determinado servlet (definidos dentro do elemento <servlet> em web.xml com <init-param>).
Parâmetros de Contexto: fornecem valores acessíveis a toda a aplicação (definidos no <context-param> do web.xml).
10. Escopo de atributo em aplicações WEB
Explique o escopo de atributo em aplicações web.
Resumo dos escopos:
- Request: atributo disponível apenas durante a requisição atual.
- Session: atributo associado à sessão do usuário e disponível durante a sessão.
- Application/Context: atributo disponível para toda a aplicação (entre sessões e requisições).
11. O que é um Framework?
Resposta: Um framework é uma estrutura de suporte pré-estabelecida, utilizada para organizar e desenvolver projetos de software, oferecendo componentes e convenções reutilizáveis.
12. O que é um Design Pattern?
Resposta: É uma solução padrão para problemas recorrentes de projeto, baseada em boas práticas e reuso de conceitos.
13. Fluxo de uma aplicação Struts
- Requisição HTTP do usuário ao servidor.
- Verifica-se o arquivo struts-config.xml para identificar a ação solicitada.
- Valida dados de entrada e executa a ação solicitada.
- A requisição também pode vir de um formulário HTML em comunicação com JavaBeans (Form Beans).
- O Action pode acessar o FormBean, executar operações e armazenar o resultado em um ResultBean.
- O Action interage com a camada de negócio, onde uma base de dados pode ser utilizada.
14. O que é JavaServer Faces (JSF)?
Resposta: O framework JSF (JavaServer Faces) provê uma arquitetura baseada em componentes reutilizáveis para construir interfaces de usuário (UI), trabalhando com o padrão MVC (especialmente MVC2 para aplicações web).
15. Fluxo da aplicação JSF
Explique o fluxo de uma aplicação JSF.
O fluxo JSF inclui o ciclo de vida de requisição da página JSF: restaurar a árvore de componentes (Restore View), aplicar valores, validações, atualizar modelos, invocar ações e renderizar a resposta. (Detalhamento técnico pode incluir fases: Restore View, Apply Request Values, Process Validations, Update Model Values, Invoke Application, Render Response.)
16. Taglibs JSF e suas utilidades
- <view>: tag usada para criar um componente de exibição de nível superior que engloba os demais componentes.
- <form>: representa um formulário de entrada.
- <commandLink>: link que aciona uma ação e pode navegar para outra página.
- <panelGrid>: exibe uma grade/tabela de componentes.
- <outputText>: exibe uma linha de texto.
- <inputText>: permite que o usuário informe uma string.
- <commandButton>: submete um formulário para a aplicação.
17. Principais tecnologias e linguagens do AJAX
- XHTML e CSS: usados para apresentar as informações visuais da aplicação web.
- DOM ou PARSE: usado para expor, editar e alterar dinamicamente a estrutura de um documento (HTML/XML).
- XML e XSLT: tecnologias para prover dados (XML) e transformar/converter documentos (XSLT).
- XMLHttpRequest: objeto JavaScript responsável pela comunicação assíncrona entre servidor e cliente.
- JavaScript: integra e orquestra as tecnologias anteriores em uma página.
18. Diferença entre modelo AJAX e modelo clássico
Modelo clássico: Em geral, quando o usuário executa uma ação na página, uma requisição HTTP é disparada ao servidor, que processa e retorna uma nova página HTML (necessário refresh ou navegação completa).
Modelo AJAX: A aplicação web roda no navegador; quando o usuário executa uma ação é feita uma requisição ao servidor, mas o navegador não é totalmente recarregado — apenas partes da página são atualizadas de forma assíncrona.
Lista 2
Lista 2 — Perguntas e respostas
1) Ciclo de vida de um Servlet
Resumo:
- Se não existir uma instância do servlet, a classe é carregada pelo contêiner.
- Cria-se uma instância do servlet a partir da classe.
- Inicializa-se a instância do servlet através do método init().
- Para cada requisição, o contêiner chama o método service(), que despacha para doGet/doPost/etc.
- Quando o servlet não for mais necessário, o contêiner chama destroy() para finalizá-lo.
2) Vantagem de usar Servlets em vez de JSF
Resposta: Separar a regra de negócio da interface, maior controle de segurança e não expor código fonte; Servlets permitem implementação direta do controle e processamento de requisições.
3) Tornar o servlet acessível via /MeuServlet (web.xml)
Exercício: adicionar as linhas necessárias para tornar o servlet acessível via HTTP://localhost/MeuServlet
Exemplo de web.xml (original corrigido):
<?xml version='1.0' encoding='ISO-8859-1'?> <!DOCTYPE web-app PUBLIC '-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN' 'http://java.sun.com/dtd/web-app_2_3.dtd'> <web-app> <servlet> <servlet-name>Testando</servlet-name> <servlet-class>TestandoServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>Testando</servlet-name> <url-pattern>/MeuServlet</url-pattern> </servlet-mapping> </web-app>
4) O que é HttpServlet?
Resposta: É a classe base que trata requisições HTTP para um determinado servlet, fornecendo métodos como doGet/doPost.
5) Principais eventos HTTP
POST: envia dados no corpo da requisição (headers+body).
GET: envia dados por meio da URL (query string).
6) Interfaces de solicitação e resposta do pacote javax.servlet.http
Resposta: HttpServletRequest e HttpServletResponse.
7) Diferença entre sendRedirect e getRequestDispatcher
Resposta: sendRedirect redireciona para uma URL externa ou relativa, causando uma nova requisição pelo cliente (cliente recebe 302 e faz nova requisição). getRequestDispatcher faz um encaminhamento interno (forward) para um recurso dentro da mesma aplicação, sem nova requisição do cliente.
8) O que são parâmetros de inicialização? Onde descrevê-los?
Resposta: São valores iniciais passados para a aplicação ou servlet, configurados dentro do arquivo web.xml (usando <init-param> em <servlet> para parâmetros de servlet, ou <context-param> para parâmetros de contexto).
9) Métodos de manipulação de atributos: getAttribute, setAttribute, removeAttribute e getAttributeNames
- getAttribute(name): retorna o valor associado ao atributo.
- setAttribute(name, object): armazena um objeto no escopo (request, session ou context) ligado a um nome.
- removeAttribute(name): remove o objeto associado ao nome do escopo.
- getAttributeNames(): retorna uma enumeração de nomes dos atributos armazenados atualmente no escopo.
10) Desenhe e explique o modelo MVC
Descrição: É um modelo de desenvolvimento baseado em separação de responsabilidades: Model (dados/negócio), View (apresentação) e Controller (controle/fluxo). MVC facilita manutenção, teste e reuso em aplicações web (ex.: Struts e JSF implementam variações do MVC2).
11) Diferença entre Framework e Design Pattern
Resposta: Um design pattern determina regras e boas práticas de projeto (padrões conceituais). Um framework é uma aplicação ou biblioteca reutilizável que implementa e aplica esses padrões para facilitar o desenvolvimento (ex.: Struts).
12) O que é Struts?
Resposta: É um framework para aplicações Java que adota o padrão MVC, focado na camada de controle.
13) Serviços disponíveis no JSF
Exemplos: validação de dados, internacionalização, componentes reutilizáveis, gerenciamento de erros, conversão de dados.
14) Principais componentes de uma aplicação JSF
Resposta: Componentes de interface (input, output, containers), gerenciadores de estado, conversores e validadores.
15) Diferença entre Struts e JSF. Podem ser usados juntos?
Resposta: Struts foca mais na camada de controle; JSF foca na camada de visualização (componentes UI). Sim, podem ser usados em conjunto, cada um cuidando de sua especialização.
16) Surgimento do AJAX em aplicações web
Resposta: Motivado pela necessidade de interfaces mais interativas e dinâmicas, transformando páginas web em aplicações ricas sem recarregamento total da página.
17) Onde utilizar AJAX?
Exemplos: validação de formulários, autocomplete, atualização parcial de páginas, carregamento dinâmico de conteúdo.
18) Vantagens e desvantagens do AJAX
Vantagens: comunicação assíncrona cliente-servidor, atualização parcial da página sem refresh, execução paralela de processos.
Desvantagens: depende de recursos do lado do cliente e do suporte do navegador às tecnologias usadas.
2. Diferença entre requisições síncronas e assíncronas (AJAX)
Modelo síncrono: chamadas e respostas sequenciais — é necessário receber a resposta de uma requisição antes de enviar a próxima. Na arquitetura clássica, um refresh da página é frequentemente necessário.
Modelo assíncrono: outras lógicas podem rodar em paralelo enquanto uma requisição é processada; quando a resposta chega, é disparado um callback para tratar os dados recebidos.
3. Beans
Descrição: Beans são componentes que administram o fluxo de dados entre cliente e servidor web, ou entre servidor web e banco de dados. São classes POJO com getters e setters; não são componentes exclusivos da plataforma Java EE, mas usados amplamente para manipular dados.
4. MVC é a mesma coisa que desenvolvimento em três camadas?
Resposta: Não. No MVC o fluxo é triangular (View ↔ Controller ↔ Model) com interação direta entre camadas de forma diferente do fluxo estritamente sequencial do modelo de três camadas (apresentação → negócio → dados). A View pode consultar diretamente o Model e o Controller coordena as ações.
5. Páginas JSP podem existir sem Servlets?
Resposta: Não. Páginas JSP são pré-compiladas pelo servidor web na primeira requisição em servlets. A compilação de uma página JSP gera um servlet Java que é executado como um servlet comum.