Você está na página 1de 12

Linha de Cdigo - Java: Struts na prtica de ponta a ponta

http://www.linhadecodigo.com.br/ArtigoImpressao....

s eg und a-feira, 2 5 d e julho d e 2 0 1 1

Bus ca

Artigo
Java: Struts na prtica de ponta a ponta
Por: Vicente Goetten Jnior [Entre em contato com o autor ]
Visite o site do autor: www.goetten.org. Atua com o Analista de Sistem as da Datasul Tecnologia (www.datasul.com .br), em Joinv ille SC. form ado em Tecnologia da Inform ao pela UTESC (www.utesc.br) e possui MBA em Gesto em presarial pela F undao Getlio Vargas.

F eed de artigos. F eed de artigos deste autor. Gere seu feed personalizado Assunto

Java: Str uts n a pr tica de pon ta a pon ta


Publicado em: 24/05/2006

Boa parte do framework Struts foi desenvolvido entre maio de 2000 e junho de 2001, quando sua primeira verso foi lanada. A responsabilidade esteve com uma equipe de aproximadamente 30 desenvolvedores, sendo que Craig R. MacClanahan foi o primeiro arquiteto e desenvolvedor do framework. Aps quatro anos de estrada, o Struts tornou-se padro de mercado para aplicaes web em java. Atualmente, vrios frameworks so apontados como substitutos para o Struts, como o Java Server Faces, de responsabilidade do prprio Craig MacClanahan. No entanto, a procura por profissionais com conhecimento neste framework deve continuar por muitos anos. A estrada para o sucesso das aplicaes web um caminho rduo, despendendo suor de pesquisadores e tambm do prprio desenvolvedor. Neste caso, como aplicao web fica subentendido de que esta no apenas uma aplicao trivial, composta por um formulrio contendo dois ou trs campos que so armazenados em um banco de dados. Mas sim uma aplicao robusta que atravessa diversas camadas, utiliza diferentes tecnologias, cobertas por anlise e utilizao de padres (design-patterns). O projeto e desenvolvimento deste tipo de aplicao levam os desenvolvedores para o limite da lgica. Solues mirabolantes so criadas para resoluo de certos problemas. Algumas destas solues funcionam, outras no. O framework Struts, criado por Craig R. McClanahan e doado para a fundao Apache (Apache Software Foundation) em 2000 uma implementao de cdigo aberto do Modelo 2, bastante similar ao modelo MVC (Model, View and Controller design pattern para que as camadas de regra de negcio, visualizao e controle estejam bem separadas na aplicao). Neste contexto, ao longo desse artigo sero abordadas as tecnologias envolvidas no framework struts, j que este no uma tecnologia especfica, mas sim um conjunto de tecnologias que tornam o seu aprendizado ainda mais desafiador. Frameworks Um framework pode ser entendido como sendo uma aplicao reutilizvel e semi-completa que pode ser especializada para produzir softwares personalizados. As aplicaes construdas com o apoio de um framework so, de um modo geral, bastante semelhantes. Os desenvolvedores que trabalham em aplicaes eletrnicas convencionais esto acostumados a kits de ferramentas e a ambientes de desenvolvimento que aproveitam a igualdade entre as aplicaes. Os frameworks da aplicao fornecem uma base comum reutilizvel podendo servir como fundao para um produto especfico.

1 de 12

25-07-2011 17:51

Linha de Cdigo - Java: Struts na prtica de ponta a ponta


Um framework de aplicao deve possuir as seguintes caractersticas:

http://www.linhadecodigo.com.br/ArtigoImpressao....

compreender mltiplas classes ou componentes, cada qual provendo uma abstrao de um conceito em particular; definir como estes conceitos trabalharo juntos para resolver um determinado problema; possuir componentes reutilizveis; permitir um alto nvel de padronizao. Framework Jakarta Struts O Struts um framework para web que se tornou padro na comunidade JEE (Java Enterprise Edition). O Struts prov uma implementao do modelo MVC-2 (ver Nota 1) para construes de aplicaes web.
Nota 1 . Mod elo MVC-2 x Mod elo MVC O term o Modelo 2 (ou MVC-2) surgiu na especificao 0.92 da Serv let/JSP. Este m odelo era especificado com o um a arqutetura que utiliza serv lets e as pgnas JSP juntas na m esm a aplicao. No m odelo2, os serv lets so responsv eis pelo acesso a dados e tam bm pelo flux o nav egacional, enquanto as pgnas JSP lidam com a apresentao. Este m odelo perm ite que engenheiros Jav a e os desenv ov edores HTML trabalhem cada um em sua parte da aplicao. Desta form a, a aparncia da aplicao pode ser alterada (HTML) sem que a funcionalidade ou flux o de nav egao precise acom panhar as alteraes. O fram ewok Struts baseado na arquitetura do m odelo 2. F ornece um serv let controlador para lidar com o flux o nav egacional e as classes especiais para ajudar com o acesso dos dados. Um a biblioteca de tags personalizadas env iada com o fram ework para tornar o Struts ainda m ais fcil de usar com as pginas JSP. Pode-se observ ar que o Struts im plem enta o pattern MVC, onde as cam adas de Modelo, Visualizao e Controle dev em ser im plem entadas separadam ente na aplicao.

