Pular para o conteúdo principal

Modelo, visão, controlador (MVC)

Abordaremos hoje uma arquitetura amplamente utilizada, criada pelo cientista da computação Trygve Mikkjel Heyerdahl Reenskaug em 1979 de modo a desacoplar dados e lógica de negócio da visualização do usuário, formando assim a seguinte divisão:

  • Modelo: Representa os dados e as regras de manipulação desses dados;

  • Visão: É a representação gráfica do modelo, dependendo das alterações ocorridas no modelo as mesmas devem ser replicadas para a visão;

  • Controlador: Responsável pela interpretação das interações efetuadas pelo usuário na visão de modo a torna-las ações a serem executadas pelo modelo;
Implementação MVC
(Implementação MVC)
O Framework Struts
Esse Framework (free e open-source) implementa a arquitetura MVC, especificamente para o desenvolvimento de aplicações em Java. Foi criado por Craig R. McClanahan e doado para a ASF (Apache Software Fundation) em 2000.
A arquitetura MVC na prática
Iremos a seguir desenvolver uma aplicação Java utilizando a arquitetura MVC por meio do Framework Struts. Para o exemplo utilizaremos a última versão 6.7 (até a data atual) do NetBeans. O exemplo é um resumo baseado na documentação de exemplo da página do NetBeans, para ver o original acesse aqui.
Visão Geral
Basicamente teremos classes Action representando o modelo, classes ActionForm representado o controlador e as páginas JSP fazendo o papel de visão. Utilizando o Struts teremos a facilidade da organização do framework executando automaticamente entradas no descritor de deployment no web.xml e mapeando as solicitações dos objetos Action no arquivo struts-config.xml.
visão_geral_modelo_mvc
(Visão geral da aplicação)
Criando a aplicação
A criação da aplicação é simples, devemos criar uma página web normalmente acessando Arquivo->Novo Projeto->Java Web-> Aplicação Web.
aplicacao web netbeans
Depois definir nome e localização do projeto.
configurando aplicacao web netbeans
O servidor de aplicações, no caso usaremos o GlassFish mesmo.
configurando glassfish netbeans
Por último e não menos importante a escolha do framework Struts.
configurando struts netbeans
Criando as visões
Para nosso exemplo criaremos duas páginas JSP, uma de logon e outra de sucesso.
A criação da página é normal, Arquivo->Novo Arquivo->Web->JSP, apenas altere o nome para logon.jsp e seu conteúdo deve ser como o da imagem abaixo:
mvc visao jsp netbeans
Repita o mesmo processo (de preferencia defina o diretório dela como sendo a pasta WEB-INF, dessa maneira ela não poderá ser acessada diretamente) para a página de sucesso, apenas alterando seu nome para sucesso.jsp, contendo o código abaixo:
mvc visao2 jsp netbeans
Criando o controlador
O Bean ActionForm é capaz de manter os dados entre as solicitações, no nosso caso as informações poderão ser  exibidas na tela de sucesso se tudo estiver correto ou na própria tela de logon informando um possível erro. Para criar vamos até Arquivo->Novo Arquivo->Struts->Bean ActionForm do Struts, a próxima tela é a de configuração e deve ficar de acordo com a imagem:
controlador mvc actionform netbeans
Nessa classe temos dois campos já com seus Getters e Setters, manteremos o campo nome, excluiremos o campo numero e adicionaremos o campo email e error, apos as declarações posicione o cursor do mouse sobre eles, pressione Alt+Insert e escolha Getter e Setter. Feito isso nossa única alteração nessa classe será no método setError , que deverá ficar como o código a seguir:
public void setError() {
    this.error =
        "<span style='color:red'>Indique valores válidos para os dois campos !</span>";
}
Criando o modelo
A classe Action é o nosso modelo, é aqui que esta a logica comercial, quando os dados do formulário são recebidos o método execute os processa e determina para qual exibição eles devem ser encaminhados. Mais uma vez Arquivo->Novo Arquivo->Struts->Ação do Struts, devemos definir as configurações de Nome e Local de acordo a imagem a seguir:
modelo mvc action netbeans
E a tela de parâmetro deve ficar assim:
modelo2 mvc action netbeans
Agora na classe precisamos entrar com uma definição de fracasso, já que a de sucesso já vem como padrão, e depois configurar nossa regra que ira disparar erro  caso o nome ou o email estejam nulos ou se o email não possuir um “@”.
modelo3 mvc action netbeans
Condições de encaminhamento
Para que as regras desenvolvidas no método execute de nossa classe Action funcione, precisaremos criar entradas forward, associando os resultados obtidos em nossa lógica de negócio as páginas JSP criadas. Para isso devemos abrir o arquivo struts-config.xml e clicar com o botão direito do mouse em qualquer parte da entrada action de LogonForm como mostra a imagem abaixo:
encaminhamento forward netbeans
Quando o menu surgir apos o clique com o botão direito escolha struts e em seguida adicionar encaminhamento, configure de acordo com a imagem abaixo:
encaminhamento2 forward netbeans
Agora  é necessário definir o encaminhamento para falha, o processo é o mesmo, devemos alterar apenas o nome e a página, conforme a figura a seguir:
encaminhamento3 forward netbeans
Finalizando a aplicação
É necessário definir a tela de boas vindas, e nesse exemplo também adicionaremos uma pequena folha de estilos (CSS) que esta junto do projeto final disponível para download. Para a configuração da tela de boas vindas abra o arquivo web.xml selecione a aba Páginas e digite o nome da página de logon.
boas vindas netbeans
Baixando o projeto basta copiar o arquivo stylesheet.css e colar direto dentro do NetBeans em Páginas da Web, feito isso adicione o código abaixo dentro da tag <head> dos arquivos JSP.
Espero que o artigo tenha ficado simples e de fácil compreensão, a versão completa do exemplo pode ser baixada aqui. Recomendo que os links citados na fonte sejam visitados para agregar mais conhecimento e ate, porque não, descobrir novas possibilidades. Mais uma vez me coloco a disposição para esclarecer duvidas, um grade abraço e ate a próxima.
Fonte
Introdução ao framework da Web do Struts

