Fernando Oliveira
Introdução ao Struts 2
Sobre mim…
• Atualmente – Analista de Sistemas na NYX Knowledge (www.nyxk.com.br)
– Tecnologias: C, C++, Objective C, Python, Java, Javascript e MySQL
• 2012 – Desenvolvedor Bolsista do Projeto SIGA-EPCT no IFAL
– Tecnologias: Java, JSF, JPA, EJB e PostgreSQL
• 2012 – Sócio Proprietário Oneicon Mobile e Mídias Digitais
– Tecnologias: Java, Ruby, Ruby on Rails, JSF, Hibernate, JPA, PostgreSQL, etc..
• 2010 à 2012 – Desenvolvedor na Aloo Telecom (www.aloo.com.br)
– Java, PHP, MySQL, JavaScript, HTML e CSS
• 2008 à 2010 – Suporte Técnico Aloo Telecom (www.aloo.com.br)
O que é o Struts
Um framework para o desenvolvimento de
aplicações WEB
Algumas Características
Fortemente baseado nos padrões
MVC e FrontController
MVC – Model View Controller
Obtendo o Struts
http://struts.apache.org/
Jars Obrigatórios
• commons-fileupload-1.2.2.jar
• commons-io-2.0.1.jar
• commons-lang-2.5.jar
• commons-logging-1.1.1.jar
• commons-logging-api.1.1.jar
• freemarker-2.3.18.jar
• ognl-3.0.4.jar
• struts2-core-2.3.1.2.jar
• xwork-core-2.3.1.2.jar
• javassist-3.11.0.GA.jar
Configurando o Struts
Configurando o filtro do Struts no arquivo web.xml
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
<init-param>
<param-name>actionPackages</param-name>
<param-value>com.foo.bar,com.baz.quux</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Criando o arquivo struts.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.devMode" value="true" />
<package name="default" extends="struts -default">
<action name="index">
<result>/Index</result>
</action>
</package>
</struts>
src/struts.xml
Actions
Serão os nossos Controllers
1. Fornecem dados para serem exibidos na view
2. Recebem dados das requisições
3. Executam as ações solicitadas pelo usuário
Como criar uma Action?!
Uma action é apenas uma classe Java que herda da classe
ActionSupport
Nossa primeira Action
controle.actions.CadastrarUsuarioAction.java
package controle.actions;
import com.opensymphony.xwork2.ActionSupport;
public class CadastrarUsuarioAction extends ActionSupport {
private static final long serialVersionUID = 1L;
@Override
public String execute() throws Exception {
return super.execute();
}
}
Agora é necessário definir a nossa
Action no arquivo Struts.xml
<action name="CadastrarUsuario” class="controle.actions.CadastrarUsuarioAction">
</action>
Para definir uma action precisamos irformar
o seu nome e a classe…
Métodos
Sempre que uma Action for acionada, por
padrão, o método execute() será disparado.
Ele tem a seguinte estrutura:
public String execute() throws Exception {
return super.execute();
}
Action Results
Método execute irá definir qual a próxima página
deverá ser chamada.
Para isso precisamos mapear os resultados possíveis
no Struts.xml
<action name="CadastrarUsuario" class="controle.actions.CadastrarUsuarioAction">
<result name="success">/visao/Login.jsp</result>
</action>
Conjunto Padrão de Resultados
• SUCCESS
• NONE
• ERROR
• INPUT
• LOGIN
Exemplo:
public String execute() throws Exception {
return CadastroUsuarioAction.SUCCESS;
}
Properties
Também podemos definir propriedades para serem
acessadas nas views.
Exemplo:
public class TesteAction extends ActionSupport {
private String nome;
public String execute() throws Exception {
return CadastroUsuarioAction.SUCCESS;
}
public String getNome () {
return this.nome;
}
}
Acessando as propriedades
<%@ taglib prefix="s" uri="/struts-tags" %>
<%@ page language="java" contentType="text/html; charset=US-ASCII"
pageEncoding=”UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Insert title here</title>
</head>
<body>
Nome: <s:property value=”nome" />
</body>
</html>
Outras TAGS
<s:iterator value="usuarios" status="status">
<tr style="background-color: ${status.even ? ’#EEEEEE’ : ’#FFFFFF’}">
<td><s:property value="id"/></td>
<td><s:property value="nome"/></td>
<td><s:property value="username"/></td>
<td><s:property value="password"/></td>
<td>
<s:a action="UsuarioPreparaAlteracao" > alterar
<s:param name="usuario.id" value="id"/>
</s:a>
</td>
<td>
<s:a action="UsuarioRemove" > remover
<s:param name="usuario.id" value="id"/>
</s:a>
</td>
</tr>
</s:iterator>