Mas qual a finalidade do Struts? Da mesma forma que a construo de uma casa, ponte e prdio necessitam de uma base mantenedora, os desenvolvedores utilizam o Struts para suportar cada camada de uma aplicao. O nome Struts deve-se ao papel por ele desempenhado nas aplicaes web, o de fornecer toda a estrutura inicial. O Struts implementa o controlador da aplicao (a letra C da sigla MVC-2), sendo este controlador o responsvel por toda a logstica e tambm pela integrao das camadas de visualizao e regra de negcio do sistema. Struts de ponta a ponta Para facilitar o entendimento do Struts, observe na Figura 1 o fluxo normal de uma aplicao utilizando o Struts, e tambm quais tecnologias esto envolvidas em cada uma das etapas.

As etapas esto descritas a seguir, de acordo com a numerao indicada na Figura 1: 1. Cada solicitao HTTP tem que ser respondida neste mesmo protocolo. Desta forma, inicia-se uma aplicao que utiliza o Struts. Esta solicitao normalmente definida como requisicao.do, que um nome lgico para a requisio do usurio. 2. A solicitao requisicao.do mapeada no arquivo struts-config.xml. Neste arquivo esto todas as definies do controlador do framework. O arquivo ento lido por um ActionServlet (que far efetivamente o papel do controlador da aplicao) na inicializao da aplicao criando ento um banco de objetos com o arquivo de configurao. No arquivo de configurao so definidos os Actions (requisies dos usurios) para cada solicitao. 3. O ActionServlet (que faz o papel do controlador da aplicao), define o Action correspondente para a solicitao. Um Action pode validar a entrada de dados e acessar a camada de negcios para recuperar as informaes nos bancos de dados e outros servios de dados. 4. A requisio HTTP pode ser feita tambm atravs de um formulrio HTML. Em vez de fazer com que cada Action retire os valores do campo da solicitao, o ActionServlet coloca a entrada em um JavaBean. Estes JavaBeans so definidos como FormBeans no Struts e estendem a classe org.apache.struts.action.ActionForm (os Actions e FormBeans sero abordados com maiores detalhes no decorrer do artigo). 5. O Action pode acessar o FormBean, efetuar qualquer operao e armazenar o resultado em um ResultBean.

2 de 12

25-07-2011 17:51

Linha de Cdigo - Java: Struts na prtica de ponta a ponta

http://www.linhadecodigo.com.br/ArtigoImpressao....

6. O Action interage com a camada de negcio onde uma base de dados poder ser atualizada. Em geral, o Struts no apresenta a resposta em si, mas envia a solicitao para outro recurso, como uma pgina JSP. O Struts fornece a classe ActionForward que pode ser usada para armazenar o caminho para uma pgina sob um nome lgico. Desta forma, o endereo ficar oculto para o usurio. Este visualizar apenas o nome definido para o caminho (por exemplo, resposta.do). Este recurso evita que o usurio possa estar visualizando uma verso desatualizada da aplicao, j que as requisies sero feitas apenas para nomes lgicos. Ao completar a lgica de negcio, o Action selecionar e retornar um ActionForward para o servlet. Ento, o servlet usar o caminho armazenado no objeto ActionForward para chamar a pgina e completar a resposta. Estes detalhes logsticos da aplicao so definidos no objeto ActionMapping. Cada ActionMapping est relacionado a um caminho especfico. Quando este caminho for selecionado, como requisicao.do, o servlet ir recuperar o objeto ActionMapping. O mapeamento informar ao servlet quais Actions, ActionForms e ActionForwards usar. Ambiente de desenvolvimento Para desenvolver uma aplicao que utilize o framework Struts,so necessrios que sejam instalados e configurados os seguintes pacotes: JSE Java Standard Edition (kit de desenvolvimento Java); Servlet Container, como o TOMCAT; Apache Ant (opcional ferramenta de build); Framework Struts. Todas as ferramentas que compem este ambiente de desenvolvimento podem ser obtidas gratuitamente. A partir deste ponto, o leitor dever estar com o kit de desenvolvimento Java, Apache ANT e tambm com o Tomcat devidamente instalados e configurados, j que a instalao e configurao destes pacotes no sero abordadas neste artigo. Para desenvolvimento da aplicao de exemplo deste artigo foram utilizadas as seguintes verses: JSE Java Standard Edition 1.5.0_04 (kit de desenvolvimento Java): pode ser obtido em http://java.sun.com/j2se/1.5.0/download.jsp. Servlet Container Tomcat 5.5: pode ser obtido em http://jakarta.apache.org/tomcat /index.html. Apache Ant 1.6.5: pode ser obtido em http://ant.apache.org. Framework Struts 1.2.7: pode ser obtido em http://struts.apache.org. Obtendo e instalando o Struts O Struts mantido pelo Apache Software Foundation e possui a licena Apache, sendo esta OpenSource. A licena Apache possibilita que o framework seja distribudo juntamente com a aplicao sem que seja necessrio efetuar qualquer pagamento fundao. O Struts pode ser obtido no site oficial do projeto, http://struts.apache.org. Os arquivos binrios so distribudos em diversos formatos na pgina de download http://struts.apache.org /acquiring.html. Nesta pgina, selecione a verso 1.2.7, e o formato que desejar, como jakartastruts-1.2.7.tar.gz. O processo de instalao e configurao do Struts bastante simples: basta descompact-lo em um diretrio qualquer, como /usr/local/jakarta-struts-1.2.7 (caso esteja utilizando o linux) ou c:\apache\jakartastruts- 1.2.7 (caso esteja utilizando o Windows). Aps descompactar o Struts, ser necessrio adicionar o arquivo $STRUTS_HOME/lib /struts.jar no CLASSPATH, onde $STRUTS_HOME o diretrio principal onde o Struts foi descompactado. Veja o comando abaixo para editar o classpath: Se estiver utilizando o Linux, abra uma sesso no console (shell) e digite o comando:
CLASSPATH=/usr/local/strtus.1.2.7/lib/struts.jar:$CLASSPATH export CLASSPATH.

