57
Java para Web com Struts Danilo Toshiaki Sato [email protected] Treinamento ALESP – SPL Módulo I

Java para Web com Struts Danilo Toshiaki Sato [email protected] Treinamento ALESP – SPL Módulo I

Embed Size (px)

Citation preview

Page 1: Java para Web com Struts Danilo Toshiaki Sato dtsato@ime.usp.br Treinamento ALESP – SPL Módulo I

Java para Web com Struts

Danilo Toshiaki [email protected]

Treinamento ALESP – SPLMódulo I

Page 2: Java para Web com Struts Danilo Toshiaki Sato dtsato@ime.usp.br Treinamento ALESP – SPL Módulo I

Copyleft 2006 Danilo Sato 2

Visão Geral Curso Dividido em 3 módulos

Módulo I (Geral) Java para Web MVC Struts Básico

Módulo II (Struts) Model Controller

Módulo III (Struts) View

Page 3: Java para Web com Struts Danilo Toshiaki Sato dtsato@ime.usp.br Treinamento ALESP – SPL Módulo I

Copyleft 2006 Danilo Sato 3

Agenda - Módulo I

1. Web1. Partindo do princípio: HTTP, HTML2. Java para Web: Servlets, JSP

2. MVC (Model-View-Controller) 3. Outras tecnologias utilizadas

1. Java Beans2. XML

4. Struts básico

Page 4: Java para Web com Struts Danilo Toshiaki Sato dtsato@ime.usp.br Treinamento ALESP – SPL Módulo I

Copyleft 2006 Danilo Sato 4

Web - HTTP HTTP = Hypertext Transfer Protocol Protocolo que é a fundação da Web Orientado a transações de

transferência de dados entre cliente e servidor

Implementado sobre TCP/IP TCP: Garante integridade dos pacotes IP: Responsável pelo roteamento dos

pacotes

Page 5: Java para Web com Struts Danilo Toshiaki Sato dtsato@ime.usp.br Treinamento ALESP – SPL Módulo I

Copyleft 2006 Danilo Sato 5

Web - HTTP Protocolo “sem estado” (stateless)

Cada transação é tratada isoladamente Estrutura básica de uma transação HTTP:

Request Ação (Método HTTP) URL a ser acessada Parâmetros

Response Código de status (Sucesso ou Erro) Tipo do conteúdo (texto, imagem, HTML, ...) Conteúdo

Page 6: Java para Web com Struts Danilo Toshiaki Sato dtsato@ime.usp.br Treinamento ALESP – SPL Módulo I

Copyleft 2006 Danilo Sato 6

Web - HTTP

HTTP Request

HTTP Response

Cliente Servidor

GET URLHeaders... ... ... ... ...

GET URLHeaders... ... ... ... ...

200 OKHeaders... ... ... ... ...

200 OKHeaders... ... ... ... ... <html>

...</html>

<html>...</html>

Page 7: Java para Web com Struts Danilo Toshiaki Sato dtsato@ime.usp.br Treinamento ALESP – SPL Módulo I

Copyleft 2006 Danilo Sato 7

Web - HTTP Métodos HTTP (Request)

GET: Requisição de um recurso numa URL POST: Requisição para o servidor interpretar o

conteúdo do Request e encaminhá-lo para a URL HEAD: Pede apenas pelo cabeçalho que seria

retornado por um GET TRACE: Pede apenas um loopback da

mensagem enviada (para testes) PUT: Requisição para guardar o conteúdo na

URL informada DELETE: Requisição para apagar o recurso na

URL informada OPTIONS: Pede uma lista dos métodos HTTP

suportados na URL informada

Page 8: Java para Web com Struts Danilo Toshiaki Sato dtsato@ime.usp.br Treinamento ALESP – SPL Módulo I

Copyleft 2006 Danilo Sato 8

Web - HTTP (GET x POST) Anatomia de um GET:

GET /search?hl=pt-BR&q=struts HTTP/1.1Host: www.google.com.brUser-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*Accept-Language: en-usKeep-Alive: 300Connection: keep-alive

ParâmetrosCaminho

Headers

