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

Iniciar e Parar Serviços do Windows (Delphi)

Em certas ocasiões nos deparamos com a necessidade de manipular determinadas atividades do SO, como iniciar ou parar um banco de dados, ou qualquer outro serviço que esteja funcionando no momento. Segue abaixo um código que encontrei na Internet para tal finalidade (não me recordo à fonte, assim que eu a encontrar colocarei). Iniciar Serviço: uses WinSvc; // // start service // // return TRUE if successful // // sMachine: //   machine name, ie: \SERVER //   empty = local machine // // sService //   service name, ie: Alerter // function ServiceStart(   sMachine,   sService : string ) : boolean; var   //   // service control   // manager handle   schm,   //   // service handle   schs   : SC_Handle;   //   // service status   ss     : TServiceStatus;   //   // te...

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 ...

Centralizar Texto em Edit

Como todos sabemos o Edit mantém todo texto digitado a esquerda, o que não fica bem quando o usamos para a entrada de números, pois bem, o exemplo abaixo apresenta uma alternativa para centralizar um determinado valor dentro de um Edit: procedure EditChange(Sender: TObject); var vl_label : TLabel; //variável do tipo Label begin vl_label := TLabel.Create(self); //criamos um label WITH vl_label DO BEGIN Font.Name := TEdit(sender).Font.Name; //pegamos a fonte usada no edit Caption := TEdit(sender).Text; //pegamos o conteúdo do edit SendMessage(TEdit(sender).Handle, EM_SETMARGINS, EC_LEFTMARGIN, (TEdit(sender).Width-vl_label.Width) div 2); //centraliza no label e retorna para o edit END ; vl_label.Free; end ;