Se estiver utilizando o Windows, abra uma sesso do prompt de ms-dos, e digite o comando:
set CLASSPATH=c:\struts1.2.7\struts.jar;%CLASSPATH%.

Testando a instalao do Struts O Struts fornece uma aplicao semi-pronta que pode ser evoluda (exatamente o que faremos na aplicao de exemplo). Esta aplicao tambm pode ser utilizada para testar a instalao do Struts. Para isto, o arquivo $STRUTS_HOME/webapps/struts-blank.war deve ser copiado para o diretrio webapps do Tomcat, $TOMCAT_HOME/webapps (observe que $STRUTS_HOME e $TOMCAT_HOME equivalem ao diretrio de instalao do Struts e Tomcat, respectivamente). Aps reiniciar o Tomcat, a aplicao Blank, do Struts, pode ser acessada pelo endereo http://localhost:8080/struts-blank (observe que 8080 a porta padro do Tomcat. Altere conforme a configurao do seu continer). O resultado deve ser semelhante ao da Figura 2.

3 de 12

25-07-2011 17:51

Linha de Cdigo - Java: Struts na prtica de ponta a ponta

http://www.linhadecodigo.com.br/ArtigoImpressao....

Para iniciar o desenvolvimento da aplicao de exemplo deste artigo, altere o nome do diretrio strutsblank para cadastro, copie o diretrio $TOMCAT_HOME/webapps/cadastro para o seu diretrio de desenvolvimento (por exemplo, c:\devel no windows ou /home/user/devel no linux). Struts: entendendo e aplicando os conceitos A partir deste ponto, estaremos desenvolvendo uma aplicao bastante simples, mas que utilizar praticamente todos os componentes do Struts. O desenvolvimento ser a partir da aplicao semi-pronta do struts struts-blank (que j deve estar copiada para o seu diretrio de desenvolvimento com o nome de cadastro). A aplicao consiste em um formulrio onde o usurio dever informar e-mail e senha. Sero feitas algumas validaes, como verificar se todos os campos esto preenchidos, se o campo e-mail segue o formato nome@host.com, e se o campo senha possui pelo menos 8 caracteres. A aplicao, que iremos desenvolver, deve ter a estrutura de diretrios apresentada na Figura 3..

As pginas JSPs sero salvas abaixo do diretrio pages. Este o nico diretrio que o usurio poder acessar pelo navegador. Veja abaixo a funcionalidade dos demais diretrios que sero utilizados pela aplicao: WEB-INF/results: pginas JSPs contendo o resultado de uma operao realizada pelo usurio. Estas pginas podero ser chamadas somente pelo Struts. O usurio da aplicao no conseguir acess-las diretamente; WEB-INF/src: abaixo deste diretrio sero mantidos os arquivos .java da aplicao (abaixo do subdiretrio goetten); WEB-INF/lib: bibliotecas utilizadas pela aplicao; WEB-INF/classes: arquivos .class referentes s classes Java compiladas da aplicao; Os demais diretrios no sero utilizados pela nossa aplicao, no entanto fazem parte da estrutura padro de uma aplicao utilizando o Struts.