Introdução ao struts 2

  • 1.
  • 2.
    Sobre mim… • Atualmente– Analista de Sistemas na NYX Knowledge (www.nyxk.com.br) – Tecnologias: C, C++, Objective C, Python, Java, Javascript e MySQL • 2012 – Desenvolvedor Bolsista do Projeto SIGA-EPCT no IFAL – Tecnologias: Java, JSF, JPA, EJB e PostgreSQL • 2012 – Sócio Proprietário Oneicon Mobile e Mídias Digitais – Tecnologias: Java, Ruby, Ruby on Rails, JSF, Hibernate, JPA, PostgreSQL, etc.. • 2010 à 2012 – Desenvolvedor na Aloo Telecom (www.aloo.com.br) – Java, PHP, MySQL, JavaScript, HTML e CSS • 2008 à 2010 – Suporte Técnico Aloo Telecom (www.aloo.com.br)
  • 3.
    O que éo Struts Um framework para o desenvolvimento de aplicações WEB
  • 4.
  • 5.
    Fortemente baseado nospadrões MVC e FrontController
  • 6.
    MVC – ModelView Controller
  • 8.
  • 10.
    Jars Obrigatórios • commons-fileupload-1.2.2.jar •commons-io-2.0.1.jar • commons-lang-2.5.jar • commons-logging-1.1.1.jar • commons-logging-api.1.1.jar • freemarker-2.3.18.jar • ognl-3.0.4.jar • struts2-core-2.3.1.2.jar • xwork-core-2.3.1.2.jar • javassist-3.11.0.GA.jar
  • 11.
  • 12.
    Configurando o filtrodo Struts no arquivo web.xml <filter> <filter-name>struts2</filter-name> <filter-class> org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter </filter-class> <init-param> <param-name>actionPackages</param-name> <param-value>com.foo.bar,com.baz.quux</param-value> </init-param> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
  • 13.
    Criando o arquivostruts.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <constant name="struts.devMode" value="true" /> <package name="default" extends="struts -default"> <action name="index"> <result>/Index</result> </action> </package> </struts> src/struts.xml
  • 14.
    Actions Serão os nossosControllers 1. Fornecem dados para serem exibidos na view 2. Recebem dados das requisições 3. Executam as ações solicitadas pelo usuário
  • 15.
    Como criar umaAction?! Uma action é apenas uma classe Java que herda da classe ActionSupport
  • 16.
    Nossa primeira Action controle.actions.CadastrarUsuarioAction.java packagecontrole.actions; import com.opensymphony.xwork2.ActionSupport; public class CadastrarUsuarioAction extends ActionSupport { private static final long serialVersionUID = 1L; @Override public String execute() throws Exception { return super.execute(); } }
  • 17.
    Agora é necessáriodefinir a nossa Action no arquivo Struts.xml <action name="CadastrarUsuario” class="controle.actions.CadastrarUsuarioAction"> </action> Para definir uma action precisamos irformar o seu nome e a classe…
  • 18.
    Métodos Sempre que umaAction for acionada, por padrão, o método execute() será disparado. Ele tem a seguinte estrutura: public String execute() throws Exception { return super.execute(); }
  • 19.
    Action Results Método executeirá definir qual a próxima página deverá ser chamada. Para isso precisamos mapear os resultados possíveis no Struts.xml <action name="CadastrarUsuario" class="controle.actions.CadastrarUsuarioAction"> <result name="success">/visao/Login.jsp</result> </action>
  • 20.
    Conjunto Padrão deResultados • SUCCESS • NONE • ERROR • INPUT • LOGIN Exemplo: public String execute() throws Exception { return CadastroUsuarioAction.SUCCESS; }
  • 21.
    Properties Também podemos definirpropriedades para serem acessadas nas views. Exemplo: public class TesteAction extends ActionSupport { private String nome; public String execute() throws Exception { return CadastroUsuarioAction.SUCCESS; } public String getNome () { return this.nome; } }
  • 22.
    Acessando as propriedades <%@taglib prefix="s" uri="/struts-tags" %> <%@ page language="java" contentType="text/html; charset=US-ASCII" pageEncoding=”UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> <title>Insert title here</title> </head> <body> Nome: <s:property value=”nome" /> </body> </html>
  • 23.
    Outras TAGS <s:iterator value="usuarios"status="status"> <tr style="background-color: ${status.even ? ’#EEEEEE’ : ’#FFFFFF’}"> <td><s:property value="id"/></td> <td><s:property value="nome"/></td> <td><s:property value="username"/></td> <td><s:property value="password"/></td> <td> <s:a action="UsuarioPreparaAlteracao" > alterar <s:param name="usuario.id" value="id"/> </s:a> </td> <td> <s:a action="UsuarioRemove" > remover <s:param name="usuario.id" value="id"/> </s:a> </td> </tr> </s:iterator>