Conhecendo o Struts 2 - Java Tech Day 2007

Post on 28-May-2015

3.212 views 1 download

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

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

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

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

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

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.

Fluxo de uma requisição

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

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>

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

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