As requisies .do: conhecendo o arquivo web.xml No Struts, todas as requisies dos usurios recebem um nome lgico (conforme j vimos, este nome lgico vai evitar que o usurio visualize uma verso desatualizada de algum componente

4 de 12

25-07-2011 17:51

Linha de Cdigo - Java: Struts na prtica de ponta a ponta

http://www.linhadecodigo.com.br/ArtigoImpressao....

da aplicao). A este nome lgico acrescentada a extenso .do. No entanto, esta extenso dinmica, o desenvolvedor pode definir qual extenso utilizar em sua aplicao. O padro do Struts utilizar o .do. Na Listagem 1, a extenso para as requisies do servlet definida, e definimos tambm o servlet que dever ser invocado para estas solicitaes.
Listag em 1. Config urao do continer jakarta tomcat Fonte: cadastro/WEB-INF/web.xml. 1. <?xml version="1.0" encoding ="ISO-8859-1"?> 2. <! DOCTYPE web-app 3. PUBLIC "-//Sun M icrosystems, Inc.//DTD Web Application 2.2//EN" 4. "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd"> 5. 6. <web-app> 7. <display-name>Cadastro WebM obile M ag azine</display-name> 8. 9. <! -- Standard Action Servlet Config uration (with debug g ing ) --> 10. <servlet> 11. <servlet-name>action</servlet-name> 12. <servlet-class>org .apache.struts.action.ActionServlet</servlet-class> 13. <init-param> 14. <param-name>config </param-name> 15. <param-value>/WEB-INF/struts-config .xml</param-value> 16. </init-param> 17. <init-param> 18. <param-name>debug </param-name> 19. <param-value>2</param-value> 20. </init-param> 21. <init-param> 22. <param-name>detail</param-name> 23. <param-value>2</param-value> 24. </init-param> 25. <load-on-startup>2</load-on-startup> 26. </servlet> 27. 28. <! -- Standard Action Servlet M apping --> 29. <servlet-mapping > 30. <servlet-name>action</servlet-name> 31. <url-pattern>*.do</url-pattern> 32. </servlet-mapping > 33. 34. <! -- The Usual Welcome File List --> 35. <welcome-file-list> 36. <welcome-file>index.jsp</welcome-file> 37. </welcome-file-list> 38. 39. <! -- Struts Tag Library Descriptors --> 40. <tag lib> 41. <tag lib-uri>/tag s/struts-bean</tag lib-uri> 42. <tag lib-location>/WEB-INF/struts-bean.tld</tag lib-location> 43. </tag lib> 44. 45. <tag lib> 46. <tag lib-uri>/tag s/struts-html</tag lib-uri> 47. <tag lib-location>/WEB-INF/struts-html.tld</tag lib-location> 48. </tag lib> 49. 50. <tag lib> 51. <tag lib-uri>/tag s/struts-log ic</tag lib-uri> 52. <tag lib-location>/WEB-INF/struts-log ic.tld</tag lib-location> 53. </tag lib> 54. 55. <tag lib> 56. <tag lib-uri>/tag s/struts-nested</tag lib-uri> 57. <tag lib-location>/WEB-INF/struts-nested.tld</tag lib-location> 58. </tag lib> 59. 60. <tag lib> 61. <tag lib-uri>/tag s/struts-tiles</tag lib-uri> 62. <tag lib-location>/WEB-INF/struts-tiles.tld</tag lib-location> 63. </tag lib> 64. 65. </web-app>

Na linha 7, estamos definindo a descrio da aplicao: <display-name>Cadastro WebMobile Magazine</display-name>. Entre as linhas 9 e 26 definimos o servlet padro e o arquivo de configurao para este servlet. A definio da extenso .do fica entre as linhas 28 e 32. Observe que neste trecho mencionamos o servlet a ser mapeado (no caso o action) e definimos a sua extenso, entre as tags <urlpattern> </url-pattern>. Entre as linhas 34 e 37 definimos os arquivos indexadores da aplicao, e nas demais linhas so definidas as taglibs que sero utilizadas. Estas taglibs permitem que o desenvolvedor da camada de visualizao, o web designer, se preocupe principalmente com o layout da aplicao, utilizando tags HTML combinadas com tags especiais das taglibs configuradas. Observe que todas as taglibs definidas so fornecidas pelo Struts, no havendo necessidade de alter-las para utilizao. Configurando a aplicao Com Struts, o processo de funcionamento normal de uma aplicao : um formulrio submete os dados para um endereo (URL), como requisicao.do. Este endereo (requisicao.do) mapeado no arquivo de configurao do Struts, o struts-config.xml, para um objeto Action. Este objeto executa um mtodo para tratar a requisio. Um dos argumentos do Action um formBean, que automaticamente criado e populado com os dados submetidos do formulrio. O objeto Action invoca a lgica de negcio e lgica de acesso a dados, posiciona os resultados em um bean, sendo que este bean pode ter o seu escopo definido como sendo especfico da requisio, sesso ou at mesmo da aplicao. O Action utiliza ento o mapping.findForward para retornar uma condio, que tambm mapeada pelo struts-config.xml, podendo direcionar o resultado para uma pgina JSP.

5 de 12

25-07-2011 17:51

Linha de Cdigo - Java: Struts na prtica de ponta a ponta

http://www.linhadecodigo.com.br/ArtigoImpressao....