Page 9: Java para Web com Struts Danilo Toshiaki Sato dtsato@ime.usp.br Treinamento ALESP – SPL Módulo I

Copyleft 2006 Danilo Sato 9

Web - HTTP (GET x POST) Anatomia de um POST:

POST /search HTTP/1.1Host: www.google.com.brUser-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*Accept-Language: en-usKeep-Alive: 300Connection: keep-alive

?hl=pt-BR&q=struts

Caminho

Headers

Corpo

Page 10: Java para Web com Struts Danilo Toshiaki Sato dtsato@ime.usp.br Treinamento ALESP – SPL Módulo I

Copyleft 2006 Danilo Sato 10

Web - HTML

HTML = HyperText Markup Language Quando o servidor responde um

Request HTTP ele geralmente envia algum tipo de conteúdo para ser exibido no navegador (cliente)

Descreve como o navegador deve exibir o conteúdo para o usuário

Decora um texto com tags e atributos

Page 11: Java para Web com Struts Danilo Toshiaki Sato dtsato@ime.usp.br Treinamento ALESP – SPL Módulo I

Copyleft 2006 Danilo Sato 11

Web - HTML

Estrutura básica:<html> <head> <title>Título da Página</title> </head> <body> <!– Aqui vai o conteúdo a ser exibido --> <h1>Título</h1> <p> Parágrafo com um link para o <a href=“http://www.google.com”>Google</a> </p> <img src=“foto.jpg”/> </body></html>

Page 12: Java para Web com Struts Danilo Toshiaki Sato dtsato@ime.usp.br Treinamento ALESP – SPL Módulo I

Copyleft 2006 Danilo Sato 12

Web Servidores Web são bons para localizar um

recurso (uma página HTML, por exemplo) e entregar para o cliente (navegador)

Bom para conteúdo estático E se eu quiser colocar uma informação

dinâmica na página HTML? Data atual? Loja virtual:

1 página para cada produto? Total da compra?

Page 13: Java para Web com Struts Danilo Toshiaki Sato dtsato@ime.usp.br Treinamento ALESP – SPL Módulo I

Copyleft 2006 Danilo Sato 13

Web Servidor pode pedir ajuda para uma

“aplicação amiga” CGI = Common Gateway Interface Permite que o cliente (navegador) peça

conteúdo para outra aplicação que roda no servidor web

O servidor inicia a aplicação em outro processo e encaminha os parâmetros da requisição

A aplicação gera a página com conteúdo dinâmico e devolve para o servidor

Page 14: Java para Web com Struts Danilo Toshiaki Sato dtsato@ime.usp.br Treinamento ALESP – SPL Módulo I

Copyleft 2006 Danilo Sato 14

Web

HTTP Request

HTTP Response

Cliente Servidor

AplicaçãoAmiga

1 2

4 3

Page 15: Java para Web com Struts Danilo Toshiaki Sato dtsato@ime.usp.br Treinamento ALESP – SPL Módulo I

Copyleft 2006 Danilo Sato 15

Java para Web - Servlets Resposta de Java: Servlets Servlets são classes Java executadas no

servidor Servlets permitem o tratamento dinâmico

do Request e do Response Uso mais comum: HTTPServlet Servlets rodam dentro de um contêiner Contêiner funciona como a “aplicação

amiga” do servidor

Page 16: Java para Web com Struts Danilo Toshiaki Sato dtsato@ime.usp.br Treinamento ALESP – SPL Módulo I

Copyleft 2006 Danilo Sato 16

Java para Web - Servlets Vantagens sobre CGI:

Eficiência: No uso tradicional de CGI, um novo processo é iniciado a cada requisição HTTP. O contêiner é responsável pelo gerenciamento dos servlets, rodando sobre a mesma JVM em diferentes Threads

Conveniência: Escritos em Java. API que facilita manipulação da transação HTTP (cabeçalhos, cookies, session, ...)

Durabilidade: Servlets podem guardar informações entre diferentes requisições, facilitando o uso de, por exemplo, um pool de conexão com o Banco de Dados ou um cache

