Upload
alexandre-gomes
View
2.782
Download
0
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
Lato Sensu em Sistemas Orientados a Objetos
Módulo 4.2Struts 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
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
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
simplificar o desenvolvimento
web
Struts 2objetivo
Friday, May 22, 2009
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
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
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
Actione
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/
app/action
FrontController!
Friday, May 22, 2009
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
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
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
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
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
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
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
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
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
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
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
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
<action name="*/*" method="{2}" class="xpto.{1}Action"/>
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
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=alegomessenha=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
Como Actions são POJOS, nenhuma infra-estrutura mágica é necessária para
implementação de testes unitários.
Testabilidade
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
<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
<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
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
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
<h1>Seja bem vindo, <s:property value="usuario" />.</h1>
Friday, May 22, 2009
<h1>Seja bem vindo, <s:property value="usuario" />.</h1>
Friday, May 22, 2009
<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
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
implementação da
Camada View
Resposta da Action
Results
Friday, May 22, 2009
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
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
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
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ãoIntercepting Filters
Friday, May 22, 2009
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
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
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
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
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
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
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
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
Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009
:-/
TestesDireto 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
:-)
TestesAction 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 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
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
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
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
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
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
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
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
<interceptor name="validation" class="org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor"/>
struts.xmlFriday, May 22, 2009
<interceptor-ref name="validation" />struts.xml
<interceptor name="validation" class="org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor"/>
struts-default.xml
Friday, May 22, 2009
Friday, May 22, 2009
<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
<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
<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
<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
<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
<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
Friday, May 22, 2009
Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 1°/2009
Friday, May 22, 2009
http
://cw
iki.a
pach
e.or
g/co
nflue
nce/
disp
lay/
WW
/Big
+Pi
ctur
e
Friday, May 22, 2009
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
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
Lato Sensu em Sistemas Orientados a Objetos
Q&AMSc. Alexandre [email protected]
Friday, May 22, 2009