framework struts2v2.5
TRANSCRIPT
Framework Struts 2
Projeto Minha Casa Minha Vida
Odilon Rauen Junior
Data: 08/10/2009
Agenda
� Introdução.
� O que é Struts?
� Histórico Struts.
� Histórico Struts 2.� Histórico Struts 2.
� Alguns dos principais recursos.
� Projeto Minha Casa Minha Vida.
� Recursos utilizados no projeto.
� Bibliografia.
2
Introdução
� Apresentar uma opção de solução, para os desenvolvedores java que estão definindo um arquitetura de um projeto Web.
� Mostrar um caso de sucesso utilizando a tecnologia Struts 2, assim como, alguns recursos utilizados no projeto.
3
Contextualização
� Servlets
� JSP
� Tag Libs� Tag Libs
� MVC
� MVC 2
� Framework
4
O que é Servlet?
� É uma classe Java que herda a capacidade e é executada em um servidor Web, pois, tem à sua disposição todo o poder da plataforma Java.
� Recebe requisições de clientes, processa dados e geralmente envia conteúdo dinâmico HTML ou XML como resposta.
5
O que é JSP?
� Sua criação foi incentivada devido ao fato de ser difícil montar páginas HTML usando Servlet.
� Uma página JSP nada mais é do que uma página HTML � Uma página JSP nada mais é do que uma página HTML contendo tags interpretadas por um compilador que transforma a página HTML em um Servlet automaticamente.
� O principal objetivo é facilitar ainda mais o desenvolvimento de aplicações WEB em Java.
6
O que são Tag Libs?
� É um conjunto tags customizadas que contêm códigos para serem usados na criação de páginas JSP.
� Elas basicamente são usadas para que páginas JSP � Elas basicamente são usadas para que páginas JSP sejam escritas de uma maneira que procedimentos comuns não precisem ser escritos em scriplets (código java, misturado com JSP/HTML).
� A maioria das bibliotecas de tags estão contidas em arquivos JAR para facilitar a instalação das aplicações Web.
7
MVC (Model-View-Control)
� Model – O modelo pode ser entendido como a camada de domínio da aplicação, ou seja, as lógicas de negócio, acesso e persistência de dados, etc.
View – A visão é responsável por renderizar o modelo. Em � View – A visão é responsável por renderizar o modelo. Em aplicações Web, é o código HTML e os códigos usados para inserir dados dinâmicos na página(JSP).
� Controller – O controlador processa e responde a eventos, geralmente ações do usuário e, como conseqüência obtém alterações no modelo e atualiza a camada visão.
8
MVC (Modelo 1)
� O modelo 1 é centrado em páginas JSP. A aplicação navega por várias páginas, sendo que qualquer uma dessas páginas pode acessar um JavaBean que realiza as operações comerciais.as operações comerciais.
� Vantagem: � Facilidade de desenvolvimento.
� Desvantagem : � Não existe separação entre o trabalho do designer e do desenvolvedor.
� Também é difícil de manter e reutilizar.
9
MVC (Modelo 2)
� O modelo 2 implementa a arquitetura MVC. Existe um servlet controlador entre o browser cliente e as páginas JSP/Servlets.
Vantagens: � Vantagens: �Maior facilidade de manutenção e reutilização.
� Desvantagens: � É mais difícil de implementar que o modelo 1.
10
O que é Framework?
� É um aplicação reutilizável e semi-completa que pode ser especializada para produzir aplicações personalizadas.
� Uma caixa de ferramentas para os desenvolvedores, que podem ser utilizadas em vários projetos.
� Um conjunto com várias soluções comum a muitos projetos. � Exemplo: login, validação, segurança, etc.
11
O que Struts?
� É um software feito em Java de código fonte aberto que ajuda os desenvolvedores a construírem aplicações Web de maneira mais rápida.
� Do mesmo modo que os engenheiros da construção civil usam suportes para fornecer sustentação para uma obra, os desenvolvedores usam o Struts para suportar cada camada de uma aplicação comercial.
12
Histórico do Struts
� Desenvolvido por Craig R. McClanahan.
� Foi doado a fundação Apache, Maio de 2000.
� Lançado a versão 1.0 em Junho 2001.
Logo se tornou, é ainda é o framework mais popular � Logo se tornou, é ainda é o framework mais popular para desenvolver aplicações Web em Java.
� Site: http://struts.apache.org
13
Histórico do Struts 2
� No evento JavaOne 2005 os desenvolvedores estavam discutindo o futuro do Struts, para suportar novas funcionalidades da Web (2.0).
� Após o lançamento do Struts, já existiram vários projetos � Após o lançamento do Struts, já existiram vários projetos concorrentes e até mesmo superiores, porém, nenhum conseguiu se tornar popular igual Struts.
� As equipes resolveram unir forças e surgiu o Struts 2 que na verdade não é uma extensão da primeira versão e sim a evolução do WebWork v2.2, rebatizado como Struts 2.
� Site:www.oreillynet.com/onjava/blog/2006/10/my_history_of_struts_2.html14
Principais Recursos
� Validação de entrada.� Gerenciamento de navegação de página.� Conversão de tipos.� Internacionalização e gerenciamento de mensagens.� Suporte AJAX.� Suporte AJAX.� Linguagem de expressão OGNL.� Interceptadores.� Injeção de dependência.� Temas pré-definidos.� Baixo acoplamento e facilidade de integração.(Outros Frameworks)� Plugins(Captcha, FreeMaker, XSLT, Upload e Download de arquivos.
15
Arquitetura Resumida
Arquitetura
� As classes FilterDispatcher e Dispatcher são o coração do Struts 2, provêem o necessário à infra-estrutura para processar as solicitações.
� No início as classes ConfigurationManager, � No início as classes ConfigurationManager, ActionManager e ObjectFactory são carregadas.
� Fluxo de ações do FilterDispatcher:� Serve conteúdo estático.
� Determina configuração da ação.
� Cria o contexto da aplicação.
� Cria o proxy da ação.
� Limpa o objeto ActionContext.
17
18
Como Struts 2 Funciona
� Primeiro o pedido vai para o Servlet container que é transmitido através de uma cadeia de filtros padrões.
� FilterDispatcher é acionado que por sua vez consultará o ActionMapper
para determinar se o pedido deve invocar uma ação.para determinar se o pedido deve invocar uma ação.
� Caso positivo, o FilterDispatcher delega o controle ao ActionProxy.
� O ActionProxy consulta o framework ConfigurationManager (struts.xml). Próximo passo, cria um ActionInvocation que é responsável por invocar um Interceptor e redireciona para Action desejada.
19
Como Struts 2 Funciona (Cont.)
� Após o retorno da Action, o ActionInvocation é responsável por analisar se há um Result (JSP, template), mapeado no struts.xml.
� Caso positivo é então renderizado a tela (JSP, Template).� Caso positivo é então renderizado a tela (JSP, Template).
� Os Interceptors são executados em ordem inversa.
� Finalmente, a resposta retona através dos filtros configurados no web.xml. Passando pelo ActionContextCleanUP que limpara a Thread ActionContext.
20
Arquivos de Configuração
21
Arquivo web.xml
22
Arquivo struts.xml
23
Exemplo Interface Action
24
Exemplo classe ActionSupport
25
Ações e Resultados
� Struts 2 usando Interceptadores resolve a maioria dos problemas comuns a vários projetos. Ex: Tratamento de Erros.� Ex: Tratamento de Erros.
� O desenvolvedor precisa apenas se preocupar com a regra negocial do seu projeto.� Ex: Criando a Action e utilizando no retorno dos métodos uma String, que antes deve ser definida no struts.xml para mapear a ação e definir o tipo de resultado.
26
Temas e Templates
� Arquivo de configuração struts.properties
�struts.ui.theme = simple | ajax
� Existem 4 tipos disponíveis.� Existem 4 tipos disponíveis.� simple
� ajax
� xhtml
� css_xhtml
27
Tags de Formulários
28
Tag de Formulários (cont)
29
<s:datetimepicker name="nomeVO.nomeCampo" label="Data Deposito" theme="ajax" displayFormat="dd/MM/yyyy" required="true" />
Tag de Genéricas
30
Binding
� Os campos do formulário podem ser reconstruídos como POJOS, sem necessidade de capturar os dados necessidade de capturar os dados individualmente.
� Existem a opção de integração nativa com outro framework Spring, para usar injeção dependência.
31
Exemplo de Binding
32
Interceptor
� Permitem interceptar a invocação antes e após a Action ser executada.
� São plugáveis e podem ser ordenados.
� Muitos interceptadores prontos e úteis.
� Possibilidade criar um personalizado.
33
Interceptor (Cont)
� Exemplo de utilidades�conversão de tipos
�upload de arquivo�upload de arquivo
� login
�validação
�preparação da pagina
�evitar submit duplicados
34
Tipos de Validação
� Uma aplicação robusta na Web deve garantir que a entrada de dados do usuário seja validada.
� Validadores embutidos no framework:
� XML� XML
� Ajax
� Anotação
� Personalizada
35
Validação Disponíveis
36
Documentação Oficial
� http://struts.apache.org/2.1.8/index.html
� Download
37
Caso de Sucesso Struts 2
� Para explicar um framework novo no mercado, acredito que a melhor maneira é com projetos bem sucedidos.
Esse projeto levou 3 meses para ser � Esse projeto levou 3 meses para ser desenvolvido, implantado e homologado.
� Foram utilizados alguns recursos da tecnologia que ajudaram muito no desenvolvimento.
38
Minha Casa Minha Vida
� Programa habitacional do Governo Federal, Caixa Econômica e o Governo dos Estados.
� Subsídio no financiamento de casas próprias para a população de baixa renda, com parcelas a partir de R$ 50,00.
� Site: www.minhacasaminhavida.gov.br
39
Fluxo Principal do Projeto
� Apresentação.
� Regras.
� Cadastro de titular.� Cadastro de titular.
� Cadastro de dependente.
� Tela confirmação.
� Relatório com número de protocolo.
40
41
42
43
44
45
46
47
48
49
Google Analytics (Cidades)
50
Google Analytics (Cidades)
51
Google Analytics (Países)
52
Google Analytics (Países)
53
Validação escolhida XML
� Justificativa� Para aumentar a produtividade, possibilidade de dividir o trabalho.
� Algumas validações do Projeto:� Campos obrigatórios.
� CPF inválido.
� CPF como chave única.
� Valor renda máxima.
54
Campos Obrigatórios
55
Arquivo nomeAction.destino-validations.xml
56
Sexo Obrigatório
57
Tag Select e validação regex
58
CPF inválido
59
Arquivo nomeAction.destino-validations.xml
60
Classe CPFValidator.java
61
Arquivo configuração validators.xml
62
Conversão de Tipos
� No Brasil temos algumas particularidades como nossa data e moeda que são diferentes das demais.
� USA� USA� data: mm/dd/aaaa �moeda: $ 1,000,000.50
� Brasil � data: dd/mm/aaaa �moeda: R$ 1.000.000,50
Conversão de Tipos (cont.)
64
Conversão de Tipos (cont.)� Arquivo: xwork.properties
� java.util.Date=nomepacote.DateConverter
� java.math.BigDecimal=nomepacote.BigDecimalConverter
� Arquivo nomeAction-conversion.properties� pessoaVO.rendaPessoal=BigDecimalConverter� pessoaVO.rendaPessoal=BigDecimalConverter
� pessoaVO.dataNascimento=DateConverter
Outros Recursos
� Nem todos puderam ser demonstrados.
� Interceptors:
�ModelDriven, Prepare, Execute and Wait,File �ModelDriven, Prepare, Execute and Wait,File Upload.
� Plugins
�JasperReports, JFreeChart, Captha.
67
Relatório de Inscritos
68
Conclusão
� Principais Benefícios:
� Alta produtividade e baixa curva de aprendizado.
� Desenvolvimento com equipe e tempo reduzido.
�Manutenção facilitada.�Manutenção facilitada.
� Por ser uma aplicação Web, facilidade na atualização de versões.
� Superou em 100% as expectativas iniciais de público com mais de 100.000 inscrições.
69
Bibliografia
Site:
� http://struts.apache.org/2.x/docs/home.htm
70
Sobre o autor: Odilon Rauen Junior
� Graduado em Bacharelado em Análise de Sistemas pela PUC-PR,(Pontifícia Universidade Católica do Paraná). (2000/2004)
� Pós-Graduado em Desenvolvimento Java pelo IF-MT (Instituto Federal de Educação Ciência e Tecnologia de Mato Grosso). (2007/2008)
� Trabalha com Java desde 2002, atualmente é Consultor Java na Ábaco Tecnologia Informação.
� Experiência de 3 anos como Instrutor Java/JEE. (2006/2009)
� Certificado SCJP 6.0 (2009), T3 SUN Microsystems(2009)
� Instrutor Oficial da SUN Microsystems (2009/2011).
72