Na primeira etapa da aplicao, iremos definir os detalhes de configurao da aplicao. Observe a Listagem 2 referente ao arquivo de configurao do Struts.
Listag em 2. Config urao da aplicao Fonte: cadastro/WEB-INF/struts-config .xml. 1. <?xml version="1.0" encoding ="ISO-8859-1" ?> 2. <! DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Config uration 1.2//EN" "http://jakarta.apache.org /struts/dtds/struts-config _1_2.dtd"> 3. <form-beans> 4. <form-bean name="userFormBean" type="g oetten.UserFormBean"/> 5. </form-beans> 6. <g lobal-forwards> 7. <! -- Default forward to "Welcome" action --> 8. <! -- Demonstrates using index.jsp to forward --> 9. <forward name="welcome" path="/Welcome.do"/> 10. </g lobal-forwards> 11. <action-mapping s> <! -- Default "Welcome" action --> <! -- Forwards to Welcome.jsp --> 12. <action 13. path="/Welcome" 14. forward="/pag es/reg ister.jsp"/> 15. <action 16. path="/actions/reg ister" 17. type="g oetten.Reg isterAction" 18. name="userFormBean" scope="req uest" input="/pag es/action/reg ister.jsp"> 20. <forward name="success" path="/WEB-INF/results/result.jsp"/> 21. <forward name="bad-address" path="/WEB-INF/results/bad-address.jsp"/> 22. <forward name="bad-password" path="/WEB-INF/results/bad-password.jsp"/> 23. </action> 24. </action-mapping s> 25. </struts-config >

A primeira parte a ser analisada neste arquivo fica entre as linhas 15 e 23, que onde estamos definindo os Actions que sero mapeados pela aplicao e os seus possveis resultados (forwards). Observe as linhas 15 e 16 (<action path="/actions/register"), a propriedade define o nome lgico para o Action, neste caso /actions/register.do. Observe que a extenso .do no foi definida, pois j definimos esta extenso como padro no arquivo web.xml. Na linha 17 (type=goetten.RegisterAction) estamos definindo qual ser a classe Java responsvel por fazer o tratamento da requisio. J nas linhas 18 e 19 estamos definindo o Bean utilizado na requisio (userFormBean), este apenas um nome lgico para o Bean. Na linha 4 definimos o nome lgico e a classe Java referente ao Bean. Entre as linhas 20 e 22, definimos todos os possveis retornos para a requisio. O parmetro name define um nome lgico para o resultado e o parmetro path pode conter uma pgina JSP ou ainda outro Action. FormBeans Um FormBean nada mais do que um JavaBean. Os JavaBeans so classes Java que seguem um conjunto de padres de construo que facilitam a sua utilizao em ferramentas de desenvolvimento (ou frameworks) e aplicao. Um JavaBean pode ser ainda definido como um componente de software reutilizvel escrito em Java. Para ser qualificado como JavaBean, a classe tem que ser concreta e pblica e ter um construtor sem argumentos. Os JavaBeans expem os campos internos como propriedades fornecendo mtodos pblicos que seguem um padro de projeto consistente. Sabendo que os nomes patenteados seguem esse padro, as outras classes Java so capazes de usar a introspeco, onde a classe capaz de analisar a sua estrutura em tempo de execuo, para descobrir e manipular as propriedades do JavaBean. Cada campo do formulrio para ser mapeado no Action dever ter o seu devido atributo na classe, juntamente com os mtodos para definio e recuperao dos valores (set e get). Quando um formulrio HTML enviado, as duplas nome-valor so obtidas pelo controlador Struts e aplicadas em um ActionForm (org.apache.struts.action.ActionForm). O Struts compara ento os nomes das propriedades deste Bean com os nomes das duplas de entrada. Quando coincidem, o controlador define a propriedade para o valor da dupla correspondente. As propriedades extras so ignoradas. As propriedades ausentes mantm o seu valor padro. Estes pares de entrada so compostos pelos campos do formulrio HTML. Um formulrio contendo os campos e-mail e password conteria os seguintes pares, por exemplo: email=goetten@gmail.com password = 12345678 A Listagem 3 apresenta o Bean utilizado pela aplicao cadastro, o UserFormBean.java.
Listag em 3. FormBean da aplicao de cadastro Fonte: cadastro/src/g oetten/UserFormBean.java. Packag e g oetten; import org .apache.struts.action.*; public class UserFormBean extends ActionForm { private String email = "Informe o email"; private String password = ""; public String g etEmail() { return(email); } public void setEmail(String email) {

6 de 12

25-07-2011 17:51

Linha de Cdigo - Java: Struts na prtica de ponta a ponta


this.email = email; } public String g etPassword() { return(password); } public void setPassword(String password) { this.password = password; } }

http://www.linhadecodigo.com.br/ArtigoImpressao....

