115
Lato Sensu em Sistemas Orientados a Objetos Módulo 4.2 Struts 2 Friday, May 22, 2009

Struts 2.x

Embed Size (px)

DESCRIPTION

Material (incompleto) das aulas de Struts 2.x ministradas no curso de especialização em Sistemas Orientados a Objetos da Universidade Católica de Brasília.

Citation preview

Page 1: Struts 2.x

Lato Sensu em Sistemas Orientados a Objetos

Módulo 4.2Struts 2

Friday, May 22, 2009

Page 2: Struts 2.x

Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009

Friday, May 22, 2009

Page 3: Struts 2.x

Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009

2000 2001 2002 2003 2004 2005 2006 2007 2008 2009

Strut

s 0.x

Stru

ts 2

.x

Strut

s 1.x

Web

Wor

k 1.4

Web

Wor

k 2.2.

2

Friday, May 22, 2009

Page 4: Struts 2.x

Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009

Friday, May 22, 2009

Page 5: Struts 2.x

Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009

simplificar o desenvolvimento

web

Struts 2objetivo

Friday, May 22, 2009

Page 6: Struts 2.x

Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009

Redução do XMLconvenção sobre configuração

anotações

Actions são POJOsmelhor testabilidade

bind automático de parâmetros HTTP

Struts 2objetivo

Friday, May 22, 2009

Page 7: Struts 2.x

Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009

Interceptadorespré e pós-processamento

Extensibilidadeplugins

Result TypesJSP, Velocity, Freemarker

Injeção de dependênciasSpring, Plexus, PicoContainer

Struts 2novidades

Friday, May 22, 2009

Page 8: Struts 2.x

Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009

In a nutshell

Friday, May 22, 2009

Page 9: Struts 2.x

Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009

http://servidor/

app/action

Friday, May 22, 2009

Page 10: Struts 2.x

Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009

http://servidor/

app/action

struts.xml

Friday, May 22, 2009

Page 11: Struts 2.x

Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009

http://servidor/

app/action

ActionTeste.java

Friday, May 22, 2009

Page 12: Struts 2.x

Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009

http://servidor/

app/action ok.jsp

Friday, May 22, 2009

Page 13: Struts 2.x

Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009

Friday, May 22, 2009

Page 14: Struts 2.x

Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009

Friday, May 22, 2009

Page 15: Struts 2.x

Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009

XML mapeia POJO comum

Friday, May 22, 2009

Page 16: Struts 2.x

Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009

método execute() obrigatório qdo

nenhuma configuração é feita no XML

Friday, May 22, 2009

Page 17: Struts 2.x

Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009

o retorno do método execute() revela o

resultado da Action

Friday, May 22, 2009

Page 18: Struts 2.x

Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009

Actione

struts.xml

libs

web.xml*.html*.jsp

Friday, May 22, 2009

Page 19: Struts 2.x

Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009

At a glance

Friday, May 22, 2009

Page 20: Struts 2.x

Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009

http://servidor/

app/action

Friday, May 22, 2009

Page 21: Struts 2.x

Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009

http://servidor/

app/action

?

Friday, May 22, 2009

Page 22: Struts 2.x

Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009

Struts 1.x

Friday, May 22, 2009

Page 23: Struts 2.x

Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009

Struts 1.x

?

Friday, May 22, 2009

Page 24: Struts 2.x

Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009

http://servidor/

app/action

FrontController!

Friday, May 22, 2009

Page 25: Struts 2.x

Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009

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

web.xml

Friday, May 22, 2009

Page 26: Struts 2.x

Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009

Estratégia deMapeamento de Actions

Friday, May 22, 2009

Page 27: Struts 2.x

Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009

Estratégia de

Mapeamento de Actions

LoginAction.execute()

http://localhost:8080/app/entrar

Friday, May 22, 2009

Page 28: Struts 2.x

Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009

Estratégia de

Mapeamento de Actions

LoginAction.execute()

http://localhost:8080/app/entrar

Friday, May 22, 2009

Page 29: Struts 2.x

Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009

Estratégia de

Mapeamento de Actions

LoginAction.execute()

http://localhost:8080/app/entrar

<action name="entrar" class="xpto.LoginAction"/>

Friday, May 22, 2009

Page 30: Struts 2.x

Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009

Estratégia de

