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




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
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.
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!
Oi Bruno,
que bom que conseguiu.
Em breve espero falar mais sobre o Struts2.
Opa…
quando você escrever mais algum artigo, me avise por favor… tem como você ver meu e-mail neh?
abraços
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
Bruno,
você pode adicionar o meu feed ao seu google reader. Mas de qualquer maneira lhe comunicarei.
Hilner,
você está utilizando alguma IDE?
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!
Oi Bruno,
tente utilizar a tag s:action. Use o atributo name e coloque o nome da sua action.
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,
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.
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.
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?
Oi Gustavo,
você poderia me mostrar o erro?
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
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
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.
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.
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!
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?
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?
Oi Gabriel,
um excelente material é a apostila de Java da Caelum: http://www.caelum.com.br/caelum/curso-11.jsp
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 ???
o que eu preciso para fazer um sistema de cadastro de clientes usando o framework struts 2?
@Thiago
Você já conseguiu resolver esse problema?
@Marcondes
Você poderia seguir esse tutorial como base para esse sistema.
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?
@Gustavo
Qual foi a forma que você tentou (não apareceu no comentário)?
@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?!?!
@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’.
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.
putz ele não aceita
tags do struts q eu quis dizer eram:
‘s:form action=”sayHello” …’
Essa tag no final das contas será a tag HTML form.
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?
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.