terça-feira, 25 de setembro de 2012

Começando a explorar : Struts 2

Hoje em dia é muito difícil encontrar um tutorial fácil e simples sobre a utilização do Struts 2.

Por ser uma tecnologia que já foi substituída por outras,alguns criticam pois está desatualizada para casos de uso mais atuais, ou ter muito código, mas ainda é utilizada em empresas. Recentemente tive que trabalhar com um projeto que usava Struts e foi uma luta pra poder buscar conteúdo dessa tecnologia. 

Vou criar um projeto simples com um cadastro para mostrar a utilização dessa tecnologia. Mas antes vamos saber pra que ela serve.

Struts é um Framework que faz a função de similar a do Controller no padrão MVC criado pela sun, para aplicações web, seu objetivo é reduzir o uso dos servlets extensos e código java nas paginas jsp, ou seja, separar a camada de modelo(Java Beans, logica para interação com banco de dados) do view(paginas JSP,XML/XSLT ou velocity). Criando assim um controller(ActionServlet) fornecido pelo struts.

Ele funciona quando solicitações do cliente são enviadas para as actions definidas em suas annotations ou arquivo de configuração.


Bibliotecas necessárias: 


  • asm-3.3.jar
  • asm-commons-3.3.jar
  • asm-tree-3.3.jar
  • commons-fileupload-1.2.2.jar
  • commons-io-2.0.1.jar
  • commons-lang-2.5.jar
  • freemarker-2.3.19.jar
  • javassist-3.11.0.GA.jar
  • ognl-3.0.5.jar
  • struts2-convention-plugin-2.3.4.1.jar
  • struts2-core-2.3.4.1.jar
  • xwork-core-2.3.4.1.jar

Iniciando o projeto:


para começarmos é necessário que você baixe o conjunto de bibliotecas disponibilizadas pela Apache neste LINK. Clique no link "struts-2.3.4.1-lib.zip" que é onde contem todas as jars.

Após ter feito o Download, Extraia o arquivo .zip em um locar desejado e abra a pasta que foi extraída, vá até a pasta lib que se encontra dentro desta pasta, e selecione as bibliotecas citadas acima, eu recomendo que guarde elas em uma pasta separada para não ter nenhuma complicação na hora de adicionar ao projeto. Se você achar desnecessário apenas pule para o próximo passo.


3 - Agora após ter baixado o struts, vamos começar nosso projeto. Portanto abra o Eclipse(estou usando o eclipse indigo). E crie um novo "Dynamic Web Project".


4 - Após isso de um nom ao seu projeto, e caso você ja tenha o Tomcat/GlassFish configurado na sua maquina vá em Target Runtime  e mude de <None>  para o seu Tomcat/GlassFish.Se você ainda não tem o servidor de aplicação não se preocupe iremos configuralo mais para frente e clique em Next.


Novamente Clique em Next.


Agora Selecione a opção "Generate web.xml deployment descriptor" , Isso fará que o eclipse crie o web.xml da sua aplicação(necessario para aplicações web), que é onde iremos configurar a pagina inicial do nosso projeto, e o nosso Struts.



Aguarde o eclipse irá criar o projeto. Após pronto clique com o botão direito do mouse em cima do nosso projeto e vá na opção "Build Path -- >Configure Build Path", iremos agora adicionar as jar do Struts ao nosso projeto.


Irá abrir uma janela com as configurações de bibliotecas do seu projeto. Clique na aba Libraries, e no menu direito clique na opção "Add External JARs...".


Irá abrir uma nova janela pedindo que você escolha quais jar's serão adicionadas ao projeto, Procure a localização das jars que selecionamos no inicio e colocamos em outra pasta, ou vá novamente dentro da pasta lib do arquivo extraido. Selecione todas e clique em Abrir,após feito isso irá voltar para a janela anterior, Clique em OK. Pronto já adicionamos as bibliotecas do Struts ao nosso projeto. Agora vamos ao codigo.


Irei fazer uma demonstração Simples de um cadastro de Pessoas. Em um post futuro irei implementar e colocar mais funcionalidades(css também). Para começarmos crie um pacote com o nome a sua escolha dentro de "Java Resources --> src". Como padrão costumo deixar sempre o sufixo do pacote que irá conter meus Java Beans como bean ou model(Deixa mais sugestivo o que irá conter naquele pacote).


Após feito isso crie uma Classe chamada Pessoa que irá conter os seguintes atributos : Nome, idade,sexo, e seus getters e setters, um POJO(Plain Old Java Objects) Comum.


Para simular as DAO(Data Access Object) do banco de dados irei criar um pacote com o sufixo  dao que irá conter a PessoaDAO. 