Page 17: Java para Web com Struts Danilo Toshiaki Sato dtsato@ime.usp.br Treinamento ALESP – SPL Módulo I

Copyleft 2006 Danilo Sato 17

Java para Web - Servlets

Vantagens sobre CGI: Portabilidade: Podem ser utilizados em

diferentes plataformas, pois são escritos em Java e seguem uma API bem definida

Segurança: Servlets são executados dentro de um contêiner rodando num Sandbox protegido, evitando a possibilidade de execução de Servlets potencialmente perigosos e mal-intencionados

Page 18: Java para Web com Struts Danilo Toshiaki Sato dtsato@ime.usp.br Treinamento ALESP – SPL Módulo I

Copyleft 2006 Danilo Sato 18

Java para Web - Servlets Ciclo de vida gerenciado pelo contêiner Quando uma requisição é mapeada para

um Servlet, o contêiner: Se uma instância do Servlet não existe:

Carrega a classe do Servlet Cria uma instância do Servlet Inicializa o Servlet chamando o método init

Chama o método service passando os objetos correspondente ao Request e ao Response

Page 19: Java para Web com Struts Danilo Toshiaki Sato dtsato@ime.usp.br Treinamento ALESP – SPL Módulo I

Copyleft 2006 Danilo Sato 19

Java para Web - Servlets

HTTP Request

HTTP Response

Cliente

Servidor

Servlet

ContêinerWeb

request

response

1 2

2service(request, response)doGet(request, response)

34

Page 20: Java para Web com Struts Danilo Toshiaki Sato dtsato@ime.usp.br Treinamento ALESP – SPL Módulo I

Copyleft 2006 Danilo Sato 20

Java para Web - Servlets

Exemplo: Hello WWW

public class HelloWWW extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<HTML>\n"); out.println("<HEAD><TITLE>Hello WWW</TITLE></HEAD>\n"); out.println("<BODY>\n"); out.println("<H1>Hello WWW</H1>\n"); out.println("<P>Data atual:" + new Date() + "</P>"); out.println("</BODY></HTML>"); }}

Page 21: Java para Web com Struts Danilo Toshiaki Sato dtsato@ime.usp.br Treinamento ALESP – SPL Módulo I

Copyleft 2006 Danilo Sato 21

Java para Web - Servlets

Exemplo: Deployment Descriptor

<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4"> <servlet> <servlet-name>Hello WWW</servlet-name> <servlet-class>HelloWWW</servlet-class> </servlet> <servlet-mapping> <servlet-name>Hello WWW</servlet-name> <url-pattern>/Hello.do</url-pattern> </servlet-mapping></web-app>

Page 22: Java para Web com Struts Danilo Toshiaki Sato dtsato@ime.usp.br Treinamento ALESP – SPL Módulo I

Copyleft 2006 Danilo Sato 22

Java para Web - Servlets

Organização em um web-app (WAR):

WEB-INFWEB-INF

HelloHello

classesclasses liblib

HTMLs

web.xml

HelloWWW.class

...

Page 23: Java para Web com Struts Danilo Toshiaki Sato dtsato@ime.usp.br Treinamento ALESP – SPL Módulo I

Copyleft 2006 Danilo Sato 23

Java para Web - JSP Problema:

Gerar código HTML não é fácil Muitos print() e println()

Solução: JSP JSP = Java Server Pages Vantagens:

Separação da parte estática do HTML da parte dinâmica

Separação de profissionais

Page 24: Java para Web com Struts Danilo Toshiaki Sato dtsato@ime.usp.br Treinamento ALESP – SPL Módulo I

Copyleft 2006 Danilo Sato 24

Java para Web - JSP Basta incluir código Java no arquivo HTML

entre os marcadores "<%" e "%>" Um arquivo JSP parece mais com HTML que

com um Servlet Porém, o JSP é compilado e convertido num

Servlet (a parte estática vira println() e print())

Isso acontece na primeira vez que a página é requisitada

Page 25: Java para Web com Struts Danilo Toshiaki Sato dtsato@ime.usp.br Treinamento ALESP – SPL Módulo I

Copyleft 2006 Danilo Sato 25

Java para Web - JSP

