Você está na página 1de 5

Java: Struts na prtica de ponta a ponta

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.

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. Um framework de aplicao deve possuir as seguintes caractersticas:

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. Modelo MVC-2 x Modelo MVC O termo Modelo 2 (ou MVC-2) surgiu na especificao 0.92 da Servlet/JSP. Este modelo era especificado como uma arqutetura que utiliza servlets e as pgnas JSP juntas na mesma aplicao. No modelo2, os servlets so responsveis pelo acesso a dados e tambm pelo fluxo navegacional, enquanto as pgnas JSP lidam com a apresentao. Este modelo permite que engenheiros Java e os desenvovedores HTML trabalhem cada um em sua parte da aplicao. Desta forma, a aparncia da aplicao pode ser alterada (HTML) sem que a funcionalidade ou fluxo de navegao precise acompanhar as alteraes. O framewok Struts baseado na arquitetura do modelo 2. Fornece um servlet controlador para lidar com o fluxo navegacional e as classes especiais para ajudar com o acesso dos dados. Uma biblioteca de tags personalizadas enviada com o framework para tornar o Struts ainda mais fcil de usar com as pginas JSP. Pode-se observar que o Struts implementa o pattern MVC, onde as camadas de Modelo, Visualizao e Controle devem ser implementadas separadamente 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. 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 jakarta-struts-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.

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.