Conhecendo o Struts 2 - Java Tech Day 2007

26
Conhecendo o Struts 2 Jaime Schettini

description

Palestra apresentada por mim no Java Tech Day de Belém-PA em abril de 2007.--Presentation at Java Tech Day in april 2007. Belém-PA-Brazil.

Transcript of Conhecendo o Struts 2 - Java Tech Day 2007

Page 1: Conhecendo o Struts 2 - Java Tech Day 2007

Conhecendo o Struts 2

Jaime Schettini

Page 2: Conhecendo o Struts 2 - Java Tech Day 2007

Agenda de apresentação

Histórico

Arquitetura

Dependências

Estrutura do projeto

Configuração

Como utilizar?

Criando um projeto

Conclusão

Page 3: Conhecendo o Struts 2 - Java Tech Day 2007

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

Page 4: Conhecendo o Struts 2 - Java Tech Day 2007

Arquitetura

Page 5: Conhecendo o Struts 2 - Java Tech Day 2007

Dependências

Servlet API 2.4

JSP API 2.0

Java 5

Page 6: Conhecendo o Struts 2 - Java Tech Day 2007

Estrutura da aplicação

Page 7: Conhecendo o Struts 2 - Java Tech Day 2007

Arquivos de configuração

WEB-INF/web.xml

WEB-INF/classes/struts.xml

Page 8: Conhecendo o Struts 2 - Java Tech Day 2007

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

Page 9: Conhecendo o Struts 2 - Java Tech Day 2007

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>

Page 10: Conhecendo o Struts 2 - Java Tech Day 2007

Página de boas vindas

web.xml<welcome-file-list> <welcome-file>index.html</welcome-file></welcome-file-list>

index.html<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head> <META HTTP-EQUIV="Refresh" CONTENT="0;URL=boas- vindas.action"></head><body> <p>Carregando...</p></body></html>

Page 11: Conhecendo o Struts 2 - Java Tech Day 2007

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.

Page 12: Conhecendo o Struts 2 - Java Tech Day 2007

Configurando o struts.xml<struts> <include file="struts-default.xml"/>

<package name="default" extends="struts-default">

<action name="boas-vindas“ class="br.com.versatiliti.BoasVindasAction"> <result>/jsp/boas-vindas.jsp</result> </action>

<action name="usuario!*" method="{1}" class="br.com.versatiliti.UsuarioAction"> <result name="form">/jsp/usuario/form.jsp</result> <result name="cancel" type="redirect-action"> boas-vindas </result> <result>/jsp/usuario/list.jsp</result> </action>

<global-results> <result name="error">/jsp/Error.jsp</result> </global-results> </package></struts>

Page 13: Conhecendo o Struts 2 - Java Tech Day 2007

A propriedade result

URL='boas-vindas.action'

Action:<action name="boas-vindas" class="br.com.versatiliti.BoasVindasAction"> <result>/jsp/boas-vindas.jsp</result></action>

Método:public String execute() throws Exception { return SUCCESS;}

Page 14: Conhecendo o Struts 2 - Java Tech Day 2007

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

Page 15: Conhecendo o Struts 2 - Java Tech Day 2007

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.

Page 16: Conhecendo o Struts 2 - Java Tech Day 2007

Observação

O result name 'success' é o result padrão, podendo ser omitido na configuração da action

Action:<action name="boas-vindas"

class="br.com.versatiliti.BoasVindasAction"> <result>/jsp/boas-vindas.jsp</result></action>

é a mesma coisa que:<action name="boas-vindas"

class="br.com.versatiliti.BoasVindasAction"> <result

name=”success”>/jsp/boas-vindas.jsp</result></action>

Page 17: Conhecendo o Struts 2 - Java Tech Day 2007

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="error">/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.

Page 18: Conhecendo o Struts 2 - Java Tech Day 2007

Fluxo de uma requisição

Page 19: Conhecendo o Struts 2 - Java Tech Day 2007

Action com vários métodosstruts.xml<action name="usuario!*" method="{1}" class="br.com.versatiliti.UsuarioAction"> <result name="form">/jsp/usuario/form.jsp</result> <result name="list">/jsp/usuario/list.jsp</result> <result name="success">/jsp/usuario/list.jsp</result></action>

public String execute() { return SUCCESS;}

public String list() { usuarioService.findAll(); return "list";}

public String input() { Usuario usuario = new Usuario(); return “form”;}

public String save() { usuarioService.insert(usuario); return SUCCESS;}

_______________________________________________________________

UsuarioAction.java

Page 20: Conhecendo o Struts 2 - Java Tech Day 2007

Redirecionando actions

<action name="usuario!*" method="{1}" class="br.com.versatiliti.UsuarioAction"> <result name="form">/usuario/form.jsp</result> <result name="list">/usuario/list.jsp</result> <result name="success">/usuario/listar.jsp</result> <result name="cancel" type="redirect-action"> boas-vindas </result></action>

<action name="boas-vindas" class="br.com.versatiliti.BoasVindasAction"> <result>/jsp/boas-vindas.jsp</result></action>

Page 21: Conhecendo o Struts 2 - Java Tech Day 2007

Observação

Para permitir o uso de símbolos diferentes do '!' é preciso desabilitar uma opção nas propriedades do struts:

struts.propertiesstruts.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.propertiesstruts.action.extension = .nova_extencao

Page 22: Conhecendo o Struts 2 - Java Tech Day 2007

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

Page 23: Conhecendo o Struts 2 - Java Tech Day 2007

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

Page 24: Conhecendo o Struts 2 - Java Tech Day 2007

Exemplo com tags html

Page 25: Conhecendo o Struts 2 - Java Tech Day 2007

Exemplo usando tags do Struts

Page 26: Conhecendo o Struts 2 - Java Tech Day 2007

Mais informações

http://struts.apache.org/2.x/

Revista Mundo Java – nº 22

Revista Java Magazine – nº 41