Struts - PowerPoint PPT Presentation

About This Presentation
Title:

Struts

Description:

Struts Java avan ado PCC Jobson Ronan {jrjs_at_cin.ufpe.br} Guilherme Kely {gkmo_at_cin.ufpe.br} O que ? Um framework para facilitar a implementa o de uma ... – PowerPoint PPT presentation

Number of Views:44
Avg rating:3.0/5.0
Slides: 27
Provided by: Jobson
Category:
Tags: struts

less

Transcript and Presenter's Notes

Title: Struts


1
Struts
  • Java avançado PCC
  • Jobson Ronan jrjs_at_cin.ufpe.br
  • Guilherme Kely gkmo_at_cin.ufpe.br

2
O que é?
  • Um framework para facilitar a implementação de
    uma arquitetura MVC em aplicações web
  • Oferece
  • Um servlet controlador configurável (Front
    Controller) através de arquivos XML externos, que
    despacham requisições a classe Action (Command)
    implementados pelo desenvolvedor
  • Uma vasta coleção de taglibs JSP
  • Classes ajudantes que oferecem suporte a
    tratamento de XML, preenchimento de JavaBeans,
    validação de formulários e gerenciamento externo
    de conteúdo

3
Componentes
  • Model (M)
  • Geralmente um objeto java (JavaBean)
  • View (V)
  • Geralmente uma página HTML ou JSP. Embora o
    Struts seja independente da camada de
    apresentação (ex. velstruts)
  • Controller (C)
  • org.apache.struts.action.ActionServlet ou
    subclasse

4
Componentes
  • Classes ajudantes
  • FromBean Encapsula dados de um formulário HTML
    (M)
  • ActionError(s) Encapsula dados de Erros (M)
    (deprecated 1.2)
  • ActionMessage(s) Encapsula dados de Mensagens
    (M)
  • Custon tags Encapsulam lógica de apresentação
    (V)
  • Actions implementam lógica comandos (C)
  • ActionForward Encapsulam lógica de
    redirecionamento (C)

5
Como funciona?
  • Componentes-chave
  • ActionServlet despachante de ações
  • Action classe estendida por cada ação (comando)
    a ser implementada (Command pattern)
  • struts-config.xml arquivo onde se definem
    mapeamentos entre ações, páginas, beans e dados

Form Bean
JSP
Action Servlet
Action
delega
http
Dados, Dao ou Session Facade
lê
despacha
Bean
prenche
6
Como usar?
  • struts-blank.war
  • Um template básico para um aplicação web já
    configurada para usar o struts
  • web.xml

ltservletgt ltservlet-namegtactionlt/servlet-namegt
ltservlet-classgtorg.apache.struts.action.Actio
nServletlt/servlet-classgt ltinit-paramgt
ltparam-namegtconfiglt/param-namegt
ltparam-valuegt/WEB-INF/struts-config.xmllt/param-val
uegt lt/init-paramgt ... lt/servletgt
7
Como usar?
  • web.xml (cont.)

... lt!-- Standard Action Servlet Mapping --gt
ltservlet-mappinggt ltservlet-namegtactionlt/servl
et-namegt lturl-patterngt.dolt/url-patterngt
lt/servlet-mappinggt ... lt!-- Struts Tag
Library Descriptors --gt lttaglibgt
lttaglib-urigt/tags/struts-beanlt/taglib-urigt
lttaglib-locationgt/WEB-INF/struts-bean.tldlt/taglib-
locationgt lt/taglibgt lttaglibgt
lttaglib-urigt/tags/struts-htmllt/taglib-urigt
lttaglib-locationgt/WEB-INF/struts-html.tldlt/taglib-
locationgt lt/taglibgt ...
8
Como usar?
  • struts-config.xml

lt?xml version"1.0" encoding"ISO-8859-1"
?gt lt!DOCTYPE struts-config PUBLIC
"-//Apache Software Foundation//DTD Struts
Configuration 1.2//EN"
"http//jakarta.apache.org/struts/dtds/struts-conf
ig_1_2.dtd"gt ltstruts-configgt lt!--

Form Bean Definitions --gt ltform-beansgt
lt/form-beansgt lt!--
Global Exception Definitions --gt
ltglobal-exceptionsgt lt/global-exceptionsgt lt!--
Global
Forward Definitions --gt ltglobal-forwardsgt
ltforward name"welcome" path"/Welcome.do"/gt
lt/global-forwardsgt
9
Como usar?
  • struts-config.xml (cont.)