Exemplo:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><%@ page import="java.util.Date"%>

<html><head><title>Hello WWW</title></head><body> <h1>Hello WWW</h1> <p>Data atual: <%= new Date() %></p></body></html>

Page 26: Java para Web com Struts Danilo Toshiaki Sato dtsato@ime.usp.br Treinamento ALESP – SPL Módulo I

Copyleft 2006 Danilo Sato 26

Java para Web - JSP

JSP permite três tipos de construção: Elementos de script: Código Java que

fará parte do Servlet resultante Diretivas: Controla a estrutura geral do

Servlet resultante Ações: Permite utilizar componentes

existentes e controlar o comportamento do compilador JSP

Algumas variáveis pré-definidas

Page 27: Java para Web com Struts Danilo Toshiaki Sato dtsato@ime.usp.br Treinamento ALESP – SPL Módulo I

Copyleft 2006 Danilo Sato 27

Java para Web - JSP

Elemento JSP Sintaxe Interpretação

Expressão <%= expressão %> Expressão é avaliada e impressa na saída

Scriptlet <% código %> Código é inserido no método service()

Declaração <%! código %> Código é inserido no corpo do servlet

Diretiva JSP: page <%@ page att="val“ %>

Diretiva geral para o compilador JSP

Diretiva JSP: include <%@ include file="url" %>

Inclui um arquivo na hora que o servlet é gerado

Page 28: Java para Web com Struts Danilo Toshiaki Sato dtsato@ime.usp.br Treinamento ALESP – SPL Módulo I

Copyleft 2006 Danilo Sato 28

Java para Web - JSP

Elemento JSP Sintaxe Interpretação

Comentário <%-- foo --%> Foo é ignorado

Ação jsp:include <jsp:include page="url"/>

Inclui um arquivo na hora que a página é requisitada

Ação jsp:useBean <jsp:useBean att="val"/>

Encontra ou constrói um JavaBean

Ação jsp:setProperty

<jsp:setProperty att="val"/>

Atualiza uma propriedade do bean

Ação jsp:getProperty

<jsp:getProperty name="bean" property="prop"/>

Imprime o valor de uma propriedade do bean na saída

Page 29: Java para Web com Struts Danilo Toshiaki Sato dtsato@ime.usp.br Treinamento ALESP – SPL Módulo I

Copyleft 2006 Danilo Sato 29

Java para Web - JSP

Elemento JSP Sintaxe Interpretação

Ação jsp:forward <jsp:forward page="url"/>

Encaminha a requisição para outra página

Ação jsp:plugin <jsp:plugin att=val*>

...

</jsp:plugin>

Gera um tag OBJECT ou EMBED para executar um applet através do plugin Java

Page 30: Java para Web com Struts Danilo Toshiaki Sato dtsato@ime.usp.br Treinamento ALESP – SPL Módulo I

Copyleft 2006 Danilo Sato 30

Java para Web - JSP Variáveis pré-definidas:

request: representa o HttpServletRequest response: representa o HttpServletResponse out: representa o PrintWriter associado ao

response session: representa o HttpSession associado

ao request application: representa o ServletContext config: representa o ServletConfig pageContext: representa o PageContext page: apenas um sinônimo para this

Page 31: Java para Web com Struts Danilo Toshiaki Sato dtsato@ime.usp.br Treinamento ALESP – SPL Módulo I

Copyleft 2006 Danilo Sato 31

Java para Web - Servlets & JSP

As aplicações web começaram a ficar muito centradas no JSP

Muita lógica e código Java misturado no meio da página JSP

Nas primeiras especificações de JSP foram definidos: Modelo 1: Utiliza somente páginas JSP Modelo 2: Utiliza páginas JSP e Servlets

Page 32: Java para Web com Struts Danilo Toshiaki Sato dtsato@ime.usp.br Treinamento ALESP – SPL Módulo I

Copyleft 2006 Danilo Sato 32

Java para Web - Servlets & JSP

Modelo 1: Páginas JSP responsáveis pelo

processamento da requisição e construção da página de exibição

