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

46 thoughts on “Struts2, o início

  1. Bruno Bernardes

    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. Rafael Carneiro Post author

    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

    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. Bruno Bernardes

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

    abraços

  5. hilner

    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

  6. Bruno Bernardes

    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!

  7. osvaldo

    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,

  8. Rafael Carneiro Post author

    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.

  9. Rafael Carneiro Post author

    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.

  10. Gustavo

    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?

  11. BAIS

    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

  12. Rafael Carneiro Post author

    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.

  13. Rachel

    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.

  14. Rafael Carneiro Post author

    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!

  15. Lean Blanh

    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?

  16. gabriel

    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?

  17. Thiago

    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 ???

  18. Marcondes

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

  19. Gustavo

    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?

  20. Gustavo

    @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?!?!

  21. Rafael Carneiro Post author

    @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’.

  22. Gustavo

    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.

  23. Gustavo

    putz ele não aceita

    tags do struts q eu quis dizer eram:

    ‘s:form action=”sayHello” …’

  24. Ederson

    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?

  25. Rafael Carneiro Post author

    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.

  26. Filipe

    Não estou conseguindo rodar de jeito nenhum.
    Estou tentando acessar pelo seguinte link: http://localhost:8080/Struts2Begin/helloworld

    A única alteração que eu fiz foi colocar a jsp na pasta webcontent e alterei o result da action para “/HelloWorld.jsp”

    O erro é sempre o mesmo: 404.

    Você tem alguma idéia do que pode ser?

  27. Marcio

    Segui seu tutorial, executei a aplicação, porém a mensagem não aparece na tela. O que pode estar faltando?

  28. Marcio

    Não dá nenhum erro, o servidor carrega a aplicação sem gerar nenhuma exceção, são não aparece a mensagem na tela.

  29. Marcio

    Segue o stacktrace:

    04/02/2011 11:20:30 org.apache.catalina.core.AprLifecycleListener init
    INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\Program Files\Java\jre6\bin;.;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:/Program Files/Java/jre6/bin/client;C:/Program Files/Java/jre6/bin;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Program Files\Microsoft SQL Server\80\Tools\Binn\;C:\Program Files\Microsoft SQL Server\90\Tools\binn\;C:\Program Files\Microsoft SQL Server\90\DTS\Binn\;C:\Program Files\Microsoft SQL Server\90\Tools\Binn\VSShell\Common7\IDE\;C:\Program Files\Microsoft Visual Studio 8\Common7\IDE\PrivateAssemblies\;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\Windows Imaging\
    04/02/2011 11:20:30 org.apache.tomcat.util.digester.SetPropertiesRule begin
    AVISO: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property ‘source’ to ‘org.eclipse.jst.jee.server:struts2’ did not find a matching property.
    04/02/2011 11:20:30 org.apache.coyote.http11.Http11Protocol init
    INFO: Initializing Coyote HTTP/1.1 on http-8080
    04/02/2011 11:20:30 org.apache.catalina.startup.Catalina load
    INFO: Initialization processed in 513 ms
    04/02/2011 11:20:30 org.apache.catalina.core.StandardService start
    INFO: Starting service Catalina
    04/02/2011 11:20:30 org.apache.catalina.core.StandardEngine start
    INFO: Starting Servlet Engine: Apache Tomcat/6.0.29
    04/02/2011 11:20:30 com.opensymphony.xwork2.config.providers.XmlConfigurationProvider register
    INFO: Parsing configuration file [struts-default.xml]
    04/02/2011 11:20:30 com.opensymphony.xwork2.config.providers.XmlConfigurationProvider register
    INFO: Parsing configuration file [struts-plugin.xml]
    04/02/2011 11:20:30 com.opensymphony.xwork2.config.providers.XmlConfigurationProvider register
    INFO: Parsing configuration file [struts.xml]
    04/02/2011 11:20:30 org.apache.struts2.config.Settings getLocale
    AVISO: Settings: Could not parse struts.locale setting, substituting default VM locale
    04/02/2011 11:20:31 com.opensymphony.xwork2.util.ObjectTypeDeterminerFactory
    INFO: Setting DefaultObjectTypeDeterminer as default …
    04/02/2011 11:20:31 org.apache.coyote.http11.Http11Protocol start
    INFO: Starting Coyote HTTP/1.1 on http-8080
    04/02/2011 11:20:31 org.apache.jk.common.ChannelSocket init
    INFO: JK: ajp13 listening on /0.0.0.0:8009
    04/02/2011 11:20:31 org.apache.jk.server.JkMain start
    INFO: Jk running ID=0 time=0/31 config=null
    04/02/2011 11:20:31 org.apache.catalina.startup.Catalina start
    INFO: Server startup in 1006 ms

  30. Diego Matias da Silva

    Ola estou começado com Struts2 agora até acho normal pedir auxilio para quem sabe mais, O meu problema é o seguinte estou tendo um erro 404 onde ele diz que o arquivo procurado não é encontrado. estou usando o Eclipse indigo+Struts-2.2.3 e o apache tomcat 7.
    A estrutura de diretorio parece ser diferente nesta versão do eclipse;
    a maquina virtual é a openjdk
    Sistema operacional

    essa é a configuração do Struts.xml

    Welcome.jsp
    Login.jsp

    essa é minha Web.xml

    Struts2 Application

    struts2

    org.apache.struts2.dispatcher.FilterDispatcher

    struts2
    /*

    Login.jsp

    A pagina de login que é uma jsp

    Struts 2 – Login Application | ViralPatel.net

    Struts 2 – Login Application

    as outras paginas são semelhantes se puder da uma forcinha agradeço.

Comments are closed.