You are on page 1of 18

Mdulo 6

Programao WEB

Lio 7
Introduo a MVC e ao Framework Struts

Verso 1.0 - Nov/2007

JEDITM

Autor Daniel Villafuerte Equipe Rommel Feria John Paul Petines

Necessidades para os Exerccios

Sistemas Operacionais Suportados NetBeans IDE 5.5 para os seguintes sistemas operacionais: Microsoft Windows XP Profissional SP2 ou superior Mac OS X 10.4.5 ou superior Red Hat Fedora Core 3 Solaris 10 Operating System (SPARC e x86/x64 Platform Edition) NetBeans Enterprise Pack, poder ser executado nas seguintes plataformas: Microsoft Windows 2000 Profissional SP4 Solaris 8 OS (SPARC e x86/x64 Platform Edition) e Solaris 9 OS (SPARC e x86/x64 Platform Edition) Vrias outras distribuies Linux Configurao Mnima de Hardware Nota: IDE NetBeans com resoluo de tela em 1024x768 pixel Sistema Operacional Microsoft Windows Linux Solaris OS (SPARC) Solaris OS (x86/x64 Platform Edition) Mac OS X Processador 500 MHz Intel Pentium III workstation ou equivalente 500 MHz Intel Pentium III workstation ou equivalente UltraSPARC II 450 MHz AMD Opteron 100 Srie 1.8 GHz PowerPC G4 Memria 512 MB 512 MB 512 MB 512 MB 512 MB HD Livre 850 MB 450 MB 450 MB 450 MB 450 MB

Configurao Recomendada de Hardware Sistema Operacional Microsoft Windows Linux Solaris OS (SPARC) Solaris OS (x86/x64 Platform Edition) Mac OS X Processador 1.4 GHz Intel Pentium III workstation ou equivalente 1.4 GHz Intel Pentium III workstation ou equivalente UltraSPARC IIIi 1 GHz AMD Opteron 100 Series 1.8 GHz PowerPC G5 Memria 1 GB 1 GB 1 GB 1 GB 1 GB HD Livre 1 GB 850 MB 850 MB 850 MB 850 MB

Requerimentos de Software NetBeans Enterprise Pack 5.5 executando sobre Java 2 Platform Standard Edition Development Kit 5.0 ou superior (JDK 5.0, verso 1.5.0_01 ou superior), contemplando a Java Runtime Environment, ferramentas de desenvolvimento para compilar, depurar, e executar aplicaes escritas em linguagem Java. Sun Java System Application Server Platform Edition 9. Para Solaris, Windows, e Linux, os arquivos da JDK podem ser obtidos para sua plataforma em http://java.sun.com/j2se/1.5.0/download.html Para Mac OS X, Java 2 Plataform Standard Edition (J2SE) 5.0 Release 4, pode ser obtida diretamente da Apple's Developer Connection, no endereo: http:// developer.apple.com/java ( necessrio registrar o download da JDK). Para mais informaes: http://www.netbeans.org/community/releases/55/relnotes.html

Programao WEB

JEDITM

Colaboradores que auxiliaram no processo de traduo e reviso


Acio Jnior Alexandre Mori Alexis da Rocha Silva Allan Souza Nunes Allan Wojcik da Silva Angelo de Oliveira Aurlio Soares Neto Bruno da Silva Bonfim Carlos Fernando Gonalves Denis Mitsuo Nakasaki Emanoel Tadeu da Silva Freitas Felipe Gacho Jacqueline Susann Barbosa Joo Vianney Barrozo Costa Luciana Rocha de Oliveira Luiz Fernandes de Oliveira Junior Marco Aurlio Martins Bessa Maria Carolina Ferreira da Silva Massimiliano Giroldi Mauro Cardoso Mortoni Paulo Oliveira Sampaio Reis Pedro Henrique Pereira de Andrade Ronie Dotzlaw Sergio Terzella Thiago Magela Rodrigues Dias Vanessa dos Santos Almeida Wagner Eliezer Roncoletta

Auxiliadores especiais
Reviso Geral do texto para os seguintes Pases:
Brasil Tiago Flach Guin Bissau Alfredo C, Bunene Sisse e Buon Olossato Quebi ONG Asas de Socorro

