Aula 10 - FACOMbacala/TEC4/JSPStruts.pdf · 2007-11-30 · 10.4 SEL6303 – Sistemas de...

41
© JCFJ 10.1 SEL6303 – Sistemas de Informação Web JSP/Servlets – Web e Tecnologia Java: JSP/Servlets Aula 10 © JCFJ 10.2 SEL6303 – Sistemas de Informação Web JSP/Servlets – Desenvolvimento em N Camadas A tendência atual no desenvolvimento de programas corporativos é fornecer estruturas de N camadas Objetiva-se obter aplicativos seguros, flexíveis e disponíveis. As soluções técnicas atuais que implementam esta solução são: J2EE (Java 2 Enterprise Edition) da Sun Microsystems; Plataforma .NET (.NET Framework) da Microsoft. Atualmente existem diversos servidores de aplicações que podem abrigar soluções que empregam esta tecnologia. Os clientes que podem tirar proveito desta arquitetura podem ser tão simples quanto um navegador Web. A terminologia utilizada pode ser confusa e usada de maneira inconsistente Uma camada pode ser tanto um camada física representando uma separação física (máquinas diferentes) quanto uma camada lógica representando um software Múltiplas camadas lógicas podem estar na mesma camada física (uma mesma máquina). Quando for necessário se utilizará explicitamente os termos camada física e camada lógica. – Introdução

Transcript of Aula 10 - FACOMbacala/TEC4/JSPStruts.pdf · 2007-11-30 · 10.4 SEL6303 – Sistemas de...

Page 1: Aula 10 - FACOMbacala/TEC4/JSPStruts.pdf · 2007-11-30 · 10.4 SEL6303 – Sistemas de Informação Web JSP/Servlets – Uma Camada Banco de Dados Lógica de Apresentação Lógica

© JCFJ

10.1S

EL

6303

–S

iste

mas

de

Info

rmaç

ão W

ebJSP/Servlets –

Web e Tecnologia Java: JSP/Servlets

Aula 10

© JCFJ

10.2

SE

L63

03 –

Sis

tem

as d

e In

form

ação

Web

JSP/Servlets –

Desenvolvimento em N CamadasA tendência atual no desenvolvimento de programas corporativos é fornecer estruturas de N

camadas Objetiva-se obter aplicativos seguros, flexíveis e disponíveis.

As soluções técnicas atuais que implementam esta solução são:

– J2EE (Java 2 Enterprise Edition) da Sun Microsystems;

– Plataforma .NET (.NET Framework) da Microsoft.

Atualmente existem diversos servidores de aplicações que podem abrigar soluções que

empregam esta tecnologia.

Os clientes que podem tirar proveito desta arquitetura podem ser tão simples quanto um

navegador Web.

A terminologia utilizada pode ser confusa e usada de maneira inconsistente Uma camada

pode ser tanto um camada física representando uma separação física (máquinas diferentes)

quanto uma camada lógica representando um software Múltiplas camadas lógicas podem

estar na mesma camada física (uma mesma máquina).

Quando for necessário se utilizará explicitamente os termos camada física e camada lógica.

– Introdução

Page 2: Aula 10 - FACOMbacala/TEC4/JSPStruts.pdf · 2007-11-30 · 10.4 SEL6303 – Sistemas de Informação Web JSP/Servlets – Uma Camada Banco de Dados Lógica de Apresentação Lógica

© JCFJ

10.3S

EL

6303

–S

iste

mas

de

Info

rmaç

ão W

ebJSP/Servlets –

Uma Camada – Desenvolvimento MonolíticoComputadores de grande porte ou computadores pessoais independentes, são e foram ambientes ideais para se encontrar aplicativos monolíticos Grandes softwares contendo toda as funcionalidades da aplicação Manutenção difícil (algumas vezes chamado código espaguete).

Toda entrada do usuário, verificação da lógica do negócio e acesso a dados era processada pela mesma máquina por uma única aplicação Esta solução era satisfatória para um ambiente onde imperavam os computadores de grande porte e/ou os centros de dados corporativos pois se tinha um controle absoluto e as próprias aplicação evoluíam mais lentamente.

Atualmente os sistemas exigem um alto nível de manutenção que é quase incompatível com aplicações monolíticas Pode-se chegar a situações de recompilações diárias.

Para aplicativos simples que não utilizam conectividade de rede o desenvolvimento monolítico pode ser suficiente Entretanto, mesmo nestes casos (um cliente acessando um banco de dados) estes aplicativos podem tirar proveito do modelo de diversas camadas.

Como tanto a lógica de negócio como de apresentação e o acesso aos dados estão codificadas juntas, a recompilação de muitas partes do código pode ser necessária dificultando a adição de novas funcionalidades

Suplementarmente, alterações em uma parte do sistema podem introduzir erros em outras partes não relacionadas.

A instalação do mesmo sistema em máquinas diferentes também introduz o problema de controle das versões que é um problema suplementar a ser tratado.

– Introdução

© JCFJ

10.4

SE

L63

03 –

Sis

tem

as d

e In

form

ação

Web

JSP/Servlets –

Uma Camada

Banco deDados

Lógica deApresentação

Lógica deNegócio

Lógica deAcesso a Dados

Martin Bond et alli., Aprenda J2EE em 21 Dias, Pearson Education do Brasil Ltda, 2003.

A divisão em camadas lógicas de funcionalidade pode ser baseada

nas diferentes responsabilidades das partes do código da aplicação:

– Lógica de Apresentação: está ligada a interação do usuário com a

aplicação e a maneira com a qual as informações são apresentadas aos

usuários

– Lógica do Negócio: implementa o processamento ligado às regras do

negócio para o qual foi desenvolvida a aplicação

– Lógica de Acesso aos Dados: está ligada a conexão realizada com as

fontes de dados e também a manipulação pela lógica de negócio dos

dados da fonte de dados

– Introdução

Page 3: Aula 10 - FACOMbacala/TEC4/JSPStruts.pdf · 2007-11-30 · 10.4 SEL6303 – Sistemas de Informação Web JSP/Servlets – Uma Camada Banco de Dados Lógica de Apresentação Lógica

© JCFJ

10.5S

EL

6303

–S

iste

mas

de

Info

rmaç

ão W

ebJSP/Servlets –

Duas Camadas

Surgimento em conseqüência do desejo de se compartilhar dados entre aplicativos executados

em máquinas diferentes Utilização de uma máquina para abrigar o servidor de banco de

dados.

Banco deDados

Lógica deAcesso a Dados

Lógica deApresentação

Lógica deNegócio

Com duas camadas a aplicação implementa

a lógica de apresentação e de negócios

Os dados são acessíveis em outra máquina

através de uma conexão a um banco de

dados Alterações na lógica de acesso a

dados não devem interferir com o restante.

No limite desta arquitetura toda a camada de acesso aos dados pode ser trocada Um outro

banco de dados pode, por exemplo, ser utilizado sem interferência nas outras duas camadas

desde que a interface entre as duas camadas não mude.

– Introdução

© JCFJ

10.6

SE

L63

03 –

Sis

tem

as d

e In

form

ação

Web

JSP/Servlets –

Duas Camadas – ConseqüênciasEm aplicações de duas camadas o cliente ainda mantém contato com a lógica de negócio e

precisa saber detalhes da localização da fonte de dados Como o cliente concentra grande

parte do processamento este arquitetura é conhecida como Cliente Gordo (Thick) Clientes

gordos normalmente precisam ser atualizados quando a aplicação muda Dificuldades para

manter versões atualizadas.

O cliente gordo irá ter acesso ao código referente a lógica do negócio (mesmo que compilado) o

que pode ser um problema.

Com a Internet iniciou-se a separação da lógica do negócio da interface do usuário Usuários

da Internet precisam acessar aplicativos sem instalar código em suas máquinas Eles têm

acesso aos aplicativos através de navegadores Web.

Como a lógica do negócio não reside mais na máquina do usuário o cliente é denominado

Cliente Magro (Thin)

– Introdução

Page 4: Aula 10 - FACOMbacala/TEC4/JSPStruts.pdf · 2007-11-30 · 10.4 SEL6303 – Sistemas de Informação Web JSP/Servlets – Uma Camada Banco de Dados Lógica de Apresentação Lógica

© JCFJ

10.7S

EL

6303

–S

iste

mas

de

Info

rmaç

ão W

ebJSP/Servlets –

Três CamadasCom três camadas separa-se efetivamente cada uma das lógicas de funcionalidades em camadas diferentes o Cliente Gordo torna-se Magro a lógica de apresentação está separada.

A lógica de apresentação estáseparada em uma camadalógica e física própria Diferentes tipos de lógica de apresentação podem ser utilizadas (HTML, interface gráfica, etc.) para acessar a lógica de negócio.

Este tipo de arquitetura de três camadas tornou-se o modelo utilizado na maiorparte das Aplicações Web A separação em camadas torna os sistemas mais flexíveis em relação às alterações que podem ser feitas

A separação em camadas físicas diferentes pode ainda oferecer uma maior flexibilidade em relação ao hardware pois pode permitir a separação da aplicação em máquinas diferentes.

Como a lógica de apresentação está em sua própria camada o código específico desta camada pode ser escrito por especialistas em apresentação que não precisam conhecer a tecnologia utilizada nas outras duas camadas.

Banco deDados

Lógica deAcesso a Dados

Lógica deApresentação

– Introdução

Lógica deNegócio

© JCFJ

10.8

SE

L63

03 –

Sis

tem

as d

e In

form

ação

Web

JSP/Servlets –

O Padrão MVC e JSP – I [6]

O Padrão MVC (Model, View, Controller) tem origem no Framework MVC de Smalltalk Em aplicações Web os termos MVC e Model 2 são normalmente intercambiáveis.

MVC e Model 2 são normalmente utilizados para descrever a estrutura de uma aplicação Struts.

Aplicações Web baseadas em JSP normalmente são divididas em aplicações JSP de arquitetura Model 1 e Model 2 Aplicações com Model 1 normalmente são apropriadas para sistemas simples.

Em aplicações baseadas no padrão MVC o fluxo de controle é mediado por um Controlador que delega requisições a gerenciadores específicos Os gerenciadores estão ligados ao modelo e cada gerenciador funciona como um adaptador entre a requisição e o modelo.

O Modelo representa ou encapsula o estado ou a lógica de um negócio.

Após o modelo ter operado, o controle é reenviado pelo controlador à visão apropriada O encaminhamento pode ser determinado pelo controlador através de um mapeamento.

