• Nenhum resultado encontrado

Web e Tecnologia Java: JSP/Servlets. Aula 10. Desenvolvimento em N Camadas

N/A
N/A
Protected

Academic year: 2021

Share "Web e Tecnologia Java: JSP/Servlets. Aula 10. Desenvolvimento em N Camadas"

Copied!
41
0
0

Texto

(1)

© JCFJ

10.1

SEL6303 –

S

istemas de Informação Web

JSP/Servlets –

Web e Tecnologia Java: JSP/Servlets

Aula 10

10.2

SEL6303 –

S

istemas 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

(2)

© JCFJ

10.3

SEL6303 –

S

istemas de Informação Web

JSP/Servlets –

Uma Camada – Desenvolvimento Monolítico

Š Computadores 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

10.4

SEL6303 –

S

istemas de Informação Web

JSP/Servlets –

Uma Camada

Banco de Dados Lógica de

Apresentação Lógica deNegócio Acesso a DadosLógica de

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

(3)

© JCFJ

10.5

SEL6303 –

S

istemas de Informação Web

JSP/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 de Dados Lógica de Acesso a Dados Lógica de

Apresentaçã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

10.6

SEL6303 –

S

istemas de Informação Web

JSP/Servlets –

Duas Camadas – Conseqüências

Š Em 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)

(4)

© JCFJ

10.7

SEL6303 –

S

istemas de Informação Web

JSP/Servlets –

Três Camadas

Š Com 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 camada ló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 maior parte 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 de Dados Lógica de Acesso a Dados Lógica de Apresentação – Introdução Lógica de Negócio 10.8 SEL6303 – S

istemas de Informaçã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.

(5)

© JCFJ

10.9

SEL6303 –

S

istemas de Informação Web

JSP/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 2 3 4 – Introdução

Arquitetura Model 1

10.10 SEL6303 – S

istemas de Informaçã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 2 3 4 JSP (View) instancia 5 – Introdução

(6)

© JCFJ

10.11

SEL6303 –

S

istemas de Informação Web

JSP/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

10.12

SEL6303 –

S

istemas de Informação Web

JSP/Servlets –

Apache Struts - Componentes

Š Model

(

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.

(7)

© JCFJ

10.13

SEL6303 –

S

istemas de Informação Web

JSP/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 Session EnterpriseJava 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

10.14

SEL6303 –

S

istemas de Informaçã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.

(8)

© JCFJ

10.15

SEL6303 –

S

istemas de Informação Web

JSP/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 ActionServlet

Ö Este servlet é configurado definindo um conjunto de ActionMappingÖ Um

ActionMappingdefine o caminho para um nome totalmente qualificado de uma Action Class Ö Todas as ações são subclasses de org.apache.struts.action.Action Ö

Actionsencapsulam 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 de requisições desenvolvidos pelos usuários e diversos objetos de suporte.

– Introdução

10.16

SEL6303 –

S

istemas de Informaçã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 Dados ou DAO HTTP delega despacha preenche lê – Introdução

(9)

© JCFJ

10.17

SEL6303 –

S

istemas de Informação Web

JSP/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ção c. Outras propriedades necessárias.

Š O objeto Actionpode manipular a requisição e responder ao cliente (normalmente um navegador) ou indicar que o controle deve ser encaminhado a outro componente Ö Objetos

Actiontê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

10.18

SEL6303 –

S

istemas de Informação Web

JSP/Servlets –

Funcionamento – III

[5]

Š continuação...Ö Ex.: um objeto Actionpode 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 Actionpode 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 ActionFormfacilitam 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 Actionou 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 Actionpara 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.

(10)

© JCFJ

10.19

SEL6303 –

S

istemas de Informação Web

JSP/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 ActionFormem tempo de execução Ö Quando um mapeamento necessita de um

ActionFormo 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

10.20

SEL6303 –

S

istemas de Informação Web

JSP/Servlets –

Funcionamento – V

[5]

Š Em aplicações simples um objeto Actionpode 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 Actionpode 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.

(11)

© JCFJ

10.21

SEL6303 –

S

istemas de Informação Web

JSP/Servlets –

Funcionamento - Resumo

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

informações de mapeamento em struts-config.xml e encaminha o 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

10.22

SEL6303 –

S

istemas de Informação Web

JSP/Servlets –

Utilização de Struts

Š O 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.

(12)

© JCFJ

10.23

SEL6303 –

S

istemas de Informação Web

JSP/Servlets –

Importação de struts.jar

Š Para 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.

10.24

SEL6303 –

S

istemas de Informação Web

JSP/Servlets –

A Visão

Š Inicialmente 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 taglib que 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 .do

são automaticamente mapeadas (web.xml) para o servlet controlador.

(13)

© JCFJ

10.25

SEL6303 –

S

istemas de Informação Web

JSP/Servlets –

A Visão

aula10.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 html cria 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).