ResultBeans O FormBean representa os dados de entrada, ou seja, os dados submetidos de um formulrio HTML. Na maioria das aplicaes, o mais importante so os dados referentes ao resultado de uma requisio, o dado criado pela lgica de negcio, podendo ser resultado de uma computao qualquer como um clculo, ou ainda operaes realizadas no banco de dados. No modelo MVC, o ResultBean representa a letra M - o Modelo. Assim como os FormBeans, os ResultBeans tambm devem possuir mtodos para definio e recuperao de atributos. No entanto, no necessrio defini-los no arquivo de configurao do Struts (struts-config.xml) e tambm no h necessidade de estender qualquer classe do Struts. Nossa aplicao de cadastro utilizar o ResultBean SuggestionBean.java que armazenar sugestes de email e senha para o usurio. Quando o usurio submeter um e-mail invlido, ou uma quantidade de caracteres inferior mnima necessria para a sua senha, o SuggestionBean ser populado pela classe SuggestionUtils com valores sugestivos de e-mail e senha, sendo exibido na pgina de erro que reportar o email ou senha ilegal. A classe ResultBean SuggestionBean e a classe para popul-lo so apresentadas nas Listagens 4 e 5 respectivamente.
Listag em 4. Classe ResultBean para a aplicao de cadastro Fonte: cadastro/src/g oetten/Sug g estionBean.java. packag e g oetten; public class Sug g estionBean { private String email; private String password; public Sug g estionBean(String email, String password) { this.email = email; this.password = password; } public String g etEmail() { return(email); } public String g etPassword() { return(password); } public void setEmail (String email){ this.email = email; } public void setPassword (String password){ this.password = password; } } Listag em 5. Classe para popular o ResultBean Fonte: cadastro/src/g oetten/Sug g estionUtils.java. packag e g oetten; public class Sug g estionUtils { private static String [] sug g estedAddresses = /* sug estes de emails para o usurio */ { "nome.sobrenome@datasul.com.br", "nome@g mail.com", "nome@ibm.com", "nome@oracle.com" }; /* String com os poss veis caracteres para a senha do usurio */ private static String chars = "abcdefg hijklmnopq rstuvwxyz0123456789"; public static Sug g estionBean g etSug g estionBean() { /* Recuperando uma sug esto randmica para o campo de email */ String address = randomString (sug g estedAddresses); /* M ontando exemplo de senha com 8 caracteres randmicos */ String password = randomString (chars, 8); return(new Sug g estionBean(address, password)); } public static int randomInt(int rang e) { return((int)(M ath.random() * rang e)); } public static String randomString (String [] string s) { return(string s[randomInt(string s.leng th)]); } public static char randomChar(String string ) { return(string .charAt(randomInt(string .leng th()))); } public static String randomString (String string , int leng th) { String Buffer result = new String Buffer(); for(int i=0; i<leng th; i++) { result.append(randomChar(string )); } return(result.toString ()); } }

7 de 12

25-07-2011 17:51

Linha de Cdigo - Java: Struts na prtica de ponta a ponta


Action

http://www.linhadecodigo.com.br/ArtigoImpressao....

Um Action uma classe Java que estende o org.apache.struts.Action. O ActionServlet, que faz o papel de controlador da aplicao, preenche o ActionForm (JavaBean) e ento transmite-o para o Action. Um Action geralmente responsvel por validar a entrada, acessar as informaes comerciais e determinar qual ActionForward retornar para o controlador. No arquivo de configurao da aplicao, definimos o nome lgico register para o action, apontando para a classe RegisterAction.java. A Listagem 6 detalha o Action da aplicao.
Listag em 6. Action da Aplicao Fonte: cadastro/src/g oetten/Reg isterAction.java. 1. packag e g oetten; 2. import javax.servlet.http.*; 3. import org .apache.struts.action.*; 4. public class Reg isterAction extends Action { 5. public ActionForward execute(ActionM apping mapping , 6. ActionForm form, 7. HttpServletReq uest req uest, 8. HttpServletResponse response) 9. throws Exception { 10. UserFormBean userBean = (UserFormBean)form; 11. String email = userBean.g etEmail(); 12. String password = userBean.g etPassword(); 13. Sug g estionBean sug g estionBean = Sug g estionUtils.g etSug g estionBean(); 14. req uest.setAttribute("sug g estionBean", sug g estionBean); 15. if ((email == null) | | (email.trim().leng th() < 3) | | (email.indexOf("@") == -1)) { 16. return(mapping .findForward("bad-address")); 17. } else if ((password == null) | | (password.trim().leng th() < 8)) { 18. return(mapping .findForward("bad-password")); 19. } else { 20. return(mapping .findForward("success")); 21. } 22. } 23. }

Embora bastante simples, a classe RegisterAction efetua todas as aes que normalmente os Actions fazem. A classe RegisterAction estende a classe Action fornecida pelo Struts (linha 4). Entre as linhas 5 e 8 declaramos algumas classes que sero utilizadas pela aplicao. Em seguida (linha 10), h uma coero aplicada para UserFormBean para que possa ser possvel extrair os atributos e-mail (linha 11) e password (linha 12). Nas linhas 13 e 14 instanciamos o resultBean e chamamos os mtodos para definir valores aos atributos. O Action pode retornar ainda trs tipos diferentes de ActionForward: bad-address: o e-mail informado pelo usurio invalido (linha 16); bad-password: a senha informada no contm no mnimo oito caracteres (linha 18); success: todos os parmetros informados atendem a regra da aplicao (linha 20). Estes ActionForwards foram definidos no arquivo de configurao, conforme a Listagem 7.
Listag em 7. Trecho do struts-config .xml q ue define os Forwards da aplicao Fonte: cadastro/WEB-INF/strutsconfig . xml. ... <forward name="success" path="/WEB-INF/results/result.jsp"/> <forward name="bad-address" path="/WEB-INF/results/bad-address.jsp"/> <forward name="bad-password" path="/WEB-INF/results/bad-password.jsp"/> ...

