• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Struts 2.x
 

Struts 2.x

on

  • 5,899 views

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.

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.

Statistics

Views

Total Views
5,899
Views on SlideShare
5,852
Embed Views
47

Actions

Likes
1
Downloads
332
Comments
0

2 Embeds 47

http://www.slideshare.net 44
http://angoticom.blogspot.com 3

Accessibility

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Struts 2.x Struts 2.x Presentation Transcript

    • Lato Sensu em Sistemas Orientados a Objetos Módulo 4.2 Struts 2 Friday, May 22, 2009
    • Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009 Friday, May 22, 2009
    • Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009 4 1. 2 x k x or 2. x 0. .2 1. W s 2. ts t ts eb k W u ru or ru bW r W St St St e 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 Friday, May 22, 2009
    • Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009 Friday, May 22, 2009
    • Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009 Struts 2 objetivo simplificar o desenvolvimento web Friday, May 22, 2009
    • Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009 Struts 2 objetivo Redução do XML convenção sobre configuração anotações Actions são POJOs melhor testabilidade bind automático de parâmetros HTTP Friday, May 22, 2009
    • Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009 Struts 2 novidades Interceptadores pré e pós-processamento Extensibilidade plugins Result Types JSP, Velocity, Freemarker Injeção de dependências Spring, Plexus, PicoContainer Friday, May 22, 2009
    • Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009 In a nutshell Friday, May 22, 2009
    • Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009 http:// servidor/ app/ action Friday, May 22, 2009
    • 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
    • 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
    • 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
    • Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009 Friday, May 22, 2009
    • Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009 Friday, May 22, 2009
    • Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009 XML mapeia POJO comum Friday, May 22, 2009
    • 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
    • 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
    • Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009 Action e struts.xml libs web.xml *.html *.jsp Friday, May 22, 2009
    • Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009 At a glance Friday, May 22, 2009
    • Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009 http:// servidor/ app/ action Friday, May 22, 2009
    • Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009 http:// servidor/ app/ action ? Friday, May 22, 2009
    • Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009 Struts 1.x Friday, May 22, 2009
    • Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009 Struts 1.x ? Friday, May 22, 2009
    • Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009 http:// servidor/ FrontController! app/ action Friday, May 22, 2009
    • Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009 web.xml <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> Friday, May 22, 2009
    • Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009 Estratégia de Mapeamento de Actions Friday, May 22, 2009
    • Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009 Estratégia de Mapeamento de Actions http://localhost:8080/app/entrar LoginAction.execute() Friday, May 22, 2009
    • Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009 Estratégia de Mapeamento de Actions http://localhost:8080/app/entrar LoginAction.execute() Friday, May 22, 2009
    • Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009 Estratégia de Mapeamento de Actions http://localhost:8080/app/entrar LoginAction.execute() <action name=quot;entrarquot; class=quot;xpto.LoginActionquot;/> Friday, May 22, 2009
    • Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009 Estratégia de Mapeamento de Actions http://localhost:8080/app/entrar ControleDeAcessoAction.login() <action name=quot;entrarquot; method=quot;loginquot; class=quot;xpto.ControleDeAcessoActionquot;/> Friday, May 22, 2009
    • Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009 Estratégia de Mapeamento de Actions http://localhost:8080/app/entrar ControleDeAcessoAction.login() <action name=quot;entrarquot; method=quot;loginquot; class=quot;xpto.ControleDeAcessoActionquot;/> Friday, May 22, 2009
    • 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/acesso_login ControleDeAcessoAction.login() Friday, May 22, 2009
    • 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/acesso_login ControleDeAcessoAction.login() Friday, May 22, 2009
    • 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/acesso_login ControleDeAcessoAction.login() Friday, May 22, 2009
    • 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/acesso_login ControleDeAcessoAction.login() <action name=quot;acesso_ *quot; method=quot; {1}quot; class=quot;xpto.ControleDeAcessoActionquot;/> Friday, May 22, 2009
    • Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009 Friday, May 22, 2009
    • Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009 Friday, May 22, 2009
    • 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
    • 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
    • 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
    • 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() <action name=quot; */*quot; method=quot; {2}quot; class=quot;xpto. {1}Actionquot;/> Friday, May 22, 2009
    • Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009 Binding Friday, May 22, 2009
    • Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009 Dados de Requisição usuario=alegomes senha=123456 Friday, May 22, 2009
    • 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
    • Friday, May 22, 2009
    • setUsuario(“alegomes”); setSenha(“123456”); Friday, May 22, 2009
    • setUsuario(“alegomes”); setSenha(“123456”); Friday, May 22, 2009
    • Friday, May 22, 2009
    • Friday, May 22, 2009
    • Friday, May 22, 2009
    • Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009 Testabilidade Como Actions são POJOS, nenhuma infra-estrutura mágica é necessária para implementação de testes unitários. Friday, May 22, 2009
    • Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009 Friday, May 22, 2009
    • Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009 Tags Friday, May 22, 2009
    • http:// servidor/ app/ action login.jsp menu.jsp Friday, May 22, 2009
    • struts.xml <action name=quot;login_*quot; method=quot;{1}quot; class=quot;br.ucb.soo.wa.struts2.lab3.LoginActionquot;> <result name=quot;loginOKquot;>menu.jsp</result> <result name=quot;loginNOKquot;>login.jsp</result> </action> LoginAction.java public class LoginAction { public static final String USUARIO_ESPERADO = quot;alegomesquot;; public static final String SENHA_ESPERADA = quot;123456quot;; private String usuario; private String senha; public String autenticar() { if (USUARIO_ESPERADO.equals(usuario) && SENHA_ESPERADA.equals(senha)) { return quot;loginOKquot;; } else { return quot;loginNOKquot;; } } //Gets e Sets } Friday, May 22, 2009
    • struts.xml <action name=quot;login_*quot; method=quot;{1}quot; class=quot;br.ucb.soo.wa.struts2.lab3.LoginActionquot;> <result name=quot;loginOKquot;>menu.jsp</result> <result name=quot;loginNOKquot;>login.jsp</result> </action> LoginAction.java public class LoginAction { public static final String USUARIO_ESPERADO = quot;alegomesquot;; public static final String SENHA_ESPERADA = quot;123456quot;; private String usuario; private String senha; public String autenticar() { if (USUARIO_ESPERADO.equals(usuario) && SENHA_ESPERADA.equals(senha)) { return quot;loginOKquot;; } else { return quot;loginNOKquot;; } } //Gets e Sets } Friday, May 22, 2009
    • senha correta <title>Menu do Sistema</title> </head> <body> <h1>Seja bem vindo.</h1> Escolha uma das abaixo. <ul> <li><a href=quot;servico_f1quot;>Funcionalidade 1</a></li> <li><a href=quot;servico_f1quot;>Funcionalidade 2</a></li> <li><a href=quot;servico_f1quot;>Funcionalidade 3</a></li> <li><a href=quot;servico_f1quot;>Funcionalidade 4</a></li> </ul> </body> </html> menu.jsp Friday, May 22, 2009
    • senha errada <title>Tela de Autenticação</title> </head> <body> <form action=quot;login_autenticarquot;> Login: <input type=quot;textquot; value=quot;quot;/><p/> Senha: <input type=quot;passwordquot; value=quot;quot;/><p/> <input type=quot;submitquot;/> </form> </body> login.jsp Friday, May 22, 2009
    • <h1>Seja bem vindo, <s:property value=quot;usuarioquot; />.</h1> Friday, May 22, 2009
    • <h1>Seja bem vindo, <s:property value=quot;usuarioquot; />.</h1> Friday, May 22, 2009
    • <s:form action=quot;login_autenticarquot;> <s:textfield label=quot;Loginquot; name=quot;usuarioquot;/> <s:password label=quot;Senhaquot; name=quot;senhaquot; /> <s:submit/> </s:form> Friday, May 22, 2009
    • Friday, May 22, 2009
    • Friday, May 22, 2009
    • Friday, May 22, 2009
    • Friday, May 22, 2009
    • mais infos... Friday, May 22, 2009
    • Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009 Results & Result Types Friday, May 22, 2009
    • http:// servidor/ app/ action login.vt menu.jsp Friday, May 22, 2009
    • Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009 Results implementação da Camada View Resposta da Action Friday, May 22, 2009
    • Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009 Results login.jsp menu.jsp Velocity Freemarker XSTL Action Friday, May 22, 2009
    • Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009 Result Types Velocity Freemarker XSTL <action name=quot;qqcoisa*quot; method=quot;{1}quot; class=quot;br.ucb.soo.wa.struts2.lab3.QQActionquot;> <result name=quot;result1quot;>menu.jsp</result> <result name=quot;result1quot; type=”dispatcher”>some.jsp</result> <result name=quot;result2quot; type=”freemarker”>login.ftl</result> <result name=quot;result3quot; type=”velocity”>page.vt</result> </action> Friday, May 22, 2009
    • Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009 Result Types customizados public interface Result extends Serializable { public void execute(ActionInvocation invocation) throws Exception; } <result-types> <result-type name=quot;dispatcherquot; default=quot;truequot; class=quot;seu.pacote.SuaClassequot;/> </result-types> Friday, May 22, 2009
    • Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009 Dependency Injection Friday, May 22, 2009
    • Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009 Interceptors Friday, May 22, 2009
    • http:// servidor/ app/ action Friday, May 22, 2009
    • Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009 Revisão Intercepting Filters Friday, May 22, 2009
    • Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009 Revisão Intercepting Filters interceptors action interceptors Friday, May 22, 2009
    • Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009 Interceptors pra quê? Tratamento de exceção Evitar submit duplo Upload de arquivo Ciclo de vida Validações http://struts.apache.org/2.1.6/docs/interceptors.html Friday, May 22, 2009
    • Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009 Interceptors <package name=quot;defaultquot; extends=quot;struts-defaultquot;> <interceptors> <interceptor name=quot;timerquot; class=quot;...quot;/> <interceptor name=quot;loggerquot; class=quot;...quot;/> </interceptors> <action name=quot;loginquot; class=quot;tutorial.Loginquot;> <interceptor-ref name=quot;timerquot;/> <interceptor-ref name=quot;loggerquot;/> <result name=quot;inputquot;>login.jsp</result> <result name=quot;successquot; type=quot;redirectActionquot;>/secure/home</result> </action> </package> Friday, May 22, 2009
    • Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009 Pacotes de Interceptors <package name=quot;defaultquot; extends=quot;struts-defaultquot;> <interceptors> <interceptor name=quot;timerquot; class=quot;..quot;/> <interceptor name=quot;loggerquot; class=quot;..quot;/> <interceptor-stack name=quot;myStackquot;> <interceptor-ref name=quot;timerquot;/> <interceptor-ref name=quot;loggerquot;/> </interceptor-stack> </interceptors> <action name=quot;loginquot; class=quot;tutuorial.Loginquot;> <interceptor-ref name=quot;myStackquot;/> <result name=quot;inputquot;>login.jsp</result> <result name=quot;successquot; type=quot;redirectActionquot;>/secure/home</result> </action> </package> Friday, May 22, 2009
    • Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009 Interceptors <interceptor name=quot;aliasquot; class=quot;com.opensymphony.xwork2.interceptor.AliasInterceptorquot;/> <interceptor name=quot;autowiringquot; class=quot;com.opensymphony.xwork2.spring.interceptor.ActionAutowiringInterceptorquot;/> <interceptor name=quot;chainquot; class=quot;com.opensymphony.xwork2.interceptor.ChainingInterceptorquot;/> <interceptor name=quot;conversionErrorquot; class=quot;org.apache.struts2.interceptor.StrutsConversionErrorInterceptorquot;/> <interceptor name=quot;clearSessionquot; class=quot;org.apache.struts2.interceptor.ClearSessionInterceptorquot; /> <interceptor name=quot;createSessionquot; class=quot;org.apache.struts2.interceptor.CreateSessionInterceptorquot; /> <interceptor name=quot;debuggingquot; class=quot;org.apache.struts2.interceptor.debugging.DebuggingInterceptorquot; /> <interceptor name=quot;externalRefquot; class=quot;com.opensymphony.xwork2.interceptor.ExternalReferencesInterceptorquot;/> <interceptor name=quot;execAndWaitquot; class=quot;org.apache.struts2.interceptor.ExecuteAndWaitInterceptorquot;/> <interceptor name=quot;exceptionquot; class=quot;com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptorquot;/> <interceptor name=quot;fileUploadquot; class=quot;org.apache.struts2.interceptor.FileUploadInterceptorquot;/> <interceptor name=quot;i18nquot; class=quot;com.opensymphony.xwork2.interceptor.I18nInterceptorquot;/> <interceptor name=quot;loggerquot; class=quot;com.opensymphony.xwork2.interceptor.LoggingInterceptorquot;/> <interceptor name=quot;modelDrivenquot; class=quot;com.opensymphony.xwork2.interceptor.ModelDrivenInterceptorquot;/> <interceptor name=quot;scopedModelDrivenquot; class=quot;com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptorquot;/> <interceptor name=quot;paramsquot; class=quot;com.opensymphony.xwork2.interceptor.ParametersInterceptorquot;/> <interceptor name=quot;actionMappingParamsquot; class=quot;org.apache.struts2.interceptor.ActionMappingParametersInteceptorquot;/> <interceptor name=quot;preparequot; class=quot;com.opensymphony.xwork2.interceptor.PrepareInterceptorquot;/> <interceptor name=quot;staticParamsquot; class=quot;com.opensymphony.xwork2.interceptor.StaticParametersInterceptorquot;/> <interceptor name=quot;scopequot; class=quot;org.apache.struts2.interceptor.ScopeInterceptorquot;/> <interceptor name=quot;servletConfigquot; class=quot;org.apache.struts2.interceptor.ServletConfigInterceptorquot;/> <interceptor name=quot;sessionAutowiringquot; class=quot;org.apache.struts2.spring.interceptor.SessionContextAutowiringInterceptorquot;/> <interceptor name=quot;timerquot; class=quot;com.opensymphony.xwork2.interceptor.TimerInterceptorquot;/> <interceptor name=quot;tokenquot; class=quot;org.apache.struts2.interceptor.TokenInterceptorquot;/> <interceptor name=quot;tokenSessionquot; class=quot;org.apache.struts2.interceptor.TokenSessionStoreInterceptorquot;/> <interceptor name=quot;validationquot; class=quot;org.apache.struts2.interceptor.validation.AnnotationValidationInterceptorquot;/> <interceptor name=quot;workflowquot; class=quot;com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptorquot;/> <interceptor name=quot;storequot; class=quot;org.apache.struts2.interceptor.MessageStoreInterceptorquot; /> <interceptor name=quot;checkboxquot; class=quot;org.apache.struts2.interceptor.CheckboxInterceptorquot; /> <interceptor name=quot;profilingquot; class=quot;org.apache.struts2.interceptor.ProfilingActivationInterceptorquot; /> <interceptor name=quot;rolesquot; class=quot;org.apache.struts2.interceptor.RolesInterceptorquot; /> <interceptor name=quot;jsonValidationquot; class=quot;org.apache.struts2.interceptor.validation.JSONValidationInterceptorquot; /> <interceptor name=quot;annotationWorkflowquot; class=quot;com.opensymphony.xwork2.interceptor.annotations.AnnotationWorkflowInterceptorquot; /> Friday, May 22, 2009
    • Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009 Exemplo <action name=quot;login_*quot; method=quot;{1}quot; class=quot;br.ucb.soo.wa.struts2.lab3.LoginActionquot;> <interceptor-ref name=quot;loggerquot;/> <result name=quot;loginOKquot;>menu.jsp</result> <result name=quot;loginNOKquot;>login.jsp</result> </action> May 15, 2009 11:39:22 AM com.opensymphony.xwork2.util.logging.commons.CommonsLogger info INFO: Starting execution stack for action //login_autenticar May 15, 2009 11:39:22 AM com.opensymphony.xwork2.util.logging.commons.CommonsLogger info INFO: Finishing execution stack for action //login_autenticar Friday, May 22, 2009
    • Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009 Interceptors coisas muito mais complexas podem ser feitas... Friday, May 22, 2009
    • Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009 Interceptors coisas muito mais complexas podem ser feitas... ...e precisam ser testadas! Friday, May 22, 2009
    • Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009 Testes Direto na Action :-/ Friday, May 22, 2009
    • Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009 Friday, May 22, 2009
    • Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009 Friday, May 22, 2009
    • Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009 Testes Action Proxied :-) Friday, May 22, 2009
    • Friday, May 22, 2009
    • Friday, May 22, 2009
    • Ambos os sites propõem classes da apoio aos testes Friday, May 22, 2009
    • Friday, May 22, 2009
    • // create action context for my action, feed // into the action context all request parameters Map requestParameters = new HashMap(); requestParameters.put(quot;param1quot;, quot;param1-valuequot;); requestParameters.put(quot;param2quot;, quot;param2-valuequot;); Map actionContext = StrutsTestCaseSupport.getInstance().buildActionContext( quot;my.hostname.comquot;, quot;getquot;, quot;/myActionNamespace/myActionNamequot;, requestParameters); // create the proxy for the action, this encapsulates all // the interception stack up to the real action ActionProxy proxy = StrutsTestCaseSupport.getInstance().createActionProxy( quot;myActionNamequot;, quot;myActionNameSpacequot;,actionContext); // inject parameters as required // let the full stack run String result = proxy.execute(); // confirm result assert result.equals(quot;myTestResponseStringquot;); // 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(quot;successquot;) != -1; http://fassisrosa.blogspot.com/2006/11/unit-testing-struts-20.html Friday, May 22, 2009
    • Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009 Struts2 testes 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
    • Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009 Include Mecanismo para modularização das configurações. Friday, May 22, 2009
    • Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009 Include <struts> <include file=quot;billing-config.xmlquot; /> <include file=quot;admin-config.xmlquot; /> <include file=quot;reports-config.xmlquot; /> ... </struts> struts-default.xml e struts-plugin.xml são incluídos implicitamente em todo struts.xml Friday, May 22, 2009
    • Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009 Packages Mecanismo para organização lógica e reaproveitamento de configurações Friday, May 22, 2009
    • Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009 Packages <struts> <package name=quot;exemploquot; extends=quot;struts-defaultquot;> <action name=quot;login_*quot; method=quot;{1}quot; class=quot;br.ucb.soo.wa.struts2.lab3.LoginActionquot;> <interceptor-ref name=quot;loggerquot;/> <result name=quot;loginOKquot;>menu.jsp</result> <result name=quot;loginNOKquot;>login.jsp</result> </action> <action name=quot;logout/*quot; class=quot;br.ucb.soo.wa.struts2.lab3.LogoutActionquot;> <result>{1}.jsp</result> </action> </package> </struts> Friday, May 22, 2009
    • Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009 Validators Verificação declarativa de campos Friday, May 22, 2009
    • Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009 Bundled Validators conversion validator date validator double validator email validator expression validator fieldexpression validator int validator regex validator required validator requiredstring validator stringlength validator url validator visitor validator http://struts.apache.org/2.1.6/docs/validation.html Friday, May 22, 2009
    • <interceptor name=quot;validationquot; class=quot;org.apache.struts2.interceptor.validation.AnnotationValidationInterceptorquot;/> struts.xml Friday, May 22, 2009
    • <interceptor name=quot;validationquot; class=quot;org.apache.struts2.interceptor.validation.AnnotationValidationInterceptorquot;/> struts-default.xml <interceptor-ref name=quot;validationquot; /> struts.xml Friday, May 22, 2009
    • Friday, May 22, 2009
    • <body> <s:form action=quot;login_autenticarquot; validate=quot;truequot;> <s:textfield label=quot;Loginquot; name=quot;usuarioquot;/> <s:password label=quot;Senhaquot; name=quot;senhaquot; /> <s:submit/> </s:form> </body> login.jsp Friday, May 22, 2009
    • <validators> <field name=quot;usuarioquot;> <field-validator type=quot;requiredstringquot;> <message>Nome de usuario obrigatorio!</message> </field-validator> </field> <field name=quot;senhaquot;> <field-validator type=quot;requiredstringquot;> <message>Senha obrigatoria!</message> </field-validator> </field> </validators> br/ucb/soo/wa/struts2/lab3/LoginAction-validation.xml Friday, May 22, 2009
    • <validators> <field name=quot;usuarioquot;> <field-validator type=quot;requiredstringquot;> <message>Nome de usuario obrigatorio!</message> </field-validator> </field> <field name=quot;senhaquot;> <field-validator type=quot;requiredstringquot;> <message>Senha obrigatoria!</message> </field-validator> </field> </validators> br/ucb/soo/wa/struts2/lab3/LoginAction-validation.xml Friday, May 22, 2009
    • <validators> <field name=quot;usuarioquot;> <field-validator type=quot;requiredstringquot;> <message>Nome de usuario obrigatorio!</message> </field-validator> </field> <field name=quot;senhaquot;> <field-validator type=quot;requiredstringquot;> <message>Senha obrigatoria!</message> </field-validator> </field> </validators> br/ucb/soo/wa/struts2/lab3/LoginAction-validation.xml Friday, May 22, 2009
    • <validators> <field name=quot;usuarioquot;> <field-validator type=quot;requiredstringquot;> <message>Nome de usuario obrigatorio!</message> </field-validator> </field> <field name=quot;senhaquot;> <field-validator type=quot;requiredstringquot;> <message>Senha obrigatoria!</message> </field-validator> </field> </validators> br/ucb/soo/wa/struts2/lab3/LoginAction-validation.xml Friday, May 22, 2009
    • <validators> <field name=quot;usuarioquot;> <field-validator type=quot;requiredstringquot;> <message>Nome de usuario obrigatorio!</message> </field-validator> </field> <field name=quot;senhaquot;> <field-validator type=quot;requiredstringquot;> <message>Senha obrigatoria!</message> </field-validator> </field> </validators> br/ucb/soo/wa/struts2/lab3/LoginAction-validation.xml Friday, May 22, 2009
    • Friday, May 22, 2009
    • Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009 Friday, May 22, 2009
    • Friday, May 22, 2009 http://cwiki.apache.org/confluence/display/WW/Big+Picture
    • 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 Friday, May 22, 2009 • Plugável
    • Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009 Labs “The Bootstap tutorials starts from the very beginning and steps through creating a simple application.” http://struts.apache.org/2.x/docs/bootstrap.html Friday, May 22, 2009
    • Lato Sensu em Sistemas Orientados a Objetos Q&A MSc. Alexandre Gomes alegomes@gmail.com Friday, May 22, 2009