Page 33: Java para Web com Struts Danilo Toshiaki Sato dtsato@ime.usp.br Treinamento ALESP – SPL Módulo I

Copyleft 2006 Danilo Sato 33

Java para Web - Servlets & JSP

Modelo 2: Servlets processam a requisição Páginas JSP constroem da página de

exibição

Page 34: Java para Web com Struts Danilo Toshiaki Sato dtsato@ime.usp.br Treinamento ALESP – SPL Módulo I

Copyleft 2006 Danilo Sato 34

MVC Semelhança com idéia antiga de

Smalltalk Padrão conhecido como MVC Divisão de responsabilidades:

Model: representa o estado da aplicação (dados)

Controller: representa o fluxo de controle

View: representa a camada de exibição (apresentação na tela)

Page 35: Java para Web com Struts Danilo Toshiaki Sato dtsato@ime.usp.br Treinamento ALESP – SPL Módulo I

Copyleft 2006 Danilo Sato 35

MVC Vantagens:

Desacoplamento entre o modelo da aplicação e a camada de exibição

Permite a existência de diferentes camadas de exibição

Transparência: o modelo não precisa saber qual a camada de exibição usada

Utiliza o padrão Observer para que o modelo notifique alterações para a camada de exibição (View)

Page 36: Java para Web com Struts Danilo Toshiaki Sato dtsato@ime.usp.br Treinamento ALESP – SPL Módulo I

Copyleft 2006 Danilo Sato 36

MVC

Model

ControllerViewSeleciona a View

Ações do usuário

Con

sulta

dado

sN

otifi

caçã

o de

alter

ação A

lteração do estado

Page 37: Java para Web com Struts Danilo Toshiaki Sato dtsato@ime.usp.br Treinamento ALESP – SPL Módulo I

Copyleft 2006 Danilo Sato 37

Outras Tecnologias - JavaBeans

JavaBeans são classes Java com algumas características especiais

Seguem um determinado padrão: A classe deve ser concreta e pública Deve disponibilizar um construtor sem

argumentos Expõem os campos internos como

propriedades acessadas por métodos de acesso/atualização padronizados

Page 38: Java para Web com Struts Danilo Toshiaki Sato dtsato@ime.usp.br Treinamento ALESP – SPL Módulo I

Copyleft 2006 Danilo Sato 38

Outras Tecnologias - JavaBeans

Por seguir um padrão, podem ser manipulados por introspecção

Foram originalmente projetados para serem utilizados por reflexão

São largamente utilizados em outras aplicações (em especial no Struts)

Exemplo: Form do Struts

Page 39: Java para Web com Struts Danilo Toshiaki Sato dtsato@ime.usp.br Treinamento ALESP – SPL Módulo I

Copyleft 2006 Danilo Sato 39

Outras Tecnologias - JavaBeans Setters:

Métodos de alteração de estado Nome do método deve ser prefixado por “set” O primeiro caractere do nome da propriedade

deve ter letra maiúscula O valor de retorno é sempre void O método deve aceitar somente um argumento,

que pode ser de qualquer tipo Exemplo:

public void setTotal(Double total)

Page 40: Java para Web com Struts Danilo Toshiaki Sato dtsato@ime.usp.br Treinamento ALESP – SPL Módulo I

Copyleft 2006 Danilo Sato 40

Outras Tecnologias - JavaBeans Getters:

Métodos de recuperação de estado Nome do método deve ser prefixado por “get” O primeiro caractere do nome da propriedade

deve ter letra maiúscula O valor de retorno coincide com o parâmetro do

método setter O método não deve ter argumentos Exemplo:

public Double getTotal()

Page 41: Java para Web com Struts Danilo Toshiaki Sato dtsato@ime.usp.br Treinamento ALESP – SPL Módulo I

Copyleft 2006 Danilo Sato 41

Outras Tecnologias - JavaBeans Getters:

Variação para tipos booleanos: Nome do método pode ser prefixado por

“is” O primeiro caractere do nome da

propriedade deve ter letra maiúscula O valor de retorno deve ser Boolean ou

boolean O método não deve ter argumentos Exemplo:

public boolean isActive()