Coordenao do DFJUG

Daniel deOliveira JUGLeader responsvel pelos acordos de parcerias Luci Campos - Idealizadora do DFJUG responsvel pelo apoio social Fernando Anselmo - Coordenador responsvel pelo processo de traduo e reviso, disponibilizao dos materiais e insero de novos mdulos Rodrigo Nunes - Coordenador responsvel pela parte multimdia Srgio Gomes Veloso - Coordenador responsvel pelo ambiente JEDITM (Moodle)

Agradecimento Especial
John Paul Petines Criador da Iniciativa JEDITM Rommel Feria Criador da Iniciativa JEDITM

Programao WEB

JEDITM

1. Objetivos
A arquitetura Model-View-Controller (MVC) um padro arquitetural comprovadamente eficaz em projetos de desenvolvimento. So definidos trs componentes separados Model (modelo), View (viso) e Controller (controle) e dividi-se o projeto nestes componentes. Ao final desta lio, o estudante ser capaz de:

Compreender o funcionamento da arquitetura MVC Utilizar o framework Struts no desenvolvimento de aplicaes

Programao WEB

JEDITM

2. Introduo arquitetura Model-View-Controller


2.1. Motivao
Em toda aplicao, a parte do cdigo mais sujeita a mudana a poro da interface de usurio. A interface o aspecto mais visvel ao usurio e com o qual o usurio interage. Sendo assim, o alvo mais provvel de pedidos de mudana ou de melhorias da usabilidade. Ter sua lgica de negcio firmemente acoplada com a interface de usurio leva a processos de alteraes da interface mais complexos e sujeitos os erros. As mudanas a uma parte tm o potencial de trazer conseqncias em cascata no restante da aplicao.

2.2. Soluo
O padro MVC fornece uma soluo para este problema dividindo a aplicao nos componentes Model, View e Controller, desacoplando estes de quaisquer outros ao fornecer um conjunto de recomendaes sobre suas interaes.

- Encapsular estado das aplicaes - Responder ao estado das consultas - Expor as funcionalidades da aplicao - Notificar mudanas na view

- Solicitar a model - Requerer alteraes para a model - Enviar solicitaes para o controller - Permitir o controle de um view

- Definir a integrao da aplicao - Mapear as aes do usurio - Selecionar a view para resposta - Um para cada funcionalidade

Figura 1: O padro MVC

O diagrama acima mostra os trs componentes definidos pelo padro MVC assim como as suas interaes previstas. Vamos analisar parte por parte.

2.3. Model
O padro MVC define uma camada chamada Model que representa os dados usados pela aplicao, assim como as operaes de negcio associadas a eles. Definindo a Model como uma camada separada, detalhes como recuperao, persistncia e manipulao dos dados so abstradas do restante da aplicao. H diversos benefcios com este tipo de abordagem. Primeiramente, isto assegura que os detalhes dos dados e das operaes nos dados podem ser encontrados em uma rea bem definida (a Model) em vez de estarem dispersos na aplicao. Isto prova-se benfico durante a fase de manuteno da aplicao. Em segundo lugar, tendo-se os detalhes dos dados totalmente
Programao WEB 5

JEDITM

separados de qualquer implementao de interface, os componentes da Model podem ser reaproveitados mais facilmente em outras aplicaes que necessitam de uma funcionalidade similar.

2.4. View
Esta camada compreende todos os detalhes da implementao da interface de usurio. Aqui os componentes grficos fornecem as representaes do estado interno da aplicao e oferecem aos usurios as formas de interagir com a aplicao. Nenhuma outra camada interage com o usurio, somente a View. Ter uma camada View separada, fornece diversos benefcios. Por exemplo, mais fcil incluir a presena de um grupo de design separado na equipe de desenvolvimento. Este grupo de design pode se concentrar completamente no estilo, look & feel da aplicao sem ter que se preocupar a respeito de outros detalhes. Alm disso, ter uma camada View separada, torna possvel fornecer mltiplas interfaces aplicao. Considerando que a funcionalidade do ncleo da aplicao encontra-se em algum outro lugar (na Model), mltiplas interfaces podem ser criadas (baseadas no Swing, baseadas na WEB, baseadas na console), todas podem ter diferentes look & feel e todas podem simplesmente utilizar os componentes da Model com suas funcionalidades.

