AW3 - Desenvolvimento Web com Struts
1
Introdução 1.1
2
3
4
1.1.1
A arquitetura Web J2EE mais simples
1.1.2
Model-View-Controller (M.V.C.)
Introdução ao Struts
8 8 10
12
2.1
Download e Instalação do Struts
13
2.2
Primeiro aplicativo com Struts
14
2.2.1
Vantagens do Struts
17
2.2.2
Formulários HTML com Struts Front Controller
18
2.2.3
Struts Front Controller
19
2.2.4
Struts Action
20
2.2.5
struts-config.xml
21
2.2.6
Página de resultados
21
2.2.7
Resumo do funcionamento com Struts
22
2.2.8
Estrutura e Organização do Projeto
23
2.2.9
Build
24
2.2.10
Deployment
26
2.2.11
Laboratório 1
27
Modelo de Componentes do Struts
30
3.1
Camada Controller
31
3.2
Camada View
33
3.3
Camada Model
34
3.4
O XML struts-config na íntegra
35
Componentes Controller do Struts 4.1
ActionServlet
38 39
4.1.1
ActionServlet Internamente
41
4.1.2
Configurando ActionServlet
43
4.1.3
Estendendo ActionServlet
44
4.2
5
Arquiteturas Web com J2EE
6
RequestProcessor
45
4.2.1
Configurando o RequestProcessor
46
4.2.2
RequestProcessor Internamente
47
4.2.3
Criando um RequestProcessor customizado
49
4.3
Laboratório 2
51
4.4
Modularizando um aplicativo Struts
52
4.5
Laboratório 3: Módulos com Struts
57
Action
60
5.1
Action Internamente
64
5.2
Configurando Actions
65
5.3
Tratamento de erros com Actions
68
5.3.1
ExceptionHandler
71
5.3.2
global-exceptions
73
Índice 5.4
ActionForward
5.4.1 5.5
6
global-forward
Laboratório 4: Exception e Forwards
ActionForm
74 75 77
80
6.1
Introdução
81
6.2
Laboratório 5 Capturando e manipulando dados com ActionForm
85
6.3
Validação server-side
86
6.4
Reseting ActionForm
88
6.5
ActionForm com HTML Tag Library
89
6.5.1
90
6.5.2
90
6.5.3
90
6.5.4
e
91
6.5.5
91
6.5.6
92
6.5.7
Outros Tags HTML
93
6.5.8
Exemplo de formulário completo com Struts HTML Library
95
6.6
Dynamic ActionForm
6.7
Jakarta BeanUtils
7
Bean e Logic Tag Libraries 7.1
102
106 107
7.1.1
Tabela de Tags Bean
108
7.1.2
109
7.1.3
109
7.1.4
110
7.1.5
110
7.1.6
110
7.2
8
Bean Tag Library
98
Logic Tag Library
111
7.2.1
Tabela de Tags Logic
112
7.2.2
113
7.2.3
114
7.2.4
e
114
7.2.5
115
7.2.6
115
Internacionalização
118
8.1
Conceitos básicos
119
8.2
Internacionalizando JSP’s com Custom Tags
125
8.3
ActionError e Internacionalização
126
8.4
Laboratório 6: estudo de caso – parte I
128
9
Synchronized Tokens 9.1
2
Tokens Copyright 2005 Globalcode – The Developers Company, todos os direitos reservados
130 131
AW3 - Desenvolvimento Web com Struts 9.1.1
Exemplo Completo de Synchronized Tokens
10 Frameworks Adicionais: Tiles
133
138
10.1
Tiles
141
10.2
Laboratório 7: estudo de caso – parte II
145
11 Apêndice 11.1 11.1.1
Log4J Log4J no JBoss
148 149 151
11.2
Validator
155
11.3
Configurando Eclipse para os laboratórios
160
11.4
Anexo: DTD do Struts 1.2
167
Copyright 2005 Globalcode – The Developers Company, todos os direitos reservados
3
CAPÍTULO
1
Introdução 1.1Arquiteturas Web com J2EE
1 Introdução
1 Introdução
Anotações
6
Copyright 2005 Globalcode – The Developers Company, todos os direitos reservados
AW3 - Desenvolvimento Web com Struts
O Struts é um projeto open-source criado pelo consórcio Jakarta e tem como objetivo principal oferecer facilidade de desenvolvimento de aplicativos Web com padrão Java 2 Enterprise Edition. Oferece uma série de serviços de infra-estrutura, tais como:
Controle de fluxo de requisições HTTP; Internacionalização; Formulários; Validação.
Sendo o Struts considerado um framework de desenvolvimento, o que o diferencia de uma API convencional?
Uma API ou biblioteca de classes, você simplesmente utiliza fazendo chamadas às suas classes e interfaces. Em um framework de desenvolvimento, além da utilização de classes e interfaces, você também pode estender suas funcionalidades e alterar comportamentos. Tudo isso é possível através de um modelo de trabalho, framework.
Um framework tipicamente oferece serviços técnicos “automatizáveis”, como por exemplo:
Persistência de dados em bancos SQL; Log de aplicativos; E no caso do Struts, aplicativos Web MVC de alta qualidade.
A utilização dos serviços oferecidos pelo framework é feita através da extensão de classes, implementação de interfaces, utilização de Tag Libraries (quando Web) e criação de documentos de configuração, tipicamente XML.
Um termo muito popular atualmente é “Inversão de Controle” ou Inversion of control (IOC). Esta terminologia técnica refere-se ao fato que dentro de um framework, tipicamente implementamos métodos que não chamamos por nossa iniciativa.
Por exemplo, em alguns frameworks de persistência implementamos um método para gravar um objeto em banco SQL, mas não escrevemos nenhuma classe para chamá-lo, pois este método será acionado pelo framework. Isto é inversão de controle, você implementa o método, mas quem o chama é o framework.
Anotações
Copyright 2005 Globalcode – The Developers Company, todos os direitos reservados
7
1 Introdução
1.1
Arquiteturas Web com J2EE
Basicamente, podemos caracterizar uma aplicação Web como toda e qualquer aplicação que tenha como elementos constituintes de sua arquitetura: - um cliente, uma requisição sob o protocolo http e um servidor (Web Server) que seja capaz de receber a requisição, processá-la e, em seguida, disparar (devolver) uma resposta ao cliente.
Atualmente podemos desenvolver aplicativos Web de diversas formas. Considerando principalmente o uso de uma linguagem orientada a objetos como Java, podemos modelar nossas classes de n maneiras. O modelo físico de servidores e modelagem lógica de classes determina uma arquitetura.
1.1.1
A arquitetura Web J2EE mais simples
A arquitetura Web J2EE mais simples e conhecida no mercado é a aquela baseada apenas em JSPs, com servidor HTTP e Web Container acoplados, como Jakarta Tomcat. Também é conhecida como JSP Model One.
Nessa arquitetura, toda requisição para processamento de conteúdo é feita apenas com JSP e Javabeans, responsáveis por disponibilizar saídas (resultados) apresentadas aos clientes. Tipicamente encontramos código JDBC dentro dos JSPs.
Anotações
8
Copyright 2005 Globalcode – The Developers Company, todos os direitos reservados
AW3 - Desenvolvimento Web com Struts
Esta arquitetura favorece determinadas qualidades da solução, como por exemplo:
Facilidade do desenvolvimento inicial; Simplicidade de uso, que facilita contratação de novos desenvolvedores; Custo de desenvolvimento menor; Prazo exigido menor para aplicativos menores.
Porém, desfavorece uma série de outras características, cada vez mais exigidas em desenvolvimento:
Baixo reuso de código; Dificuldade em efetuar mudanças; Dificuldade de estender; Manutenção complexa quando o aplicativo se torna maior; Conseqüente aumento no custo de manutenção, extensão e propriedade.
Com a orientação a objetos, técnicas de modelagem conhecidas (design patterns, por exemplo) somadas a um mínimo de planejamento em relação ao aplicativo, é possível melhorar, e muito, a qualidade da solução, porém, cabe ao arquiteto da solução analisar a dimensão do projeto, os recursos humanos e técnicos disponíveis, assim como, prazo e verba, para poder tomar a decisão sobre qual é a arquitetura correta para dado cenário.
Anotações
Copyright 2005 Globalcode – The Developers Company, todos os direitos reservados
9
1 Introdução
1.1.2
Model-View-Controller (M.V.C.)
O padrão de arquitetura M.V.C. é o mais utilizado atualmente para soluções Web J2EE e está presente nas principais soluções J2EE de grandes empresas. Este padrão determina a divisão do aplicativo em três principais partes:
Model: representa as entidades, operações e lógica do negócio; View: representa visualizações utilizadas pelos usuários para interagir com os dados e processamento; Controller: representa a camada que recepciona as requisições, aciona o modelo e responde para o usuário através do despacho para uma view.
Sem dúvida alguma, podemos afirmar que as aplicações desenvolvidas utilizando o padrão MVC são capazes de crescer sem qualquer dificuldade. A complexidade, ou o que chamamos de responsabilidade de componentes, é dividida de maneira mais inteligente, propiciando fraco acoplamento entre camadas, garantindo ao desenvolvedor e ao projeto maior flexibilidade para mudanças na arquitetura do software. A troca de componentes comuns (Javabeans) da camada de negócio por componentes J2EE - Enterprise Javabeans (EJB) é um exemplo típico
O Struts aplica fortemente o padrão MVC sob a arquitetura J2EE, o que faz com que ele tenha grande credibilidade e flexibilidade para desenvolvimento de aplicações Web em Java.
Veremos mais adiante, em detalhes, outros padrões criados para o desenvolvimento de solução Web com Java e as estratégias de implementação adotadas pelo Struts.
Anotações
10
Copyright 2005 Globalcode – The Developers Company, todos os direitos reservados
CAPÍTULO
2
Introdução ao Struts Download e Instalação do Struts Primeiro aplicativo com Struts
2 Introdução ao Struts
2 Introdução ao Struts
Anotações
12
Copyright 2005 Globalcode – The Developers Company, todos os direitos reservados
AW3 - Desenvolvimento Web com Struts
2.1
Download e Instalação do Struts
No site http://struts.apache.org/ você encontrará o Struts para download no formato binário. Trata-se apenas de um arquivo compactado que você deve descompactá-lo no diretório de preferência.
No diretório lib, encontramos os arquivos principais do Struts, a começar pelo próprio struts.jar. Vamos estudar mais adiante cada biblioteca deste diretório e seus arquivos de configuração.
No diretório webappps, o Struts disponibiliza um aplicativo Web J2EE chamado struts-documentation.war, que é simplesmente a cópia da documentação do site do Struts para consultas off-line. Também encontramos no diretório webapps exemplos diversos de uso de Struts.
Anotações
Copyright 2005 Globalcode – The Developers Company, todos os direitos reservados
13
2 Introdução ao Struts
2.2
Primeiro aplicativo com Struts
Vamos imaginar um caso simples de desenvolvimento para aplicarmos o Struts. Desejamos uma funcionalidade que nos retorne, informando um determinado ano, se o mesmo é bissexto ou não. Conforme discutimos anteriormente, há diferentes formas para desenvolvermos a solução com J2EE:
1. Sem Struts, podemos utilizar uma página HTML que receba o ano informado em um formulário e envie por GET ou POST para um outro JSP processar o resultado. Nesta abordagem temos uma arquitetura centralizada em JSPs:
Para esta arquitetura nosso trabalho seria o de desenvolver:
1. Um HTML com formulário de entrada do ano; 2. VerificarAno.jsp.
Anotações
14
Copyright 2005 Globalcode – The Developers Company, todos os direitos reservados
AW3 - Desenvolvimento Web com Struts 2. Para melhorar a arquitetura, podemos aplicar os patterns M.V.C., Front-Controller, Action e Factory:
Esta abordagem é mais elaborada que a anterior, porém, teríamos que desenvolver:
1. Um HTML com formulário de entrada do ano; 2. Um Java Servlet Front Controller; 3. Uma classe ActionFactory; 4. Uma interface para definir o padrão de Action; 5. Uma classe com a implementação VerificaAnoAction; 6. A página Resultado.jsp.
Apesar de tecnicamente interessante, o trabalho inicial de desenvolvimento é grande. Todavia, este investimento pode ser compensado quando nosso sistema crescer e precisarmos incluir novas funcionalidades. Teremos uma maior organização no aplicativo, que facilitará a adição de comportamentos genéricos necessários em todas as funcionalidades, como logging, segurança, debug, internacionalização, etc.
Anotações
Copyright 2005 Globalcode – The Developers Company, todos os direitos reservados
15