– Introdução

Page 5: Aula 10 - FACOMbacala/TEC4/JSPStruts.pdf · 2007-11-30 · 10.4 SEL6303 – Sistemas de Informação Web JSP/Servlets – Uma Camada Banco de Dados Lógica de Apresentação Lógica

© JCFJ

10.9S

EL

6303

–S

iste

mas

de

Info

rmaç

ão W

ebJSP/Servlets –

O Padrão MVC e JSP – II [5]

Aplicações complexas utilizando Model 1 normalmente tem uma grande quantidade de scriptlets com código Java presente nas páginas JSP O desenvolvedor deve conhecer Java.

Navegador

JSP

Javabean

Servidor de Aplicação Fontes de Dados

1

234

– Introdução

Arquitetura Model 1

© JCFJ

10.10

SE

L63

03 –

Sis

tem

as d

e In

form

ação

Web

JSP/Servlets –

O Padrão MVC e JSP – III [5]

Aplicações que utilizam Model 2 utilizam Servlets e JSP tirando vantagem das melhores características de cada uma das tecnologias O servlet funcionará como o controlador da aplicação criando também todos os objetos e beans utilizados pelas páginas JSP.

Arquitetura Model 2

Navegador

Servlet(Controler)

Javabean(Model)

Servidor de Aplicação Fontes de Dados

1

23

4JSP(View)

instancia

5

– Introdução

Page 6: Aula 10 - FACOMbacala/TEC4/JSPStruts.pdf · 2007-11-30 · 10.4 SEL6303 – Sistemas de Informação Web JSP/Servlets – Uma Camada Banco de Dados Lógica de Apresentação Lógica

© JCFJ

10.11S

EL

6303

–S

iste

mas

de

Info

rmaç

ão W

ebJSP/Servlets –

Apache Struts

Struts é um Framework que pode ser utilizado para o desenvolvimento de aplicações

JSP utilizando a arquitetura MVC oferecendo:

– Um Servlet que deve ser utilizado como controlador sendo configurável através de um

documento XML Este servlet irá encaminhar as requisições a classes (Action Classes)

que devem ser criadas pelo desenvolvedor para realizar o processamento.

– Um coleção de bibliotecas de tags (taglibs) que podem ser utilizadas no desenvolvimento da

aplicação evitando atualização de código nas páginas e facilitando o desenvolvimento.

– Classes auxiliares que auxiliam na implementação de diferentes operações corriqueiras no

desenvolvimento de Sistemas Web Java, como suporte a tratamento de XML,

preenchimento de Javabeans ou gerenciamento externo do conteúdo de interface de usuário

(diversas línguas).

– Introdução

© JCFJ

10.12

SE

L63

03 –

Sis

tem

as d

e In

form

ação

Web

JSP/Servlets –

Apache Struts - ComponentesModel (M): geralmente o modelo é implementado através de um objeto Java (um Javabean).

View (V): normalmente a visão é implementada através de uma página HTML ou JSP.

Controller (C): é implementado por um objeto de org.apache.struts.action.ActionServlet ou de uma sub-classe.

Classes Auxiliares: Struts oferece um conjunto de classes que auxiliam no desenvolvimento:

– FormBeans: utilizada no encapsulamento de dados de formulários HTML Ligado ao Modelo.

– ActionErrors: utilizada no encapsulamento de dados de erros Ligada ao Modelo.

– Tags Personalizadas (Custon Tags): encapsulam a lógica para a apresentação Ligada àVisão.

– Actions: implementam a lógica dos comandos Ligada ao Controle.

– ActionForward: utilizadas no encapsulamento da lógica de redirecionamento Ligada ao Controle.

– Introdução

Page 7: Aula 10 - FACOMbacala/TEC4/JSPStruts.pdf · 2007-11-30 · 10.4 SEL6303 – Sistemas de Informação Web JSP/Servlets – Uma Camada Banco de Dados Lógica de Apresentação Lógica

© JCFJ

10.13S

EL

6303

–S

iste

mas

de

Info

rmaç

ão W

ebJSP/Servlets –

Apache Struts – O Modelo [4]

O modelo de um sistema baseado no padrão MVC pode normalmente ser dividido em dois subsistemas Estado interno (substantivos) do sistema e as Ações (verbos) que levam a mudança de estados.

Diversas aplicações representam o estado interno por Javabeans As propriedades dos beans representam os detalhes do estado do sistema Dependendo da complexidade do sistema os beans podem estar conectados ou não a bancos de dados para persistência dos dados.

Grandes aplicações normalmente serão desenvolvidas com beans que oferecem métodos que irão realizar a manipulação da informação mantida pelos beans ou utilizando SessionEnterprise Java Beans (J2EE).

Aplicações mais simples podem ter as operações do sistema inseridas em Classes Action que são parte da camada Controle Opção útil quando a lógica for simples ou quando a reutilização da lógica não for necessária.

A camada Modelo de uma aplicação MVC normalmente está ligada a uma tecnologia específica Struts permite que se utilize diversas tecnologias em comunicação com o modelo, como JDBC, Enterprise Java Beans, Object Relational Bridge, etc.

Embora a lógica possa ser inserida no controle devido a simplicidade de um sistema, recomenda-se fortemente que a Lógica da Aplicação (como as coisas são feitas)

esteja separada do papel desempenhado pelas Classes Action (o quê fazer).

– Introdução

© JCFJ

10.14

SE

L63

03 –

Sis

tem

as d

e In

form

ação

Web

JSP/Servlets –

Apache Struts – A Visão [4]

Em um sistema baseado no padrão MVC a parte Visão é normalmente construída utilizando a

tecnologia de JavaServer Pages – JSP Possibilidade de utilização de texto estático HTML

(ou XML) com a inserção de conteúdo dinâmico baseado na interpretação de tags especiais.

O ambiente JSP inclui uma série de tags de ação (<jsp:useBean>) e oferece a possibilidade

de desenvolvimento e utilização de tags personalizadas.

O Framework Struts inclui uma série de Bibliotecas de Tags que facilitam a criação de

interfaces de usuário que podem ser facilmente transformadas para se adaptar a diferentes

línguas Estas taglibs interagem facilmente com beans ActionForm ActionForm

capturam e validam as entradas de um formulário.

As Taglibs Struts oferecem suporte a camada Visão de aplicações MVC Algumas podem

acessar objetos da camada de Controle e outras podem ser utilizadas no desenvolvimento de

aplicações Outras Taglibs incluindo JSTL podem ser utilizadas com Struts Templates

Velocity (ver www.apache.org) e XSLT também podem ser utilizadas.

– Introdução

Page 8: Aula 10 - FACOMbacala/TEC4/JSPStruts.pdf · 2007-11-30 · 10.4 SEL6303 – Sistemas de Informação Web JSP/Servlets – Uma Camada Banco de Dados Lógica de Apresentação Lógica

© JCFJ

10.15S

EL

6303

–S

iste

mas

de

Info

rmaç

ão W

ebJSP/Servlets –

Apache Struts – O Controlador [4]

Em um sistema baseado no padrão MVC o Controlador deve receber as requisições dos clientes (normalmente um usuário utilizando um navegador), decidir que função da lógica de negócios deve ser realizada para então delegar a responsabilidade de produzir a interface do usuário a um componente da Visão.

Em Struts o componente primário de um Controlador é um servlet da classe ActionServletEste servlet é configurado definindo um conjunto de ActionMapping Um

ActionMapping define o caminho para um nome totalmente qualificado de uma ActionClass Todas as ações são subclasses de org.apache.struts.action.ActionActions encapsulam chamadas para classes que implementam a lógica de negócios,

interpretam os resultados e finalmente despacham o controle para o componente apropriado da Visão que irá cria a resposta.

Struts permite que se utilize o modelo de comando na aplicação A aplicação chama a “Página de Menu” sem saber a localização da página JSP específica Real separação entre a lógica de controle (o quê fazer) da lógica de apresentação (como a informação é apresentada).

O Framework Struts fornece diversos componentes que implementam a camada Controle de uma aplicação MVC Servlet de Controle, possibilidade de utilizar gerenciadores derequisições desenvolvidos pelos usuários e diversos objetos de suporte.

– Introdução

© JCFJ

10.16

SE

L63

03 –

Sis

tem

as d

e In

form

ação

Web

JSP/Servlets –

Funcionamento – I [4]

Os componentes chave de uma aplicação Struts são [4]:–ActionServlet: é o controlador da aplicação despachando as ações a serem executadas.

–Action: é um classe que deve ser estendida por cada ação (comando do modelo de comandos) a ser implementada.

–struts-config.xml: arquivo que define os mapeamentos entre as ações as páginas os beans e os dados.

JSP

ActionServlet

FormBean

Bean

Action

Dadosou DAO

HTTP

delega

despacha

preenche

– Introdução

Page 9: Aula 10 - FACOMbacala/TEC4/JSPStruts.pdf · 2007-11-30 · 10.4 SEL6303 – Sistemas de Informação Web JSP/Servlets – Uma Camada Banco de Dados Lógica de Apresentação Lógica

© JCFJ

10.17S

EL

6303

–S

iste

mas

de

Info

rmaç

ão W

ebJSP/Servlets –

Funcionamento – II [5]

Quando inicializado, o Controlador analisa o arquivo de configuração (struts-config.xml) e o utiliza para criar outros objetos da camada de controle O conjunto destes objetos representa a Configuração Struts que define entre outras coisas os ActionsMappings (org.apache.struts.action.ActionMappings) da aplicação.O servlet de controle Struts consulta os ActionMappings e encaminha as requisições HTTP aos outros componentes do Framework Requisições podem ser encaminhadas para JavaServer Pages ou subclasses Action (org.apache.struts.action.Action) criadas pelo desenvolvedor Os mapeamentos auxiliam o Controlador a transformar requisições HTTP em ações Um ActionMapping individual (org.apache.struts.action.ActionMapping) contem normalmente as seguintes propriedades:

a. O caminho da requisição (request path).b. O tipo do objeto (Subclasse de Action) que age sobre a requisiçãoc. Outras propriedades necessárias.

O objeto Action pode manipular a requisição e responder ao cliente (normalmente um navegador) ou indicar que o controle deve ser encaminhado a outro componente Objetos Action têm acesso ao servlet de controle e consequentemente a seus métodos Quando um objeto encaminha o processamento ele pode encaminhar objetos (Javabeans) colocando-os nos contextos compartilhados por servlets Java.