2.5. Controller
Por ltimo, a arquitetura MVC inclui a camada do componente Controller. Esta camada contm detalhes sobre o fluxo de programa/transio da tela e tambm responsvel por capturar os eventos gerados pelo usurio na camada View e, possivelmente, atualizar os componentes da Model usando dados fornecidos pelo usurio. H diversos benefcios em se ter uma camada separada para a Controller. Primeiro, tendo um componente da aplicao separado para conter os detalhes da transio de tela, componentes da View podem ser projetados de maneira que no necessitem estar cientes um do outro. Isto facilita a mltiplas equipes independentes de desenvolvimento que trabalham simultaneamente. As interaes entre os componentes da View so abstradas na Controller. Segundo, tendo uma camada separada que atualize os componentes da Model, detalhes so removidos da camada de apresentao. A camada de apresentao pode se especializar em sua finalidade preliminar de apresentar dados ao usurio. Os detalhes de como os dados do usurio mudam o estado da aplicao so escondidos dentro do componente da Controller. Isto fornece uma separao limpa entre a lgica de apresentao e a lgica de negcio. No podemos afirmar que o padro MVC possua somente benefcios e nenhum efeito colateral. Dividir a aplicao em trs componentes separados resulta em aumento de complexidade. Para pequenas aplicaes que no se beneficiam do acoplamento fraco da Model, pode ser excessivo o uso deste padro. Entretanto, melhor lembrar que as aplicaes freqentemente comeam pequenas e tornam-se sistemas complexos. Assim, deve-se sempre buscar o acoplamento fraco.

Programao WEB

JEDITM

3. Arquitetura MVC para a WEB: A Arquitetura Model 2


A arquitetura MVC foi modificada ligeiramente e adaptada para o uso em aplicaes WEB. A arquitetura resultante foi chamada, ento, de arquitetura Model 2. As aplicaes Model 2 tm tipicamente o seguinte:

Uma servlet Controller que fornece um ponto de acesso nico ao restante da aplicao. Este Controller responsvel por fornecer a gerncia central do fluxo da aplicao e dos servios como a manipulao da segurana e a gerncia do usurio. Este tipo de controlador frequentemente chamado de Front Controller. A servlet Controller usa tipicamente configuraes XML para determinar o fluxo da aplicao e o processamento do comando. Tambm emprega, geralmente, os componentes de ajuda que servem como objetos Command. Isto significa que tais componentes de ajuda esto associados com s aes do usurio e so criados/chamados para gerenciar aquelas aes enquanto ocorrem, chamando os componentes da Model quando necessrio. Isto serve para desacoplar a servlet Controller da Model.

Usar tal arquitetura foi provado ser vantajoso para nossas aplicaes. Implement-la pode ser feito mais facilmente mediante o uso de frameworks existentes. Estes frameworks fornecem muitos dos detalhes de configurao de modo que possamos concentrar nossa ateno em tarefas mais importantes. Fornecem tambm teis funcionalidades adicionais teis. Neste mdulo, trataremos dos dois frameworks mais populares: Struts e JavaServer Faces (JSF). Debateremos primeiramente sobre o Struts em seguida a JSF.

Programao WEB

JEDITM

4. STRUTS
Struts um framework de cdigo aberto que disponibilizado e gerenciado pela Apache Software Foundation. Temos abaixo uma representao de como o Struts gerencia a arquitetura Model 2:

Figura 2: Struts e a arquitetura Model 2

Vamos examinar os objetos fornecidos pelo framework para cada um dos componentes Model, View e Controller.

4.1. Controller
4.1.1. ActionServlet No centro da implementao do Controller do framework Struts encontra-se a ActionServlet. Esta serve como uma servlet Front Controller e fornece um nico ponto de acesso ao restante da aplicao. Contm tambm a lgica de manipulao da requisio do cliente atravs da requisio HTTP do cliente e, baseado na requisio, ou redireciona o usurio diretamente pgina WEB ou despacha a requisio ao objeto gerenciador chamado Actions que ser, ento, responsvel por determinar o resultado da resposta.
Programao WEB 8