Camada de visualizao Para finalizar a aplicao, necessrio que sejam criados o formulrio para que o usurio informe e-mail e senha, e os arquivos de resultado (para bad-address, bad-password e sucess). As Listagens 8, 9 e 10 apresentam os cdigos destas pginas, respectivamente. Voc pode observar que so pginas JSP simples e fceis de serem entendidas.
Listag em 8. Pg ina para ser exibida caso seja informado um e-mail invlido Fonte: cadastro/WEB-INF/results/badaddress.jsp. <%@ tag lib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@pag e contentType="text/html" %> <! DOCTYPE html PUBLIC "-//W3C//DTD XHTM L 1.0 Transitional//EN" "http://www.w3.org /TR/xhtml1/DTD/xhtml1-transitional.dtd"> <HTM L> <HEAD> <TITLE>ERRO: Endereo de Email invlido</TITLE> </HEAD> <BODY BGCOLOR="#FDF5E6"> <CENTER> <H1>Endereo de E-mail invlido</H1> O Email "<bean:write name="userFormBean" property="email"/>" No seg ue o padro nome@servidor.com.br (como., <bean:write name="sug g estionBean" property="email"/>). <P> <A HREF="../pag es/reg ister.jsp">Voltar</A>. </CENTER> </BODY> </HTM L>

8 de 12

25-07-2011 17:51

Linha de Cdigo - Java: Struts na prtica de ponta a ponta


Listag em 9. Pg ina para ser exibida caso seja informado uma senha invlida Fonte: cadastro/WEB-INF/results/badpassword.jsp. <%@ tag lib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@pag e contentType="text/html" %> <! DOCTYPE html PUBLIC "-//W3C//DTD XHTM L 1.0 Transitional//EN" "http://www.w3.org /TR/xhtml1/DTD/xhtml1-transitional.dtd"> <HTM L> <HEAD> <TITLE>Senha Invlida</TITLE> </HEAD> <BODY BGCOLOR="#FDF5E6"> <CENTER> <H1>Senha Invlida</H1> A senha dig itada "<bean:write name="userFormBean" property="password"/>" no contm a q uantidade m nima de caracteres necessrios. Exemplo de senha: <bean:write name="sug g estionBean" property="password"/>. <P> <A HREF="../pag es/reg ister.jsp">Voltar</A>. </CENTER> </BODY> </HTM L> Listag em 10. Pg ina de sucesso, caso todos os campos tenham sido preenchidos corretamente Fonte: cadastro/WEB-INF/results/result.jsp. <%@ tag lib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@pag e contentType="text/html" %> <! DOCTYPE html PUBLIC "-//W3C//DTD XHTM L 1.0 Transitional//EN" "http://www.w3.org /TR/xhtml1/DTD/xhtml1-transitional.dtd"> <HTM L> <HEAD> <TITLE>Sucesso</TITLE> </HEAD> <BODY BGCOLOR="#FDF5E6"> <CENTER> <H1>O Reg istro foi efetuado com sucesso.</H1> <UL> <LI>Email: <bean:write name="userFormBean" property="email"/> <LI>Senha: <bean:write name="userFormBean" property="password"/> </UL> </CENTER> </BODY> </HTM L>

http://www.linhadecodigo.com.br/ArtigoImpressao....

Falta agora apenas o formulrio para que o usurio possa informar e-mail e senha. A pgina JSP para este formulrio apresentada na Listagem 11.
Listag em 11. Formulrio para q ue o usurio informe e-mail e senha Fonte: cadastro/pag es/actions/reg ister.jsp. <%@pag e contentType="text/html" %> <%@ tag lib uri="/WEB-INF/struts-html.tld" prefix="html" %> <! DOCTYPE html PUBLIC "-//W3C//DTD XHTM L 1.0 Transitional//EN" "http://www.w3.org /TR/xhtml1/DTD/xhtml1-transitional.dtd"> <HTM L> <HEAD><TITLE>Reg istro de Nova Conta</TITLE></HEAD> <BODY BGCOLOR="#FDF5E6"> <CENTER> <H1>Reg istro de Nova Conta</H1> <html:form action="/actions/reg ister"> Email: <html:text property="email"/><BR> Senha: <html:password property="password"/><BR> <html:submit value="Efetuar Reg istro"/> </html:form> </CENTER> </BODY> </HTM L>

A taglibs html do Struts faz o mapeamento automtico dos campos do formulrio com os atributos do bean associado no Action, atravs da tag . Os atributos no encontrados no Bean so desconsiderados. Para poder executar a aplicao, precisamos agora compilar as classes Java, e copiar a pasta para o diretrio webapps do Tomcat. Para compilar as classes, siga os seguintes passos: 1. Abra uma sesso do console (prompt do dos ou shell do linux) e v at o diretrio cadastro/WEBINF/ src. Observe que neste diretrio encontra-se o arquivo build.xml, que o configurador para fazermos o build automtico com o Ant. 2. Execute o comando ant. Neste momento, o Ant far a compilao dos arquivos .java e posicionar os arquivos .class (.java compilados), na pasta cadastro/WEB-INF/classes /goetten. 3. Se estiver utilizando uma IDE, como o eclipse (www.eclipse.org), o build pode ser feito pela prpria IDE, conforme demonstrado na Figura 4.