Comentários

  1. Oi Du,
    Sou eu novamente, desculpe mais uma vez invadir sua área de comentários, mas tenho que te dizer que existe outro selo pra vc.
    Desculpa aí, mas não posso fazer desfeita dos selos que recebo e preciso repassa-los, como gosto do seu blog vc "tem" que aguentar a minha chatice. Vc aguenta? Tomara q sim. (rs)
    Por favor retire seu selo lá no HISTOBLOG, ok!?
    Obrigado Du
    Bom fim de semana!

    ResponderExcluir
  2. Olá Eduardo,

    Não pensei que pudesse, em tão pouco tempo, retribuir-lhe a homenagem que me prestou.

    Indiquei o Programero para o Prêmio Blog Dorado!

    Tá tudo explicadinho lá no meu Mundo... http://omundobythais.blogspot.com/2009/07/premio-blog-dorado.html

    Pega lá o selo....é seu!

    Sucesso

    Thaís Gomes

    ResponderExcluir
  3. Oi Thaís e Susi, fico muito feliz e honrado com as homenagens, muito obrigado e desculpe-me pela demora na resposta, postarei ambos assim que possível...

    ResponderExcluir

Postar um comentário

Obrigado por Participar do programero, fique a vontade para agradecer, retificar, perguntar ou sugerir.

Mais visitadas

Funções de data Oracle

  Com o Oracle é possível obter uma série de resultados a partir de uma ou mais datas, como por exemplo verificar o último dia do mês ou verificar a quantidade de meses entre duas datas, então vamos a alguns exemplos:   Data atual do sistema: SYSDATE Remover meses de uma data: ADD_MONTHS(SYSDATE, -1) Adicionar meses de uma data: ADD_MONTHS(SYSDATE, +1) Buscar o último dia do mês: LAST_DAY(SYSDATE) Primeiro dia do mês: TRUNC(SYSDATE, ‘MONTH’) Quantidade de meses entre duas datas: MONTHS_BETWEEN(SYSDATE, ‘27/07/1982’) Primeiro dia do ano: TRUNC(SYSDATE, ‘YEAR’) Dias da semana: DECODE( TO_NUMBER( TO_CHAR          (SYSDATE, ‘D’) ) ,1, ‘domingo’ ,2, ‘segunda-feira’ ,3, ‘terça-feira’ ,4, ‘quarta-feira’ ,5, ‘quinta-feira’ ,6, ‘sexta-feira’ ,7,’sábado’ )

Listar arquivos existentes em diretório (Delphi)

Mostraremos uma maneira simples e prática para listar o conteúdo de um diretório com a opção de incluir nessa listagem os arquivos de seus subdiretórios. No exemplo abaixo temos um Edit para receber o diretório a ser pesquisado um CheckBox para indicar se os subdiretórios entrarão na pesquisa um botão para efetuar a pesquisa e um Memo para listar os arquivos encontrados, no final um Edit que receberá o cálculo final (em bytes) da soma do tamanho dos arquivos. procedure TForm1.Button1Click(Sender: TObject); begin   tamanhoTotal := 0;   memLista.Lines.Clear;   ListarArquivos(edtDiretorio.Text, chkSub.Checked);   Edit1.Text := IntToStr( tamanhoTotal ); end; procedure TForm1.ListarArquivos(Diretorio: string; Sub:Boolean); var   F: TSearchRec;   Ret: Integer;   TempNome: string; begin   Ret := FindFirst(Diretorio+'\*.*', faAnyFile, F);   try     while Ret = 0 do       begin         if TemAtributo(F.Attr,

Como Verificar se um Objeto Existe (Delphi)

Em alguns momentos surge a necessidade de verificar se um determinado objeto existe, ou seja se já foi criado, principalmente quando se trabalha com criação dinâmica em tempo de execução, então vamos ao exemplo: - Vamos criar uma variável, um vetor do tipo caixa de texto: var Minha_caixa : array of TEdit; - Em seguida definir o tamanho desse vetor, no caso será dez: setLength(Minha_caixa, 10) - Agora iremos criar nossa caixa de texto: // lembrando que o vetor inicia em zero // logo o índice final é o tamanho total - 1 for vl_i := 0 to Length(Minha_caixa) -1 do begin Minha_caixa[vl_i] := TEdit.Create(self); with Minha_caixa[vl_i] do begin Parent := Self; Name := 'Caixa_N'+IntToStr(vl_i); Text := 'Esta é a '+IntToStr(vl_i)+' º caixa !'; ReadOnly := true; Height := 21; Width :=