– Introdução

© JCFJ

10.18

SE

L63

03 –

Sis

tem

as d

e In

form

ação

Web

JSP/Servlets –

Funcionamento – III [5]

continuação... Ex.: um objeto Action pode criar um bean responsável por manter uma

cesta de compras, adicionar itens a cesta, colocar o bean no contexto da sessão e então encaminhar o controle para outro mapeamento.

Em uma aplicação Struts a maior parte da Lógica de Negócio é representada utilizando-se Javabeans Uma Action pode acessar as propriedades do Javabeans sem conhecer seu funcionamento Devido ao encapsulamento implementado, os objetos Action podem se

concentrar no tratamento de erros e no encaminhamento do controle.

Javabeans também podem ser utilizados para manipular formulários de entrada de dados pPde-se definir um conjunto de Beans dedicados ao tratamento das entradas (Form Beans) Estes beans são subclasses de ActionForm (org.apache.struts.action.ActionForm)

Objetos ActionForm facilitam o armazenamento e validação dos dados fornecidos em

formulários Eles são automaticamente salvos em um dos contextos padrão e podem ser utilizados por outros objetos como Action ou páginas JSP.

Um bean de formulário (Form Beans) pode ser utilizado por uma página JSP para coletar dados do usuário, por um objeto Action para validar os dados e então novamente pela página

JSP para reapresentar os dados Caso erros ligados ao preenchimento do formulário apareçam Struts fornece um mecanismo para a apresentação de mensagens de erros.

– Introdução

Page 10: Aula 10 - FACOMbacala/TEC4/JSPStruts.pdf · 2007-11-30 · 10.4 SEL6303 – Sistemas de Informação Web JSP/Servlets – Uma Camada Banco de Dados Lógica de Apresentação Lógica

© JCFJ

10.19S

EL

6303

–S

iste

mas

de

Info

rmaç

ão W

ebJSP/Servlets –

Funcionamento – IV [5]

A criação de um ActionForm é “gerenciada” por ActionFormBeans

ActionFormBeans (org.apache.struts.action.ActionFormBeans) compõem

uma coleção de objetos descritores (descriptor objetcs) que são usados para criar instâncias de objetos ActionForm em tempo de execução Quando um mapeamento necessita de um

ActionForm o servlet controlador verifica os descritores e cria um objeto do tipo

especificado A seguinte seqüência de eventos ocorre quando há uma chamada por uma mapeamento que usa um ActionForm:

– O servlet controlador ou recupera ou cria uma instância de um bean ActionForm;

– O servlet de controle passa o bean para um objeto Action;

– Se a requisição estiver sendo usada para submeter uma página de entrada, o objeto Action pode

examinar os dados Se necessário, os dados podem ser enviados de volta ao formulário de entrada

com uma lista de mensagens a serem apresentadas na página (validação dos dados), caso contrário os

dados podem ser enviados a camada de negócio.

– Se a requisição estiver sendo utilizada para criar uma página de entrada, o objeto Action pode

popular o bean com quaisquer dados que sejam necessários à página Struts fornece tags

personalizados que podem ser utilizadas com esta finalidade As páginas JSP não necessitam

conhecer nada da aplicação, somente o nome dos campos e para onde enviar os dados.

– Introdução

© JCFJ

10.20

SE

L63

03 –

Sis

tem

as d

e In

form

ação

Web

JSP/Servlets –

Funcionamento – V [5]

Em aplicações simples um objeto Action pode algumas vezes gerenciar a lógica de negócio

associada com a requisição Entretanto, na maior parte dos casos um objeto Action deve

invocar outro objeto, normalmente um Javabean, para implementar a lógica de negócio

Deste modo o objeto Action pode se concentrar no tratamento de erros e no fluxo de controle

da aplicação.

Para permitir reutilização em diferentes plataformas, Javabeans que se ocupam com a lógica de

negócios não devem se referir a nenhum objeto da aplicação Web Os objetos Action

devem traduzir os detalhes solicitados pela requisição HTTP para passá-los aos beans da lógica

de negócio como variáveis Java regulares Ex.: uma aplicação de banco de dados:

– Um bean da lógica de negócio deve se conectar ao banco de dados e realizar as consultas;

– O bean da lógica de negócio retorna o resultado para o objeto Action;

– O objeto Action armazena o resultado em um Form Bean na requisição;

– A página JSP apresenta o resultado em uma formulário HTML.

– Introdução

Page 11: Aula 10 - FACOMbacala/TEC4/JSPStruts.pdf · 2007-11-30 · 10.4 SEL6303 – Sistemas de Informação Web JSP/Servlets – Uma Camada Banco de Dados Lógica de Apresentação Lógica

© JCFJ

10.21S

EL

6303

–S

iste

mas

de

Info

rmaç

ão W

ebJSP/Servlets –

Funcionamento - Resumo

1. Usuário clica em um link em uma página HTML2. Servlet controlador recebe a requisição, verifica as

informações de mapeamento em struts-config.xml e encaminhao processamento para uma ação

3. A ação faz uma chamado para um serviço da camada de modelo.4. O serviço faz uma chamada aos dados (banco de dados) e os

dados solicitados são retornados. 5. O Serviço retorna a ação. 6. A ação encaminha o processamento a um recurso da camada

Visão (uma página JSP) 7. O Servlet verifica o mapeamento do recurso solicitado e

encaminha o processamento a página JSP. 8. O arquivo JSP é invocado e enviado ao navegador como HTML. 9. Ao usuário é apresentada uma nova página HTML no navegador.

http://www.exadel.com/tutorial/struts/5.2/guess/strutsintro.html

© JCFJ

10.22

SE

L63

03 –

Sis

tem

as d

e In

form

ação

Web

JSP/Servlets –

Utilização de StrutsO Framework Struts foi criado por Craig R. McClanaham e doado à Fundação Apache em

2000 Ele pode ser obtido em http://jakarta.apache.org/struts ou diretamente

em http://ftp.pucpr.br/apache/jakarta/struts/binaries/jakarta-

struts-1.1.zip O arquivo obtido deve ser descompactado em um diretório qualquer

(para manter o conjunto talvez no diretório raiz das aplicações Apache).

Todos os arquivos .jar devem ser copiados para o diretório WEB-INF/lib da aplicação ou

para TOMCAT_HOME/lib estando neste caso disponíveis para todas as aplicações.

Todos os arquivos .tld (taglibs) devem ser copiados para o diretório WEB-INF/ da

aplicação.

Tendo copiado os .jar e os .tld para os diretórios apropriados se pode começar a

desenvolver uma aplicação com Struts Inicialmente este procedimento será realizado para

desenvolver uma aplicação com os mesmos plugins utiliziados até agora Crie um diretório

Aula10, no Eclipse crie uma aplicação Web no diretório Aula10 criado e copie os arquivos para

os locais apropriados.

Page 12: Aula 10 - FACOMbacala/TEC4/JSPStruts.pdf · 2007-11-30 · 10.4 SEL6303 – Sistemas de Informação Web JSP/Servlets – Uma Camada Banco de Dados Lógica de Apresentação Lógica

© JCFJ

10.23S

EL

6303

–S

iste

mas

de

Info

rmaç

ão W

ebJSP/Servlets –

Importação de struts.jarPara que a aplicação possa utilizar as funcionalidades do Framework Struts é necessário fazer a declaração do arquivo struts.jar nas bibliotecas do projeto Clicar sobre Aula10/Properties e então selecionar Add External JAR... e localizar e importar o arquivo struts.jar.

© JCFJ

10.24

SE

L63

03 –

Sis

tem

as d

e In

form

ação

Web

JSP/Servlets –

A VisãoInicialmente se irá criar a página JSP responsável pela comunicação com o usuário Esta página deve ser criada em Aula10.

aula10.jsp

<%@ taglib uri="/bean" prefix="bean" %><%@ taglib uri="/html" prefix="html" %><%@ taglib uri="/logic" prefix="logic" %><%@ taglib uri="/tags" prefix="tag" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>Pedidos via Struts.</title>

</head>

<body><h1>Faça o seu pedido!</h1><html:errors/><tag:type/><tag:items/>

<html:form action="Aula10_02.do"><table>

Importação das taglibs do Struts.

Importação de uma taglibque será desenvolvida.

Tag personalizada de Struts que insere mensagens de erro relativas ao preenchimento do formulário (T26).

Tags personalizada que serão desenvolvidas. type armazena em um atributo de nome type os diferentes tipos de refeições e items os diferentes conteúdo das refeições (T33 – T34).

Tag que cria o formulário onde os dados serão apresentados.

Em Struts, ações com a extensão .dosão automaticamente mapeadas (web.xml) para o servlet controlador.

Page 13: Aula 10 - FACOMbacala/TEC4/JSPStruts.pdf · 2007-11-30 · 10.4 SEL6303 – Sistemas de Informação Web JSP/Servlets – Uma Camada Banco de Dados Lógica de Apresentação Lógica

© JCFJ

10.25S

EL

6303

–S

iste

mas

de

Info

rmaç

ão W

ebJSP/Servlets –

A Visãoaula10.jsp – continuação...

<table><tr>

<td align="LEFT" valign="TOP"><bean:message key="items"/><br /><logic:iterate id="items1" name="items">

<html:multibox property="items"><%= items1 %>

</html:multibox><%= items1 %> <br />

</logic:iterate></td><td align="LEFT" valign="TOP">

<bean:message key="type"/><br /><html:select property="type">

<html:options name="type"/></html:select></td>

</tr><tr><td align="LEFT">

<br /><bean:message key="email"/><html:text property="email"/>

</td><tr>

</table> <br /><html:submit value="Fazer Pedido"/></html:form></body>

</html>

– Utilização – A Visão

Utilizando a taglib bean recupera do arquivo ApplicationResources.properties a chave de nome items a ser apresentada (Ts 28-30)

Utilizando a taglib logic realiza uma iteração para criar uma série de elementos checkbox com os valores estabelecidos pelo tag <tag:items> (T31 – T32).

Utilizando a taglib html define uma série de elementos checkbox (T25).

Utilizando as tag select e options da taglib htmlcria uma Lista de Seleção com os valores criados pela tag <tag:type>. (T29)

Recupera do arquivo ApplicationResources.properties a chave de nome type a ser apresentada (T28).

Recupera do arquivo ApplicationResources.properties a chave de nome email a ser apresentada e utilizando a tag <html:text> cria a área para entrada do e-mail (T28).