Mapeamento de Actions

ControleDeAcessoAction.login()

http://localhost:8080/app/entrar

<action name="entrar" method="login" class="xpto.ControleDeAcessoAction"/>

Friday, May 22, 2009

Page 31: Struts 2.x

Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009

Estratégia de

Mapeamento de Actions

ControleDeAcessoAction.login()

http://localhost:8080/app/entrar

<action name="entrar" method="login" class="xpto.ControleDeAcessoAction"/>

Friday, May 22, 2009

Page 32: Struts 2.x

Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009

Estratégia de Mapeamento de Actions

Patterns Matching

ControleDeAcessoAction.login()

http://localhost:8080/app/acesso_login

Friday, May 22, 2009

Page 34: Struts 2.x

Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009

Estratégia de Mapeamento de Actions

Patterns Matching

ControleDeAcessoAction.login()

http://localhost:8080/app/acesso_login

Friday, May 22, 2009

Page 35: Struts 2.x

Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009

Estratégia de Mapeamento de Actions

Patterns Matching

ControleDeAcessoAction.login()

http://localhost:8080/app/acesso_login

<action name="acesso_*" method="{1}" class="xpto.ControleDeAcessoAction"/>

Friday, May 22, 2009

Page 36: Struts 2.x

Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009

Friday, May 22, 2009

Page 37: Struts 2.x

Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009

Friday, May 22, 2009

Page 38: Struts 2.x

Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009

Estratégia de Mapeamento de Actions

Patterns Matching

http://localhost:8080/app/Usuario/edit

UsuarioAction.edit()

Friday, May 22, 2009

Page 40: Struts 2.x

Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009

Estratégia de Mapeamento de Actions

Patterns Matching

http://localhost:8080/app/Usuario/edit

UsuarioAction.edit()

Friday, May 22, 2009

Page 41: Struts 2.x

Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009

Estratégia de Mapeamento de Actions

Patterns Matching

<action name="*/*" method="{2}" class="xpto.{1}Action"/>

http://localhost:8080/app/Usuario/edit

UsuarioAction.edit()

Friday, May 22, 2009

Page 42: Struts 2.x

Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009

Binding

Friday, May 22, 2009

Page 43: Struts 2.x

Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009

Dados de Requisição

usuario=alegomessenha=123456

Friday, May 22, 2009

Page 44: Struts 2.x

Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009

Nada de ActionForms!bind automático

Friday, May 22, 2009

Page 45: Struts 2.x

Friday, May 22, 2009

Page 46: Struts 2.x

setUsuario(“alegomes”);setSenha(“123456”);

Friday, May 22, 2009

Page 47: Struts 2.x

setUsuario(“alegomes”);setSenha(“123456”);

Friday, May 22, 2009

Page 48: Struts 2.x

Friday, May 22, 2009

Page 49: Struts 2.x

Friday, May 22, 2009

Page 50: Struts 2.x

Friday, May 22, 2009

Page 51: Struts 2.x

Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009

Como Actions são POJOS, nenhuma infra-estrutura mágica é necessária para

implementação de testes unitários.

Testabilidade

Friday, May 22, 2009

Page 52: Struts 2.x

Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009

Friday, May 22, 2009

Page 53: Struts 2.x

Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009

Tags

Friday, May 22, 2009

Page 55: Struts 2.x

<action name="login_*" method="{1}" class="br.ucb.soo.wa.struts2.lab3.LoginAction"> <result name="loginOK">menu.jsp</result> <result name="loginNOK">login.jsp</result></action>