JEDITM

A ActionServlet conhece todos estes detalhes qual Action chamar para gerenciar determinada requisio, qual componente de View deve ser chamado em seguida lendo esta informao de um arquivo de configurao XML, geralmente nomeado struts-config.xml. Esta servlet fornecida pelo framework Struts. Tudo o que necessrio para inclu-la em nossa aplicao configur-la corretamente no descritor de implementao da aplicao. Abaixo est um trecho de web.xml exibindo como configurar o ActionServlet para o uso: ... <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> <init-param> <param-name>config</param-name> <param-value>/WEB-INF/struts-config.xml</param-value> </init-param> </servlet> ... <servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> 4.1.2. Action Como mencionamos antes, algumas requisies do cliente so delegadas s instncias de objetos da Action por nossa classe servlet Front Controller. Todos os objetos Action definem um mtodo chamado execute() e este o mtodo que chamado pela ActionServlet para gerenciar a requisio. O framework Struts fornece aos desenvolvedores somente a classe base Action. Para incluir objetos Action como gerenciadores de requisies em sua aplicao, os desenvolvedores devem estender esta classe base e fornecer uma implementao para o mtodo execute(). Uma atividade comum em aplicaes WEB o incio de uma sesso do usurio. Abaixo mostrada uma implementao da classe LoginAction que poderia ser utilizada para gerenciar tais requisies. package actions; import forms.LoginForm; import javax.servlet.http.*; import org.apache.struts.action.*; public class LoginAction extends Action { public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { // faz o cast do objeto genrico ActionForm // para a implementao especfica ActionForm // configurada para esta Action LoginForm loginForm = (LoginForm) form; // Recupera os dados especificados pelo usurio. String loginName = loginForm.getLoginName(); String password = loginForm.getPassword();

Programao WEB

JEDITM

// Verifica se o usurio correto if (!(loginName.equals("JEDI") && password.equals("JEDI"))) return mapping.findForward("failure"); // Armazena o resultado no session scope para uso no restante da aplicao HttpSession session = request.getSession(); session.setAttribute("USER", loginName); // o usurio efetuou o login com sucesso. Despacha o usurio para // o restante da aplicao. return mapping.findForward("success");

Observe que a implementao acima emprega o uso de um objeto de negcio, chamado UserService, para a autenticao do usurio e no fornece diretamente sua prpria implementao no mtodo execute(). Instncias de Action devem ser criadas desta maneira a funcionalidade central deve ser delegada aos objetos de negcio (que podem ser considerados parte da Model), no implementada na prpria Action. As nicas atividades que uma Action deve executar so:

Recuperar as informaes fornecidas pelo JavaBean de usurio do ActionForm associado. Traduzir dados do formulrio em parmetros requeridos pelos objetos de negcio que implementam a funcionalidade. Recuperar o resultado da operao do objeto de negcio e determinar a View seguinte para onde o usurio deve ser encaminhado. Opcionalmente, armazenar os resultados dos dados da operao de negcio na sesso ou solicitar objetos que sero utilizados pelo restante da aplicao.

Convm lembrar que ao codificar os exemplos dos objetos Action, que o framework ir criar uma nica cpia do objeto e us-lo para facilitar todas as requisies. Isto significa que devemos sempre codificar a Action para ser thread-safe e certificar em utilizar sempre variveis locais e no variveis de classe. Instncias de Action so capazes de instruir a ActionServlet para qual componente de View delegar a resposta retornando instncias de objetos ActionForward. Actions tm o acesso a estes objetos de ActionForward com o uso de um objeto ActionMapping, que encapsula os dados de mapeamentos de caminhos lgicos para cada Action. Estes mapeamentos so lidos do arquivo de configurao pela ActionServlet, que responsvel por enviar a ActionMapping necessria Action. Deste modo, para instruir a ActionServlet a passar o controle para um caminho lgico chamado success, nossa Action executa a seguinte instruo: return mapping.findForward("success"); 4.1.3. ActionForm O framework Struts fornece uma classe chamada ActionForm. Instncias desta classe so usadas para facilitar a recuperao dos dados dos formulrios preenchidos pelo usurio atravs das instncias de Action que gerenciam os eventos de formulrio. Cada instncia de ActionForm representa um formulrio ou um conjunto de formulrios, define as propriedades que correspondem aos elementos do(s) formulrio(s) que representam, e as expem usando mtodos setters e getters publicamente acessveis. Actions que necessitam dos dados dos formulrios, simplesmente chamam os mtodos getters da instncia de ActionForm. Struts fornece a definio base da classe; os desenvolvedores tm a responsabilidade de criar suas prprias implementaes. Abaixo listado o ActionForm usado no exemplo acima: import org.apache.struts.action.*; public class LoginForm extends ActionForm { private String loginName;
Programao WEB 10

JEDITM

private String password; public String getLoginName() { return loginName; } public void setLoginName(String loginName) { this.loginName = loginName; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; }

Ao codificar ActionForms, devemos lembrar de:


Definir propriedades (com mtodos get e set) para cada elemento representado no formulrio. NO colocar nenhuma lgica de negcio no ActionForm. So concebidos meramente para transferir dados entre componentes da View e do Controller e por isso no so utilizados pela lgica de negcio. Opcionalmente, incluir um mtodo de validao dos dados antes que o controle passe para a Action.

4.1.4. Arquivo struts-config.xml Atua como arquivo de configurao para os componentes do framework Struts. Podemos definir qual Action chamada para cada requisio, que componente de formulrio usar para cada Action e o mapeamento de nomes lgicos para caminhos reais, entre outros. Abaixo, temos uma cpia do arquivo struts-config.xml usado para o exemplo acima: <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd"> <struts-config> <form-beans> <form-bean name="loginForm" type="login.LoginForm"/> </form-beans> <action-mappings> <action name="loginForm" path="/login" scope="request" type="login.LoginAction"> <forward name="success" path="/success.jsp"/> <forward name="failure" path="/failure.jsp"/> </action> </action-mappings> </struts-config> Descreveremos, a seguir, cada um desses elementos. <!DOCTYPE ...> Define o arquivo XML como sendo um arquivo de configurao para utilizao pelo framework Struts. Excluir esta linha, ou mesmo digit-la errado, resultar em erros quando a aplicao carregar. <struts-config> Elemento raiz do arquivo de configurao. Todos os outros elementos so filhos desse elemento. <form-beans>
Programao WEB 11

JEDITM

Marca o incio e o fim das definies das instncias de uma classe ActionForms. Elementos <formbeans> DEVEM ser colocados como filhos deste elemento. <form-bean> Define uma instncia de ActionForm que pode ser utilizada pela aplicao. Tem dois atributos:

name o nome lgico a ser associado com a classe ActionForm type o nome completo da classe ActionForm.

<action-mappings> Marca o incio e o fim das definies de aes e seus mapeamentos. Todos os elementos <action> DEVEM ser colocados como filhos deste elemento. <action> Define uma instncia de um objeto Action para utilizao pela aplicao. A maior parte dos elementos de ao implementa os seguintes atributos:

name o nome do elemento <form-bean> a ser utilizado nesta ao. path o caminho relativo ao contexto a ser utilizado por esta Action. Qualquer requisio a este caminho resulta na chamada da Action definida. scope contexto do escopo onde nossa ActionForm pode ser acessada. Isto informa onde a ActionServlet dever armazenar a instncia da classe ActionForm. type o nome de classe Action.

<forward> Aes podem ter nenhum ou muitos elementos de redireo. Este elemento define o mapeamento lgico entre um nome e um caminho na nossa aplicao. Tem os seguintes atributos:

name o nome lgico do elemento de redireo que pode ser utilizado pela instncia de Action. path o caminho para o componente de visualizao associado a este redirecionador.

4.1.5. Resumo do que se deve fazer para a camada Controller: Executar uma nica vez:

Configure o ActionServlet no descritor de instalao da nossa aplicao Crie um objeto ActionForm que representar todos os dados obtidos do formulrio. Crie um objeto Action que, no seu mtodo de execuo, defina como o formulrio ser processado. Crie uma entrada de configurao para o objeto ActionForm em struts-config.xml, dentro da seo <form-beans>. Crie uma entrada de configurao para o objeto Action em struts-config.xml, dentro da seo <action-mappings>. Configure todos os redirecionadores usados pela Action, colocando elementos <forward> dentro do corpo de definio <action> da ao.

Para cada processador de formulrio adicionado aplicao:


4.2. Model (Modelo)


O framework Struts no fornece explicitamente nenhum componente dentro de Model. Quais objetos utilizar como componentes Model deixado a critrio do desenvolvedor, apesar de serem normalmente JavaBeans ou, eventualmente, Entreprise JavaBeans (EJB).

Programao WEB

12

JEDITM

4.3. View (Visualizao)


Struts pode utilizar qualquer tecnologia da camada de apresentao, apesar de, na maioria dos casos, utilizar JSP e/ou HTML. O que o Struts fornece para esta camada um conjunto de bibliotecas de tags que permite utilizar as facilidades do Struts para popular e validar automaticamente os formulrios. 4.3.1. struts-html Struts fornece uma biblioteca de tags chamada struts-html que imita muitas das funcionalidades das tags HTML padro, mas traz tambm novas funcionalidades. Esta biblioteca de tags mais utilizada na criao de formulrios da aplicao. Observaremos o exemplo do formulrio descrito a seguir. <%@page contentType="text/html" pageEncoding="UTF-8"%> <%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html" %> <html> <head> <title>Login Page</title> </head> <body> <h1> Login Page </h1> <br/> <html:form action="/login"> User Name : <html:text property="loginName"/> <br/> Password : <html:password property="password"/> <br/> <html:submit/> </html:form> </body> </html> Este e o formulrio utilizado no exemplo anterior. Observe como os elementos HTML padronizados como <form>, <input type="text">, <input type="password"> e <input type="submit"> foram substitudos pela biblioteca de tags struts-html. Iremos, a seguir, descrever estas tags. <html:form> A tag <html:form> renderiza um formulrio em HTML. Cada tag do formulrio associada a um mapeamento de aes definidas pelo atributo action. O valor deste atributo action especifica o caminho do mapeamento da ao. Revendo o arquivo de configurao utilizado no exemplo anterior, ... <action name=loginForm path=/login scope=request type=login.LoginAction> ... Notamos que o valor do atributo path coincide com o valor no atributo action na tag <html:form>. Isso indica que este formulrio, quando submetido, ser enviado classe LoginAction para seu processamento. Uma das condies para termos uma tag <html:form> vlida que cada um dos campos que ela contenha deve ser definido no ActionForm especificado para o mapeamento da ao particular. Outros atributos possveis:

method - pode ser tanto POST como GET. Define o mtodo HTTP a ser utilizado ao submeter o formulrio

<html:text> Esta tag renderiza o campo padro de entrada de texto do HTML. O atributo property especifica
Programao WEB 13

JEDITM

qual propriedade no ActionForm est ligada a ele. Uma vez que o valor do atributo no exemplo acima loginName, este campo de texto vinculado propriedade loginName do formulrio LoginForm. Outros atributos disponveis para esta tag:

size define o tamanho do campo de texto a ser mostrado maxlength define o comprimento mximo do valor informado pelo usurio

<html:password> Esta tag renderiza um campo de senha padro do HTML. O atributo property especifica a qual propriedade do ActionForm est ligada. No nosso exemplo, este campo est ligado propriedade password do LoginForm. Em nossas discusses anteriores sobre as tags <html:text> e <html:password>, foi mencionado que eles esto ligados a propriedades da instncia da classe ActionForm associadas ao formulrio. Isto significa, em termos prticos, que os valores informados nestes campos sero automaticamente atribudos s propriedades correspondentes ao objeto ActionForm. Alm disso, se houvessem valores prvios no objeto ActionForm (o formulrio j ter sido acessado), os campos do formulrio seriam automaticamente preenchidos com valores do objeto ActionForm. Outras tags na biblioteca de tags struts-html: <html:hidden> Renderiza um campo de formulrio HTML oculto. Exemplo de utilizao: <html:hidden property="hiddenField"/> <html:radio> Renderiza um controle HTML do tipo radio button. Exemplo de utilizao: <html:radio property="radioField"/> <html:select>, <html:option> A tag <html:select> utilizada para renderizar uma lista de seleo. As opes para esta lista de seleo so especificadas usando as tags <html:option>. Exemplo de utilizao: <html:form action="/sampleFormAction"> <html:select property="selectField" size="5"> <html:option value="0 value">0 Label</html:option> <html:option value="1 value">1 Label</html:option> <html:option value="2 value">2 Label</html:option> </html:select> </html:form> O exemplo acima gera uma lista de seleo com tamanho de 5 itens (size="5"). Observe que o corpo da tag <html:option> atua como um rtulo para este item da lista, enquanto o atributo value especifica o valor que ser repassado ao quando ocorrer sua submisso. <html:checkbox>, <html:textarea> So utilizados para renderizar campos de caixa de seleo e de rea de texto, respectivamente. 4.3.2. Resumo de coisas a fazer para a camada View: Executar somente uma vez:

Configure as bibliotecas de tags para utilizao no deployment descriptor da aplicao. Coloque os arquivos JAR contendo a implementao das bibliotecas de tags no diretrio
14

Programao WEB

JEDITM

WEB-INF/lib da aplicao. Para cada formulrio a ser criado:


Adicione a diretiva taglib apropriada pgina JSP para permitir a utilizao da biblioteca de tags struts-html. No lugar da tag <form>, utilizar a tag <html:form>. Especifique no seu atributo Action e o caminho da Action que processar o formulrio. No lugar das tags de campo HTML (por exemplo a tag <input type="text">), utilize as tags includas na biblioteca de tags struts-html que desempenham funcionalidade semelhante (por exemplo a tag <html:text>). Assegure-se que todos os campos de entrada presentes na definio do formulrio estejam presentes como propriedades no objeto ActionForm associado com esta requisio. NO necessrio que todas as propriedades no objeto sejam mostradas como campos, mas requer que todos os campos estejam presentes como propriedades. Lembre-se de fechar a tag <html:form>.

4.4. Entendendo o Struts como um todo


Para compreender como o framework Struts funciona como um todo, vamos tomar como exemplo o cenrio visto acima: a entrada de um usurio no sistema. Antes mesmo de o usurio entrar no stio, o ActionServlet carrega o arquivo de configurao e l os detalhes. Assim, quando o usurio acessar o formulrio de login, o framework j sabe qual ActionForm associada que armazenar seus detalhes e qual Action deve ser processada na submisso do formulrio. Quando a pgina de login carregar, as tags struts-html que utilizamos tentam renderizar os campos HTML. Se o ActionForm para este formulrio no existir, a pgina no ser mostrada. Se houver mais campos no formulrio do que propriedades no ActionForm para lhes dar suporte, a pgina tambm no ser mostrada. Se o ActionForm existir, as tags vero se h algum valor armazenado no ActionForm. Se houver, os campos do formulrio so prenchidos com esses dados. Se no, os campos do formulrio sero deixados vazios e o usurio ver um formulrio em branco. Quando um formulrio submetido, os valores nos campos do formulrio so automaticamente atribudos ao objeto ActionForm pelo framework Struts. Este objeto , ento, passado ao Action handler apropriado, juntamente com o objeto ActionMapping que traz detalhes dos mapeamentos, como especificados no arquivo de configurao. O objeto Action executa o seu processamento e, ento, avisa ao ActionServlet para onde ir em seguida, especificando um dos redirecionamentos configurados no mapeamento. O ActionServlet, ento, redireciona o usurio para aquela pgina.

Programao WEB

15

JEDITM

5. Exerccios
5.1. Material Educacional
Crie uma aplicao WEB baseada em Struts. A aplicao ser usada para gerenciar e administrar um endereo WEB que permite o download de material educacional. H dois nveis de usurio para esta aplicao: usurio comum e usurio administrador. As atividades disponveis para os administradores so: a) Gerenciamento do download de material incluso, alterao e excluso de downloads b) Gerenciamento dos usurios incluso, alterao e excluso de usurios c) Relatrio de atividade dos usurios os administradores tm acesso a uma pgina que mostra uma lista de usurios classificados pela quantidade de downloads em ordem decrescente. Ao selecionar um usurio nesta lista, ser mostrado um histrico detalhado dos downloads deste usurio As atividades disponveis para os usurio comuns so: a) Navegao pelos materiais para download b) Seleo de material para baixar sua implementao NO necessita realmente prover material para download. A aplicao deve ter um link que, ao ser selecionado, simular um download. Ambos tipos tero um ponto comum de incio para a aplicao: uma pgina de entrada que receber o nome do usurio e sua senha pessoal. A aplicao ter, ento, que determinar o nvel de autorizao deste usurio e redirecion-lo pgina apropriada. Descrio das Telas Alm da pgina de entrada, que pode ser implementada simplesmente por dois elementos de entrada de texto e um boto de submisso, h diversas outras telas que compe esta aplicao. Para os administradores, a seqencia de telas pode ser descrita pelo seguinte mini-roteiro:

