Curso de Introdução ao



Documentos relacionados
Minicurso de MVC web com Struts. Felipe F Nascimento felipenasc@inf.puc-rio.br

J550. Apache Struts. Helder da Rocha

Arquitetura de Aplicações JSP/Web. Padrão Arquitetural MVC

Prof. Roberto Desenvolvimento Web Avançado

Desenvolvimento WEB em JAVA. Palestrante: Lourival F. de Almeida Júnior

Java para WEB. Servlets

Universidade Católica de Brasília Pró-Reitoria de Graduação Sistemas de Informação. na Prática. Por: Fernando Goulart

WebWork 2. João Carlos Pinheiro.

Relatório do GPES. Conhecendo o Framework Struts

Guia para Iniciantes do WebWork

Java para Desenvolvimento Web

Java II. Sérgio Luiz Ruivace Cerqueira

SILVIO COSTA MOREIRA UTILIZAÇÃO DO STRUTS FRAMEWORK NO DESENVOLVIMENTO DE UM GERENCIADOR DE EVENTOS

Configurando uma aplicação Struts

PadrãoIX. Módulo II JAVA. Marcio de Carvalho Victorino. Servlets A,L,F,M

Use a Cabeça! FREEMAN, Eric e Elisabeth. HTML com CSS e XHTML BASHMAN, Brian / SIERRA Kathy / BATES, Bert. Servlets & JSP

Introdução. Entendendo os Controles. Definindo um controle. Introdução MOCKDOMAIN() Testando uma classe de domínio mockdomain

Evolução guiada por APIs. com REST para modernizar seu legado

Curso de Java. Geração de Páginas WEB. TodososdireitosreservadosKlais

JSP e Servlet Princípio de MVC

Desenvolvimento Web TCC Turma A-1

Autenticação e Autorização

Padrões de Interação com o Usuário

DESENVOLVENDO APLICAÇÃO UTILIZANDO JAVA SERVER FACES

Como criar um EJB. Criando um projeto EJB com um cliente WEB no Eclipse

Associação Carioca de Ensino Superior Centro Universitário Carioca

Prática Sobre Servlets e JSP

J550. Model View Controller

Web e Tecnologia Java: JSP/Servlets. Aula 10. Desenvolvimento em N Camadas

Programação Web Aula 12 - Java Web Software

Tecnologias Web. Padrões de Projeto - Camada de Apresentação

Banco de Dados de Músicas. Andre Lima Rocha Campos Osório Pereira Carvalho

e-genial Soluções em Software Livre Curso e-gen Developer

J2EE. Exemplo completo Utilização Servlet. Instrutor HEngholmJr

JSF e PrimeFaces. Professor: Ricardo Luis dos Santos IFSUL Campus Sapucaia do Sul

Padrões de Projeto WEB e o MVC

Java II. Sérgio Luiz Ruivace Cerqueira

Tencologia em Análise e Desenvolvimento de Sistemas Disciplina: WEB I Conteúdo: WEB Container Aula 04

Curso - Padrões de Projeto Módulo 5: Model-View- Controller

Struts. Características Avançadas

J550 Segurança e Controle de erros

Programação Na Web. Servlets: Como usar as Servlets. Agenda. Template genérico para criar Servlets Servlet 2.4 API

Scriptlets e Formulários

3 Um Framework Orientado a Aspectos para Monitoramento e Análise de Processos de Negócio

SCE-557. Técnicas de Programação para WEB. Rodrigo Fernandes de Mello

SISTEMA DE WORKFLOW PARA MODELAGEM E EXECUÇÃO DE PROCESSOS DE SOFTWARE. Aluno: Roberto Reinert Orientador: Everaldo A. Grahl

Argo Navis J931 - Padrões de Design J2EE. Introdução. Objetivos de aprender padrões J2EE. Conhecer padrões para uso na plataforma J2EE

Desenvolvimento de aplicações Web. Java Server Pages

Tutorial de NetBeans IDE Acessando banco de dados com Struts Data Source

Introdução ao framework web Apache Struts 2

ABORDAGEM DE FRAMEWORKS PARA JSF QUE AUXILIAM O DESENVOLVIMENTO DE SOFTWARE

