Struts2, o início

Como prometido, irei iniciar uma série de posts sobre o Struts2. E para começar, vamos aprender a configurar o básico para a sua utilização em projetos.

Primeiro, crie a estrutura de diretórios abaixo (como IDE utilizei o Eclipse) e baixe o arquivo struts-2.0.9-lib.zip, precisaremos das libs mostradas na imagem.

estruturadoprojeto.jpg

 

 

Web.xml

Edite o web.xml do seu projeto e adicione as linhas abaixo. A classe FilterDispatcher é o filtro do Struts2, ela é responsável por todas as requisições da aplicação.
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>

<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

struts.xml

Esse é o arquivo de configuração, onde ficam as informações como: actions, forwards, interceptors, plugins, etc. Por questão de visualização e organização, criei o arquivo helloworld.xml para manter o arquivo de configurações do Struts2 mais legível. Não era necessário criar esse arquivo (helloworld.xml), porém já imaginou o tamanho que seria esse arquivo em um projeto real?

<struts>

<constant name=”struts.enable.DynamicMethodInvocation” value=”false” />
<constant name=”struts.devMode” value=”true” />

<include file=”helloworld.xml”/>

</struts>

helloworld.xml

Principais atributos:

  • package name: nome do pacote;
  • namespace: nome no qual poderá ser utilizado nos formulários e nas URLs ;
  • action name: atributo que define o nome da action
  • class: caminho completo da action
  • result name: nome para o forward ou resultado. Informa para qual JSP a página será direcionada.

<struts>
<package name=”helloworld” namespace=”/helloworld” extends=”struts-default”>

<action name=”HelloWorld” class=”org.carneirorafael.HelloWorld”>
<result name=”SUCCESS”>/helloworld/HelloWorld.jsp</result>
</action>

</package>
</struts>

HelloWorld.java

A classe HelloWorld é a action POJO (Plain Old Java Object) do Struts2. Ela estende a classe ActionSupport e sobrescreve o método execute. Possui o atributo mensagem que é uma String e tem seus métodos acessores. Ao chamar a URL http://seuHost:suaPorta/strutsbegin/helloworld/HelloWorld.action o método execute é chamado e este configura o atributo mensagem, através do método acessos setMessage.

//imports

public class HelloWorld extends ActionSupport {

private static final long serialVersionUID = 7407988331733714918L;

private String mensagem;

@Override
public String execute() throws Exception {
this.setMessage(“HelloWorld com o Struts2!”);
return “SUCCESS”;
}

public String getMensagem() {
return this.mensagem;
}

public void setMessage(final String message) {
this.mensagem = message;
}
}

HelloWorld.jsp

E por fim, a JSP na qual exibirá os dados na tela através da tag <s:property>. Essa tag pega o valor do atributo mensagem que se encontra na action.

<%@ page contentType=”text/html; charset=UTF-8″ %>
<%@ taglib prefix=”s” uri=”/struts-tags” %>
<html>
<head>
<title>HelloWorld com Struts2</title>
</head>

<body>

<s:property value=”mensagem”/>

</body>
</html>

Conclusão

Está muito fácil configurar um projeto e fazer um helloworld no Struts2. E é porque eu não utilizei as anotações (annotations). Irei continuar escrevendo mais posts sobre esse framework, tentando expor suas novas funcionalidades e características. Espero que esse post possa ajudá-lo a conhecer um dos frameworks MVC mais conhecidos do mercado.

Download

Struts2Begin