... lt!--
Action Mapping Definitions --gt
ltaction-mappingsgt ltaction path"/Welcome
forward"/pages/Welcome.jsp"/gt
lt/action-mappingsgt lt!--
Controller Configuration --gt
ltcontroller processorClass"org.apache.
struts.tiles.TilesRequestProcessor"/gt lt!--
Message
Resources Definitions --gt ltmessage-resources
parameter"MessageResources" /gt ...
10
Entendendo...
  • Index.jsp

lt_at_ taglib uri"/tags/struts-logic"
prefix"logic" gt ltlogicredirect
forward"welcome"/gt
11
Actions
  • Implementando a ação cadastrar novo filme

package pec //imports public class
CadastrarFilmeAction extends Action public
ActionForward execute(ActionMapping mapping,
ActionForm form, HttpServletRequest
request, HttpServletResponse
response) throws Exception
//código de efetuar cadastro...
return mapping.findForward("sucesso")
12
Actions
  • Declarando

lt!--
Action Mapping Definitions --gt
ltaction-mappingsgt ltaction path"/Welcome
forward"/pages/Welcome.jsp"/gt ltaction
path"/cadastrarFilme"
type"pec.CadastrarFilmeAction"/gt
ltforward name"sucesso" path"pages/cadastroS
ucesso.jsp"/gt lt/action-mappingsgt ...
13
ActionForm
  • Nossa ação precisa de um formulário
  • Java bean comum
  • As propriedades do bean são populadas de forma
    transparente

public class CadastroFilmeForm extends ActionForm
private String idRef private
String nomeOriginal private String
nomeNacional private String numeroCopias
//gets e sets
14
ActionForm
  • ActionFroms podem ser validados