Utilizando a tag <html:submit> cria o botão de envio do formulário (T30).

© JCFJ

10.26

SE

L63

03 –

Sis

tem

as d

e In

form

ação

Web

JSP/Servlets –

A Visão

Page 14: Aula 10 - FACOMbacala/TEC4/JSPStruts.pdf · 2007-11-30 · 10.4 SEL6303 – Sistemas de Informação Web JSP/Servlets – Uma Camada Banco de Dados Lógica de Apresentação Lógica

© JCFJ

10.27S

EL

6303

–S

iste

mas

de

Info

rmaç

ão W

ebJSP/Servlets –

A Taglib <html> de Struts – I

Cria um controle do tipo checkbox com diversos checkbox. multibox

Cria uma opção de select.option

Cria um conjunto de opções de select.options

Cria um controle do tipo password.password

Cria um elemento HTML <html>.html

Cria um controle do tipo image.image

Cria um controle do tipo img.img

Cria uma âncora ou um hyperlink HTML.link

Apresenta mensagens de erro.errors

Cria um controle do tipo file.file

Define um formulário de entrada de dados.form

Cria um controle do tipo hidden.hidden

Cria um controle do tipo checkbox.checkbox

Cria um botão cancel.cancel

Cria um controle do tipo button.button

Cria um elemento HTML <base>.base

FuncionalidadeNome da Tag

– Utilização – A Visão

Esta taglib contém tags usadas na criação de formulário Struts e também na criação de interfaces HTML.

© JCFJ

10.28

SE

L63

03 –

Sis

tem

as d

e In

form

ação

Web

JSP/Servlets –

A Taglib <html> de Struts – II

Cria um botão submit.submit

Cria um controle do tipo text.text

Cria um controle do tipo textarea.textarea

Cria um controle do tipo select.select

Cria uma URI.rewrite

Cria um botão reset.reset

Cria um controle do tipo radio.radio

FuncionalidadeNome da Tag

Atributos de <html:errors>

Nome do property para o qual as mensagens de erro serão apresentadas. O default é apresentar todas as mensagens.

property

Nome do bean no escopo onde as mensagens de erro foram armazenadas.

name

Atributo da sessão para a locale (língua) das mensagens a serem apresentadas.

locale

Especifica o contexto do servlet a ser usado.bundle

FuncionalidadeNome da Atributo

– Utilização – A Visão

Page 15: Aula 10 - FACOMbacala/TEC4/JSPStruts.pdf · 2007-11-30 · 10.4 SEL6303 – Sistemas de Informação Web JSP/Servlets – Uma Camada Banco de Dados Lógica de Apresentação Lógica

© JCFJ

10.29S

EL

6303

–S

iste

mas

de

Info

rmaç

ão W

ebJSP/Servlets –

A Taglib <html> de Struts – IIIAtributos de <html:form>

Nome totalmente qualificado da classe do bean que deve ser criada se o bean ainda não existir.

type

Um estilo CSS a ser aplicado ao formulário.style

A classe do estilo CSS a ser aplicada ao formulário.styleClass

O identificador a ser atribuido ao formulário HTML.styleId

Frame destino ao qual o formulário será submetido.target

O nome do bean no escopo da requisição ou sessão do qual as propriedades serão usadas para armazenar os dados do formulário.

name

Tratador de evento Javascript chamado quando o botão reset é pressionado.onreset

Tratador de evento Javascript chamado quando o botão submit é pressionado.onsubmit

O escopo do bean associado ao formulário (request ou session).scope

O método HTTP (GET ou POST) a ser utilizado na submissão.method

O nome de um campo ao qual o foco vai ser inicialmente usando uma função Javascript.

focus

A codificação a ser usada para enviar o conteúdo se o método for POST.enctype

URL a qual o formulário será submetido.action

FuncionalidadeNome do Atributo

– Utilização – A Visão

© JCFJ

10.30

SE

L63

03 –

Sis

tem

as d

e In

form

ação

Web

JSP/Servlets –

O Arquivo ApplicationResources.properties

Este arquivo é utilizado para armazenar as mensagens utilizadas na aplicação, inclusive mensagens de erro.

As mensagens declaradas neste arquivo podem ser manipuladas em uma página JSP com o auxílio da taglib struts-bean do Struts.

– Utilização – A Visão

ApplicationResource.properties

email=<b>Seu e-mail:</b>type=<b>Tipo:</b>items=<b>Item:</b>

error.noemail=<li><font color="red">Por favor, forneça seu endereço e-mail.</font></li>error.notype=<li><font color="red">Por favor, selecione um tipo.</font></li>error.noitems=<li><font color="red">Por favor, selecione ao menos um item.</font></li>

errors.header=<font color="red">Por favor, corrija o(s) seguinte(s) erro(s):<ul>errors.footer=</ul>

Declaração das mensagens (chaves) a serem utilizadas.

Declaração das mensagens de erro a serem utilizadas

Cabeçalho e rodapé da página de erro que são automaticamente utilizados (obrigatórios).

Page 16: Aula 10 - FACOMbacala/TEC4/JSPStruts.pdf · 2007-11-30 · 10.4 SEL6303 – Sistemas de Informação Web JSP/Servlets – Uma Camada Banco de Dados Lógica de Apresentação Lógica

© JCFJ

10.31S

EL

6303

–S

iste

mas

de

Info

rmaç

ão W

ebJSP/Servlets –

A Taglib <bean> de Struts – IEsta taglib contém tags úteis para o acesso a beans e suas propriedades e também para definir novos beans que são acessíveis ao restante da página através de variáveis de script e atributos com escopo page.

Cria um bean contendo o número de elementos.size

Cria um objeto de configuração Struts e torna-o disponível como um bean.struts

Escreve o valor de uma propriedade de um bean no objeto JspWriter.write

Escreve a string de uma mensagem “internacionalizada” na resposta.page

Cria uma variável de script usando o valor de um parâmetro de request.parameter

Carrega um recurso de uma aplicação Web e torna-o disponível como um bean.resource

Carrega o objeto response e torna-o disponível como um bean.include

Cria uma variável de script usando o valor fornecido por um cabeçalho request.header

Cria uma variável de script usando um valor fornecido pela propriedade de um bean.define

Cria uma variável de script usando um valor fornecido por um cookie.cookie

FuncionalidadeNome da Tag

– Utilização – A Visão

© JCFJ

10.32

SE

L63

03 –

Sis

tem

as d

e In

form

ação

Web

JSP/Servlets –

A Taglib <bean> de Struts – II

Atributos de <bean:xxxxx>

Identifica o escopo JSP (page, request, session ou application) onde Struts irá procurar o bean.

scope

Define o nome de uma propriedade de um bean JSP identificado por name.property

Especifica o nome com o qual um bean será manipulado.name

Especifica uma chave em um arquivo de propriedades.key

Especifica a variável/atributo de script que será criado pela tag.id

FuncionalidadeNome do Atributo

– Utilização – A Visão

Page 17: Aula 10 - FACOMbacala/TEC4/JSPStruts.pdf · 2007-11-30 · 10.4 SEL6303 – Sistemas de Informação Web JSP/Servlets – Uma Camada Banco de Dados Lógica de Apresentação Lógica

© JCFJ

10.33S

EL

6303

–S

iste

mas

de

Info

rmaç

ão W

ebJSP/Servlets –

A Taglib <logic> de Struts – IEsta taglib contém tags que são úteis na manipulação da geração condicional de texto de saída, na realização de iterações (loops) sobre objetos de coleções para a geração repetitiva de texto de saída bem como para a gerência do fluxo da aplicação.

Realiza uma iteração sobre outros elementos.iterate

Verifica se o valor de um atributo é diferente de uma String.notMatch

“Forward” uma requisição.forward

Redireciona uma requisição.redirect

Compara o valor de um atributo contra um valor1 para verificar se o mesmo é maior que o valor1

greaterThan

Compara o valor de um atributo contra um valor1 para verificar se o mesmo émenor que o valor1

lessThan

Verifica se o valor de um atributo é igual a uma String.match

Compara o valor de um atributo contra um valor1 para verificar se o mesmo émenor ou igual ao valor1

lessEqual

Compara o valor de um atributo contra um valor1 para verificar se o mesmo é maior ou igual ao valor1

greaterEqual

Compara o valor de um atributo contra um valor1 para verificar se não são iguais.notequal

Compara o valor de um atributo contra um valor1 para verificar se são iguais.equal

FuncionalidadeNome da Tag

– Utilização – A Visão

© JCFJ

10.34

SE

L63

03 –

Sis

tem

as d

e In

form

ação

Web

JSP/Servlets –

A Taglib <logic> de Struts – II

Atributos de <logic:xxxxx>

O índice de início a partir do qual a iteração deve ser começada.offset

Nome de uma propriedade de um bean cujo método get retorna a coleção sobre a qual a iteração vai ser realizada.

property

Identifica o escopo JSP (page, request, session ou application) onde Struts irá procurar o bean.

scope

Nome totalmente qualificado da classe Java do tipo de dado fornecido pelo bean JSP.

type

O Nome do bean JSP contendo a coleção sobre a qual vai ser feita a iteração.name

Define o número máximo de elementos sobre os quais deve ser feita a iteração em uma página.

length

O nome de um bean JSP com escopo de página que contém o índice da coleção em cada iteração.

indexId

O nome de um bean JSP com escopo de página que contém o elemento corrente de uma coleção em cada iteração.

id

Uma coleção sobre a qual será feita uma iteração.collection

FuncionalidadeNome do Atributo

– Utilização – A Visão

Page 18: Aula 10 - FACOMbacala/TEC4/JSPStruts.pdf · 2007-11-30 · 10.4 SEL6303 – Sistemas de Informação Web JSP/Servlets – Uma Camada Banco de Dados Lógica de Apresentação Lógica

© JCFJ

10.35S

EL

6303

–S

iste

mas

de

Info

rmaç

ão W

ebJSP/Servlets –

A Taglib Personalizada CriadaProcedimento semelhante ao apresentado na Aula 9 será utilizado para criar a Biblioteca de Tags personalizada que será utilizada na aplicação Deve-se criar a Classe Gerenciadora da Tag, Criar o Arquivo tld da taglib e declará-la no arquivo web.xml da aplicação.

aula10.tld<?xml version="1.0"?><!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN"

"http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">