Arquitetura de uma Webapp

Aula 4. Objetivos. Conteúdo dinâmico na internet.

Programação II Programação para a Web. Christopher Burrows

Padrões de Projeto em Aplicações Web Desenvolvendo projetos web consistentes baseados em reuso de soluções

Aula 03 - Projeto Java Web

Apesar de existirem diversas implementações de MVC, em linhas gerais, o fluxo funciona geralmente da seguinte forma:

4 A Camada de Apresentação

JSP: JAVA SERVER PAGES

PROJETO PEDAGÓGICO DE CURSOS

Curso de Engenharia de Computação DESENVOLVIMENTO DE SISTEMAS UTILIZANDO JAVA DESIGN PATTERNS: STRUTS, HIBERNATE, DAO E JSTL.

Documentação Usando o Javadoc

DWR DIRECTED WEB REMOTING

HIBERNATE EM APLICAÇÃO JAVA WEB

JSP: JAVA SERVER PAGES

ARQUITETURA SISGRAD. Manual de Utilização. Versão: 2.0. Criação: 05 de julho de 2007 Autor: André Penteado

Curso de Aprendizado Industrial Desenvolvedor WEB

4 O Workflow e a Máquina de Regras

INTRODUÇÃO À TECNOLOGIA SERVLETS

Etc & Tal. Volume 2 - Número 1 - Abril 2009 SBC HORIZONTES 44

Resumo: Perguntas a fazer ao elaborar um projeto arquitetural

Introdução a JavaServer Pages. Curso de Tecnologia em Análise e Desenvolvimento de Sistemas Desenvolvimento de sistemas web

PROJETO FRAMEWORK - CELEPAR PAGINAÇÃO DE DADOS EM APLICAÇÕES JAVA PARA INTERNET

Conceitos de Ajax Exemplos de uso do Ajax no braço, muitos exemplos, muito código (HTML, CSS, JavaScript, PHP, XML, JSON)

Objetos Implícitos. Conceito. Instanciados pelo próprio contêiner. Disponíveis em quaisquer páginas JSP.

PROGRAMAÇÃO SERVIDOR PADRÕES MVC E DAO EM SISTEMAS WEB. Prof. Dr. Daniel Caetano

JSF - Controle de Acesso FERNANDO FREITAS COSTA

MVC e Camadas - Fragmental Bliki

Java na WEB Servlet. Sumário

DESENVOLVIMENTO WEB UTILIZANDO FRAMEWORK PRIMEFACES E OUTRAS TECNOLOGIAS ATUAIS

Servlets e Applets, funcionamento e comparativo.

Facebook. Java com o. Integrando Aplicações. Descubra como é fácil criar uma aplicação para rodar no Facebook. _capa

J550 Padrões de Projeto J2EE para Aplicações Web

Web Browser como o processo cliente. Servidor web com páginas estáticas Vs. Aplicações dinâmicas para a Web:

TUTORIAL SPRING SECURITY PROGRAMAÇÃO COM FRAMEWORKS Responsáveis: Ana Luíza Cruvinel, Maikon Franczak e Wendel Borges

IplanRio DOP - Diretoria de Operações GIT - Gerência de Infraestrutura Tecnológica Gerente da GIT

Programação WEB (JSP + Banco Dados) Eng. Computação Prof. Rodrigo Rocha

Curso de Java. Geração de Páginas WEB através de JSP. Todos os direitos reservados Klais

Como já foi muito bem detalhado no Capítulo IV, o jcompany Developer Suite pode ser

Parte I. Demoiselle Vaadin

Prova Específica Cargo Desenvolvimento

ARQUITETURA DO SISTEMA ERP PEGASUS

Desenvolvendo Portlets utilizando JSF, Ajax, Richfaces. Gustavo Lira Consultor 4Linux

Acessando um Banco de Dados

Transcrição:

Curso de Introdução ao Daniel Destro do Carmo Softech Network Informática daniel@danieldestro.com.br

O que é?