public class LoginAction { public static final String USUARIO_ESPERADO = "alegomes"; public static final String SENHA_ESPERADA = "123456"; private String usuario; private String senha; public String autenticar() { if (USUARIO_ESPERADO.equals(usuario) && SENHA_ESPERADA.equals(senha)) { return "loginOK"; } else { return "loginNOK"; } }

//Gets e Sets}

struts.xml

LoginAction.java

Friday, May 22, 2009

Page 56: Struts 2.x

<action name="login_*" method="{1}" class="br.ucb.soo.wa.struts2.lab3.LoginAction"> <result name="loginOK">menu.jsp</result> <result name="loginNOK">login.jsp</result></action>

public class LoginAction { public static final String USUARIO_ESPERADO = "alegomes"; public static final String SENHA_ESPERADA = "123456"; private String usuario; private String senha; public String autenticar() { if (USUARIO_ESPERADO.equals(usuario) && SENHA_ESPERADA.equals(senha)) { return "loginOK"; } else { return "loginNOK"; } }

//Gets e Sets}

struts.xml

LoginAction.java

Friday, May 22, 2009

Page 57: Struts 2.x

menu.jsp

senha correta

<title>Menu do Sistema</title></head><body><h1>Seja bem vindo.</h1>

Escolha uma das abaixo.

<ul> <li><a href="servico_f1">Funcionalidade 1</a></li> <li><a href="servico_f1">Funcionalidade 2</a></li> <li><a href="servico_f1">Funcionalidade 3</a></li> <li><a href="servico_f1">Funcionalidade 4</a></li></ul></body></html>

Friday, May 22, 2009

Page 58: Struts 2.x

senha errada

login.jsp

<title>Tela de Autenticação</title></head><body><form action="login_autenticar"> Login: <input type="text" value=""/><p/> Senha: <input type="password" value=""/><p/> <input type="submit"/></form></body>

Friday, May 22, 2009

Page 59: Struts 2.x

<h1>Seja bem vindo, <s:property value="usuario" />.</h1>

Friday, May 22, 2009

Page 60: Struts 2.x

<h1>Seja bem vindo, <s:property value="usuario" />.</h1>

Friday, May 22, 2009

Page 61: Struts 2.x

<s:form action="login_autenticar"> <s:textfield label="Login" name="usuario"/> <s:password label="Senha" name="senha" /> <s:submit/></s:form>

Friday, May 22, 2009

Page 62: Struts 2.x

Friday, May 22, 2009

Page 63: Struts 2.x

Friday, May 22, 2009

Page 64: Struts 2.x

Friday, May 22, 2009

Page 65: Struts 2.x

Friday, May 22, 2009

Page 66: Struts 2.x

mais infos...

Friday, May 22, 2009

Page 67: Struts 2.x

Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009

Results&

Result Types

Friday, May 22, 2009

Page 69: Struts 2.x

Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009

implementação da

Camada View

Resposta da Action

Results

Friday, May 22, 2009

Page 70: Struts 2.x

Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009

Resultslogin.jsp menu.jsp

Action

FreemarkerVelocity XSTL

Friday, May 22, 2009

Page 71: Struts 2.x

Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009

Result TypesFreemarkerVelocity XSTL

<action name="qqcoisa*" method="{1}" class="br.ucb.soo.wa.struts2.lab3.QQAction"> <result name="result1">menu.jsp</result> <result name="result1" type=”dispatcher”>some.jsp</result> <result name="result2" type=”freemarker”>login.ftl</result> <result name="result3" type=”velocity”>page.vt</result></action>

Friday, May 22, 2009

Page 72: Struts 2.x

Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009

Result Typescustomizados

<result-types> <result-type name="dispatcher" default="true"

class="seu.pacote.SuaClasse"/> </result-types>

public interface Result extends Serializable { public void execute(ActionInvocation invocation) throws Exception; }

Friday, May 22, 2009

Page 73: Struts 2.x

Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009

Dependency Injection

Friday, May 22, 2009

Page 74: Struts 2.x

Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009

Interceptors

Friday, May 22, 2009

Page 76: Struts 2.x

Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009

RevisãoIntercepting Filters

Friday, May 22, 2009

Page 77: Struts 2.x

Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009

RevisãoIntercepting Filters

actioninterceptors interceptors

Friday, May 22, 2009

Page 78: Struts 2.x

Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009

Tratamento de exceção

Evitar submit duplo

Upload de arquivo

Ciclo de vida

Validações

Interceptorspra quê?

http://struts.apache.org/2.1.6/docs/interceptors.htmlFriday, May 22, 2009

Page 79: Struts 2.x

Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009

Interceptors

<package name="default" extends="struts-default"> <interceptors> <interceptor name="timer" class="..."/> <interceptor name="logger" class="..."/> </interceptors>

<action name="login" class="tutorial.Login"> <interceptor-ref name="timer"/> <interceptor-ref name="logger"/> <result name="input">login.jsp</result> <result name="success" type="redirectAction">/secure/home</result> </action></package>

Friday, May 22, 2009

Page 80: Struts 2.x

Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009

Pacotes de Interceptors<package name="default" extends="struts-default"> <interceptors> <interceptor name="timer" class=".."/> <interceptor name="logger" class=".."/>

<interceptor-stack name="myStack"> <interceptor-ref name="timer"/> <interceptor-ref name="logger"/> </interceptor-stack>

</interceptors>

<action name="login" class="tutuorial.Login"> <interceptor-ref name="myStack"/>

<result name="input">login.jsp</result> <result name="success" type="redirectAction">/secure/home</result> </action></package>

Friday, May 22, 2009

Page 81: Struts 2.x

Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009

<interceptor name="alias" class="com.opensymphony.xwork2.interceptor.AliasInterceptor"/><interceptor name="autowiring" class="com.opensymphony.xwork2.spring.interceptor.ActionAutowiringInterceptor"/><interceptor name="chain" class="com.opensymphony.xwork2.interceptor.ChainingInterceptor"/><interceptor name="conversionError" class="org.apache.struts2.interceptor.StrutsConversionErrorInterceptor"/><interceptor name="clearSession" class="org.apache.struts2.interceptor.ClearSessionInterceptor" /><interceptor name="createSession" class="org.apache.struts2.interceptor.CreateSessionInterceptor" /><interceptor name="debugging" class="org.apache.struts2.interceptor.debugging.DebuggingInterceptor" /><interceptor name="externalRef" class="com.opensymphony.xwork2.interceptor.ExternalReferencesInterceptor"/><interceptor name="execAndWait" class="org.apache.struts2.interceptor.ExecuteAndWaitInterceptor"/><interceptor name="exception" class="com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor"/><interceptor name="fileUpload" class="org.apache.struts2.interceptor.FileUploadInterceptor"/><interceptor name="i18n" class="com.opensymphony.xwork2.interceptor.I18nInterceptor"/><interceptor name="logger" class="com.opensymphony.xwork2.interceptor.LoggingInterceptor"/><interceptor name="modelDriven" class="com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor"/><interceptor name="scopedModelDriven" class="com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor"/><interceptor name="params" class="com.opensymphony.xwork2.interceptor.ParametersInterceptor"/><interceptor name="actionMappingParams" class="org.apache.struts2.interceptor.ActionMappingParametersInteceptor"/><interceptor name="prepare" class="com.opensymphony.xwork2.interceptor.PrepareInterceptor"/><interceptor name="staticParams" class="com.opensymphony.xwork2.interceptor.StaticParametersInterceptor"/><interceptor name="scope" class="org.apache.struts2.interceptor.ScopeInterceptor"/><interceptor name="servletConfig" class="org.apache.struts2.interceptor.ServletConfigInterceptor"/><interceptor name="sessionAutowiring" class="org.apache.struts2.spring.interceptor.SessionContextAutowiringInterceptor"/><interceptor name="timer" class="com.opensymphony.xwork2.interceptor.TimerInterceptor"/><interceptor name="token" class="org.apache.struts2.interceptor.TokenInterceptor"/><interceptor name="tokenSession" class="org.apache.struts2.interceptor.TokenSessionStoreInterceptor"/><interceptor name="validation" class="org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor"/><interceptor name="workflow" class="com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor"/><interceptor name="store" class="org.apache.struts2.interceptor.MessageStoreInterceptor" /><interceptor name="checkbox" class="org.apache.struts2.interceptor.CheckboxInterceptor" /><interceptor name="profiling" class="org.apache.struts2.interceptor.ProfilingActivationInterceptor" /><interceptor name="roles" class="org.apache.struts2.interceptor.RolesInterceptor" /><interceptor name="jsonValidation" class="org.apache.struts2.interceptor.validation.JSONValidationInterceptor" /><interceptor name="annotationWorkflow" class="com.opensymphony.xwork2.interceptor.annotations.AnnotationWorkflowInterceptor" />

Interceptors

Friday, May 22, 2009

Page 82: Struts 2.x

Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009

Exemplo

May 15, 2009 11:39:22 AM com.opensymphony.xwork2.util.logging.commons.CommonsLogger infoINFO: Starting execution stack for action //login_autenticarMay 15, 2009 11:39:22 AM com.opensymphony.xwork2.util.logging.commons.CommonsLogger infoINFO: Finishing execution stack for action //login_autenticar

<action name="login_*" method="{1}" class="br.ucb.soo.wa.struts2.lab3.LoginAction">

<interceptor-ref name="logger"/> <result name="loginOK">menu.jsp</result> <result name="loginNOK">login.jsp</result></action>

Friday, May 22, 2009

Page 83: Struts 2.x

Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009

coisas muito mais complexas podem ser feitas...

Interceptors

Friday, May 22, 2009

Page 84: Struts 2.x

Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009

coisas muito mais complexas podem ser feitas...

Interceptors

...e precisam ser testadas!

Friday, May 22, 2009

Page 85: Struts 2.x

Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009

:-/

TestesDireto na Action

Friday, May 22, 2009

Page 86: Struts 2.x

Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009

Friday, May 22, 2009

Page 87: Struts 2.x

Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009

Friday, May 22, 2009

Page 88: Struts 2.x

Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009

:-)

TestesAction Proxied

Friday, May 22, 2009

Page 89: Struts 2.x

Friday, May 22, 2009

Page 90: Struts 2.x

Friday, May 22, 2009

Page 91: Struts 2.x

Ambos os sites propõem classes da apoio aos testes

Friday, May 22, 2009

Page 92: Struts 2.x

Friday, May 22, 2009

Page 93: Struts 2.x

// create action context for my action, feed// into the action context all request parametersMap requestParameters = new HashMap();requestParameters.put("param1", "param1-value");requestParameters.put("param2", "param2-value");Map actionContext = StrutsTestCaseSupport.getInstance().buildActionContext( "my.hostname.com", "get", "/myActionNamespace/myActionName", requestParameters);

// create the proxy for the action, this encapsulates all// the interception stack up to the real actionActionProxy proxy = StrutsTestCaseSupport.getInstance().createActionProxy( "myActionName", "myActionNameSpace",actionContext);// inject parameters as required

// let the full stack runString result = proxy.execute();

// confirm resultassert result.equals("myTestResponseString");

// look into mock HttpServletResponse, do whatever// tests I need to do: returned HTML, returned headers,// cookies, etc...String responseXml = ((MockHttpServletResponse) actionContext.get(StrutsStatics.HTTP_RESPONSE)).getContentAsString();assert responseXml.indexOf("success") != -1;

http://fassisrosa.blogspot.com/2006/11/unit-testing-struts-20.htmlFriday, May 22, 2009

Page 94: Struts 2.x

Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009

Struts2testes

org.apache.struts2.util.StrutsTestCaseHelper

Generic test setup methods to be used with any unit testing framework.

com.opensymphony.xwork2.TestNGXWorkTestCase

Base test class for TestNG unit tests. Provides common XWork variables and performs XWork setup and teardown processes

com.opensymphony.xwork2.XWorkTestCase

Base JUnit TestCase to extend for XWork specific JUnit tests. Uses the generic test setup for logic.

com.opensymphony.xwork2.util.XWorkTestCaseHelper

Generic test setup methods to be used with any unit testing framework.

Friday, May 22, 2009

Page 95: Struts 2.x

Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009

Mecanismo para modularização das configurações.

Include

Friday, May 22, 2009

Page 96: Struts 2.x

Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009

Include<struts> <include file="billing-config.xml" /> <include file="admin-config.xml" /> <include file="reports-config.xml" /> ... </struts>

struts-default.xml e struts-plugin.xml são incluídos implicitamente em todo struts.xml

Friday, May 22, 2009

Page 97: Struts 2.x

Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009

Mecanismo para organização lógica e reaproveitamento de configurações

Packages

Friday, May 22, 2009

Page 98: Struts 2.x

Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009

Packages

<struts>

<package name="exemplo" extends="struts-default"> <action name="login_*" method="{1}" class="br.ucb.soo.wa.struts2.lab3.LoginAction"> <interceptor-ref name="logger"/> <result name="loginOK">menu.jsp</result> <result name="loginNOK">login.jsp</result> </action> <action name="logout/*" class="br.ucb.soo.wa.struts2.lab3.LogoutAction"> <result>{1}.jsp</result> </action> </package>

</struts>

Friday, May 22, 2009

Page 99: Struts 2.x

Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009

Verificação declarativa de campos

Validators

Friday, May 22, 2009

Page 100: Struts 2.x

Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009

conversion validatordate validator

double validatoremail validator

expression validatorfieldexpression validator

int validatorregex validator

required validatorrequiredstring validatorstringlength validator

url validatorvisitor validator

Bundled Validators

http://struts.apache.org/2.1.6/docs/validation.htmlFriday, May 22, 2009

Page 101: Struts 2.x

<interceptor name="validation" class="org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor"/>

struts.xmlFriday, May 22, 2009

Page 102: Struts 2.x

<interceptor-ref name="validation" />struts.xml

<interceptor name="validation" class="org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor"/>

struts-default.xml

Friday, May 22, 2009

Page 103: Struts 2.x

Friday, May 22, 2009

Page 104: Struts 2.x

<body><s:form action="login_autenticar" validate="true"> <s:textfield label="Login" name="usuario"/> <s:password label="Senha" name="senha" /> <s:submit/></s:form></body>

login.jspFriday, May 22, 2009

Page 105: Struts 2.x

<validators> <field name="usuario"> <field-validator type="requiredstring"> <message>Nome de usuario obrigatorio!</message> </field-validator> </field> <field name="senha"> <field-validator type="requiredstring"> <message>Senha obrigatoria!</message> </field-validator> </field></validators>

br/ucb/soo/wa/struts2/lab3/LoginAction-validation.xmlFriday, May 22, 2009

Page 106: Struts 2.x

<validators> <field name="usuario"> <field-validator type="requiredstring"> <message>Nome de usuario obrigatorio!</message> </field-validator> </field> <field name="senha"> <field-validator type="requiredstring"> <message>Senha obrigatoria!</message> </field-validator> </field></validators>

br/ucb/soo/wa/struts2/lab3/LoginAction-validation.xmlFriday, May 22, 2009

Page 107: Struts 2.x

<validators> <field name="usuario"> <field-validator type="requiredstring"> <message>Nome de usuario obrigatorio!</message> </field-validator> </field> <field name="senha"> <field-validator type="requiredstring"> <message>Senha obrigatoria!</message> </field-validator> </field></validators>

br/ucb/soo/wa/struts2/lab3/LoginAction-validation.xmlFriday, May 22, 2009

Page 108: Struts 2.x

<validators> <field name="usuario"> <field-validator type="requiredstring"> <message>Nome de usuario obrigatorio!</message> </field-validator> </field> <field name="senha"> <field-validator type="requiredstring"> <message>Senha obrigatoria!</message> </field-validator> </field></validators>

br/ucb/soo/wa/struts2/lab3/LoginAction-validation.xmlFriday, May 22, 2009

Page 109: Struts 2.x

<validators> <field name="usuario"> <field-validator type="requiredstring"> <message>Nome de usuario obrigatorio!</message> </field-validator> </field> <field name="senha"> <field-validator type="requiredstring"> <message>Senha obrigatoria!</message> </field-validator> </field></validators>

br/ucb/soo/wa/struts2/lab3/LoginAction-validation.xmlFriday, May 22, 2009

Page 110: Struts 2.x

Friday, May 22, 2009

Page 111: Struts 2.x

Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009

Friday, May 22, 2009

Page 112: Struts 2.x

http

://cw

iki.a

pach

e.or

g/co

nflue

nce/

disp

lay/

WW

/Big

+Pi

ctur

e

Friday, May 22, 2009

Page 113: Struts 2.x

Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009

Afinal, por que Struts2?• Baseado em Actions

• Configurações

- XML e Annotations

• Actions POJO

- alta testabilidade

• Integrável

- Spring, SiteMesh e Tiles

• Opções de View

- JSP, Freemarker, Velocity e XSLT

• PlugávelFriday, May 22, 2009

Page 114: Struts 2.x

Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009

“The Bootstap tutorials starts from the very beginning and steps through creating a

simple application.”

http://struts.apache.org/2.x/docs/bootstrap.html

Labs

Friday, May 22, 2009

Page 115: Struts 2.x

Lato Sensu em Sistemas Orientados a Objetos

Q&AMSc. Alexandre [email protected]

Friday, May 22, 2009