34 Comments

  1. Bruno Bernardes says:

    Artigo muito bom… mas ainda nao consegui fazer funcionar… tentei pegar esse exemplo seu e fazer outro projeto, mas das varias vezes que tentei da o mesmo erro. É esse aki: FAIL – Application at context path /Struts2 could not be started
    acredito que seja um dos arquivos xml neh?
    outra coisa: o arquivo struts.xml deve ser colocado em qual pasta? muitos artigos dizem q eh em web-inf/classes, outros dizem q eh em web-inf/src e outros dizem q eh nos dois lugares… você colocou nos dois…

    agradeço sua ajuda!

    abs

  2. Oi Bruno,

    obrigado pelo elogio.

    Acabei de baixar o projeto em outra máquina e funcionou. :)

    Acredito que o problema seja de deploy. Como você está fazendo?

    Em relação aos arquivos de configurações do Struts2, o recomendado é colocar no diretório WEB-INF/src. Os arquivos que se encontram no diretório WEB-INF/classes são colocados automaticamente pelo eclipse. Faça um teste, apague os arquivos desse diretório e dê um refresh ou um clean no eclipse e veja o resultado.

    Dica: apague o conteúdo da pasta work.

    Espero ter ajudado.

  3. Bruno Bernardes says:

    Oi Rafael…
    consegui fazer funcionar! É meio dificil encontrar artigos ou tutoriais sobre Strtus2, mas depois estava relendo o seu novamente, fiz o projeto do zero e deu certo!

    Vlw pela dica ae!

  4. Oi Bruno,

    que bom que conseguiu. :)

    Em breve espero falar mais sobre o Struts2.

  5. Bruno Bernardes says:

    Opa…
    quando você escrever mais algum artigo, me avise por favor… tem como você ver meu e-mail neh?

    abraços

  6. hilner says:

    aqui rodou , sem apresentar erro mas nao mostrou nenhuma frase..vc poderia mostrar a configuraçao do seu winxp? a java_home, ou se precisa definir alguma outra variavel de ambiente..por favor , so isso..aqui os jsp e servlets rodam beleza mas ainda nao consegui o struts

  7. Bruno,

    você pode adicionar o meu feed ao seu google reader. Mas de qualquer maneira lhe comunicarei.

    Hilner,

    você está utilizando alguma IDE?

  8. Bruno Bernardes says:

    Cara… sou iniciante em Struts2, mas tava querendo fazer o seguinte: tenho o index q chama o HelloWorld.action e dentro desse index coloquei um link pra index2 que chama teste.action, mas ainda nao consegui fazer funcionar. Sei que possivelmente deve ser configuração de arquivos xml. É possivel me explicar como fazer?
    Fiz alguns teste, mas nada feliz!

    Obrigado!

  9. Oi Bruno,

    tente utilizar a tag s:action. Use o atributo name e coloque o nome da sua action.

  10. osvaldo says:

    uso o struts1. como faço pra migrar para struts2? Tenho que fazer alterações em minhas jsp(s)? Esqueço do struts-config.xml?

    atenciosamente,

  11. Oi Osvaldo,

    a Webmobile deste mês tem um artigo do Guilherme Mello (PortalJava) ensinando a fazer essa migração. Mas haverá algumas mudanças sim na sua aplicação.

  12. Para migrar para o Struts2 você terá que: alterar o deployment descriptor (web.xml), configurando o filtro do Struts2; incluir as libs; criar o arquivo struts.xml, que possui a mesma finalidade do struts-config.xml, porém com características totalmente diferentes; utilizar as novas tags.

  13. Gustavo says:

    Eu fiz tudo certinho, mas nao consigui fazer rodar de jeito nenhum, até fiz o download do projeto tb e nada…
    gostei mto do site, e estou precisando urgente aprender struts 2.
    Rafael você pode me ajudar?

  14. Oi Gustavo,

    você poderia me mostrar o erro?

  15. Gustavo says:

    Rafael o erro é meio grande, porém eu só quero conseguir “configurar” o struts 2 aqui.
    Teria como me adicionar no msn para me ajudar.
    Se sim, meu msn é guga_java@hotmail.com

  16. BAIS says:

    Rafael, pode me ajudar por favor?
    Baixei o arquivo struts-2.0.11.1-all e testei o exemplo struts2-blank-2.0.11.1.war. Funcionou perfeitamente com meu Tomcat 6 e java 1.6.

    Entretanto, quando tento importar esse arquivo .war no Eclipse (versao Europa 3), não funciona de jeito nenhum. Aparece uma mensagem de erro 404 – arquivo não encontrado.

    O que será que pode ser?
    Abraços e obrigado

  17. Oi BAIS,

    sugiro que você crie um projeto no Eclipse como dynamic web, copie os principais arquivos para o funcionamento do Struts 2, como: web.xml, struts.xml, *.jars, etc.

    Tente fazer isso e me reporte se acontecer algum problema.

  18. Rachel says:

    Olá Rafael,
    parabens pelo artigo, ele está simples e objetivo.
    Gostaria de saber se vc utiliza ou recomenda algum plugin para Strust2. Ahhh ! Estou utilizando o eclipse.

    Obrigada.

  19. Oi Rachel,

    desconheço a existência de algum plugin do Struts2 para o Eclipse, mas com certeza já deve existir algo.

    Prometo que irei fazer uma pesquisa e responderei nesse post.

    Obrigado!

  20. Lean Blanh says:

    Olá Rafael,
    li seu tutorial o erro que foi mencionado pelo BAIS, o erro 404 – arquivo não encontrado está acontencendo comigo também.
    Já segui vários tutoriais e naum consigo resolver estou usando o tomcat 5.5 e eclipse ganymede.
    Alias não consigo fazer o meu projeto ficar com sua estruturas de arquivo no eclipse.

    Pode me dá uma ajuda sou iniciante em Java, Struts 2 ,etc.Mas programo em outras linguagens…. Consigo criar um dinamic web no Eclipse e rodar com Servlets, Hibernate, etc… mas o Struts não to conseguindo.

    Can you Help me?

  21. gabriel says:

    Rafael,

    estou começando agora a apreender java eo o professor passou um projeto de uma calculadora queria saber poronde começar? você tem algum metodo para se apreender java?

  22. Oi Gabriel,

    um excelente material é a apostila de Java da Caelum: http://www.caelum.com.br/caelum/curso-11.jsp

  23. Thiago says:

    Cara estou tendo algumas dificuldades para integrar struts2 e velocity e por incrivel que parece o material disponivel na web ainda esta meio fraco. Você poderia me dar uma força ???

  24. Marcondes says:

    o que eu preciso para fazer um sistema de cadastro de clientes usando o framework struts 2?

  25. @Thiago
    Você já conseguiu resolver esse problema?

    @Marcondes
    Você poderia seguir esse tutorial como base para esse sistema.

  26. Gustavo says:

    Rafael, tenho um probleminha…

    Se uso desta forma meu jsp:

    dá 404.

    p/ rodar preciso inserir “.action” :

    Mas isto não deveria ser necessário, tem idéia do problema?

  27. @Gustavo
    Qual foi a forma que você tentou (não apareceu no comentário)?

  28. Gustavo says:

    @Rafael Carneiro
    Po você é rápido mesmo cara! hehe

    Então rafael, acabei de resolver o problema, porém não entendi exatamente pq!

    no meu struts.xml, eu tinha a declarada apenas a action que executava os dados q eu enviava por um formulario, num jsp (conforme te mostrei). Resolvi declarar também como action o formulario (sem incluir o atributo class, claro), e não é que, funcionou?!?!

  29. @Gustavo
    O ponto X da questão é a configuração do atributo /* no web.xml. Nesse exemplo, o Struts2 está configurando através do filtro (filter) FilterDispatcher e os caracteres ‘/*’ indicam que simplesmente tudo irá passar por esse filtro.

    É comum em aplicações empresariais e até exemplos de artigos a utilização de servlets controllers de frameworks, nos quais são configurados (através do atributo <url-pattern) as extensões ‘.do’, ‘.action’ ou ‘.faces’ (na maioria dos casos). Nesse artigo, bastava seguir as configurações expostas que o filtro do Struts2 se encarregaria de filtrar as requisições da JSP.

    No seu caso, você criou um formulário HTML e deseja enviar as requisições para o servidor, não é isso? Dessa forma, tanto faz você colocar qualquer nome (lembre-se dos caracteres ‘/*’) ou configurar um pattern do tipo ‘*.action’.

  30. Gustavo says:

    Na verdade o formulário está contigo num jsp: (Agora q eu vi que ele nao saiu no meu primeiro post..)

    então, usei as tags do struts:

    ‘ ‘

    porem sem declarar este jsp no struts.xml, ele não entendia que o atributo action, era de fato uma action declarada no xml, e caia num 404.

  31. Gustavo says:

    putz ele não aceita

    tags do struts q eu quis dizer eram:

    ‘s:form action=”sayHello” …’

  32. Essa tag no final das contas será a tag HTML form.

  33. Ederson says:

    Rafael, eu mandei sem querer um email, ao invés de escrever aqui. Mas sim, gostei muito do tutorial, pq é bem direto. Porém veja o que ocorre comigo: pego o projeto, importo no eclipse, corrijo as eventuais falhas de build path, e o projeto fica sem erros. Porém, estranhamente ( isso em windows e mac ) eu crio um server novo ( tomcat v6.0 ) e o tomcat de dentro do eclipse inicia sem erros, dizendo q subiu na porta 8080 localhost porém nem dentro do eclipse nem via browser eu consigo acessar a pagina inicial do tomcat. Já se eu iniciar ele pelo console, aí sim ele inicia sem problemas e consigo acessar de qq lugar. Tem também o problema que teu projeto não é um dinamic web project, logo, quando eu tento exportar o war, não consigo ( ele pede um module name ) O que me recomenda?

  34. Quando você configura o Tomcat pelo Eclipse, ele guarda as configurações em diretórios dele mesmo, por isso que quando você executa o Tomcat por fora você consegue visualizar a página do servidor.

    Para o seu problema você tem duas soluções:
    1 – Exportar o WAR e subir o Tomcat por fora do Eclipse, colocando o WAR gerado na pasta webapps do Tomcat;
    2 – Modificar o projeto para Dynamic Web Project e executar o projeto pelo Tomcat configurado no Eclipse.

    Qualquer dúvida é só comentar.

Leave a Reply