Struts Struts é um framework gratuito para construção de aplicações web implementadas em Java. Struts acelera o desenvolvimento de aplicações web que utilizam o paradigma Model 2, que é uma especialização do design pattern Model-View-Controller (MVC). Criado por Craig McClanahan e doado ao Apache Software Foundation (ASF) em 2000. Atualmente disponível na versão 1.1 release candidate.

Frameworks Frameworks são aceleradores de código que implementam soluções genéricas para um determinado problema. Impedem a reinvenção da roda através de componentes reutilizavéis e flexíveis. Oferecem um ponto de partida para a implementação do projeto.

Modelos de Aplicações Web em Java Aplicações Web Java podem ser divididas em duas categorias: Model 1: O cliente acessa diretamente uma página JSP que redireciona a resposta para a próxima página. Model 2: O cliente acessa um Servlet que de acordo com o estado da aplicação determina qual JSP será apresentado como resposta.

Model 1 Páginas Ligadas Individualmente: (Espaguete) Servlet/ JSP Servlet/ JSP Servlet/ JSP Servlet/ JSP Web Server Servlet/ JSP

Model 2 Aplicado com o padrão MVC JSP JSP JSP Web Server Servlet Controller

Problemas Comuns Devido a popularidade e alcance das aplicações web, vários requisitos complexos foram adicionados, tornando o simples mecanismo de request e response limitado: Complexa navegação; Internacionalização; Suporte a múltiplos dispositivos; Validação de formulários; Tratamento de exceções; Personalização; Restrições de acesso.

Como o Struts Pode Ajudar? Soluções comprovadas, desenvolvidas pelos experts, aumentando assim a produtividade e diminuindo o risco do projeto. Segmentação do sistema e a especialização da equipe de desenvolvimento por perfis. JSP/Servlet Front Controller I18N MVC Tratamento de Exceções STRUTS Command Pattern Validação de Formulários

Como o Struts implementa o MVC?

MVC Front (1) request Controller (2) executa cliente C (3) despacha Model (beans) M (5) exibe View (JSP) V (4) atualiza

Controlador Para implementar as funcionalidades exigidas pelo framework o Struts utiliza, além de Servlets, vários design patterns (Front Controller, Command e Adapter) para obter os seguintes benefícios: 1. Redirecionar todas as requisições para um único ponto. 2. Extrair e validar informações contidas nas requisições. 3. Mapear as requisições para as suas respectivas atividades. 4. Redirecionar dados e conteúdo para suas respectivas páginas. 5. Tratar eventuais exceções.

Desenvolvendo com Struts

Nosso Sistema Para nossa apresentação, vamos levar em conta o desenvolvimento de um sistema bem simples, de cadastro de funcionários.

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>

ActionForm Logo após o recebimento da requisição o ActionServlet delega ao RequestProcessor a responsabilidade de extrair os parâmetros da requisição e popular um ActionForm. Os ActionForms são responsáveis por validar se os atributos da requisição são sintaticamente corretos e eventualmente disparar exceções avisando o usuário final. O desenvolvedor deve especializar um ActionForm e sobrescrever os métodos reset e validade. Além disso, a sua classe de ActionForm deve conter os atributos que correspondem aos campos do form html.

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

ActionForm // continuação 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 idênticos ao name do form)

ActionForm Agora, devemos declarar o nosso form no arquivo de configuração 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>

Action Após criar e validar os parâmetros via ActionForm o RequestProcessor acessa o método execute do objeto Action relacionado a requisição (Command Pattern). As Actions são responsáveis por ativar os objetos de negócio, tratar eventuais exceções e redirecionar dados e conteúdo para a próxima página. O desenvolvedor deve especializar a classe Action e sobrescrever o método execute. As classes Action são reutilizadas por todas as requisições, deste modo tais classes devem ser threadsafe.

