A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Java para Web com Struts Danilo Toshiaki Sato Treinamento ALESP – SPL Módulo II.

Apresentações semelhantes


Apresentação em tema: "Java para Web com Struts Danilo Toshiaki Sato Treinamento ALESP – SPL Módulo II."— Transcrição da apresentação:

1 Java para Web com Struts Danilo Toshiaki Sato Treinamento ALESP – SPL Módulo II

2 Copyleft 2006 Danilo Sato2 Agenda - Módulo II 1.Recapitulando... 2.Construindo o Model 1.JavaBeans e escopo 2.ActionForm 3.DTO 4.Lógica de negócio 3.Construindo o Controller 1.O ActionServlet 2.O ActionMapping 3.O ActionForward 4.A Action

3 Copyleft 2006 Danilo Sato3 Recapitulando...  Fluxo Básico de Controle Model Controller

4 Copyleft 2006 Danilo Sato4 Construindo o Model  JavaBeans e escopo: Numa aplicação web, os JavaBeans podem ser armazenados em diferentes escopos:  page : Beans visíveis apenas na página JSP (Variáveis locais no service() )  request : Beans visíveis na página JSP e qualquer outra página ou Servlet incluído ou encaminhado a partir dessa página (atributos do HttpServletRequest)  session : Beans visíveis em todos os Servlets e JSPs que participam de uma determinada sessão de usuário (atributos da HttpSession)

5 Copyleft 2006 Danilo Sato5 Construindo o Model  application : Beans visíveis em todos os Servlets e JSPs de uma mesma aplicação web (atributos do ServletContext)  Exemplo: Bean armazenado no request pelo Servlet: Pode ser usado imediatamente num JSP encaminhado pelo Servlet: MyCart myCart = new MyCart(...); request.setAttribute("cart", myCart);

6 Copyleft 2006 Danilo Sato6 Construindo o Model  ActionForm É um tipo especial de JavaBeans Utilizado para armazenar os dados de entrada digitados pelo usuário num formulário HTML Pode ser usado pelas Tags do Struts para mostrar os valores previamente digitados pelo usuário no caso de erro Validação automática dos campos Populado automaticamente pelo Struts

7 Copyleft 2006 Danilo Sato7 Construindo o Model  Para criar um ActionForm você deve: Estender a classe org.apache.struts.action.ActionForm Definir uma propriedade pública para cada campo do formulário HTML que será enviado na requisição HTTP  OBS: Nesse contexto, considere “propriedade pública” como uma propriedade JavaBean (métodos getter e setter)

8 Copyleft 2006 Danilo Sato8 Construindo o Model  Ao criar um ActionForm você pode: Sobrescrever o método validate() para validação dos campos de entrada do formulário Sobrescrever o método reset() para limpar e inicializar os dados de um ActionForm

9 Copyleft 2006 Danilo Sato9 Construindo o Model  O papel do ActionForm no ciclo de uma requisição: 1.O controlador do Struts recebe uma requisição HTTP com parâmetros do formulário HTML 2.O controlador busca o ActionMapping associado à URL requisitada 3.O ActionMapping define o ActionForm e o Action associados à requisição 4.O controlador verifica se uma instância do ActionForm já existe no escopo configurado 5.Se a instância não existe, ela é criada e armazenada no escopo correspondente

10 Copyleft 2006 Danilo Sato10 Construindo o Model 6.O método reset() é chamado (implementação padrão não faz nada) 7.Para cada parâmetro HTTP cujo nome corresponde à uma propriedade do Bean, o método setter correspondente será chamado 8.O método validate() é chamado se o valor do atributo " validate " não for " false " no ActionMapping 9.Caso o ActionForm encontre erros de validação, ActionErrors são armazenados no request e o controle é encaminhado para o formulário de entrada (atributo " input " do ActionMapping) 10.Caso não haja erros, o fluxo é encaminhado para a Action atrávés do método execute()

