Vous êtes sur la page 1sur 40

Introduo ao Struts

Curso de Introduo ao
Daniel Destro do Carmo Softech Network Informtica daniel@danieldestro.com.br

Introduo ao Struts

O que

Introduo ao Struts
Struts

Struts um framework gratuito para construo de aplicaes web implementadas em Java. Struts acelera o desenvolvimento de aplicaes web que utilizam o paradigma Model 2, que uma especializao do design pattern Model-View-Controller (MVC). Criado por Craig McClanahan e doado ao Apache Software Foundation (ASF) em 2000. Atualmente disponvel na verso 1.1 release candidate.

Introduo ao Struts
Frameworks

Frameworks so aceleradores de cdigo que implementam solues genricas para um determinado problema. Impedem a reinveno da roda atravs de componentes reutilizavis e flexveis. Oferecem um ponto de partida para a implementao do projeto.

Introduo ao Struts
Modelos de Aplicaes Web em Java

Aplicaes Web Java podem ser divididas em duas categorias: Model 1: O cliente acessa diretamente uma pgina JSP que redireciona a resposta para a prxima pgina. Model 2: O cliente acessa um Servlet que de acordo com o estado da aplicao determina qual JSP ser apresentado como resposta.

Introduo ao Struts
Model 1

Pginas Ligadas Individualmente: (Espaguete)

Servlet/ JSP

Servlet/ JSP

Servlet/ JSP Servlet/ JSP

Servlet/ JSP

Web Server

Introduo ao Struts
Model 2

Aplicado com o padro MVC

JSP

JSP

JSP

Web Server

Servlet Controller

Introduo ao Struts
Problemas Comuns

Devido a popularidade e alcance das aplicaes web, vrios requisitos complexos foram adicionados, tornando o simples mecanismo de request e response limitado: Complexa navegao; Internacionalizao; Suporte a mltiplos dispositivos; Validao de formulrios; Tratamento de excees; Personalizao; Restries de acesso.

Introduo ao Struts
Como o Struts Pode Ajudar?

Solues comprovadas, desenvolvidas pelos experts, aumentando assim a produtividade e diminuindo o risco do projeto. Segmentao do sistema e a especializao da equipe de desenvolvimento por perfis.
JSP/Servlet MVC Tratamento de Excees STRUTS Front Controller I18N Command Pattern Validao de Formulrios

Introduo ao Struts

Como o Struts implementa o MVC?

Introduo ao Struts
MVC

C
(1) request Front Controller (2) executa

M
cliente (3) despacha (5) exibe View (JSP) (4) atualiza Model (beans)

Introduo ao Struts
Controlador

Para implementar as funcionalidades exigidas pelo framework o Struts utiliza, alm de Servlets, vrios design patterns (Front Controller, Command e Adapter) para obter os seguintes benefcios: Redirecionar todas as requisies para um nico ponto. Extrair e validar informaes contidas nas requisies. Mapear as requisies para as suas respectivas atividades. Redirecionar dados e contedo para suas respectivas pginas. 5. Tratar eventuais excees. 1. 2. 3. 4.

Introduo ao Struts

Desenvolvendo com Struts

Introduo ao Struts
Nosso Sistema

Para nossa apresentao, vamos levar em conta o desenvolvimento de um sistema bem simples, de cadastro de funcionrios.

Introduo ao Struts
Front Controller