Action Lista todos os funcionários public class ListaFuncAction extends Action { public ActionForward execute(actionmapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { //Acessando ActionForm //Lógica do Negócio para buscar os funcionários //... //Redirecionamento return mapping.getinputforward( ); } }

Action Grava um novo funcionário 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( ); //Lógica do Negócio para cadastrar um novo funcionário //... //Redirecionamento return mapping.findforward("sucesso"); } }

Associação e Mapeamento das Ações Como o Struts as requisições com suas respectivas ações? O mapeamento entre as requisições e as ações (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>

ActionForward A classe ActionFoward é responsável pelo mapeamento lógico das páginas do sistemas, evitando assim, o uso do nome físico (URI) dento do código. O uso eficiente do ActionFoward facilita a manutenção do sistema. ActionFowards são declaradas dentro do strutsconfig.xml em dois níveis (Global e Action), sendo que as declaradas dentro das ações tem maior precedência.

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>

ActionError e ActionMessages Responsáveis pelo armazenamento de informações sobre mensagens de erro, anomalias do sistema (ActionError) e avisos (ActionMessage). Geralmente é utilizada dentro de ActionForm s (erros de sintaxe) e Action s (erros de sistema). Possuem grande integração com os serviços de internacionalização e tag libraries.

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

Internacionalização O Struts oferece suporte a internacionalização através da classe MessageResources. A classe MessageResources é populada em tempo de execução pelo RequestProcessor de acordo com as informações registradas no struts-config e a língua/região utilizada pelo usuário final. Largamente utilizadas pelos ActionErrors e tag libraries do Struts. A implementação padrão usa arquivos.properties, mas especializações podem ser adicionadas para atender outros cenários.

Internacionalização Configurando a I18N no arquivo struts-config.xml: <message-resources parameter= ApplicationResources"/> Configuração do arquivo ApplicationResources.properties: nomeidade.required=nome e Idade são 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 );

Exceptions Handling Mecanismo adicionado na versão 1.1. Tem por finalidade implementar o tratamento de exceções de forma declarativa. Utiliza a classe ExceptionHandler para interceptar as exceções e redirecioná-las para as suas páginas de erro ou respectivas ações de controle. Impedem que o usuário veja exceções de sistema não tratadas: NullPointerException Internal Error Podem ser globais ou relativas a uma ação (Action).

Exceptions Handling Configurando o tratamente da exceção no arquivo strutsconfig.xml: <global-exceptions> <exception type= br.com.softech.minhaexception" path="/error.jsp key= exception.minha.exception" scope="request"/> </global-exceptions>

View O Struts foi concebido primeiramente para trabalhar com páginas JSP, apesar de suportar outras possibilidades como Velocity, XSLT (também conhecido com Model2X) e UIX (Framework Oracle). Para facilitar o desenvolvimento das páginas JSP e integração com o controlador, o Struts oferece uma série de tag libraries. Tag libraries facilitam a manutenção dos arquivos JSP, visto que inibem, na maioria das vezes, o uso explícito de scriptlets.

Struts Tag Lib Struts HTML: Construção de Forms, Text Itens, Buttons e etc Struts Bean: Acesso a objetos armazenados em vários escopos (application, session, request e page) Struts Logic: Condições Loops Redirect e Forward Struts Templates: Construção de templates Struts Tiles: Plug-in do Struts Possibilita a criação de Templates Master

Modelo O Struts não 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 práticas (Design Patterns) devem ser aplicadas para evitar o acoplamento forte entre a lógica de negócio e o controlador, aumentando assim a reutilização do código: Business Delegate Session Façade Factory Method

The Big Picture

Dicas e Truques 1. ActionForms não são Value Objects (VO ou DTO). 2. Lógica de negócio não deve ser implementada dentro dos objetos Action. 3. Regras de validação genéricas (obrigatório, maior ou menor, expressões regulares e etc) podem ser reduzidas com o framework Validator. 4. Reduza o número de ActionsForms via formulários dinâmicos. 5. Agrupe atividades relacionas com a classe DispatchAction, reduzindo assim o número de Actions.

Livros Disponíveis

Material de Apoio Struts in Action Husted, Ted N. Editora Manning Editora Ciência Moderna (em português Struts em Ação) Página Oficial do Projeto Struts http://struts.apache.org Outros Sites http://www.jamesholmes.com/struts

Agradecimentos Este material foi baseado no material disponibilizado pelo pessoal da Oracle do Brasil, além outras fontes na internet. OBRIGADO!