Assuntos Básicos: MVC ad hoc com Servlets e JSP
Camada WEB
- É responsável por atender requisições do usuário feitas através de browsers.
- O fluxo dessa comunicação segue, básicamente, três passos:
- Recebe requisições contendo, ou não, parâmetros do usuário;
- Solicita o respectivo processamento da requisição à aplicação;
- Gera, dinamicamente, respostas (geralmente páginas WEB) a partir dos resultados obtidos
da aplicação
- Projetar a camada WEB para aplicações coorporativas é uma tarefa difícil.
- Esta é uma parte bastante volátil e precisa ser, ao máximo, desacoplada da
aplicação (para evitar o "efeito gelatina")
- Interfaces WEB mudam constantemente
- Requisições WEB precisam ser traduzidas em eventos para a aplicação
- Podem existir diferentes apresentações para uma mesma resposta da aplicação
- Ex.: Gráficos em Pizza, Barras, Linhas, etc
Diferentes Filosofias
- As especificações mais atuais advogam duas abordagens filosóficas para construir
aplicações usando Servlets (e JSPs):
- JSP Model 1 archtecture
- JSP Model 2 archtecture
- Tais abordagens diferem, essencialmente, no local onde o "grosso" da
requisição do usuário é processado.
- JSP Model 1
- Todo processo de atendimento a uma requisição é executado em páginas JSPs
- Existe separação de conteúdo e apresentação
- Todo acesso a dados da aplicação é feito usando beans
- Esta abordagem pode ser tranquilamente usada para aplicações simples

- Para aplicações mais complexas, surgem inúmeros inconvenientes:
- Cada JSP deve "saber" tratar todas as possíveis resposta a uma requisição
- Páginas JSP ficam cheias de código Java, dificultando a manutenção
- Impossibilita, ou dificulta bastante, uso de testes automáticos
- Impossibilita o reuso :-(
- Além disso:
- Inibe/dificulta o uso de XSLT (e outras templating )
- Acopla a interface à lógica de controle e de negócio (ops!)
- JSP Model 2 (MVC)
- Abordagem híbrida para implementação de camada WEB
- Combina JSP e Servlet, mantendo e aproveitando as vantagens de cada um :)
- Usa JSP para gerar a apresentação
- Usa Servlets para controlar o fluxo de execução de uma requisição (lógica de
controle)

- Model
- O modelo é a implementação da lógica de negócio
- JavaBeans são usados para carregar os dados entre as camadas
- View
- É responsável pela geração do conteúdo de resposta (páginas WEB)
- Implementa lógica de apresentação
- Extrair dados dos beans
- Varrer coleções
- completar templates
- etc.
- Não processa nenhuma lógica de controle/negócio
- JSPs são usadas para inserir conteúdo dinâmico em templates
- Outras tecnologias como XSLT também pode ser usadas para este propósito
- Controller
- Servlets são usados para processar as requisições e interagir com o modelo
- Conhecido como controlador (Controller)
- É aconcelhável criar um controlador padrão para todas as requisições
- Podem existir outros sub-controladores
- Responsável por:
- Extrair parâmetros das requisições
- Executar lógica de negócio, passando os dados extraídos das requisições
- Cria todos os beans e objetos necessários para os JSPs (e templates)
- Criar e manipular eventual estado de sessão
- Decidir, dependendo da ação do usuário, que JSPs devem ser usados para gerar a
resposta
- Logging e segurança são outras responsabilidades que podem ser assumidas pelo
controlado
Um Exemplo
- O exemplo consiste de uma aplicação simples para cadastrar e listar pessoas.
- Na solução usaremos o padrão MVC:
- Teremos um modelo (lógica de negócio)
- Teremos um Servlet controlador (lógica de controle)
- Teremos templates JSP (lógica de apresentação)
- Teremos um descritor WEB.XML
Modelo
- No modelo teremos duas classes:
- ModelFacade: A
"interface" de interação com o modelo
- Person: Bean que será
manipulado na aplicação
Apresentação
- Na camada de apresentação teremos três templates JPS:
Controle
- No controle teremos a classe SimpleController.
- Intercepta todas as requisições à aplicação e decide o que deve ser feito
- Valida dados de entrada do formulário
- Obtem a lista de pessoas do modelo e remete ao JSP que irá apresentar a lista
Frameworks MVC
- Struts
- Está na versão 1.1
- Possui um controlador genérico para toda a aplicação
- Ações especializadas são repassadas para classes Action ("gancho")
- Os Action são mapeados no arquivo struts-config.xml para um padrão de URL
- É possível fazer validação de dados de formulários autamáticamente
- Spring
intro programa