9 de 12

25-07-2011 17:51

Linha de Cdigo - Java: Struts na prtica de ponta a ponta

http://www.linhadecodigo.com.br/ArtigoImpressao....

4. A pasta cadastro precisar ser copiada para o diretrio webapps do Tomcat. Aps isto, aconselhvel reiniciar o Conteiner.

Para visualizar o resultado, precisamos acessar o endereo http://localhost:8080/pages /register.jsp. O resultado pode ser observado na Figura 5.

Se tentarmos submeter o formulrio com os dados desta forma, veremos uma tela similar apresentada na Figura 6.

Se o campo de e-mail for preenchido corretamente com o e-mail vicente.junior@datasul.com.br, por exemplo, mas no campo senha for informado apenas trs dgitos, veremos uma nova

10 de 12

25-07-2011 17:51

Linha de Cdigo - Java: Struts na prtica de ponta a ponta


mensagem de erro, conforme a Figura 7.

http://www.linhadecodigo.com.br/ArtigoImpressao....

Se o campo e-mail for preenchido corretamente e o campo senha possuir no mnimo oito caracteres, exibida ento uma mensagem de sucesso, informando que o registro do usurio foi efetuado com sucesso, conforme a Figura 8.

Concluso Aplicaes web normalmente so componentes crticos do dia a dia de uma empresa. Como sempre, as equipes de desenvolvimento precisam construir aplicaes em tempo recorde, mas tm que constru-las corretamente, de forma a no dificultar a sua manuteno e fazer com que a performance no seja comprometida. O framework Struts no uma tecnologia em especfico, mas sim um conjunto destas que possibilita o desenvolvimento de aplicaes web utilizando-se do modelo MVC-2. Este modelo implementado no Struts atravs de um servlet que controla a aplicao, o ActionServlet, sendo este o responsvel pelo controle do fluxo entre as pginas JSP e as diversas camadas da aplicao. O Struts implementa ainda o padro MVC/Layers usando ActionForwards e ActionMappings para manter as decises do fluxo do controle fora da camada de apresentao. Esta definio bem clara das camadas em uma aplicao permite a distribuio do trabalho, de forma que o designer pode desenvolver as pginas JSP's sem se preocupar com o restante da aplicao, e a sua integrao ser bastante simples atravs da utilizao das taglibs do prprio Struts. Por se tratar de um conjunto de tecnologias, o aprendizado do Struts pode tornar-se bastante dispendioso. Outro ponto que pode dificultar o aprendizado deste framework a nomenclatura no muito clara dos componentes do Struts. Apesar destas dificuldades, os pontos positivos e a utilizao no mercado do Struts so fatores motivantes para seu aprendizado e utilizao. Alm destes, podemos destacar tambm: O Struts melhora, em geral, o desempenho das aplicaes Web; Os componentes ActionForm minimizam o cdigo de subclasse e encurtam as hierarquias de subclasses; As bibliotecas de tags Struts fornecem funcionalidades que agilizam o desenvolvimento

11 de 12

25-07-2011 17:51

Linha de Cdigo - Java: Struts na prtica de ponta a ponta

http://www.linhadecodigo.com.br/ArtigoImpressao....

da aplicao; Os componentes do Struts so reutilizveis pela aplicao; As estratgias de localizao do Struts reduzem a necessidade de JSPs redundantes, j que no h necessidade de desenvolver verses diferentes da pgina JSP para cada idioma da aplicao; O Struts designado como uma arquitetura aberta; O Struts leve. Todo o framework composto apenas por cinco bibliotecas de tags e cinco pacotes bsicos; O Struts compatvel com os padres (design patterns); O Struts possui cdigo fonte aberto e uma tima documentao disponvel que auxilia bastante queles que esto iniciando a utilizao desta tecnologia. Referncias Struts site oficial: http://struts.apache.org/. CAVANESS, Chuck. Programming Jakarta Struts. O'REILLY, 2002. ISBN: 0-596- 00328 5 DUDNEY, Bill. Jakarta Pitfals. Willey Publishing, 2003 ISBN: 0- 471- 44915-6 HUSTED, Ted. Struts in Action. Manning Books, 2004. ISBN: 85- 7393-299- 6 SPIELMAN, Sue. The Struts Framework - Pratical Guid for Java Programmers. Morgan Kaufmann Publishers, 2003. ISBN: 1- 55860- 862- 1

Cop yrig ht 2 0 1 1 - Tod os os Direitos R es ervad os a DevMed ia www.d evmed ia.com.b r | www.javafree.org | www.mrb ool.com | www.linhad ecod ig o.com.b r Poltica d e p rivacid ad e e d e us o | Anuncie | Cad as tre-s e | Fale conos co

12 de 12

25-07-2011 17:51

Você também pode gostar