11 Copyleft 2006 Danilo Sato11 Construindo o Model  Exemplo: ActionForm simples package app; import org.apache.struts.action.*; public class MeuForm extends ActionForm { private String nome = null; public String getNome() { return this.nome; } public void setNome(String nome) { this.nome = nome; } // Método validate()... // Método reset()... }

12 Copyleft 2006 Danilo Sato12 Construindo o Model  Exemplo: Método validate() // (...) // Valida se nome não é nulo nem vazio public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { ActionErrors errors = new ActionErrors(); if (nome == null || nome.trim().length() == 0) { errors.add("nome", new ActionError("erro.nome.invalido"); } return errors; } // (...)

13 Copyleft 2006 Danilo Sato13 Construindo o Model  Exemplo: Método reset()  Arquivo de Configuração // (...) // Inicializa o valor do nome com o valor nulo public void reset(ActionMapping mapping, HttpServletRequest request) { this.nome = null; } // (...) (...) (...)

14 Copyleft 2006 Danilo Sato14 Construindo o Model  Outras características do ActionForm: Permitem acesso à propriedades aninhadas: Suporte à propriedades de mapeamento (Map) aForm.getValores().getTelefoneFormatado() public void setEndereco(String nome, Object valor) public Object getEndereco(String nome)

15 Copyleft 2006 Danilo Sato15 Construindo o Model  DynaActionForm Uma forma de definir um ActionForm sem escrever uma classe Propriedades são declaradas no arquivo de configuração Baseado no componente DynaBean do Jakarta Commons Desvantagem: você não tem controle sobre o método reset(), os campos serão atualizados para os valores padrão

16 Copyleft 2006 Danilo Sato16 Construindo o Model  Exemplo: DynaActionForm  Arquivo de Configuração: (...) (...)

17 Copyleft 2006 Danilo Sato17 Construindo o Model  DTO = Data Transfer Object  É um padrão de projeto que define um objeto responsável por levar dados entre as diferentes camadas e/ou componentes de um sistema  Diminui a quantidade de chamadas de método entre as camadas  Também conhecido como Value Object na comunidade Java

18 Copyleft 2006 Danilo Sato18 Construindo o Model  Um pouco sobre lógica de negócio: Dentre as responsabilidades do Model de um sistema, podemos destacar:  Armazenar o estado do sistema  Executar a lógica e regras de negócio No contexto da nossa discussão, o Model no Struts refere-se à uma representação do estado do sistema numa aplicação web Podemos enxergar os ActionForms como DTOs Os dados do ActionForms geralmente são mapeados para mais de uma entidade persistida pelo sistema

19 Copyleft 2006 Danilo Sato19 Construindo o Model  Um pouco sobre lógica de negócio: Apesar do Struts não colocar nenhuma restrição, recomenda-se que a lógica de negócio esteja desacoplada da camada de apresentação Uma camada de negócio desacoplada pode ser reutilizada em outras aplicações (inclusive não- web) Validações simples são permitidas no View (Exemplo: scripts JavaScript) Recomendação: Não colocar lógica de negócio no Action

20 Copyleft 2006 Danilo Sato20 Construindo o Controller  O Struts fornece um Servlet (ActionServlet) que atua como controlador central para: Processar requisições de usuários Determinar os objetivos do usuário para aquela requisição Obter dados do Model para disponibilizar na View Escolher a View apropriada para exibição ao usuário

21 Copyleft 2006 Danilo Sato21 Construindo o Controller  Grande parte do trabalho do ActionServlet é delegado para o RequestProcessor  O ActionServlet é responsável por: Inicialização e limpeza de recursos Determinar qual módulo responsável pelo tratamento da requisição Encaminhar a requisição para o RequestProcessor do módulo

22 Copyleft 2006 Danilo Sato22 Construindo o Controller  O RequestProcessor é responsável pela maior parte do trabalho do Controller  Extensível através de métodos “gancho” (hook methods) – Exemplo: setUp() no JUnit  Responsabilidades básicas: Encontrar a Action responsável pela URL Popular e validar o ActionForm Tratamento de erros Tratamento de permissões e segurança Encaminhar processamento para a Action

23 Copyleft 2006 Danilo Sato23 Construindo o Controller ActionServlet RequestProcessor ActionActionForm HttpRequest process()execute() findMapping() findFormBean()

24 Copyleft 2006 Danilo Sato24 Construindo o Controller  Um ActionMapping representa uma configuração de mapeamento entre uma URI e uma classe Action  Propriedades mais importantes: type : Nome da classe da Action name : Nome do ActionForm a ser utilizado path : a URI requisitada unkown : deve ser " true " para a Action default validate : deve ser " true " se o ActionForm deve ser validado forward : uma URI para onde a requisição será encaminhada

25 Copyleft 2006 Danilo Sato25 Construindo o Controller  ActionMappings são definidas no arquivo de configuração do Struts  Possíveis configurações de mapeamento: 1.Um Action, Um ActionForm 2.Somente ActionForm 3.Somente Action 4.Somente JSP 5.Dois Actions, Um ActionForm 6.Dois Actions, Dois ActionForms

26 Copyleft 2006 Danilo Sato26 Construindo o Controller 1.Um Action, Um ActionForm

28 Copyleft 2006 Danilo Sato28 Construindo o Controller 2.Somente ActionForm

29 Copyleft 2006 Danilo Sato29 Construindo o Controller 3.Somente Action

30 Copyleft 2006 Danilo Sato30 Construindo o Controller 4.Somente JSP

31 Copyleft 2006 Danilo Sato31 Construindo o Controller 5.Dois Actions, Um ActionForm

32 Copyleft 2006 Danilo Sato32 Construindo o Controller 5.Dois Actions, Um ActionForm

33 Copyleft 2006 Danilo Sato33 Construindo o Controller 6.Dois Actions, Dois ActionForms

34 Copyleft 2006 Danilo Sato34 Construindo o Controller 6.Dois Actions, Dois ActionForms

35 Copyleft 2006 Danilo Sato35 Construindo o Controller  Um ActionForward representa uma URI sob um nome lógico  Definidos no arquivo de configuração do Struts  Utilizados na Action para definir para onde a requisição deve ser encaminhada  Vantagens: Evitam URIs “hardcoded” na aplicação Estrutura de navegação declarativa, documentada no struts-config.xml

36 Copyleft 2006 Danilo Sato36 Construindo o Controller  Diferença entre forward e redirect : forward : mantém a requisição HTTP no contexto da aplicação no servidor redirect : instrui o cliente (navegador) a fazer uma nova requisição HTTP  ActionForwards podem ser globais ( ) ou locais a um ActionMapping (corpo da tag )  Para buscar um ActionForward na Action: mapping.findForward("nome.do.forward");  Recomendação: redirecionar a página inicial para uma Action

37 Copyleft 2006 Danilo Sato37 Construindo o Controller  Exemplos:

39 Copyleft 2006 Danilo Sato39 Construindo o Controller  Algumas das funcionalidades implementadas na Action: Validar o estado atual da sessão (Ex: login) Validação das propriedades do ActionForm necessárias Chamar métodos com lógica de negócio Atualizar o estado do sistema Atualizar objetos no servidor para utilização nos próximos passos do processamento (escopo de request e session, geralmente) Tratar erros no processamento Determinar a página de exibição e retornar o ActionForward correspondente

40 Copyleft 2006 Danilo Sato40 Construindo o Controller  Para implementar um Action: Estender a classe org.apache.struts.action.Action ou uma de suas subclasses disponibilizadas do Struts Implementar o método: public ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception;

41 Copyleft 2006 Danilo Sato41 Construindo o Controller  Exemplo: Action package app; // Import Struts classes... public class MeuAction extends Action { public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { MeuForm meuForm = (MeuForm) form; String usuario = validaUsuario(meuForm); HttpSession session = request.getSession(); session.setAttribute("USUARIO", usuario); return mapping.findForward("OK"); } // Método validaUsuario()... }

42 Copyleft 2006 Danilo Sato42 Construindo o Controller  Exemplo: Método validaUsuario() // (...) // Valida se usuário existe com o nome informado private String validaUsuario(MeuForm form) throws UsuarioInvalidoException { String nome = form.getNome(); try { LDAPDirectory auth = LDAPDirectory.getInstance(); return auth.validateUser(nome); catch (Exception e) { throw new UsuarioInvalidoException(nome); } // (...)

43 Copyleft 2006 Danilo Sato43 Construindo o Controller  Exemplo: struts-config.xml

44 Copyleft 2006 Danilo Sato44 Construindo o Controller  Algumas recomendações: Pense na concorrência quando escrever uma Action Trate erros. Evite mostrar exceções para o usuário Evite usar o método perform() do Struts 1.0 O Struts 1.1 define o método execute() que lança Exception e facilita o tratamento de erros declarativo

45 Copyleft 2006 Danilo Sato45 Dúvidas ou Sugestões?


Carregar ppt "Java para Web com Struts Danilo Toshiaki Sato Treinamento ALESP – SPL Módulo II."

Apresentações semelhantes


Anúncios Google