A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Java para Web com Struts Danilo Toshiaki Sato Treinamento ALESP – SPL Módulo I.

Apresentações semelhantes


Apresentação em tema: "Java para Web com Struts Danilo Toshiaki Sato Treinamento ALESP – SPL Módulo I."— Transcrição da apresentação:

1 Java para Web com Struts Danilo Toshiaki Sato Treinamento ALESP – SPL Módulo I

2 Copyleft 2006 Danilo Sato2 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

3 Copyleft 2006 Danilo Sato3 Agenda - Módulo I 1.Web 1.Partindo do princípio: HTTP, HTML 2.Java para Web: Servlets, JSP 2.MVC (Model-View-Controller) 3.Outras tecnologias utilizadas 1.Java Beans 2.XML 4.Struts básico

4 Copyleft 2006 Danilo Sato4 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

5 Copyleft 2006 Danilo Sato5 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

6 Copyleft 2006 Danilo Sato6 Web - HTTP HTTP Request HTTP Response Cliente Servidor GET URL Headers GET URL Headers OK Headers OK Headers

7 Copyleft 2006 Danilo Sato7 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

8 Copyleft 2006 Danilo Sato8 Web - HTTP ( GET x POST ) Anatomia de um GET : GET /search?hl=pt-BR&q=struts HTTP/1.1 Host: User-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-us Keep-Alive: 300 Connection: keep-alive ParâmetrosCaminho HeadersHeaders

9 Copyleft 2006 Danilo Sato9 Web - HTTP ( GET x POST ) Anatomia de um POST : POST /search HTTP/1.1 Host: User-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-us Keep-Alive: 300 Connection: keep-alive ?hl=pt-BR&q=struts Caminho HeadersHeaders Corpo

10 Copyleft 2006 Danilo Sato10 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

11 Copyleft 2006 Danilo Sato11 Web - HTML Estrutura básica: Título da Página Título Parágrafo com um link para o Google

12 Copyleft 2006 Danilo Sato12 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?

13 Copyleft 2006 Danilo Sato13 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

14 Copyleft 2006 Danilo Sato14 Web HTTP Request HTTP Response Cliente Servidor Aplicação Amiga

15 Copyleft 2006 Danilo Sato15 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

16 Copyleft 2006 Danilo Sato16 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

17 Copyleft 2006 Danilo Sato17 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

18 Copyleft 2006 Danilo Sato18 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

19 Copyleft 2006 Danilo Sato19 Java para Web - Servlets HTTP Request HTTP Response Cliente Servidor Servlet Contêiner Web requestresponse 12 2 service(request, response) doGet(request, response) 3 4

20 Copyleft 2006 Danilo Sato20 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(" \n"); out.println(" Hello WWW \n"); out.println(" \n"); out.println(" Hello WWW \n"); out.println(" Data atual:" + new Date() + " "); out.println(" "); }

21 Copyleft 2006 Danilo Sato21 Java para Web - Servlets Exemplo: Deployment Descriptor Hello WWW Hello WWW /Hello.do

22 Copyleft 2006 Danilo Sato22 Java para Web - Servlets Organização em um web-app (WAR): WEB-INF Hello classes lib HTMLsweb.xmlHelloWWW.class...

23 Copyleft 2006 Danilo Sato23 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

24 Copyleft 2006 Danilo Sato24 Java para Web - JSP Basta incluir código Java no arquivo HTML entre os marcadores " " 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

25 Copyleft 2006 Danilo Sato25 Java para Web - JSP Exemplo: Hello WWW Hello WWW Data atual:

26 Copyleft 2006 Danilo Sato26 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

27 Copyleft 2006 Danilo Sato27 Java para Web - JSP Elemento JSPSintaxeInterpretação Expressão Expressão é avaliada e impressa na saída Scriptlet Código é inserido no método service() Declaração Código é inserido no corpo do servlet Diretiva JSP: page Diretiva geral para o compilador JSP Diretiva JSP: include Inclui um arquivo na hora que o servlet é gerado

28 Copyleft 2006 Danilo Sato28 Java para Web - JSP Elemento JSPSintaxeInterpretação Comentário Foo é ignorado Ação jsp:include Inclui um arquivo na hora que a página é requisitada Ação jsp:useBean Encontra ou constrói um JavaBean Ação jsp:setProperty Atualiza uma propriedade do bean Ação jsp:getProperty Imprime o valor de uma propriedade do bean na saída

29 Copyleft 2006 Danilo Sato29 Java para Web - JSP Elemento JSPSintaxeInterpretação Ação jsp:forward Encaminha a requisição para outra página Ação jsp:plugin... Gera um tag OBJECT ou EMBED para executar um applet através do plugin Java

30 Copyleft 2006 Danilo Sato30 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

31 Copyleft 2006 Danilo Sato31 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

32 Copyleft 2006 Danilo Sato32 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

33 Copyleft 2006 Danilo Sato33 Java para Web - Servlets & JSP Modelo 2: Servlets processam a requisição Páginas JSP constroem da página de exibição

34 Copyleft 2006 Danilo Sato34 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)

35 Copyleft 2006 Danilo Sato35 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)

36 Copyleft 2006 Danilo Sato36 MVC Model ControllerView Seleciona a View Ações do usuário Consulta dados Notificação de alteração Alteração do estado

37 Copyleft 2006 Danilo Sato37 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

38 Copyleft 2006 Danilo Sato38 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

39 Copyleft 2006 Danilo Sato39 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)

40 Copyleft 2006 Danilo Sato40 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()

41 Copyleft 2006 Danilo Sato41 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()

42 Copyleft 2006 Danilo Sato42 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

43 Copyleft 2006 Danilo Sato43 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...

44 Copyleft 2006 Danilo Sato44 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

45 Copyleft 2006 Danilo Sato45 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

46 Copyleft 2006 Danilo Sato46 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

47 Copyleft 2006 Danilo Sato47 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?

48 Copyleft 2006 Danilo Sato48 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

49 Copyleft 2006 Danilo Sato49 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

50 Copyleft 2006 Danilo Sato50 Struts Básico - Visão Geral Fluxo Básico de Controle

51 Copyleft 2006 Danilo Sato51 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)

52 Copyleft 2006 Danilo Sato52 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)

53 Copyleft 2006 Danilo Sato53 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

54 Copyleft 2006 Danilo Sato54 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)

55 Copyleft 2006 Danilo Sato55 Struts Básico - Visão Geral 6.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

56 Copyleft 2006 Danilo Sato56 Struts Básico - Visão Geral 10.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

57 Copyleft 2006 Danilo Sato57 Dúvidas ou Sugestões?


Carregar ppt "Java para Web com Struts Danilo Toshiaki Sato Treinamento ALESP – SPL Módulo I."

Apresentações semelhantes


Anúncios Google