10.26

SEL6303 –

S

istemas de Informação Web

JSP/Servlets –

(14)

© JCFJ

10.27

SEL6303 –

S

istemas de Informação Web

JSP/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

Funcionalidade Nome 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.

10.28

SEL6303 –

S

istemas de Informaçã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

Funcionalidade Nome 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

Funcionalidade Nome da Atributo

(15)

© JCFJ

10.29

SEL6303 –

S

istemas de Informação Web

JSP/Servlets –

A Taglib <html> de Struts – III

Atributos 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 Funcionalidade Nome do Atributo – Utilização – A Visão 10.30 SEL6303 – S

istemas de Informaçã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).

(16)

© JCFJ

10.31

SEL6303 –

S

istemas de Informação Web

JSP/Servlets –

A Taglib <bean> de Struts – I

Š Esta 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 Funcionalidade Nome da Tag – Utilização – A Visão 10.32 SEL6303 – S

istemas de Informaçã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

Funcionalidade Nome do Atributo

(17)

© JCFJ

10.33

SEL6303 –

S

istemas de Informação Web

JSP/Servlets –

A Taglib <logic> de Struts – I

Š Esta 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 Funcionalidade Nome da Tag – Utilização – A Visão 10.34 SEL6303 – S

istemas de Informaçã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

Funcionalidade Nome do Atributo

(18)

© JCFJ

10.35

SEL6303 –

S

istemas de Informação Web

JSP/Servlets –

A Taglib Personalizada Criada

Š Procedimento 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 Type que 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

10.36

SEL6303 –

S

istemas de Informaçã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.

(19)

© JCFJ

10.37

SEL6303 –

S

istemas de Informação Web

JSP/Servlets –

O Arquivo web.xml

Š Como 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

.dopara o servlet action.

– Utilização

10.38

SEL6303 –

S

istemas de Informaçã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 Struts e da taglib que será criada. – Utilização

(20)

© JCFJ

10.39

SEL6303 –

S

istemas de Informação Web

JSP/Servlets –

O Controlador

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

Š Este servlet age como o Controladorda aplicação Ö É necessário fornecer um Adaptador

que irá funcionar com o controlador Ö Este adaptador é baseado na classe StrutsAction. Š 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 Actionapropriado para cada requisição e chamar o método perform

deste 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.javae 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émregistrar o adaptador

Aula10_02.javano arquivo struts-config.xml.

– Utilização

10.40

SEL6303 –

S

istemas de Informaçã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.

(21)

© JCFJ

10.41

SEL6303 –

S

istemas de Informação Web

JSP/Servlets –

O Adaptador – Aula10_02

Aula10_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 ActionError de nome error.noemail (verificar no arquivo de propriedades – T28) a estrutura ActionErrors. – Utilização – O Controlador 10.42 SEL6303 – S

istemas de Informação Web

JSP/Servlets –

O Adaptador – Aula10_02

Aula10_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.

(22)

© JCFJ

10.43

SEL6303 –

S

istemas de Informação Web

JSP/Servlets –

Apresentação dos Erros

10.44

SEL6303 –

S

istemas de Informação Web

JSP/Servlets –

A Página de Resultados

Š Na 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 />

(23)

© JCFJ

10.45

SEL6303 –

S

istemas de Informação Web

JSP/Servlets –

A Página de Resultados

aula10_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 10.46 SEL6303 – S

istemas de Informação Web

JSP/Servlets –

O Modelo

Š No 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.java

package 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.

(24)

© JCFJ

10.47

SEL6303 –

S

istemas de Informação Web

JSP/Servlets –

Apresentação do Resultado

10.48

SEL6303 –

S

istemas de Informação Web

JSP/Servlets –

Web e Tecnologia Java: JSP/Servlets

(25)

© JCFJ

10.49

SEL6303 –

S

istemas de Informação Web