A classe ActionServlet atua como o Front Controller do Struts. Ele deve ser configurado no arquivo web.xml.
<servlet> <servlet-name>action</servlet-name> <servlet-class>org.apache.struts.action.ActionServlet</servlet-class> <init-param> <param-name>config</param-name> <param-value>/WEB-INF/struts-config.xml</param-value> <init-param> </servlet> <servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>/*.do</url-pattern> </servlet-mapping>

Introduo ao Struts
ActionForm

Logo aps o recebimento da requisio o ActionServlet delega ao RequestProcessor a responsabilidade de extrair os parmetros da requisio e popular um ActionForm. Os ActionForms so responsveis por validar se os atributos da requisio so sintaticamente corretos e eventualmente disparar excees avisando o usurio final. O desenvolvedor deve especializar um ActionForm e sobrescrever os mtodos reset e validade. Alm disso, a sua classe de ActionForm deve conter os atributos que correspondem aos campos do form html.

Introduo ao Struts
ActionForm
package br.com.softech; import org.apache.struts.action.*; public class FuncionarioForm extends ActionForm { private String nome; private Integer idade; public void setName(String nome) { this.nome = nome; } public void setIdade(Integer idade) { this.idade = idade; } public String getNome() { return nome; } public Integer getIdade() { return idade; }

Introduo ao Struts
ActionForm
// continuao public void reset( ActionMapping mapping, HttpServletRequest req ) { this.nome = null; this.idade = null; } public ActionErrors validate( ActionMapping mapping, HttpServletRequest req ) { ActionErrors errors = new ActionErrors( ); if( nome == null || idade == null ) { errors.add( errNomeIdade, new ActionError(nomeIdade.required) ); } return errors; } }

Esta classe representa um form html com dois campos: nome e idade (devem ser idnticos ao name do form)

Introduo ao Struts
ActionForm

Agora, devemos declarar o nosso form no arquivo de configurao do Struts (struts-config.xml).


<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd" > <struts-config> <form-beans> <form-bean name="funcionarioForm" type="br.com.softech.FuncionarioForm /> </form-beans> </struts-config>

Introduo ao Struts
Action

Aps criar e validar os parmetros via ActionForm o RequestProcessor acessa o mtodo execute do objeto Action relacionado a requisio (Command Pattern). As Actions so responsveis por ativar os objetos de negcio, tratar eventuais excees e redirecionar dados e contedo para a prxima pgina. O desenvolvedor deve especializar a classe Action e sobrescrever o mtodo execute. As classes Action so reutilizadas por todas as requisies, deste modo tais classes devem ser threadsafe.

Introduo ao Struts
Action Lista todos os funcionrios
public class ListaFuncAction extends Action { public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { //Acessando ActionForm //Lgica do Negcio para buscar os funcionrios //.... //Redirecionamento return mapping.getInputForward( ); } }

Introduo ao Struts
Action Grava um novo funcionrio
public class NovoFuncAction extends Action { public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { //Acessando ActionForm FuncionarioForm funcForm = (FuncionarioForm) form; String nome = funcForm.getNome( ); Integer idade = funcForm.getIdade( ); //Lgica do Negcio para cadastrar um novo funcionrio //.... //Redirecionamento return mapping.findForward("sucesso"); } }

Introduo ao Struts
Associao e Mapeamento das Aes

Como o Struts as requisies com suas respectivas aes? O mapeamento entre as requisies e as aes (Action) feito de forma declarativa no arquivo struts-config.xml.
<action-mappings> <action path="/listaFunc" type=br.com.softech.ListaFuncAction input="/listaFunc.jsp /> <action path="/novoFunc" type=br.com.softech.NovoFuncAction" name=funcionarioForm" scope="request" input="/novoFunc.jsp"> <forward name="sucesso" path="/listaFunc.do" redirect="true /> </action> </action-mappings>

Introduo ao Struts
ActionForward

A classe ActionFoward responsvel pelo mapeamento lgico das pginas do sistemas, evitando assim, o uso do nome fsico (URI) dento do cdigo. O uso eficiente do ActionFoward facilita a manuteno do sistema. ActionFowards so declaradas dentro do strutsconfig.xml em dois nveis (Global e Action), sendo que as declaradas dentro das aes tem maior precedncia.

Introduo ao Struts
ActionForward

Configurando os ActionForward no struts-config.xml:


<global-forwards> <forward name="error" path="/error.jsp"/> </global-forwards> <action-mappings> <action path="/login" type=acme.actions.LoginCheckAciton" name="LoginForm" scope="request" input="/login.jsp"> <forward name="success" path="/main.jsp" redirect="true"/> </action> </action-mappings>

Introduo ao Struts
ActionError e ActionMessages

Responsveis pelo armazenamento de informaes sobre mensagens de erro, anomalias do sistema (ActionError) e avisos (ActionMessage). Geralmente utilizada dentro de ActionForms (erros de sintaxe) e Actions (erros de sistema). Possuem grande integrao com os servios de internacionalizao e tag libraries.

Introduo ao Struts
ActionError e ActionMessages

Exemplo:
public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { ActionErrors errors = new ActionErrors(); if ((this.nome == null) || (this.nome.lenght()<1)) { errors.add(nome, new ActionError(nome.required)); } return errors; }

Introduo ao Struts
Internacionalizao

O Struts oferece suporte a internacionalizao atravs da classe MessageResources. A classe MessageResources populada em tempo de execuo pelo RequestProcessor de acordo com as informaes registradas no struts-config e a lngua/regio utilizada pelo usurio final. Largamente utilizadas pelos ActionErrors e tag libraries do Struts. A implementao padro usa arquivos .properties, mas especializaes podem ser adicionadas para atender outros cenrios.

Introduo ao Struts
Internacionalizao

Configurando a I18N no arquivo struts-config.xml:


<message-resources parameter=ApplicationResources"/>

Configurao do arquivo ApplicationResources.properties:


nomeIdade.required=Nome e Idade so requeridos. label.nome=Nome label.idade=Idade

Acessando as mensagens do JSP:


<bean:message key=label.nome />

Acessando as mensagens do Action:


msg = getResources( request ).getMessage( "nomeIdade.requerido );

Introduo ao Struts
Exceptions Handling

Mecanismo adicionado na verso 1.1. Tem por finalidade implementar o tratamento de excees de forma declarativa. Utiliza a classe ExceptionHandler para interceptar as excees e redirecion-las para as suas pginas de erro ou respectivas aes de controle. Impedem que o usurio veja excees de sistema no tratadas: NullPointerException Internal Error Podem ser globais ou relativas a uma ao (Action).

Introduo ao Struts
Exceptions Handling

Configurando o tratamente da exceo no arquivo strutsconfig.xml: <global-exceptions> <exception type=br.com.softech.MinhaException" path="/error.jsp key=exception.minha.exception" scope="request"/> </global-exceptions>

Introduo ao Struts
View

O Struts foi concebido primeiramente para trabalhar com pginas JSP, apesar de suportar outras possibilidades como Velocity, XSLT (tambm conhecido com Model2X) e UIX (Framework Oracle). Para facilitar o desenvolvimento das pginas JSP e integrao com o controlador, o Struts oferece uma srie de tag libraries. Tag libraries facilitam a manuteno dos arquivos JSP, visto que inibem, na maioria das vezes, o uso explcito de scriptlets.

Introduo ao Struts
Struts Tag Lib

Struts HTML: Construo de Forms, Text Itens, Buttons e etc Struts Bean: Acesso a objetos armazenados em vrios escopos (application, session, request e page) Struts Logic: Condies Loops Redirect e Forward

Struts Templates: Construo de templates Struts Tiles: Plug-in do Struts Possibilita a criao de Templates Master

Introduo ao Struts
Modelo

O Struts no oferece nenhuma facilidade para o desenvolvimento do modelo, mas por outro lado est aberto a qualquer tecnologia ou framework de mercado: Enterprise Java Beans (EJB) Java Data Objects (JDO) Frameworks O-R (Hibernate, JDO, Toplink) Melhores prticas (Design Patterns) devem ser aplicadas para evitar o acoplamento forte entre a lgica de negcio e o controlador, aumentando assim a reutilizao do cdigo: Business Delegate Session Faade Factory Method

Introduo ao Struts
The Big Picture

Introduo ao Struts
Dicas e Truques

1. ActionForms no so Value Objects (VO ou DTO). 2. Lgica de negcio no deve ser implementada dentro dos objetos Action. 3. Regras de validao genricas (obrigatrio, maior ou menor, expresses regulares e etc) podem ser reduzidas com o framework Validator. 4. Reduza o nmero de ActionsForms via formulrios dinmicos. 5. Agrupe atividades relacionas com a classe DispatchAction, reduzindo assim o nmero de Actions.

Introduo ao Struts
Livros Disponveis

Introduo ao Struts
Material de Apoio
Struts in Action Husted, Ted N. Editora Manning Editora Cincia Moderna (em portugus Struts em Ao)

Pgina Oficial do Projeto Struts http://struts.apache.org

Outros Sites http://www.jamesholmes.com/struts

Introduo ao Struts
Agradecimentos
Este material foi baseado no material disponibilizado pelo pessoal da Oracle do Brasil, alm outras fontes na internet.

OBRIGADO!

Vous aimerez peut-être aussi