Tutorial 2

Transcrição

Tutorial 2
IMPLEMENTAÇÃO DE SOFTWARE PARA WEB UTILIZANDO O
FRAMEWORK STRUTS
BARCELAR, RICARDO RODRIGUES
FARIAS, WENDELL PEREIRA
UNIVAG Centro Universitário
Avenida Frei Orlando S/N, Cristo Rei, Várzea Grande – MT – Brasil
[email protected]
[email protected]
Várzea Grande MT
Outubro/2005
SUMÁRIO
RESUMO...................................................................................................................................3
1. INTRODUÇÃO.....................................................................................................................3
2. ARQUITETURA EM CAMADAS ......................................................................................3
3. MODELO, VISUALIZAÇÃO E CONTROLE (MVC)......................................................5
4. STRUTS................................................................................................................................6
5. ESTUDO DE CASO............................................................................................................7
5.1. ESQUEMA DO BANDO DE DADOS ...................................................................................7
5.2. ARQUITETURA DA APLICAÇÃO .......................................................................................8
5.3. IMPLEMENTAÇÃO DO SISTEMA .......................................................................................8
5.3.1. Conexão com o Banco.........................................................................................8
5.3.2. Workspace .............................................................................................................9
5.3.3. Implementação da Camada de Modelo através dos Business Components
......................................................................................................................................... 10
5.3.4. Implementação da Camada de Controle usando o Framework Struts ..... 12
5.3.5. Implementação da Camada de Visão usando a tecnologia UIX ................ 13
5.3.5. Criando as páginas de navegação, edição e pesquisa de dados ............. 15
5.3.5.1. Página de navegação de dados............................................................... 15
5.3.5.2. Página de edição de dados ...................................................................... 16
5.3.5.3. Página de pesquisa de dados .................................................................. 20
5.3.5.4. Página Inicial ............................................................................................... 21
5. CONCLUSÃO ................................................................................................................... 22
6. BIBLIOGRAFIA ................................................................................................................ 23
2
RESUMO
Neste Tutorial Prático serão abordados aspectos referentes à implementação
de um software para web utilizando o Framework Struts, viabilizando assim, a
navegação entre as páginas de um sistema, neste caso uma agenda telefônica.
Sendo o Struts um Framework, o desenvolvedor deverá se preocupar apenas com
as regras de negócio, uma vez que o trabalho complexo será realizado pelas classes
do framework. Para a consecução dos objetivos, a adoção do Framework ADF
(Application Development Framework), da Oracle será uma ferramenta que agilizará
o trabalho de criação das regras de negócio, visto que, baseado em assistentes, o
desenvolvedor criará as três camadas do sistema, sendo elas, modelo, visualização
e controle.
1. INTRODUÇÃO
A explosão da internet na década de 90 forçou a migração de grande parte
dos sistemas que antes trabalhavam em arquiteturas de uma ou duas camadas para
uma arquitetura que possibilitasse a plena utilização dos recursos da internet com
desempenho e segurança. Assim, sugiram os sistemas em três camadas, que se
aperfeiçoaram com o padrão de projeto MVC (Modelo, Visualização e Controlador).
O Framework Struts, objetivo deste tutorial, surgiu decorrente da necessidade
de se utilizar os recursos da web integrando tecnologias já consagradas como JSP,
Servlets, JavaBeans, dentre outros de uma maneira menos complexa e com tempo
de desenvolvimento reduzido.
Tecnologias como o Framework ADF da Oracle, trouxeram ainda mais
agilidade e facilidade no desenvolvimento de sistemas para web utilizando o
Framework Struts. Através da ferramenta de programação JDeveloper da Oracle é
possível desenvo lver pequenos sistemas, como uma agenda telefônica, em poucas
horas de trabalho.
O objetivo principal deste tutorial é ao fim de oito horas o instruendo identificar
as potencialidades do Framework Struts e ser capaz de, utilizando a ferramenta de
desenvolvimento JDeveloper, linguagem de programação Java e bando de dados
PostgreSQL, desenvolver pequenos sistemas para web.
2. ARQUITETURA EM CAMADAS
No inicio, quando os primeiros sistemas foram desenvolvidos os sistemas
eram construídos para serem utilizados em uma só máquina. Esses aplicativos eram
constituídos de um único módulo responsável por desempenhar todas as funções.
Não havia separação, seja física ou lógica. Estes eram chamados sistemas
atômicos ou monolíticos.
3
Figura 1
Foi à necessidade de se compartilhar a base de dados e de se obter acessos
simultâneos que a antiga estrutura centralizada de processamento baseado em
Mainframes foi sucedida por uma arquitetura organizada em duas camadas, sendo
uma camada responsável por cuidar dos dados e outra pela parte da lógica da
aplicação. Esta arquitetura recebeu o nome de Arquitetura em Duas Camadas ou
Arquitetura Cliente-Servidor.
Figura 2
Com o advento da internet, surgiu a Arquitetura em Três Camadas. Os
sistemas em duas camadas deram lugar a uma metodologia de desenvolvimento em
três camadas distintas, que separa as regras de negócio, a interface com o usuário e
o acesso ao banco de dados, que passou a ser realizado através de regras contidas
em um servidor.
Figura 3
4
3. MODELO, VISUALIZAÇÃO E CONTROLE (MVC)
Johnson (2002), afirma que uma aplicação interativa quase sempre deve
fazer uso da arquitetura MVC, pois dessa forma são dividas as funcionalidades entre
os objetos envolvidos. Com o modelo MVC as responsabilidades que estavam
centradas em uma mesma camada, geralmente na interface com o usuário, agora se
vêem separadas em três camadas distintas possibilitando a gerência de múltiplos
visualizadores, a simplicidade em incluir novos clientes e a escalabilidade da
aplicação.
Figura 4
Com o intuito de tornar as páginas mais dinâmicas e fáceis de escrever foram
introduzidas as JSP, no entanto seu desempenho estava relacionado a quantidades
de páginas entrelaçadas, sendo necessário o uso de scriplets complexos para
transmitir o código entre as páginas. Esta arquitetura foi denominada Modelo 1 .
Figura 5
Logo foi percebido que utilizar pequenas aplicações de servidores,
denominadas servlets, para fazer a interação com os clientes, se responsabilizando
pelo fluxo da apresentação e o mapeamento das ações proporcionava o
encapsulamento dos dados e a melhoria na segurança da aplicação. Dessa forma
foi concebida a arquitetura Modelo 2.
Figura 6
5
4. STRUTS
A fim de minimizar a problemática do desenvolvimento de aplicações surgiram
os frameworks e dentre eles o Struts. Um framework é um conjunto de classes e
interfaces que cooperam para resolver um tipo de problema de software visto como
um padrão de arquitetura, cuja modelagem reflete uma infra-estrutura reutilizável e
adaptável a um determinado contexto representando uma solução incompleta.
[FIORINI, 2001].
O Struts foi criado por Craig R. McClanahan, a fim de facilitar o
desenvolvimento de software para web. Hoje é um projeto da fundação Apache
constituindo uma implementação do código aberto do modelo 2 possuindo um
controlador central. Seus principais componentes:
4.1. ActionServlet:
Uma classe que estende a classe javax.servlet.HttpServlet. O ActionServlet lê
o arquivo de configuração do Struts (struts-config.xml) e cria os objetos de
configuração apropriados (estrutura de dados) na memória. Como é um servlet,
intercepta a requisição HTTP baseado no padrão URL e os opera.
4.2. ActionForm:
O ActionForm pode desempenhar o papel de coleta do campo, buffer de
dados, transformador de tipos e objeto de transferência. São responsáveis, ainda,
por validar se os atributos da requisição estão sintaticamente corretos e
eventualmente disparar exceções avisando o usuário final.
4.3. ActionForward:
A classe ActionFoward é responsável pelo mapeamento lógico das páginas
do sistema, evitando assim, o uso do nome físico (URI) dentro do código. O uso
eficiente da ActionFoward facilita a manutenção do sistema.
4.4. ActionMapping:
O ActionMapping (org.apache.struts.action.AcionMapping) descreve como o
framework trabalha as operações de negócio. Cada ActionMapping é associado a
um URI por meio de um path na qual será realizado o roteamento das solicitações à
aplicação para um Servlet, direcionando quais operações ou comandos deverão ser
executados.
4.5. Action:
É uma classe Java simples e leve à qual o ActionServlet delega o tratamento
da solicitação e de sua resposta. Ela é conectada a ActionServlet e pode chamar
qualquer propriedade pública, mas sem o overhead de instanciar outro servlet.
6
4.6. Arquivo de Configuração – struts-config.xml:
O Struts usa um arquivo de configuração para definir e carregar vários
componentes críticos do framework, inclusive os nomes lógicos para as
hiperligações. É um documento XML que é lido na inicialização e usado para criar
um banco de dados de objetos. Vários componentes Struts consultam esse arquivo
de dados para fornecer os serviços do framework.
4.7. Tags:
O Struts possui um conjunto poderoso de tags JSP escritas previamente que
fazem parte do framework. As tags podem ser usadas para preencher perfeitamente
os campos de texto ou selecionar listas e para gerenciar os arrays de quadros de
seleção e radiobutton.
4.8. web.xml:
Apesar de não fazer parte do Struts, é vastamente utilizado e de suma
importância para o framework. Segundo Husted (2004), o arquivo web.xml é usado
para informar ao contêiner do servlet sobre como configurar os servlets e outros
objetos de alto nível que a aplicação necessita.
5. ESTUDO DE CASO
O objetivo deste capítulo é desenvolver uma pequena aplicação em forma de
estudo de caso, cuja finalidade é demonstrar a implementação do framework Struts
em uma aplicação para web, neste caso um sistema de informações pessoais
(Agenda).
Para o desenvolvimento deste estudo de caso será utilizando o Sistema
Gerenciador de Bando de Dados (SGDB) PostGreSQL. Com a base de dados
previamente criada, será possível demonstrar a implementação do Framework Struts
utilizando a tecnologia ADF através da ferramenta de programação JDeveloper, da
Oracle.
5.1. Esquema do Bando de Dados
7
Figura 6
5.2. Arquitetura da Aplicação
O framework ADF fornece uma implementação genérica de uma aplicação
com a arquitetura MVC especificando os limites entre as unidades lógicas. O
diagrama abaixo mostra uma visão simples dos passos realizados no
desenvolvimento da aplicação:
Figura 7
5.3. Implementação do Sistema
Uma vez entendido como o sistema está estruturado podemos iniciar a
implementação do sistema.
5.3.1. Conexão com o Banco
Realizaremos a conexão com o banco de dados seguindo os seguintes
passos:
1) Com o JDeveloper já aberto clicar em Connections-Navigator (Aba Connections)
e criar uma nova conexão (New Database Connection).
2) Escolher o tipo de conexão “Third Party JDBC Driver”.
3) Preencher username e password conforme definidos no SGDB.
4) Criar um novo Driver Class que deverá conter o path do driver:
org.postgresql.Driver.
8
- Em Library preencher os campos Class, Source e Doc Path com o caminho
onde
está
localizado
o
jar:
C:\Arquivos
de
programas\PostgreSQL\8.0\jdbc\posgresql-8.0-311.jdbc3.jar
- Na URL: jdbc:postgresql://localhost/nomedoseubanco.
5) Realizar o Test, que deverá retornar Success.
6) Entrar no menu Tools>Embedded OC4J Server Preferences. No TreeView Global
>
Libraries
>
Add...
Localizar
C:\Arquivos
de
programas
\PostgreSQL\8.0\jdbc\posgresql-8.0-311.jdbc3.jar.
5.3.2. Workspace
Em Aplications – Navigator clicar com o botão direito sobre Applications >
New Application Workspace...
Preencher conforme abaixo:
Figura 8
O Template escolhido, dentre várias opções que o JDeveloper oferece, gera
um conjunto de pacotes estruturados para uma aplicação web, divididos
principalmente em dois grupos: Model e ViewController.
Figura 9
9
5.3.3. Implementação
Components
da
Camada
de
Modelo
através
dos
Business
As regras de negócio do sistema serão criadas a partir do nó Model do
workspace. Dentro desta categoria criam-se, então, os componentes de negócio. Os
componentes de negócio, denominados Business Components, implementam uma
aplicação baseada no Design Pattern MVC/Model 2.
Segundo Muench (2005), os business components reforçam a separação
lógica do cliente funcionalmente acessível e a implementação da camada de
negócio.
São cinco os principais componentes que constituem o Business components:
- Entity Objects
- Associations
- View Objects
- View Links
- Application Module
Cabe ressaltar que estes não são os únicos componentes existentes no
framework, no entanto foram os utilizados na camada de modelo desta aplicação.
Clicar com o botão direito sobre o nó model e em seguida New... . Ao abrir a
janela New Gallery selecionar Business Components em Categories e em Items
Business Componentes from Tables
Figura 10
Dessa forma será aberto um assistente que nos auxiliará na criação dos
componentes de negócios.
Passo 1: Criar as Entity Objects e Associations. Para isso basta selecionar as
tabelas necessárias.
10
Figura 11
Passo 2 e 3: Criar as View Objects e View Links selecionando as mesmas tabelas.
Figura 12
Passo 4: E por fim, criar o Application Module.
Figura 13
11
Dessa forma concluímos a criação dos componentes de negócio. Cabe
ressaltar que tal procedimento pode ser mais polido com a edição de alguns
atributos em Entity Objects.
Figura 14
5.3.4. Implementação da Camada de Controle usando o Framework Struts
Para a implementação da camada de controle de nossa aplicação, usaremos
o Framework Struts. A implementação é facilitada utilizando o ambiente gráfico
oferecido pelo JDeveloper, denominado Struts Page Flow Diagram. Para obter
acesso, clicar com o botão direito sobre o nó ViewController e em seguida sobre
Open Struts Page Flow Diagram...
Figura 15
Cabe ressaltar que todos os componente criados, bem como a ligação entre
os componentes realizados no diagrama, refletirão no arquivo de configuração
struts-config.xml.
12
5.3.5. Implementação da Camada de Visão usando a tecnologia UIX
Antes de prosseguirmos na tarefa de criar a camada de controle é importante
desde já criarmos o template da camada de visão. Para isso, clicar com o botão
direito sobre o nó View Controller e em seguida New... Selecionar em Categories
ADF UIX e em Items UIX XML Page with Header, Footer, and Navigation.
Figura 16
Nos passos seguintes basta seguir o assistente :
Passo 1: Dar um nome ao arquivo a ser criado.
Figura 17
Passo 2: Definir um título que aparecerá no topo da página de exibição.
13
Figura 18
Passo 3: Escolher uma imagem que represente o projeto
Figura 19
Passo 4: Criar as barras de guias com as abas Navegar, Editar e Pesquisar.
Figura 20
14
Passo 5: Colocar informações de rodapé.
Figura 21
Passo 6: Finalizar.
Uma vez criado o template, é possível reaproveitar o modelo em
diversas visualizações.
5.3.5. Criando as páginas de navegação, edição e pesquisa de dados
Retornaremos ao Struts Page Flow Diagram para prosseguirmos na criação
da camada de controle. Cabe ressaltar que nesta etapa, estaremos sempre
alternando em tarefas na camada de controle e na camada de visão.
5.3.5.1. Página de navegação de dados
Arrastar componentes Data Page e Data Action da Component Palette para
a área de trabalho do Page Flow Diagram e renomeá-los para /pessoa-navega e
/action_pessoa-navega, respectivamente. Em seguida ligá-los por meio de um
Forward.
Figura 22
Clicar duas vezes sobre o Data Page /pessoa-navega e edita-lo de modo que
possamos criar nossa primeira página de navegação. Dessa forma abrir-se-á,
automaticamente, uma página de edição, denominada pessoa-navega.uix. Nesta
página selecionaremos a aba Data-Controls. Em Drag and Drop As escolher ReadOnly-Table. E arrastar o Data Control PessoaView para a área de edição em
pessoa-navega.uix.
15
Figura 23
É importante criar na página de navegação quatro botões que nos permitirão
editar os dados apresentados: Editar, Apagar, Gravar e Cancelar. A exceção do
botão Editar que criaremos posteriormente, em Data Control Palette maximizar a
árvore em PessoaView1 e em Operations arrastar o item Delete. Para os botões
Gravar e Cancelar ir em Operation de AppModuleDataControl e arrastar os itens
Commit e Rolback para pessoa-navega.uix.
Figura 24
5.3.5.2. Página de edição de dados
Arrastar os componentes Data Page e Data Action da Component Palette
para a área de trabalho do Page Flow Diagram e renomeá-los para /pessoa-edita e
/action pessoa-edita, respectivamente. Em seguida ligá-los por meio de um Forward.
16
Figura 25
Clicar duas vezes sobre o Data Page /pessoa-edita e editá-lo de modo que
possamos criar nossa primeira página de edição de dados. Dessa forma abrir-se-á,
automaticamente, uma página de edição denominada pessoa-edita.uix. Nesta
página selecionaremos a aba Data-Controls. Em Drag and Drop As escolher Input
Form (With Navigation). E arrastar o Data Control PessoaView para a área de
edição em pessoa-edita.uix.
Figura 26
Para que possamos inserir, editar e excluir dados é necessário criar os botões
que mudam o estado dos campos permitindo executar a operação desejada.
Em Data Controls Palette maximizar a árvore do DataControl PessoaView1 e
dentro de Operations arrastar para a área de edição de pessoa-edita.uix os items
Create e Delete.
17
Figura 27
É necessário criar um botão na página de navegação que redirecione a
aplicação para a página de edição de modos que possamos editar os dados
desejados.
Mas antes, ir para Page Flow Diagram e criar uma ligação Forward entre o
Data Page pessoa-navega e o Data Action action_pessoa-edita. Renomear o
Forward para fwPessoaEdita.
Figura 28
Criar um botão editar na página pessoa-navega.uix clicando na Component
Palette em Submit Button. Clicar duas vezes sobre o botão editar os campos: Text:
Editar e Event: goPessoa-edita.
Com o botão Editar selecionado ir para Structure, no fim da árvore clicar com
o botão direito do mouse sobre Handlers e criar um Event nomeando-o com
goPessoa-edita.
18
Figura 29
De modo semelhante clicar com o botão direito em handlers. Novamente
clicar com o botão direito sobre event – goPessoa-edita, recém criado, e atribuir uma
ação ao evento, neste caso ele vai chamar o Forward que criamos no Page Flow
Diagram .
Figura 30
Selecionar fwPessoa-edita.
Figura 31
19
5.3.5.3. Página de pesquisa de dados
Arrastar os componentes Data Page e Data Action da Component Palette
para a área de trabalho do Page Flow Diagram e renomeá-los para /pessoapesquisa e /action_pessoa-pesquisa, respectivamente. Em seguida ligá-los por meio
de um Forward.
Figura 32
Clicar duas vezes sobre o Data Page /pessoa-pesquisa e dita-lo de modo
que possamos criar nossa primeira página de pesquisa. Dessa forma abrir-se-á,
automaticamente, uma página de pesquisa denominada pessoa-pesquisa.uix. Nesta
página selecionaremos a aba Data-Controls. Em Drag and Drop As escolher Search
Form. E arrastar o Data Control PessoaView para a área de edição em pessoapesquisa.uix.
Figura 33
De modo semelhando deve-se proceder para criar as demais páginas.
20
5.3.5.4. Página Inicial
É importante que exista uma página inicial para que o usuário possa acessar
os módulos da aplicação.
De modo semelhante à criação dos templates, criar uma página UIX XML with
pageLayout. Nesta página inserir um componente TabBar e em seguida adicionar
os links necessários clicando com o botão direito do mouse sobre TabBar em
Structure.
Figura 34
Criar os links para os módulos selecionando as abas e em seguida
selecionando o destino em Destinations em Property Inspector.
Figura 35
Muito bem, já temos uma aplicação de agenda implementada para web. Todo
esse trabalho realizado pode ser polido pelo desenvolvedor, seja editando o nome
21
dos botões, campos, etc que são criados por default, seja agregando mais
funcionalidades.
Cabe destacar o arquivo de configuração struts-config.xml, construído
graficamente pela ferramenta, que é o coração do framework.
Figura 36
5. CONCLUSÃO
Notamos que nossa aplicação seguiu fielmente o padrão de projeto MVC,
mais especificamente o Modelo 2. O sistema foi dividido em três módulos, com um
servlet controlando o fluxo da aplicação pela leitura do arquivo struts-config.xml,
implementado através do Struts Page Flow Diagram da ferramenta de
desenvolvimento JDeveloper da Oracle.
Percebemos ainda que o desenvolvedor preocupou-se apenas com a
implementação das regras de negócio, não despendendo tempo em códigos
pesados que certamente consumiriam boa parte de seu expediente. Essa é a
finalidade dos Frameworks, e não poderia ser diferente com o Struts.
O Framework Struts proporciona uma maneira clara, fácil e robusta de criar
sistemas utilizando modernas tecnologias proporcionando rapidez e padronização
na implementação de sistemas.
22
6. BIBLIOGRAFIA
HUSTED, Ted, et al. Struts em ação. Tradução: Eveline Vieira Machado. Rio de
Janeiro RJ: Editora Ciência Moderna Ltda., 2004.
KURNIAWAN, Budi. Java para Web com Servlet, JSP e EJB. 1ª Edição. Rio de
Janeiro RJ: Editora Ciência Moderna Ltda., 2002.
HIGHTOWER, Richard. Jakarta Struts Live. Highlands Ranch,
SourceBeat, 2004.
TEMPLE, Andre, et al. Jsp, Servlets e J2EE. Stanford, Califórnia, 2004.
Colorado:
CAVANESS, Chuck. Jakarta Struts. O’Reilly, 2002.
CAVANESS, Chuck. Programming Jakarta Struts. 2. ed. O’Reilly, 2004.
SHENOY, Srikanth. Struts Survival Guide, Basic to Best Practices. Austin TX:
ObjectSource LLC, 2004.
SINGH, Inderjeet. Designing Enterprise Applications, with the J2EETM Platform.
2. ed. Upper Saddle River NJ: Addison-Wesley, 2002.
FALKNER, Jayson; JONES, Kevin. Servlets and JavaServer Pages, The J2EE
Technology Web Tier. Boston MA: Addison-Wesley, 2004.
DAVIS, Malcolm. Struts, an open-source MVC implementation, 2001. Disponível
em: <http://www-106.ibm.com/developerworks/library/j-struts/>. Acesso em 20 de
abril de 2005.
MUENCH, Steve. ADF Business Components J2EE Design Pattern Catalog,
2005. Disponível em: <http://www.oracle.com/technology/products/jdev/tips/
muench/designpatterns/index.html>. Acesso em 23 de maio de 2005.
MUENCH, Steve. Oracle ADF Data Binding Primer and ADF/Struts Overview,
2005. Disponível em: <http://www.oracle.com/technology/products/jdev/collateral/
papers/10g/ADFBindingPrimer/index.html>. Acesso em 20 de maio de 2005.
MILLS, Duncan. Using Struts 1.2.1 with JDeveloper 10g, 2004. Disponível em
<http://www.oracle.com/technology/products/jdev/tips/mills/struts1_2_1.html>.
Acesso em 12 de maio de 2005.
GARNIER, Jean Michel. Struts 1.1 Controller UML diagrams. Disponível em
<http://rollerjm.free.fr/pro/Struts11.html>. Acesso em 29 de abril de 2005.
JELLEMA, Lucas. Struts best practices - white paper on JavaWorld. Disponível
em <http://technology.amis.nl/blog/index.php?p=400>. Acesso em 30 de abril de
2005.
Improving Designs with the MVC Design Pattern. Disponível em:
<http://java.sun.com/developer/EJTechTips/2004/tt0324.html>. Acesso em 01 de
maio de 2005
23
Oracle ADF UIX Developer's Guide Table of Contents. Disponível em
<http://helponline.oracle.com/jdeveloper/help?topic=uixdg_toc_html>. Acesso em 20
de maio de 2005.
Apache Struts Framework (Version 1.2.7). Disponível em http://struts.apache.
org/api/index.html>. Acesso em 05 de abril de 2005.
Struts. Disponível em <http://struts.apache.org/>. Acesso em 05 de abril de 2005
24

Documentos relacionados