Conhecendo o Struts 2 Jaime Schettini
Agenda de apresentação Histórico Arquitetura Dependências Estrutura do projeto Configuração Como utilizar? Criando um projeto Conclusão
Histórico Struts é um framework baseado na arquitetura MVC Novos frameworks: Spring, Stripes and Tapestry União do Struts com o WebWork – arquitetura semelhante Muitas funcionalidades do WebWork 2.2 Struts 2: extensível e de fácil integração com Ajax
Arquitetura
Dependências Servlet API 2.4 JSP API 2.0 Java 5
Estrutura da aplicação
Arquivos de configuração WEB-INF/web.xml WEB-INF/classes/struts.xml
Configuração web.xml Define informações que um servidor precisa saber sobre a aplicação Nele é configurado o dispatcher Dispatcher Recebe todas as requisições da aplicação e faz a ligação entre essas requisições e uma determinada action
Configurando o web.xml <web-app> <display-name> Struts 2 - Exemplo </display-name> <filter> <filter-name> struts </filter-name> <filter-class> org.apache.struts2.dispatcher.FilterDispatcher </filter-class> </filter> <filter-mapping> <filter-name> struts </filter-name> <url-pattern> /* </url-pattern> </filter-mapping> </web-app>
Página de boas vindas web.xml <welcome-file-list> <welcome-file> index.htm l</welcome-file> </welcome-file-list> index.html <!DOCTYPE HTML PUBLIC  &quot;-//W3C//DTD HTML 4.0 Transitional//EN&quot; > <html> <head> <META HTTP-EQUIV= &quot;Refresh&quot;  CONTENT= &quot;0;URL=boas- vindas.action&quot; > </head> <body> <p> Carregando... </p> </body> </html>
Struts.xml e actions Action: contém código que nós queremos que seja executado antes de uma página renderizar a resposta As actions são definidas em arquivos de configuração Ao carregar a aplicação, o arquivo struts.xml é lido para que o framework possa mapear a requisição para uma determinada página em uma determinada action.
Configurando o struts.xml <struts> <include file= &quot; struts-default.xm l&quot; /> <package name= &quot;default&quot;  extends= &quot;struts-default &quot; > <action name= &quot;boas-vindas“ class= &quot;br.com.versatiliti.BoasVindasAction&quot; > <result> /jsp/boas-vindas.jsp </result> </action> <action name= &quot;usuario!*&quot;   method= &quot;{1}&quot;   class= &quot;br.com.versatiliti.UsuarioAction&quot; > <result name= &quot;form&quot; > /jsp/usuario/form.jsp </result> <result name= &quot;cancel&quot;  type= &quot;redirect-action&quot; > boas-vindas </result> <result> /jsp/usuario/list.jsp </result> </action> <global-results> <result name= &quot;error&quot; > /jsp/Error.jsp </result> </global-results> </package> </struts>
A propriedade result URL= 'boas-vindas.action' Action: <action name= &quot;boas-vindas&quot;  class= &quot;br.com.versatiliti.BoasVindasAction&quot; > <result> /jsp/boas-vindas.jsp </result> </action> Método: public  String execute()  throws  Exception { return   SUCCESS ; }
Action e parâmetros Action sem parâmetro: boas-vindas.action Método: public  String execute()  throws  Exception { return   SUCCESS ; } Action com parâmetro boas-vindas! sair .action Método: public  String sair() { return   CANCEL ; }
Tipos de resultado Os tipos de resultado são sempre uma  String , normalmente uma constante. Vários tipos de resultado já estão definidos na interface Action, como  ERROR, SUCCESS, LOGIN, NONE e INPUT.  Esses tipos podem ser usados na aplicação, ou pode-se criar outros.
Observação O result name 'success' é o result padrão, podendo ser omitido na configuração da action Action: <action name= &quot;boas-vindas&quot;  class= &quot;br.com.versatiliti.BoasVindasAction&quot; > <result> /jsp/boas-vindas.jsp </result> </action> é a mesma coisa que: <action name= &quot;boas-vindas&quot;  class= &quot;br.com.versatiliti.BoasVindasAction&quot; > <result name= ”success” > /jsp/boas-vindas.jsp </result> </action>
Results globais Nesse caso, o result 'error' está definido em um escopo global. Podem ocorrer problemas com qualquer outra action, e elas podem usar o result global quando ela quiser. <global-results> <result name= &quot;error&quot; > /jsp/Error.jsp </result> </global-results> Se uma action definir um result chamado 'error' dentro do seu escopo, é esse result que será usado em caso de erro ao invés do result global.
Fluxo de uma requisição
Action com vários métodos struts.xml <action name= &quot;usuario!*&quot;   method= &quot;{1}&quot;   class= &quot;br.com.versatiliti.UsuarioAction&quot; > <result name= &quot;form&quot; > /jsp/usuario/form.jsp </result> <result name= &quot;list&quot; > /jsp/usuario/list.jsp </result> <result name= &quot;success&quot; > /jsp/usuario/list.jsp </result> </action> public  String execute()  { return   SUCCESS ; } public  String list() { usuarioService.findAll(); return   &quot;list&quot; ; } public  String input() { Usuario usuario =  new  Usuario(); return  “form” ; } public  String save() { usuarioService.insert(usuario); return  SUCCESS ; } _______________________________________________________________ UsuarioAction.java
Redirecionando actions <action name= &quot;usuario!*&quot;   method= &quot;{1}&quot;   class= &quot;br.com.versatiliti.UsuarioAction&quot; > <result name= &quot;form&quot; > /usuario/form.jsp </result> <result name= &quot;list&quot; > /usuario/list.jsp </result> <result name= &quot;success&quot; > /usuario/listar.jsp </result> <result name= &quot;cancel&quot;  type= &quot;redirect-action&quot; > boas-vindas </result> </action> <action name= &quot; boas-vindas &quot;  class= &quot;br.com.versatiliti.BoasVindasAction&quot; > <result> /jsp/boas-vindas.jsp </result> </action>
Observação Para permitir o uso de símbolos diferentes do '!' é preciso desabilitar uma opção nas propriedades do struts: struts.properties struts.enable.DynamicMethodInvocation = false A extenção padrão para actions no Struts 2 é '.action'. Para mudar essa configuração e definir sua própria extenção, é preciso mudar o arquivo de configuração do Struts. struts.properties struts.action.extension = .nova_extencao
Interceptors Objetos utilizados para execução de código antes e depois de Actions Adiciona funcionalidades sem mexer na Action Utilizado para desacoplamento de código: autenticação, validação, etc Existem diversos interceptors prontos para uso, mas pode-se criar um novo implementando a interface Interceptor
Tags html Até agora nós informamos qual ação nós queremos que a action faça (listar usuários, por exemplo), mas o conteúdo ainda não foi mostrado na jsp. O Struts tem diversas tags html. É com o auxílio dessas tags que nós vamos mostrar o conteúdo no navegador. Os atributos de classe definidos nas actions são disponibilizados para a página através de seus métodos de acesso (get e set).
Exemplo com tags html
Exemplo usando tags do Struts
Mais informações http://struts.apache.org/2.x/ Revista Mundo Java – nº 22 Revista Java Magazine – nº 41

Mais conteúdo relacionado

PPTX
ASP.NET MVC Mini Curso
PDF
Angular JS, você precisa conhecer
PPTX
Construindo Diretivas com AngularJS
PPTX
10 Java Script - Exemplos práticos
PPTX
13 Java Script - Validação de formulário
PPTX
11 Java Script - Exemplos com eventos
PPTX
Edição de conteúdo web usando Javascript de ponta a ponta
PDF
Hello vue
ASP.NET MVC Mini Curso
Angular JS, você precisa conhecer
Construindo Diretivas com AngularJS
10 Java Script - Exemplos práticos
13 Java Script - Validação de formulário
11 Java Script - Exemplos com eventos
Edição de conteúdo web usando Javascript de ponta a ponta
Hello vue

Semelhante a Conhecendo o Struts 2 - Java Tech Day 2007 (11)

PPTX
Introdução ao struts 2
PDF
Tutorial struts
PDF
Apache Struts
PDF
Framework struts2v2.5
PPTX
PDF
Como escolher o Framework Java para web?
PDF
Mvc model view controller - java para desenvolvimento web
PPT
Apresentação Java Web Si Ufc Quixadá - MVC
PDF
Minicurso Java Server Faces
ODP
Php 05 Mvc
PPT
WEB 2 - Aula 01 - 02.08
Introdução ao struts 2
Tutorial struts
Apache Struts
Framework struts2v2.5
Como escolher o Framework Java para web?
Mvc model view controller - java para desenvolvimento web
Apresentação Java Web Si Ufc Quixadá - MVC
Minicurso Java Server Faces
Php 05 Mvc
WEB 2 - Aula 01 - 02.08
Anúncio

Mais de Jaime Schettini (9)

PDF
Como reinventar a sua carreira para obter mais valor e ser mais feliz (Evento...
PDF
Como reinventar a sua carreira
PDF
Agilidade no mundo real - um caso na Chaordic
PDF
A filosofia do sucesso - como mudar o mundo de dentro para fora
PDF
Retrospectiva tásafo 2010
ODP
Introdução às metodologias ágeis de desenvolvimento de software
ODP
Empreendendo em comunidades
ODP
Workshop - Introdução aos métodos ágeis de desenvolvimento de software
ODP
Hibernate: dos fundamentos às aplicações reais.
Como reinventar a sua carreira para obter mais valor e ser mais feliz (Evento...
Como reinventar a sua carreira
Agilidade no mundo real - um caso na Chaordic
A filosofia do sucesso - como mudar o mundo de dentro para fora
Retrospectiva tásafo 2010
Introdução às metodologias ágeis de desenvolvimento de software
Empreendendo em comunidades
Workshop - Introdução aos métodos ágeis de desenvolvimento de software
Hibernate: dos fundamentos às aplicações reais.
Anúncio

Último (17)

PDF
Aula 9 - Funções 202yttvrcrg5-1.pptx.pdf
PPTX
ccursoammaiacursoammaiacursoammaia123456
PDF
Customizing básico em SAP Extended Warehouse Management, EWM110 Col26
PDF
Processos no SAP Extended Warehouse Management, EWM100 Col26
PDF
Processamento da remessa no SAP ERP, SCM610 Col15
PPTX
Proposta de Implementação de uma Rede de Computador Cabeada.pptx
PPT
Aula de Engenharia de Software principais caracteristicas
PDF
eBook - GUIA DE CONSULTA RAPIDA EM ROTEADORES E SWITCHES CISCO - VOL I.pdf
PPTX
Analise Estatica de Compiladores para criar uma nova LP
PDF
Visão geral da SAP, SAP01 Col18, Introdução sistema SAP,
PDF
SEMINÁRIO DE IHC - A interface Homem-Máquina
PPT
Conceitos básicos de Redes Neurais Artificiais
PPTX
3b - Bradesco Lean Agile Training Plan - Ritos Operacionais (1).pptx
PPTX
Tipos de servidor em redes de computador.pptx
PDF
Banco de Dados 2atualização de Banco de d
PDF
Jira Software projetos completos com scrum
PPTX
Aula 9 - Funções em Python (Introdução à Ciência da Computação)
Aula 9 - Funções 202yttvrcrg5-1.pptx.pdf
ccursoammaiacursoammaiacursoammaia123456
Customizing básico em SAP Extended Warehouse Management, EWM110 Col26
Processos no SAP Extended Warehouse Management, EWM100 Col26
Processamento da remessa no SAP ERP, SCM610 Col15
Proposta de Implementação de uma Rede de Computador Cabeada.pptx
Aula de Engenharia de Software principais caracteristicas
eBook - GUIA DE CONSULTA RAPIDA EM ROTEADORES E SWITCHES CISCO - VOL I.pdf
Analise Estatica de Compiladores para criar uma nova LP
Visão geral da SAP, SAP01 Col18, Introdução sistema SAP,
SEMINÁRIO DE IHC - A interface Homem-Máquina
Conceitos básicos de Redes Neurais Artificiais
3b - Bradesco Lean Agile Training Plan - Ritos Operacionais (1).pptx
Tipos de servidor em redes de computador.pptx
Banco de Dados 2atualização de Banco de d
Jira Software projetos completos com scrum
Aula 9 - Funções em Python (Introdução à Ciência da Computação)

Conhecendo o Struts 2 - Java Tech Day 2007

  • 1. Conhecendo o Struts 2 Jaime Schettini
  • 2. Agenda de apresentação Histórico Arquitetura Dependências Estrutura do projeto Configuração Como utilizar? Criando um projeto Conclusão
  • 3. Histórico Struts é um framework baseado na arquitetura MVC Novos frameworks: Spring, Stripes and Tapestry União do Struts com o WebWork – arquitetura semelhante Muitas funcionalidades do WebWork 2.2 Struts 2: extensível e de fácil integração com Ajax
  • 5. Dependências Servlet API 2.4 JSP API 2.0 Java 5
  • 7. Arquivos de configuração WEB-INF/web.xml WEB-INF/classes/struts.xml
  • 8. Configuração web.xml Define informações que um servidor precisa saber sobre a aplicação Nele é configurado o dispatcher Dispatcher Recebe todas as requisições da aplicação e faz a ligação entre essas requisições e uma determinada action
  • 9. Configurando o web.xml <web-app> <display-name> Struts 2 - Exemplo </display-name> <filter> <filter-name> struts </filter-name> <filter-class> org.apache.struts2.dispatcher.FilterDispatcher </filter-class> </filter> <filter-mapping> <filter-name> struts </filter-name> <url-pattern> /* </url-pattern> </filter-mapping> </web-app>
  • 10. Página de boas vindas web.xml <welcome-file-list> <welcome-file> index.htm l</welcome-file> </welcome-file-list> index.html <!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0 Transitional//EN&quot; > <html> <head> <META HTTP-EQUIV= &quot;Refresh&quot; CONTENT= &quot;0;URL=boas- vindas.action&quot; > </head> <body> <p> Carregando... </p> </body> </html>
  • 11. Struts.xml e actions Action: contém código que nós queremos que seja executado antes de uma página renderizar a resposta As actions são definidas em arquivos de configuração Ao carregar a aplicação, o arquivo struts.xml é lido para que o framework possa mapear a requisição para uma determinada página em uma determinada action.
  • 12. Configurando o struts.xml <struts> <include file= &quot; struts-default.xm l&quot; /> <package name= &quot;default&quot; extends= &quot;struts-default &quot; > <action name= &quot;boas-vindas“ class= &quot;br.com.versatiliti.BoasVindasAction&quot; > <result> /jsp/boas-vindas.jsp </result> </action> <action name= &quot;usuario!*&quot; method= &quot;{1}&quot; class= &quot;br.com.versatiliti.UsuarioAction&quot; > <result name= &quot;form&quot; > /jsp/usuario/form.jsp </result> <result name= &quot;cancel&quot; type= &quot;redirect-action&quot; > boas-vindas </result> <result> /jsp/usuario/list.jsp </result> </action> <global-results> <result name= &quot;error&quot; > /jsp/Error.jsp </result> </global-results> </package> </struts>
  • 13. A propriedade result URL= 'boas-vindas.action' Action: <action name= &quot;boas-vindas&quot; class= &quot;br.com.versatiliti.BoasVindasAction&quot; > <result> /jsp/boas-vindas.jsp </result> </action> Método: public String execute() throws Exception { return SUCCESS ; }
  • 14. Action e parâmetros Action sem parâmetro: boas-vindas.action Método: public String execute() throws Exception { return SUCCESS ; } Action com parâmetro boas-vindas! sair .action Método: public String sair() { return CANCEL ; }
  • 15. Tipos de resultado Os tipos de resultado são sempre uma String , normalmente uma constante. Vários tipos de resultado já estão definidos na interface Action, como ERROR, SUCCESS, LOGIN, NONE e INPUT. Esses tipos podem ser usados na aplicação, ou pode-se criar outros.
  • 16. Observação O result name 'success' é o result padrão, podendo ser omitido na configuração da action Action: <action name= &quot;boas-vindas&quot; class= &quot;br.com.versatiliti.BoasVindasAction&quot; > <result> /jsp/boas-vindas.jsp </result> </action> é a mesma coisa que: <action name= &quot;boas-vindas&quot; class= &quot;br.com.versatiliti.BoasVindasAction&quot; > <result name= ”success” > /jsp/boas-vindas.jsp </result> </action>
  • 17. Results globais Nesse caso, o result 'error' está definido em um escopo global. Podem ocorrer problemas com qualquer outra action, e elas podem usar o result global quando ela quiser. <global-results> <result name= &quot;error&quot; > /jsp/Error.jsp </result> </global-results> Se uma action definir um result chamado 'error' dentro do seu escopo, é esse result que será usado em caso de erro ao invés do result global.
  • 18. Fluxo de uma requisição
  • 19. Action com vários métodos struts.xml <action name= &quot;usuario!*&quot; method= &quot;{1}&quot; class= &quot;br.com.versatiliti.UsuarioAction&quot; > <result name= &quot;form&quot; > /jsp/usuario/form.jsp </result> <result name= &quot;list&quot; > /jsp/usuario/list.jsp </result> <result name= &quot;success&quot; > /jsp/usuario/list.jsp </result> </action> public String execute() { return SUCCESS ; } public String list() { usuarioService.findAll(); return &quot;list&quot; ; } public String input() { Usuario usuario = new Usuario(); return “form” ; } public String save() { usuarioService.insert(usuario); return SUCCESS ; } _______________________________________________________________ UsuarioAction.java
  • 20. Redirecionando actions <action name= &quot;usuario!*&quot; method= &quot;{1}&quot; class= &quot;br.com.versatiliti.UsuarioAction&quot; > <result name= &quot;form&quot; > /usuario/form.jsp </result> <result name= &quot;list&quot; > /usuario/list.jsp </result> <result name= &quot;success&quot; > /usuario/listar.jsp </result> <result name= &quot;cancel&quot; type= &quot;redirect-action&quot; > boas-vindas </result> </action> <action name= &quot; boas-vindas &quot; class= &quot;br.com.versatiliti.BoasVindasAction&quot; > <result> /jsp/boas-vindas.jsp </result> </action>
  • 21. Observação Para permitir o uso de símbolos diferentes do '!' é preciso desabilitar uma opção nas propriedades do struts: struts.properties struts.enable.DynamicMethodInvocation = false A extenção padrão para actions no Struts 2 é '.action'. Para mudar essa configuração e definir sua própria extenção, é preciso mudar o arquivo de configuração do Struts. struts.properties struts.action.extension = .nova_extencao
  • 22. Interceptors Objetos utilizados para execução de código antes e depois de Actions Adiciona funcionalidades sem mexer na Action Utilizado para desacoplamento de código: autenticação, validação, etc Existem diversos interceptors prontos para uso, mas pode-se criar um novo implementando a interface Interceptor
  • 23. Tags html Até agora nós informamos qual ação nós queremos que a action faça (listar usuários, por exemplo), mas o conteúdo ainda não foi mostrado na jsp. O Struts tem diversas tags html. É com o auxílio dessas tags que nós vamos mostrar o conteúdo no navegador. Os atributos de classe definidos nas actions são disponibilizados para a página através de seus métodos de acesso (get e set).
  • 25. Exemplo usando tags do Struts
  • 26. Mais informações http://struts.apache.org/2.x/ Revista Mundo Java – nº 22 Revista Java Magazine – nº 41