JSP/Servlets –

Vantagens

Š Adiciona 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.

10.50

SEL6303 –

S

istemas de Informação Web

JSP/Servlets –

Instalação e Configuração

Š A 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

(26)

© JCFJ

10.51

SEL6303 –

S

istemas de Informação Web

JSP/Servlets –

Configuração do Plugin Sysdeo Tomcat

Š Com o Eclipse inicializado deve-se no menu Window/Preferences escolher a opção Tomcate 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 Variables adicionar 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.

10.52

SEL6303 –

S

istemas de Informação Web

JSP/Servlets –

Configuração do Plugin Easy Struts

Š No 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.

(27)

© JCFJ

10.53

SEL6303 –

S

istemas de Informação Web

JSP/Servlets –

Criação de uma Aplicação

Š Selecionar 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.

10.54

SEL6303 –

S

istemas de Informação Web

JSP/Servlets –

Adição das Facilidades de Easy Struts

Š Selecionar 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.

(28)

© JCFJ

10.55

SEL6303 –

S

istemas de Informação Web

JSP/Servlets –

Uma Easy Action Associada a um Formulário

Š Na 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.

10.56

SEL6303 –

S

istemas de Informação Web

JSP/Servlets –

Uma Easy Action Associada a um Formulário

Š Na 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.

(29)

© JCFJ

10.57

SEL6303 –

S

istemas de Informação Web

JSP/Servlets –

Modificando a Classe ActionForm

Š Deve-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;

10.58

SEL6303 –

S

istemas de Informação Web

JSP/Servlets –

Modificando a Classe ActionForm

OwmerForm.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

(30)

© JCFJ

10.59

SEL6303 –

S

istemas de Informação Web

JSP/Servlets –

Modificando a Classe ActionForm

OwmerForm.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

10.60

SEL6303 –

S

istemas de Informação Web

JSP/Servlets –

Modificando a Classe ActionForm

OwmerForm.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 setters para as propriedades

(31)

© JCFJ

10.61

SEL6303 –

S

istemas de Informação Web

JSP/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 greet error.name=<li>Enter your name error.address=<li>Enter your address error.tel=<li>Enter your contact number error.wrongEmail=<li>Correct your email error.noEmail=<li>Enter your email

10.62

SEL6303 –

S

istemas de Informação Web

JSP/Servlets –

Modificando a Classe Action

Š A 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

(32)

© JCFJ

10.63

SEL6303 –

S

istemas de Informação Web

JSP/Servlets –

Modificando a Classe Action

OwmerAction.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 target return (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.

10.64

SEL6303 –

S

istemas de Informação Web

JSP/Servlets –

Modificando a Página owner.jsp

Š O 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>

(33)

© JCFJ

10.65

SEL6303 –

S

istemas de Informação Web

JSP/Servlets –

Codificando a Página JSP success.jsp

Š Para 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

10.66

SEL6303 –

S

istemas de Informação Web

JSP/Servlets –

Examinando o Arquivo struts-config.xml

Š Um 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.

Referências

Documentos relacionados

Como foi estabelecido que peles de chinchilla de qualidade média são negociadas no mercado a um preço de até DM 60, e, devido ao fato de que a decisão do Juízo de Primeira

Por sua vez, o artigo 30.º n.º 1 dos Estatutos da ERS, determina que cabe à ERS apreciar as queixas e reclamações apresentadas pelos utentes, assegurar o cumprimento das obrigações

Desse modo, ao observar a história dos deslocamentos dos povos indígenas na região, como por exemplo no caso palikur tal como observado por López (2011), temos que sua

A espectrofotometria é uma técnica quantitativa e qualitativa, a qual se A espectrofotometria é uma técnica quantitativa e qualitativa, a qual se baseia no fato de que uma

entendimento de que, havendo descaracterização do acordo de compensação, no regime de 12 X 36, previsto em norma coletiva, é devido ao empregado apenas o

Branco Amarelo Ouro Vermelho Fogo Azul Turquesa Verde Bandeira Preto 22...

CONSIDERANDO, por fim, que a Comissão de Defesa dos Direitos Fundamentais do CNMP possui em sua composição um Grupo de Trabalho específico sobre proteção ao meio ambiente, formado

d) A não observação a detalhes de instalação, em desacordo com o Manual de instalação, como: chão desnivelado, instalação do forno ao lado de equipamentos que exalam