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




October 2nd, 2007 at 8:44 am
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
October 2nd, 2007 at 8:23 pm
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.
October 3rd, 2007 at 8:50 am
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!
October 3rd, 2007 at 10:27 am
Oi Bruno,
que bom que conseguiu.
Em breve espero falar mais sobre o Struts2.
October 4th, 2007 at 10:51 am
Opa…
quando você escrever mais algum artigo, me avise por favor… tem como você ver meu e-mail neh?
abraços
October 5th, 2007 at 3:21 pm
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
October 5th, 2007 at 11:45 pm
Bruno,
você pode adicionar o meu feed ao seu google reader. Mas de qualquer maneira lhe comunicarei.
Hilner,
você está utilizando alguma IDE?
October 9th, 2007 at 5:52 pm
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!
October 12th, 2007 at 11:23 am
Oi Bruno,
tente utilizar a tag s:action. Use o atributo name e coloque o nome da sua action.
October 17th, 2007 at 1:28 pm
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,
October 17th, 2007 at 2:04 pm
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.
October 17th, 2007 at 5:34 pm
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.
March 1st, 2008 at 11:45 pm
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?
March 2nd, 2008 at 5:18 pm
Oi Gustavo,
você poderia me mostrar o erro?
March 6th, 2008 at 4:48 pm
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
May 26th, 2008 at 12:25 pm
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
May 26th, 2008 at 9:20 pm
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.
June 9th, 2008 at 11:14 pm
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.
June 10th, 2008 at 11:33 pm
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!