Page 42: Java para Web com Struts Danilo Toshiaki Sato dtsato@ime.usp.br Treinamento ALESP – SPL Módulo I

Copyleft 2006 Danilo Sato 42

Outras Tecnologias - JavaBeans Reflexão:

É o processo de determinar os membros e métodos de um objeto em tempo de execução

Introspecção: É uma forma especializada de reflexão usada na

API dos JavaBeans Através de introspecção é possível descobrir

quais métodos de um JavaBean devem ser chamados para alterar seu estado

O Struts usa introspecção para converter parâmetros HTTP em propriedades JavaBean e para popular campos HTML a partir de um JavaBean

Page 43: Java para Web com Struts Danilo Toshiaki Sato dtsato@ime.usp.br Treinamento ALESP – SPL Módulo I

Copyleft 2006 Danilo Sato 43

Outras Tecnologias - XML XML = Extensible Markup Language Originalmente criado para definir um

padrão para documentos estruturados Permite a separação da semântica dos

dados Atualmente é utilizado em diversas

situações e muitas tecnologias foram desenvolvidas ao seu redor: XML Schema, XPath, XSLT, RDF, SOAP ...

Page 44: Java para Web com Struts Danilo Toshiaki Sato dtsato@ime.usp.br Treinamento ALESP – SPL Módulo I

Copyleft 2006 Danilo Sato 44

Outras Tecnologias - XML Muitas tecnologias Java utilizam

documentos XML como arquivos de configuração

Quando utilizados dessa forma, os documentos XML são geralmente são chamamos de descritores

Exemplos: web.xml struts-config.xml

Page 45: Java para Web com Struts Danilo Toshiaki Sato dtsato@ime.usp.br Treinamento ALESP – SPL Módulo I

Copyleft 2006 Danilo Sato 45

Struts Básico Struts é um arcabouço (framework)

para desenvolvimento de aplicações Web em Java

Disponibiliza uma camada de controle robusta baseada em tecnologias conhecidas

Foco principal no Controller do MVC Encoraja o desenvolvimento de

aplicações no Modelo 2

Page 46: Java para Web com Struts Danilo Toshiaki Sato dtsato@ime.usp.br Treinamento ALESP – SPL Módulo I

Copyleft 2006 Danilo Sato 46

Struts Básico Utiliza um componente próprio para o

Controller Possui integração com outras tecnologias

para suporte ao Model e ao View: Model: JavaBeans e classes utilitárias View: TagLibs para utilização nas páginas JSP

Utiliza arquivos de configuração XML para juntar todos os componentes

O nome é uma analogia às características do Struts que facilitam a estruturação de uma aplicação web

Page 47: Java para Web com Struts Danilo Toshiaki Sato dtsato@ime.usp.br Treinamento ALESP – SPL Módulo I

Copyleft 2006 Danilo Sato 47

Struts Básico - Por quê?

Por que usar o Struts? Diversas tecnologias para representar

o Model (JavaBeans, EJB, JDBC) Diversas tecnologias para representar

o View em aplicações web (JSP, Velocity, JSF)

E o Controller?

Page 48: Java para Web com Struts Danilo Toshiaki Sato dtsato@ime.usp.br Treinamento ALESP – SPL Módulo I

Copyleft 2006 Danilo Sato 48

Struts Básico - Por quê? O Struts funciona como um

controlador central entre as regras de negócio e a interface com o usuário

Vantagens: Separação entre código de apresentação

e regras de negócio Você pode reaproveitar partes da regra

de negócio em diferentes fluxos Um lugar central para controlar a

interação entre as camadas

Page 49: Java para Web com Struts Danilo Toshiaki Sato dtsato@ime.usp.br Treinamento ALESP – SPL Módulo I

Copyleft 2006 Danilo Sato 49

Struts Básico - Por quê?

Outras funcionalidades: Internacionalização: suporte através

de ResourceBundles e TagLibs Gerenciamento de erros: mensagens

de erro geradas nas regras de negócio podem ser exibidas para o usuário

Validação de campos: suporte à validação dos dados de entrada de um Form