Dentro do Pacote dao, Irei criar a Classe PessoaDAO, que irá conter dois métodos, um para Cadastrar, e outro para listar. Guardando dentro de um ArrayList para simular o acesso com o banco de dados, através do JDBC. Criei os metodos como static para não precisar ficar criando o objeto PessoaDAO diversas vezes.



Agora iremos criar o pacote que irá conter nossos controllers  que são as Action do Struts. Sendo assim é uma boa pratica colocar o final do nome do pacote como action.


Feito isso Vamos criar a PessoaAction(é uma boa pratica colocar o sulfixo action no final de cada classe action, mas não é obrigatório).Crie um atributo do tipo Pessoa. e crie um método vazio chamado cadastrar com o retorno do tipo String. e acima dele insira a seguinte Annotation(fique atento ao pacote que irá importar de ser o org.apache.struts2.convention.annotation).


Após feito isso vamos adicionar um resultado, @Result, que é onde a ação irá ir caso o retorno do método cadastrar seja o definido. Repare que adicionei o result dentro da annotation @Action após o results = {}, isso mesmo. será os resultados para aquela ação. e eu coloquei o "value" que é como você irá se referir a está action na sua pagina JSP.


Agora iremos criar uma List<Pessoa> para armazenarmos os nossos cadastros e criaremos os getters e setters dos atributos, Pessoa e Lista(é necessario criar os get e set dentro da action do struts pois ele irá buscar pelo get e set). E vamos também implementar o codigo do método cadastrar, chamando a nossa PessoaDAO para cadastrar passando o nosso objeto pessoa , e nosso listar armazenando dentro da lista.

virou PessoaAction pq tive alguns problemas no projeto e esqueci que tinha colocado o nome de cadastroAction desculpem-me.

Fiz o try catch caso ocorra algum erro(o que é obrigatório quando se tem interação com o banco de dados), e como nossos métodos são estáticos não preciso dar um new na classe PessoaDAO. Agora vamos criar nossa pagina de cadastro. Para isso clique com o direito em WebContent e crie uma nova pagina jsp.


Para usarmos as tags do struts em nossas páginas é necessario que adicione a seguinte linha no topo da sua pagina : <%@ taglib prefix="s" uri="/struts-tags"%>  .Após feito isso eu irei criar os meus campos usando as tags do struts. o meu <s:form> irá conter uma action = "cadastrar" que é o que eu defini no value da minha annotation @Action, o method que pode ser get ou post. E irei criar os <s:textfield> definindo no name destas tag em qual atributo o valor será armazenado. Como na minha PessoaAction eu criei um atributo do tipo Pessoa, e dentro de Pessoa eu tenho um nome. idade, sexo. eu irei colocar o nome do meu atributo + nome do atributo de classe. Fica assim pessoa.nome. E logo abaixo irei criar uma tabela contendo um <s:iterator> que no value ficara o nome da lista criada na PessoaAction, isso fara com que ele itere sobre cada posição daquela lista, guardando dentro dos <s:properties> funcionando como um forEach


Agora para finalizamos está parte, vamos a configuração do web.xml gerado no começo, para isso va na pasta WEB-INF e abra o web.xml.  entre a tag <welcome-file> coloque o nome da sua pagina que servirá como pagina inicial do seu projeto. No nosso caso defina a cadastrar.jsp. E para o funcionamento do struts é necessario que adicione as linhas que estão apartir de <filter> 


Pronto finalizamos os codigos da nossa aplicação, iremos agora configurar o container ou servidor de aplicação. Irei utilizar como exemplo o Tomcat 7.0, para isso faça o download dele nesta URL. logo após extraia a pasta para um local desejado, e volte para o eclipse.


No eclipse você pode clicar em "Window -> Show view -> servers" e na janela que irá abrir clique em "Define a new server." Escolha o tomcat 7.0 e clique em next.


Agora selecione o local onde está a pasta extraida do arquivo do tomcat baixado. clique em ok e após clique em finish.


Agora clique com o Botão direito do mouse, vá em Run As...  e Run on Server. Selecione o Tomcat e clique em Finish. aguarde a inicialização do tomcat e pronto está feito o cadastro basta você preencher a lista.


Caso tenha alguma duvida deixe seu comentario abaixo, espero que tenha ajudado com qualquer dificuldade com o Struts 2 para iniciar, agora basta você ter o interesse e explorar, irei fazer outro post abordando assuntos mais complexos como sessão com Struts, actions chamando actions em um post futuro. Caso tenha algum tópico que queira que eu aborde basta deixar ele nos comentários.

Este projeto se encontra no Google Code do Protocolo TI na url : http://code.google.com/p/strutsproject/
Na aba downloads disponibilizei um War para download, caso você não saiba ainda usar o SVN do google code.

Acesse o nosso site YaW Tecnologia, para mais informações sobre assuntos na área de desenvolvimento e veja os cursos disponíveis.