package pec public class CadastroFilmeForm
extends ActionForm //... public
ActionErrors validate(ActionMapping
mapping, HttpServletRequest response)
ActionErrors validatorErros new
ActionErrors() if (idRef null
idRef.trim().equals(""))
validatorErros.add("idRef", new
ActionMessage( "filme.cadastro.idRef.required"
)) if (nomeOriginal null
nomeOriginal.trim().equals(""))
validatorErros.add("nomeOriginal", new
ActionMessage( "filme.cadastro.nomeOriginal.req
uired")) if (numCopias null
numCopias.trim().equals(""))
validatorErros.add("numCopias", new
ActionMessage( "filme.cadastro.numCopias.requir
ed")) else if (!GenericValidator.isInt(nu
mCopias)) validatorErros.add("numCopia
s", new ActionMessage( "filme.cadastro.numCopia
s.notInt")) return validatorErros

Commons validator
15
ActionForm
Formulário (HTML/JSP)
Request recebido pelo controler
Cria ou recicla um ActionForm
Chama reset()
Formulário (HTML/JSP)
Guarda o ActionForm no escopo desejado
Popula ActionForm a partir do request
Com menssagens de erro!
Dá um forward para o input
Chama validate() do ActionForm
Validação falha
Página Sucesso (HTML/JSP)
Validação ok
Chama execute() do Action
Dá um forward para sucesso
16
ActionForm
  • ActionForm são firewalls dos Actions
  • O ActionForms só chegam aos actions caso tenham
    sido validados
  • Cuidado com a definição dos tipos
  • Se o usuário digita um valor, torne esta
    propriedade uma String

17
ActionForm
  • Declarando (struts-config.xml)

... ltform-beansgt ltform-bean
name"cadastroFilmeForm" type"pec.CadastrarFilmeF
orm"/gt lt/form-beansgt ... ltaction-mappingsgt ...
ltaction path"/cadastrarFilme"
type"pec.CadastrarFilmeAction"
name"cadastroFilmeForm" input"/cadastrarNo
voFilme.jsp"gt ltforward
name"sucesso" path"/pages/cadastroFilmeSuc.jsp"
/gt lt/actiongt ...
18
ActionForm
  • De volta ao action...

package pec //imports public class
CadastrarFilmeAction extends Action public
ActionForward execute(ActionMapping mapping,
ActionForm form, HttpServletRequest
request, HttpServletResponse
response) throws Exception
CadastroFilmeForm cadastroForm
(CadastroFilmeForm) form //código de
efetuar cadastro... return
mapping.findForward("sucesso")
  • Garantia de validação!

19
ActionForm
  • cadastrarNovoFilme.jsp

lt_at_ taglib uri"/tags/struts-html"
prefix"html"gt lt_at_ taglib uri"/tags/struts-bean"
prefix"bean"gt lthtmlhtml locale"true"gt ltheadgt
lttitlegtCadastrar Filmelt/titlegt lt/headgt ltbodygt lth1gt
Cadastrar Filmelt/h1gt lthtmlerrors
/gt lttablegt lthtmlform action"cadastrarFilme"gt lttr
gt lttdgtltbeanmessage key"filme.cadastro.idRef"
/gtlt/tdgt lttdgtlthtmltext property"idRef"
/gtlt/tdgt lt/trgt lttdgtltbeanmessage
key"filme.cadastro.nomeOriginal"
/gtlt/tdgt lttdgtlthtmltext property"nomeOriginal"
/gtlt/tdgt lttrgt lttdgtltbeanmessage key"filme.cadastro
.nomeNacional" /gtlt/tdgt lttdgtlthtmltext
property"nomeNacional" /gtlt/tdgt lt/trgt ...
20
ActionForm
  • cadastrarNovoFilme.jsp (cont)

... lttrgt lttdgtltbeanmessage key"filme.cadastro.num
Copias" /gtlt/tdgt lttdgtlthtmltext
property"numCopias" /gtlt/tdgt lt/trgt lttrgt lttd
colspan"2"gt lthtmlsubmit value"Cadastrar"/gt lthtm
lcancel value"Cancelar"/gt lt/tdgt lt/trgt lt/htmlfor
mgt lt/tablegt lt/bodygt lt/htmlhtmlgt
21
ActionForm
  • MessageResources.properties

-- cadastro filme success -- filme.cadastro.titl
eFilme Cadastrado filme.cadastro.headingSucesso!
filme.cadastro.messageFilme Cadastrado com
sucesso! -- cadastro filme form
-- filme.cadastro.idRefId Ref filme.cadastro.nome
OriginalNome Original filme.cadastro.nomeNacional
NomeNacional filme.cadastro.numCopiasNúmero de
Cópias filme.cadastro.idRef.requiredId Ref
Requerido filme.cadastro.nomeOriginal.requiredNom
e Original Requerido filme.cadastro.numCopias.requ
iredNúmero de Cópias Requerido filme.cadastro.num
Copias.notIntNúmero de Cópias inválido
22
ActionForm
  • ActionForm também podem ser usados para fornecer
    dados

... ltform-beansgt ltform-bean name"filmeForm"
type"pec.FilmeForm"/gt lt/form-beansgt ...
ltaction-mappingsgt ... ltaction
path"/verDadosFilme" type"pec.VerDadosFilm
eAction" name"filmeForm"
scope"request" validate"false"gt
ltforward name"sucesso" path"/pages/filmeFor
m.jsp" /gt lt/actiongt ...
23
ActionForm
  • Problemas
  • Muitos objetos de domínio duplicados
  • Muito código de cópia de propriedades
  • Usar BeanUtils.copyProperties(Object dest, Object
    src)
  • Grande quantidade de Froms com grandes
    quantidades de propriedades pode ser difícil de
    manter
  • Usar DynaActionForm?

24
Exceções
  • Struts dá suporte a um tratamento de exceções
    declarativo
  • Suponha que o código de negócio de
    VerDadosFilmeAction lance a exceção
    pec.FilmeNaoEncontradoException

ltaction path"/verDadosFilme"
type"pec.VerDadosFilmeAction"
name"filmeForm" scope"request"
validate"false"gt ltforward
name"sucesso" path"/pages/filmeForm.jsp" /gt
ltexception key"filmeNaoEncontrado.exception"
type"pec.FilmeNaoEncontradoExcept
ion" path"/pages/exception.jsp"
/gt lt/actiongt ...
25
O que mais?
  • Outros tipos de actions
  • DispatchAction quando tempos um formulário que
    terá mais de uma ação associada
  • Plugins
  • Struts-Validator
  • Struts-Tiles

26
Exercícios
  • Implemente um aplicação web usando o struts para
    cadastrar, visualizar, atualizar, remover e
    listar usuários (CRUD)
  • Usuários possuem
  • Nome, login (único), senha, data de cadastro
  • Implemente a persistência usando JDBC
Write a Comment
User Comments (0)
About PowerShow.com