Page 50: Java para Web com Struts Danilo Toshiaki Sato dtsato@ime.usp.br Treinamento ALESP – SPL Módulo I

Copyleft 2006 Danilo Sato 50

Struts Básico - Visão Geral

Fluxo Básico de Controle

Page 51: Java para Web com Struts Danilo Toshiaki Sato dtsato@ime.usp.br Treinamento ALESP – SPL Módulo I

Copyleft 2006 Danilo Sato 51

Struts Básico - Visão Geral ActionServlet

Responsável pelo controle do fluxo de navegação Esse fluxo é definido no arquivo de configuração

(struts-config.xml) Fluxo pode ser alterado sem recompilar a aplicação

Action Classe de controle responsável por:

Acessar a camada de negócio Construir a resposta para a requisição Controle e tratamento de erros

Redireciona o fluxo de execução para uma página JSP (ou outra Action)

Page 52: Java para Web com Struts Danilo Toshiaki Sato dtsato@ime.usp.br Treinamento ALESP – SPL Módulo I

Copyleft 2006 Danilo Sato 52

Struts Básico - Visão Geral ActionForms

São JavaBeans Coletam informações de formulários para os objetos

Action Podem ser utilizados para preencher formulários

automaticamente Páginas JSP

Responsáveis apenas pela apresentação dos resultados

Tipicamente devem ter muito pouco código Java (devem usar as taglibs do Struts)

Page 53: Java para Web com Struts Danilo Toshiaki Sato dtsato@ime.usp.br Treinamento ALESP – SPL Módulo I

Copyleft 2006 Danilo Sato 53

Struts Básico - Visão Geral ActionMapping

Informa ao ActionServlet quais Action, ActionForm e ActionForwards devem ser utilizados para cada URI

Definidos no arquivo de configuração (struts-config.xml)

ActionForward Associa um nome lógico para um encaminhamento

(URI para um JSP ou outra Action) Definidos no arquivo de configuração (struts-

config.xml) Geralmente uma requisição é encaminhada

primeiramente para uma Action e depois para um JSP

Page 54: Java para Web com Struts Danilo Toshiaki Sato dtsato@ime.usp.br Treinamento ALESP – SPL Módulo I

Copyleft 2006 Danilo Sato 54

Struts Básico - Visão Geral Fluxo de uma requisição:

1. O servidor recebe uma requisição cuja URL corresponde a um Servlet (ActionServlet)

2. O container transfere o controle para o ActionServlet

3. O ActionServlet encontra o ActionMapping correspondente à URL requisitada

4. O ActionMapping especifica qual classe Action deve ser utilizada e o ActionForm associado

5. O ActionForm é populado com os dados de formulário da requisição (feito automaticamente pelo Struts – Introspecção no JavaBean)

Page 55: Java para Web com Struts Danilo Toshiaki Sato dtsato@ime.usp.br Treinamento ALESP – SPL Módulo I

Copyleft 2006 Danilo Sato 55

Struts Básico - Visão Geral6. O controle é transferido para Action

correspondente (através de uma chamada do método execute())

7. A Action utiliza os dados do ActionForm e acessa a camada de negócio (Model) para gerar uma resposta para a requisição

8. Uma vez gerada a resposta, a Action a armazena em algum contexto do contêiner (tipicamente request ou session) para acesso pela página JSP

9. A Action retorna um ActionForward para o ActionServlet indicando a página JSP (ou outro recurso) que exibirá a resposta

Page 56: Java para Web com Struts Danilo Toshiaki Sato dtsato@ime.usp.br Treinamento ALESP – SPL Módulo I

Copyleft 2006 Danilo Sato 56

Struts Básico - Visão Geral10. A página JSP constrói o resultado com

informações obtidas dos contextos utilizados (request ou session) ou do ActionForm

11. A página JSP encaminha o resultado para o contêiner

12. O contêiner encaminha a resposta para o cliente que iniciou a requisição

Page 57: Java para Web com Struts Danilo Toshiaki Sato dtsato@ime.usp.br Treinamento ALESP – SPL Módulo I

Copyleft 2006 Danilo Sato 57

Dúvidas ou Sugestões?