Pgina de Contedo Principal apresenta trs links, cada um correspondendo a um grande grupo de atividades permitidas a um administrador Pgina de Gerenciamento de Downloads apresenta ao administrador opes para adicionar, atualizar ou apagar material de download Pgina para Adicionar Material para Download contm um formulrio com os elementos de entrada necessrios para inserir um novo material para download Pgina para Atualizar Material para Download contm um formulrio com os elementos de entrada necessrios para atualizar um material existente para download Pgina para Apagar Material para Download contm um formulrio com um campo de texto que receber o identificador do material como entrada para excluso Pgina de Gerenciamento de Usurio apresenta ao administrador opes para adicionar, atualizar ou apagar um usurio Pgina para Adicionar Usurio contm um formulrio com os elementos de entrada necessrios para adicionar um novo usurio Pgina para Atualizar Usurio contm um formulrio com os elementos de entrada necessrios para atualizar um usurio existente Pgina para Apagar Usurio contm um formulrio com um campo de texto que receber como entrada o identificador do usurio para excluso Pgina de Atividade dos Usurios lista de usurios em ordem decrescente de acordo com a quantidade de downloads. Clicar num usurio da lista levar o administrador a uma
16

Programao WEB

JEDITM

pgina detalhada de downloads do usurio


Pgina Detalhada de Downloads do Usurio apresenta um histrico detalhado para um usurio em particular Pgina de Erro do Administrador pgina apresentada em caso de qualquer erro na aplicao. Mostra a natureza do erro ao administrador Pgina de Navegao pela Lista de Material de Download a lista contm somente o nome do download. Clicar em um determinado nome envia o usurio a uma pgina mais detalhada Pgina Detalhada do Material para Download contm detalhes completos sobre o item de download selecionado. Esta pgina contm um link que pode ser utilizado para realizar o download do material Pgina de Erro pgina apresentada em case de qualquer erro na aplicao. Mostra a natureza do erro do usurio

O lado do usurio ser mais simples, contendo as seguintes pginas:

Programao WEB

17

JEDITM

Parceiros que tornaram JEDITM possvel

Instituto CTS Patrocinador do DFJUG. Sun Microsystems Fornecimento de servidor de dados para o armazenamento dos vdeo-aulas. Java Research and Development Center da Universidade das Filipinas Criador da Iniciativa JEDITM. DFJUG Detentor dos direitos do JEDITM nos pases de lngua portuguesa. Banco do Brasil Disponibilizao de seus telecentros para abrigar e difundir a Iniciativa JEDITM. Politec Suporte e apoio financeiro e logstico a todo o processo. Borland Apoio internacional para que possamos alcanar os outros pases de lngua portuguesa. Instituto Gaudium/CNBB Fornecimento da sua infra-estrutura de hardware de seus servidores para que os milhares de alunos possam acessar o material do curso simultaneamente.

Programao WEB

18

You might also like