<taglib><tlibversion>1.0</tlibversion><jspversion>1.2</jspversion><shortname>StrutsExample</shortname><info>

Suporta o Exemplo Struts</info>

<tag><name>type</name><tagclass>beans.Type</tagclass><bodycontent>empty</bodycontent>

</tag>

<tag><name>items</name><tagclass>beans.Items</tagclass><bodycontent>JSP</bodycontent>

</tag></taglib>

Declaração da tag type que écontrolada pela classe Java Typeque está no pacote tags.

Declaração da tag item que écontrolada pela classe Java Items que está no pacote tags.

– Utilização – A Visão

© JCFJ

10.36

SE

L63

03 –

Sis

tem

as d

e In

form

ação

Web

JSP/Servlets –

As Classes Gerenciadoras das Tags

Type.java

package tags;

import javax.servlet.jsp.tagext.TagSupport;

public class Type extends TagSupport {public int doStartTag() {

String[] typeArray = {"", "Pizza", "Calzone", “Sanduíche"};pageContext.setAttribute("type", typeArray);return SKIP_BODY;

}}

O gerenciador cria uma lista com os diferentes tipos de comida e a armazena no contexto como o atributo type que pode ser utilizado pelas tags Struts.

– Utilização – A Visão – A Taglib Personalizada Criada

Items.java

package tags;

import javax.servlet.jsp.tagext.TagSupport;

public class Items extends TagSupport {public int doStartTag() {

String[] itemsArray = {"Lingüiça", "Queijo", "Calabresa", "Carne", "Pimenta"};pageContext.setAttribute("items", itemsArray);return SKIP_BODY;

}

}

O gerenciador cria uma lista com os itens dos diferentes tipos de comida e a armazena no contexto como o atributo items que pode ser utilizado pelas tags Struts.

Page 19: Aula 10 - FACOMbacala/TEC4/JSPStruts.pdf · 2007-11-30 · 10.4 SEL6303 – Sistemas de Informação Web JSP/Servlets – Uma Camada Banco de Dados Lógica de Apresentação Lógica

© JCFJ

10.37S

EL

6303

–S

iste

mas

de

Info

rmaç

ão W

ebJSP/Servlets –

O Arquivo web.xmlComo em qualquer aplicação Web em web.xml mapeamentos devem ser declarados.

web.xml<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE web-app

PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN""http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">

<web-app><servlet><servlet-name>action</servlet-name><servlet-class>org.apache.struts.action.ActionServlet</servlet-class><init-param><param-name>application</param-name><param-value>ApplicationResources</param-value>

</init-param><load-on-startup>2</load-on-startup>

</servlet>

<servlet-mapping><servlet-name>action</servlet-name><url-pattern>*.do</url-pattern>

</servlet-mapping>

Definição de um servlet de nome action que corresponde ao servlet ActionServlet que é o servlet Controlador de Struts.

Mapeamento da extensão .do para o servlet action.

– Utilização

© JCFJ

10.38

SE

L63

03 –

Sis

tem

as d

e In

form

ação

Web

JSP/Servlets –

O Arquivo web.xml

web.xml – continuação...<taglib><taglib-uri>/bean</taglib-uri><taglib-location>/WEB-INF/struts-bean.tld</taglib-location>

</taglib>

<taglib><taglib-uri>/html</taglib-uri><taglib-location>/WEB-INF/struts-html.tld</taglib-location>

</taglib>

<taglib><taglib-uri>/logic</taglib-uri><taglib-location>/WEB-INF/struts-logic.tld</taglib-location>

</taglib>

<taglib><taglib-uri>/tag</taglib-uri><taglib-location>/WEB-INF/aula10.tld</taglib-location>

</taglib></web-app>

Declaração das taglibs de Strutse da taglib que será criada.

– Utilização

Page 20: Aula 10 - FACOMbacala/TEC4/JSPStruts.pdf · 2007-11-30 · 10.4 SEL6303 – Sistemas de Informação Web JSP/Servlets – Uma Camada Banco de Dados Lógica de Apresentação Lógica

© JCFJ

10.39S

EL

6303

–S

iste

mas

de

Info

rmaç

ão W

ebJSP/Servlets –

O ControladorURLs com o padrão “.do ” vão ser todas conectadas a um servlet ActionServlet do Struts de nome action (definição no arquivo web.xml).

Este servlet age como o Controlador da aplicação É necessário fornecer um Adaptadorque irá funcionar com o controlador Este adaptador é baseado na classe Struts Action.

Um objeto action é um adaptador entre o conteúdo de uma requisição de entrada e a lógica

de negócio que será executada para fazer o tratamento da entrada O controlador iráselecionar um objeto Action apropriado para cada requisição e chamar o método performdeste objeto.

A conexão entre o Controlador (um objeto ActionServlet) e o adaptador Action édeclarada no arquivo WEB-INF\struts-config.xml.

Neste exemplo de utilização, o adaptador Action é representado pela classe Aula10_02.java e a o bean que implementa o modelo pela classe Aula10_03.java

O bean Aula10_03.java deve ser declarado com o elemento <form-beans> no arquivo struts-config.xml Deve-se também registrar o adaptador Aula10_02.java no arquivo struts-config.xml.

– Utilização

© JCFJ

10.40

SE

L63

03 –

Sis

tem

as d

e In

form

ação

Web

JSP/Servlets –

O Arquivo struts-config.xml

– Utilização – O Controlador

struts-config.xml

<?xml version="1.0"?>

<!DOCTYPE struts-config PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 1.0//EN""http://jakarta.apache.org/struts/dtds/struts-config_1_0.dtd">

<struts-config><form-beans><form-bean name="Aula10_03" type="beans.Aula10_03"/>

</form-beans>

<action-mappings><action path="/Aula10_02"type="beans.Aula10_02"name="Aula10_03"scope="request"input="/aula10_01.jsp"><forward name="OK" path="/aula10_05.jsp"/>

</action></action-mappings>

</struts-config>

Declaração do bean que implementa o modelo.

Quando um usuário enviar dados para Aula10_02.do, o servlet de controle irá enviar um objeto bean do modelo totalmente inicializado(Aula10_03) para o adaptador Aula10_02 desta maneira o código tem acesso aos dados do modelo.

Adaptador.

Se o código no adaptador decidir que os dados passados a eles estão corretos, ele diz ao controlador para encaminhar (forward) os resultados para a visão JSP que é representada pela página aula10_05.jsp. Caso erros ocorram, o processamento será encaminhado a página de entrada, aula10_01.jsp.

Page 21: Aula 10 - FACOMbacala/TEC4/JSPStruts.pdf · 2007-11-30 · 10.4 SEL6303 – Sistemas de Informação Web JSP/Servlets – Uma Camada Banco de Dados Lógica de Apresentação Lógica

© JCFJ

10.41S

EL

6303

–S

iste

mas

de

Info

rmaç

ão W

ebJSP/Servlets –

O Adaptador – Aula10_02Aula10_02.java

package beans;

import beans.Aula10_03;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.struts.action.*;

public class Aula10_02 extends Action {public ActionForward perform(ActionMapping mapping, ActionForm form,

HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException

{ActionErrors actionerrors = new ActionErrors();

Aula10_03 orderForm = (Aula10_03) form;

String email = orderForm.getEmail(); if(email.trim().equals("")) {

actionerrors.add(ActionErrors.GLOBAL_ERROR, new ActionError("error.noemail"));}

String type = orderForm.getType(); if(type.trim().equals("")) {

actionerrors.add("ActionErrors.GLOBAL_ERROR", new ActionError("error.notype"));}

Faz a importação do bean do modelo.

Cópia do bean Aula10_03 passada a classe.

Criação de um objeto ActionError do Struts para gerenciamento de erros.

Criação de um bean e atribuição a ele dos valores do bean passado pelo controlador.

Recuperação do valor da propriedade email do bean.

Se email for vazio, adiciona um ActionErrorde nome error.noemail(verificar no arquivo de propriedades – T28) a estrutura ActionErrors.

– Utilização – O Controlador

© JCFJ

10.42

SE

L63

03 –

Sis

tem

as d

e In

form

ação

Web

JSP/Servlets –

O Adaptador – Aula10_02Aula10_02.java – continuação...

String[] items = orderForm.getItems(); if(items == null) {

actionerrors.add("ActionErrors.GLOBAL_ERROR", new ActionError("error.noitems"));}

if(actionerrors.size() != 0) { saveErrors(request, actionerrors);return new ActionForward(mapping.getInput());

}return mapping.findForward("OK");

}}

Se a estrutura ActionErrors tiver algum elemento ele será salvo e o processamento será desviado para a página inicial declarada pelo elemento input no arquivo struts-config.xml (T38).

Se nenhum erro dor detectado o processamento será desviado para a página definida no arquivo struts-config.xml (T38) diversos desvios podem ser implementados sendo que cada um tem um nome

neste exemplo existe um só de nome OK o método findForward irá localizar pelo nome, o encaminhamento correto a ser feito.

Se nenhum erro ocorrer, após ter recebido uma chamada da página aula10_01.jsp, o controlador irá encaminhar ao usuário a página de resultado aula10_05.jsp.

– Utilização – O Controlador

Page 22: Aula 10 - FACOMbacala/TEC4/JSPStruts.pdf · 2007-11-30 · 10.4 SEL6303 – Sistemas de Informação Web JSP/Servlets – Uma Camada Banco de Dados Lógica de Apresentação Lógica

© JCFJ

10.43S

EL

6303

–S

iste

mas

de

Info

rmaç

ão W

ebJSP/Servlets –

Apresentação dos Erros

© JCFJ

10.44

SE

L63

03 –

Sis

tem

as d

e In

form

ação

Web

JSP/Servlets –

A Página de ResultadosNa página de resultados tem-se acesso aos dados do bean Aula10_03 Estes dados podem ser escritos na página de resultados utilizando o tag <bean:write>.

Utilizando-se o tag <bean:message> se pode obter a chave que apresenta um título e depois com o bean <bean:write> se pode apresentar seu valor.

O tag <logic:iterate> pode ser utilizado para verificar escolhas múltiplas, como por exemplo a que pode ser feita para diferentes itens de um tipo de comida.

– Utilização – O Controlador

<bean:message key=“type” /><bean:write name=“Aula10_03” property=“type” />

<bean:message key=“items” /><logic:iterate id=“items1” name=“Aula10_03” property=“items” />

<%= items1 %><br />

</ logic:iterate>

Page 23: Aula 10 - FACOMbacala/TEC4/JSPStruts.pdf · 2007-11-30 · 10.4 SEL6303 – Sistemas de Informação Web JSP/Servlets – Uma Camada Banco de Dados Lógica de Apresentação Lógica

© JCFJ

10.45S

EL

6303

–S

iste

mas

de

Info

rmaç

ão W

ebJSP/Servlets –

A Página de Resultadosaula10_05.jsp

<%@ taglib uri="/bean" prefix="bean" %><%@ taglib uri="/logic" prefix="logic" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>Dados do Pedido</title>

</head>

<body><h1>Dados do Pedido</h1><bean:message key="type"/><bean:write name="Aula10_03" property="type"/><br /><br /><bean:message key="items"/><br /><logic:iterate id="items1" name="Aula10_03" property="items">

<%= items1 %><br />

</logic:iterate><br /><bean:message key="email"/><bean:write name="Aula10_03" property="email"/><br /></body>

</html>

– Utilização – O Controlador

© JCFJ

10.46

SE

L63

03 –

Sis

tem

as d

e In

form

ação

Web

JSP/Servlets –

O ModeloNo exemplo apresentado o modelo armazena e retorna os dados que o usuário fornece o modelo normalmente implementa a lógica de manipulação dos dados da aplicação Normalmente é aqui que deve ser criada a conexão com um banco de dados e a manipulação dos dados.Em Struts o componente do modelo deve baseado na classe ActionForm.

Aula10_03.javapackage beans;import org.apache.struts.action.ActionForm;

public class Aula10_03 extends ActionForm {

private String email = "";private String type = "";private String[] items;

public String getEmail() {

return email;}

public void setEmail(String email) {

this.email = email;}

public String getType() {

return type;}

Aula10_03.java – continuação...public void setType(String type) {

this.type= type;}

public String[] getItems() {return items;

}

public void setItems(String[] items) {this.items = items;

}}

Como os dados não são armazenados em um banco de dados, esta classe apresenta somente os métodos getters e setters para as propriedades manipuladas nas páginas.

Page 24: Aula 10 - FACOMbacala/TEC4/JSPStruts.pdf · 2007-11-30 · 10.4 SEL6303 – Sistemas de Informação Web JSP/Servlets – Uma Camada Banco de Dados Lógica de Apresentação Lógica

© JCFJ

10.47S

EL

6303

–S

iste

mas

de

Info

rmaç

ão W

ebJSP/Servlets –

Apresentação do Resultado

© JCFJ

10.48

SE

L63

03 –

Sis

tem

as d

e In

form

ação

Web

JSP/Servlets –

Web e Tecnologia Java: JSP/Servlets

Aula 10-1: O Plugin Easy Struts

Page 25: Aula 10 - FACOMbacala/TEC4/JSPStruts.pdf · 2007-11-30 · 10.4 SEL6303 – Sistemas de Informação Web JSP/Servlets – Uma Camada Banco de Dados Lógica de Apresentação Lógica

© JCFJ

10.49S

EL

6303

–S

iste

mas

de

Info

rmaç

ão W

ebJSP/Servlets –

VantagensAdiciona todas as bibliotecas Struts necessárias no Classpath do projeto e cria os arquivos de

configuração e o arquivo de propriedades padrão e oferece diversos módulos.

Easy Form: Cria o arquivo JSP com seu arquivo de propriedades e também o bean Form com os

métodos setter e getters e adiciona a definição do bean no arquivo de configuração.

Easy Action: cria uma classe Action e adiciona a definição do mapeamento da ação no arquivo

de configuração.

Easy Forward: cria redirecionamentos (forwards) locais e globais que definem onde o controle

será redirecionado.

Easy Exception: manipula as exceções.

Easy Message Resources: cria arquivos de propriedades de recursos que são muito importantes

para a internacionalização e localização da aplicação.

Easy Plug-in: cria plugins.

Easy Datasource: conecta uma aplicação a um data source.

Easy Module: modulariza a aplicação.

© JCFJ

10.50

SE

L63

03 –

Sis

tem

as d

e In

form

ação

Web

JSP/Servlets –

Instalação e ConfiguraçãoA configuração básica realizada anteriormente é necessária:

– É necessário ter o Java SDK instalado (1.4.2 ou maior).

– É preciso ter o arquivo zip de Struts descompactado em algum lugar.

– É necessário ter o MySQL instalado bem como uma cópia do Connect/J.

É necessário instalar o servidor Tomcat fazer o download em http://ftp.pucpr.br/apache/jakarta/tomcat-5/v5.0.19/bin/jakarta-tomcat-

5.0.19.exe este diretório será referenciado como TOMCAT_HOME depois executar o

instalador instalar abaixo de Apache Groups para manter os produtos agrupados.

Realizar o download do plugin Easy Struts em http://osdn.dl.sourceforge.net/sourceforge/easystruts/org.easystruts.ecli

pse_0.6.4.zip descompactar o arquivo no diretório plugins da instalação do eclipse.

Instalar o plugin Sysdeo Tomcat realizar o download em

http://www.sysdeo.com/eclipse/tomcatPluginV221.zip descompactar o arquivo no

diretório plugins da instalação do eclipse.

Page 26: Aula 10 - FACOMbacala/TEC4/JSPStruts.pdf · 2007-11-30 · 10.4 SEL6303 – Sistemas de Informação Web JSP/Servlets – Uma Camada Banco de Dados Lógica de Apresentação Lógica

© JCFJ

10.51S

EL

6303

–S

iste

mas

de

Info

rmaç

ão W

ebJSP/Servlets –

Configuração do Plugin Sysdeo Tomcat

Com o Eclipse inicializado deve-se no menu Window/Preferences escolher a opção Tomcat e realizar as seguintes operações para compilar uma página JSP:

– Definir a versão do Tomcat para a versão instalada.

– Definir Tomcat Home para o local da instalação do Tomcat.

– Definir “Perspective to switch when Tomcat is started” para Java.

– Na opçãp Tomcat/JVM Settings/Classpath adicionar o arquivo tools.jar que normalmente encontra-se em JAVA_HOME/lib.

No menu Window/Preferences escolher a opção Java/Classpath Variablesadicionar uma nova variável TOMCAT_HOME tendo como valor o diretório de instalação do

Tomcat.

No menu Window/Customize Perspective abrir a opção Other e verificar se a sub-opção Tomcat está selecionada caso não esteja selecionar.

Verificar se com os botões do plugin é possível inicializar e para o servidor Tomcat.

© JCFJ

10.52

SE

L63

03 –

Sis

tem

as d

e In

form

ação

Web

JSP/Servlets –

Configuração do Plugin Easy StrutsNo menu Window/Preferences escolher a opção Easy Struts e selecionar a orelha Struts 1.1.

Adicionar todos os arquivos .jar localizados em STRUTS_HOME/jakarta-struts-1.1/lib.

Adicionar todos os arquivos .tld localizados em STRUTS_HOME/jakarta-struts-1.1/lib.

Page 27: Aula 10 - FACOMbacala/TEC4/JSPStruts.pdf · 2007-11-30 · 10.4 SEL6303 – Sistemas de Informação Web JSP/Servlets – Uma Camada Banco de Dados Lógica de Apresentação Lógica

© JCFJ

10.53S

EL

6303

–S

iste

mas

de

Info

rmaç

ão W

ebJSP/Servlets –

Criação de uma AplicaçãoSelecionar a opção File/New/Project/Java/Tomcat Project e selecionar Next.

Definir o nome do projeto como sendo easyStruts e definir o diretório onde ele será armazenado e

clicar em Next.

Verificar que a opção “Can update server.xmlfile” está selecionada e clicar em Finish.

© JCFJ

10.54

SE

L63

03 –

Sis

tem

as d

e In

form

ação

Web

JSP/Servlets –

Adição das Facilidades de Easy StrutsSelecionar a opção File/New/Other e selecionar na opção Java/Easy Struts a opção Add Easy Struts support e clicar em Next.

Realizar as configurações apresentadas para obter um “ambiente” Struts vazio.

Funcionalidades oferecidas pelo Plugin

Page 28: Aula 10 - FACOMbacala/TEC4/JSPStruts.pdf · 2007-11-30 · 10.4 SEL6303 – Sistemas de Informação Web JSP/Servlets – Uma Camada Banco de Dados Lógica de Apresentação Lógica

© JCFJ

10.55S

EL

6303

–S

iste

mas

de

Info

rmaç

ão W

ebJSP/Servlets –

Uma Easy Action Associada a um FormulárioNa janela dedicada ao plugins Easy Struts clicar sobre easyStruts com o botão direito e selecionar Wizard.../Action and form.

Realize as configurações apresentadas para criar as propriedades (chaves) do formulário.

© JCFJ

10.56

SE

L63

03 –

Sis

tem

as d

e In

form

ação

Web

JSP/Servlets –

Uma Easy Action Associada a um FormulárioNa seqüência se deve definir os mapeamentos (T10.40) após clicar em Next preencher a janela como apresentado.

Após clicar em Finish o sistema vai gerar os arquivos com.asprise.struts.form.OwnerForm.java e com.asprise.struts.form.OwnerAction.java no diretório easyStruts/WEB-INF/src e também o arquivo owner.jsp no diretório easyStruts/WEB-INF deve-se completar estes arquivos para finalizar o formulário, adicionar validação das entradas do usuário e processamento da validação dos erros.

Page 29: Aula 10 - FACOMbacala/TEC4/JSPStruts.pdf · 2007-11-30 · 10.4 SEL6303 – Sistemas de Informação Web JSP/Servlets – Uma Camada Banco de Dados Lógica de Apresentação Lógica

© JCFJ

10.57S

EL

6303

–S

iste

mas

de

Info

rmaç

ão W

ebJSP/Servlets –

Modificando a Classe ActionFormDeve-se alterar todas as referências ao tipo de dados Integer para int editar o arquivo clicando sobre ele e utilizando as mensagens de erros fazer as alterações.Deve-se inserir o código do método validate() para verificar as entradas do usuário para as propriedades do formulário.

OwmerForm.java

package com.asprise.struts.form;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts.action.ActionError;import org.apache.struts.action.ActionErrors;import org.apache.struts.action.ActionForm;import org.apache.struts.action.ActionMapping;

public class OwnerForm extends ActionForm {

// --------------------------------------------------------- Instance Variables

private String greet = "Mr.";private String address;private String email;private int tel = 0;private String name;

© JCFJ

10.58

SE

L63

03 –

Sis

tem

as d

e In

form

ação

Web

JSP/Servlets –

Modificando a Classe ActionFormOwmerForm.java

// --------------------------------------------------------- Methods

public ActionErrors validate(ActionMapping mapping,HttpServletRequest request) {

ActionErrors errors = new ActionErrors();if (greet == null || greet.trim().equals("")) {

errors.add("greet", new ActionError("error.greet"));}if (name == null || name.trim().equals("")) {

errors.add("name", new ActionError("error.name"));}if (address == null || address.trim().equals("")) {

errors.add("address", new ActionError("error.address"));}if (email == null || email.trim().equals("")) {

errors.add("email", new ActionError("error.noEmail"));}else if (email.indexOf("@")==-1) {

errors.add("email", new ActionError("error.wrongEmail"));}if (tel==0) {

errors.add("tel", new ActionError("error.tel"));}return errors;}

Tratamento de erros com as mensagens armazenadas no arquivo de propriedades

Page 30: Aula 10 - FACOMbacala/TEC4/JSPStruts.pdf · 2007-11-30 · 10.4 SEL6303 – Sistemas de Informação Web JSP/Servlets – Uma Camada Banco de Dados Lógica de Apresentação Lógica

© JCFJ

10.59S

EL

6303

–S

iste

mas

de

Info

rmaç

ão W

ebJSP/Servlets –

Modificando a Classe ActionFormOwmerForm.java

public void reset(ActionMapping mapping, HttpServletRequest request) {greet = "Mr.";address = "";email = "";tel = 0;name = "";

}

public String getGreet() {return greet;

}

public void setGreet(String greet) {this.greet = greet;

}

public String getAddress() {return address;

}

public void setAddress(String address) {this.address = address;

}

public String getEmail() {return email;

}

Definição das propriedades e dos métodos getters e setters para as propriedades

© JCFJ

10.60

SE

L63

03 –

Sis

tem

as d

e In

form

ação

Web

JSP/Servlets –

Modificando a Classe ActionFormOwmerForm.java

public void setEmail(String email) {this.email = email;

}

public int getTel() {return tel;

}

public void setTel(int tel) {this.tel = tel;

}

public String getName() {return name;

}

public void setName(String name) {this.name = name;

}}

Métodos getters e setterspara as propriedades

Page 31: Aula 10 - FACOMbacala/TEC4/JSPStruts.pdf · 2007-11-30 · 10.4 SEL6303 – Sistemas de Informação Web JSP/Servlets – Uma Camada Banco de Dados Lógica de Apresentação Lógica

© JCFJ

10.61S

EL

6303

–S

iste

mas

de

Info

rmaç

ão W

ebJSP/Servlets –

O Arquivo ApplicationResources.properties

ApplicationResources.properties

# Resources for parameter'com.asprise.struts.ApplicationResources'# Project P/easyStruts

errors.header=<h4>Validation Error(s)</h4><ul>errors.footer=</ul><hr>

error.greet=<li>Choose your greeterror.name=<li>Enter your nameerror.address=<li>Enter your addresserror.tel=<li>Enter your contact numbererror.wrongEmail=<li>Correct your emailerror.noEmail=<li>Enter your email

© JCFJ

10.62

SE

L63

03 –

Sis

tem

as d

e In

form

ação

Web

JSP/Servlets –

Modificando a Classe ActionA classe OwnerAction simplesmente apresenta a mensagem “Thank you, Miss Nancy Chen” no redirecionamento local que é definido como sendo a página JSP success.jsp.

Deve-se modificar o método execute() de OwnerAcion (toda classe action deve implementar o método execute()).

OwmerAction.java

package com.asprise.struts.action;

import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;import org.apache.struts.action.ActionForm;import org.apache.struts.action.ActionForward;import org.apache.struts.action.ActionMapping;

import com.asprise.struts.form.OwnerForm;

public class OwnerAction extends Action {

// -------------------------------------------------------- Instance Variables

Importação do form bean para manipular suas propriedades

Page 32: Aula 10 - FACOMbacala/TEC4/JSPStruts.pdf · 2007-11-30 · 10.4 SEL6303 – Sistemas de Informação Web JSP/Servlets – Uma Camada Banco de Dados Lógica de Apresentação Lógica

© JCFJ

10.63S

EL

6303

–S

iste

mas

de

Info

rmaç

ão W

ebJSP/Servlets –

Modificando a Classe ActionOwmerAction.java

// -------------------------------------------------------- Methods

public ActionForward execute(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response)throws Exception {

OwnerForm ownerForm = (OwnerForm) form;String greet = ownerForm.getGreet();String name = ownerForm.getName();request.setAttribute("name", name);request.setAttribute("greet", greet);

// Forward control to the specified success targetreturn (mapping.findForward("success"));

}}

Recuperação das propriedades do bean e armazenamento destas propriedades na requisição

Encaminhamento do processamento a ação identificada por success.

© JCFJ

10.64

SE

L63

03 –

Sis

tem

as d

e In

form

ação

Web

JSP/Servlets –

Modificando a Página owner.jspO formulário deve ser completado adicionando os tags <html> que irão fazer a apresentação

das informações e o tratamento dos erros.

owner.jsp

<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%><%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html"%><html>

<head><meta

name = "Generator"content = "Easy Struts Xslt generator for Eclipse (http://easystruts.sf.net).">

<title>Struts Form for ownerForm</title></head><body>

<html:form action="/owner">greet : <html:select property="greet">

<html:option value=""></html:option><html:option value="Mr.">Mr.</html:option><html:option value="Miss">Miss</html:option><html:option value="Mrs.">Mrs.</html:option>

</html:select><html:errors property="greet"/>name : <html:text property="name"/><html:errors property="name"/></br>address : <html:text property="address"/><html:errors property="address"/></br>email : <html:text property="email"/><html:errors property="email"/></br>tel : <html:text property="tel"/><html:errors property="tel"/></br><html:submit/><html:cancel/>

</html:form><html:errors />

<body></html>

Page 33: Aula 10 - FACOMbacala/TEC4/JSPStruts.pdf · 2007-11-30 · 10.4 SEL6303 – Sistemas de Informação Web JSP/Servlets – Uma Camada Banco de Dados Lógica de Apresentação Lógica

© JCFJ

10.65S

EL

6303

–S

iste

mas

de

Info

rmaç

ão W

ebJSP/Servlets –

Codificando a Página JSP success.jspPara finalizar se deve codificar a página success.jsp que irá apresentar a mensagem “Thank you, Miss Nancy Chen” quando a página owner.jsp for preenchida sem erros.

sucess.jsp

<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>

<logic:present name="name" scope="request">Thank you,

<logic:present name="greet" scope="request"><bean:write name="greet" scope="request"/>

</logic:present><bean:write name="name" scope="request"/>

</logic:present>

Verifica se existe um bean de nome name no escopo request.

Caso exista apresenta a mensagem recuperando as informações do bean

© JCFJ

10.66

SE

L63

03 –

Sis

tem

as d

e In

form

ação

Web

JSP/Servlets –

Examinando o Arquivo struts-config.xmlUm duplo clique sobre o arquivo struts-config.xml de configuração da aplicação faz com que uma “interface gráfica” seja apresentada nesta interface se pode configurar diversos aspectos da aplicação.

Page 34: Aula 10 - FACOMbacala/TEC4/JSPStruts.pdf · 2007-11-30 · 10.4 SEL6303 – Sistemas de Informação Web JSP/Servlets – Uma Camada Banco de Dados Lógica de Apresentação Lógica

© JCFJ

10.67S

EL

6303

–S

iste

mas

de

Info

rmaç

ão W

ebJSP/Servlets –

Testando a AplicaçãoDeve-se reinicializar o servidor Tomcat na barra de menu ou na opção Tomcat do menu.

Na barra de endereço do navegador se deve fornecer o endereço http://127.0.0.1:8080/easyStruts/owner.jsp.

© JCFJ

10.68

SE

L63

03 –

Sis

tem

as d

e In

form

ação

Web

JSP/Servlets –

Utilizando Easy ForwardStruts permite que se utilize dois tipos de Forward local e global:

– Global ActionForward são visíveis a qualquer objeto Action da aplicação.

– Local ActionForward são visíveis unicamente ao objeto Action quando ele é chamado através de uma

ActionMapping com o Local ActionForward ao qual ele está associado.

O plugin Easy Struts permite que se trabalhe também com Global ActionForward deve-se clicar com o botão direito sobre easyStruts e selecionar a opção Wizard.../Forward e preencher conforme

indicado.

Deixado em branco indica que se pretende usar um Global ActioForward.

Nome através do qual o redirecionamento pode ser acessado na classe Actionmapping.FindForward(“failure”);

Page 35: Aula 10 - FACOMbacala/TEC4/JSPStruts.pdf · 2007-11-30 · 10.4 SEL6303 – Sistemas de Informação Web JSP/Servlets – Uma Camada Banco de Dados Lógica de Apresentação Lógica

© JCFJ

10.69S

EL

6303

–S

iste

mas

de

Info

rmaç

ão W

ebJSP/Servlets –

Melhorando a AplicaçãoA páginas JSP podem ser geradas em um formato desejado utilizando um arquivo XSLT.

Utilizando o Easy Struts se pode definir e utilizar um arquivo XSTL para fazer a apresentação no menu Window/Preferences selecionar Easy Struts e então a orelha XSTL stylesheet para adicionar um arquivo .xsl próprio.

No exemplo apresentado para cada propriedade do formulário, a transformação irá gerar atributos property e value se por exemplo em uma página for especificado um campo texto de nome name com valor inicial nancy a código gerado pela transformação será:

XSL – Extensible Stylesheet Language (http://www.w3.org/TR/xsl/) é uma linguagem para expressar folhas de estilo, consistindo de duas partes: uma linguagem para transformar documentos XML e um vocabulário XML para especificar semanticamente a formatação.Uma folha de estilos XSL especifica a apresentação de uma classe de um documento XML através da descrição como um instância da classe é transformada em um documento XML que usa o vocabulário de formatação definido.

XSLT - XSL Transformations (http://www.w3.org/TR/xslt/) é uma linguagem para transformar documentos XML em outros documentos XML.

<html:text property=“name” value=“nancy”></html:text>

© JCFJ

10.70

SE

L63

03 –

Sis

tem

as d

e In

form

ação

Web

JSP/Servlets –

Transformação XSLT

– Melhorando a Aplicação

Page 36: Aula 10 - FACOMbacala/TEC4/JSPStruts.pdf · 2007-11-30 · 10.4 SEL6303 – Sistemas de Informação Web JSP/Servlets – Uma Camada Banco de Dados Lógica de Apresentação Lógica

© JCFJ

10.71S

EL

6303

–S

iste

mas

de

Info

rmaç

ão W

ebJSP/Servlets –

“Localizando” a Aplicação

– Melhorando a Aplicação

Uma aplicação pode ser “localizada” com o auxílio da funcionalidade Easy Message Resource do EasyStruts deve-se para tanto criar arquivos de propriedades localizados.

Para criar um novo arquivo de propriedades deve-se na visão Easy Struts selecionar Easy MessageResource e realizar a configuração como apresentado para definir as mensagem de erro em português/Brasil.

O nome do arquivo de propriedades deve ser do tipo ApplicationResources_xx_YY.properties

onde xx representa a linguagem local (código ISO-639) e YY representa o país (ISO-3166) para outros países verificar http://docs.sun.com/db/doc/816-7171/6md6poht0?a=view.

Após se deve criar o arquivo de propriedades na língua específica.

© JCFJ

10.72

SE

L63

03 –

Sis

tem

as d

e In

form

ação

Web

JSP/Servlets –

“Localizando” a Aplicação

ApplicationResources_pt_BR.properties

# Resources for parameter'com.asprise.struts.ApplicationResources'# Project P/easyStruts

errors.header=<h4>Validação de erro(s)</h4><ul>errors.footer=</ul><hr>

error.greet=<li>Escolha seu tratamentoerror.name=<li>Forneça seu nomeerror.address=<li>Forneça seu endereçoerror.tel=<li>Forneça seu número de telefoneerror.wrongEmail=<li>Corrija seu emailerror.noEmail=<li>Forneça seu email

– Melhorando a Aplicação

Page 37: Aula 10 - FACOMbacala/TEC4/JSPStruts.pdf · 2007-11-30 · 10.4 SEL6303 – Sistemas de Informação Web JSP/Servlets – Uma Camada Banco de Dados Lógica de Apresentação Lógica

© JCFJ

10.73S

EL

6303

–S

iste

mas

de

Info

rmaç

ão W

ebJSP/Servlets –

Conexão a uma Base de DadosO plugin Easy Struts fornece a funcionalidade Easy Datasource que pode ser utilizada para implementar a conexão de uma aplicação a um banco de dados.

Para tanto se deve na visão Easy Struts selecionar Easy Datasource e realizar a configuração como apresentado.

É necessário copiar o driver Connector/J do MySQL (mysql-connector-java-3.0.8-stable-bin) no diretório

easyStruts/WEB-INF/lib.

© JCFJ

10.74

SE

L63

03 –

Sis

tem

as d

e In

form

ação

Web

JSP/Servlets –

Conexão a uma Base de DadosPara verificar o funcionamento deve-se iniciar o servidor MySQL e criar uma base de nome crm e nesta base uma tabela owner por exemplo com o MySQL Control Center.

A Tabela owner

# Database : 'crm' # Table structure for table 'owner' #

CREATE TABLE 'owner' ( 'id' int(6) NOT NULL default '0', 'greet' varchar(5) NOT NULL default '', 'name' varchar(50) NOT NULL default '', 'email' varchar(50) NOT NULL default '', 'address' varchar(100) NOT NULL default '', 'tel' int(10) NOT NULL default '0', PRIMARY KEY ('id')

) TYPE=MyISAM;

Page 38: Aula 10 - FACOMbacala/TEC4/JSPStruts.pdf · 2007-11-30 · 10.4 SEL6303 – Sistemas de Informação Web JSP/Servlets – Uma Camada Banco de Dados Lógica de Apresentação Lógica

© JCFJ

10.75S

EL

6303

–S

iste

mas

de

Info

rmaç

ão W

ebJSP/Servlets –

Conexão a uma Base de DadosNa seqüência deve-se modificar o método execute() da classe OwnerAction para implementar a conexão ao banco de dados.Após a modificação uma nova chamada a página owner.jsp fará com que os dados sejam armazenados na tabela owner criada na base crm.

OwmerAction.java – apresentado somente execute()

package com.asprise.struts.action;

import java.sql.*;import javax.sql.DataSource;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;import org.apache.struts.action.ActionForm;import org.apache.struts.action.ActionForward;import org.apache.struts.action.ActionMapping;

import com.asprise.struts.form.OwnerForm;Μ// -------------------------------------------------------- Methodspublic ActionForward execute(

ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response)throws Exception {

Novos pacotes importados para permitir a conexão a datasource e a manipulação do banco de dados

© JCFJ

10.76

SE

L63

03 –

Sis

tem

as d

e In

form

ação

Web

JSP/Servlets –

Conexão a uma Base de DadosOwmerAction.java – apresentado somente execute() – continuação...

OwnerForm ownerForm = (OwnerForm) form;

String greet = ownerForm.getGreet();String name = ownerForm.getName(); request.setAttribute("name", name);request.setAttribute("greet", greet);String address = ownerForm.getAddress();String email = ownerForm.getEmail();int tel = ownerForm.getTel();

Connection conn = null;Statement stmt = null;ResultSet rs = null;

DataSource dataSource = (DataSource)servlet.getServletContext().getAttribute("org.apache.struts.action.DATA_SOURCE");try {

conn = dataSource.getConnection();stmt = conn.createStatement();int id = 0;rs = stmt.executeQuery("select max(id) as counter from owner");while(rs.next()){

id = rs.getInt("counter");}id += 1;stmt.executeUpdate("insert into owner values("+id+", '"+greet+"', '"+name+"', '"+email+"', '"+address+"', "+tel+")");rs.close();stmt.close();conn.close();

}

Recuperação das propriedades que faltavam.

Criação de um datasourcee carregamento com a datasource definida.

Consulta que identifica o maio id armazenado na tabela.

Inserção dos dados na tabela.

Page 39: Aula 10 - FACOMbacala/TEC4/JSPStruts.pdf · 2007-11-30 · 10.4 SEL6303 – Sistemas de Informação Web JSP/Servlets – Uma Camada Banco de Dados Lógica de Apresentação Lógica

© JCFJ

10.77S

EL

6303

–S

iste

mas

de

Info

rmaç

ão W

ebJSP/Servlets –

Conexão a uma Base de DadosOwmerAction.java – apresentado somente execute() – continuação...

catch(SQLException e){throw new SQLException("database error");}// Forward control to the specified success targetreturn (mapping.findForward("success"));

}}

Definição de uma nova exceção para fazer o tratamento dos erros SQL

© JCFJ

10.78

SE

L63

03 –

Sis

tem

as d

e In

form

ação

Web

JSP/Servlets –

Tratamento de ExceçõesO plugin Easy Struts fornece a funcionalidade Easy Exception que pode ser utilizada para implementar o tratamento de exceções.

Para tanto se deve na visão Easy Struts selecionar Easy Exception e realizar a configuração como apresentado.

Page 40: Aula 10 - FACOMbacala/TEC4/JSPStruts.pdf · 2007-11-30 · 10.4 SEL6303 – Sistemas de Informação Web JSP/Servlets – Uma Camada Banco de Dados Lógica de Apresentação Lógica

© JCFJ

10.79S

EL

6303

–S

iste

mas

de

Info

rmaç

ão W

ebJSP/Servlets –

O Tratador de Exceções

MyExceptionHandler.java

package com.asprise.struts.exception;

import javax.servlet.*;import javax.servlet.http.*;

import org.apache.struts.action.*;import org.apache.struts.config.*;

public class MyExceptionHandler extends ExceptionHandler {

public ActionForward execute(Exception ex,ExceptionConfig ae,ActionMapping mapping,ActionForm formInstance,HttpServletRequest request,HttpServletResponse response)

throws ServletException {request.setAttribute("myException",ex);request.setAttribute("myForm",formInstance);request.setAttribute("myKey",ae.getKey());return new ActionForward(ae.getPath());

}}

Esta classe também implementa o método execute() para poder retornar um ActionForward

A propriedade error.database=<h3>An Exception Handled byMyExceptionHandler:</h3> deve ser adicionada ao arquivo de propriedades da aplicação e talvez sua tradução nas propriedades em português.

© JCFJ

10.80

SE

L63

03 –

Sis

tem

as d

e In

form

ação

Web

JSP/Servlets –

A Apresentação das ExceçõesSe um erro ocorrer na manipulação do banco de dados, a página exception.jsp seráchamada.

exception.jsp

<%@ page import="java.sql.SQLException" %><%@ page import="com.asprise.struts.form.*" %><%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%>

<%OwnerForm myForm = (OwnerForm)request.getAttribute("myForm");if (myForm != null) {

out.println("<font color=red>Sorry, "+myForm.getGreet());out.println(" "+myForm.getName()+"</font>");

}%><ul><bean:message key="<%=request.getAttribute(\"myKey\").toString()%>" /><%

Object obj = request.getAttribute("myException");if (obj != null) {

Throwable ex = (Throwable)obj;out.println("<li><b>Type:</b>"+ex.toString());out.println("<li><b>Message:</b>"+ex.getMessage());

}%>

Page 41: Aula 10 - FACOMbacala/TEC4/JSPStruts.pdf · 2007-11-30 · 10.4 SEL6303 – Sistemas de Informação Web JSP/Servlets – Uma Camada Banco de Dados Lógica de Apresentação Lógica

© JCFJ

10.81S

EL

6303

–S

iste

mas

de

Info

rmaç

ão W

ebJSP/Servlets –

Bibliografia

1. Steven Holzner, JavaServer Pages in 21 Days, Sams Publishing 2003.

2. Budi Kurniawan, Java para a Web com Servlets, JSP e EJB.

3. Martin Bond et alli., Aprenda J2EE em 21 Dias, Pearson Education do Brasil Ltda,

2003.

4. Helder da Rocha, J550-Apache Struts, http://www.argonavis.com.br, 2004.

5. Govind Seshadri, Understanding JavaServer Pages Model 2 Architecture –

Exploring the MVC Design Pattern, Java Word, http://www.javaworld.com/

javaworld/jw-12-1999/jw-12-ssj-jspmvc.html, 2004.

6. The Struts User’s Guide – 1. Introduction, http://jakarta.apache.org/struts/

userGuide/introduction.html, 2004.