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

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

Java para Web com Struts

Apresentações semelhantes


Apresentação em tema: "Java para Web com Struts"— Transcrição da apresentação:

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

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

3 Agenda - Módulo I Web MVC (Model-View-Controller)
Partindo do princípio: HTTP, HTML Java para Web: Servlets, JSP MVC (Model-View-Controller) Outras tecnologias utilizadas Java Beans XML Struts básico 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 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 Copyleft 2006 Danilo Sato

6 Web - HTTP Cliente Servidor HTTP Request HTTP Response GET URL Headers
HTTP Request HTTP Response Cliente Servidor 200 OK Headers <html> ... </html> 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 Copyleft 2006 Danilo Sato

8 Web - HTTP (GET x POST) Anatomia de um GET: Caminho Parâmetros Headers
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 Headers Copyleft 2006 Danilo Sato

9 Web - HTTP (GET x POST) Anatomia de um POST: Caminho Headers Corpo
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 Headers Corpo 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 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=“ </p> <img src=“foto.jpg”/> </body> </html> 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? 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 Copyleft 2006 Danilo Sato

14 Web Cliente Servidor HTTP Request Aplicação Amiga HTTP Response 1 2 4
3 Aplicação Amiga HTTP Response Cliente Servidor 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 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 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 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 Copyleft 2006 Danilo Sato

19 Java para Web - Servlets
HTTP Request 1 Contêiner Web 2 Servlet 4 3 HTTP Response response Cliente request service(request, response) doGet(request, response) 2 Servidor 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>"); } Copyleft 2006 Danilo Sato

21 Java para Web - Servlets
Exemplo: Deployment Descriptor <web-app xmlns=" xmlns:xsi=" xsi:schemaLocation=" version="2.4"> <servlet> <servlet-name>Hello WWW</servlet-name> <servlet-class>HelloWWW</servlet-class> </servlet> <servlet-mapping> <url-pattern>/Hello.do</url-pattern> </servlet-mapping> </web-app> Copyleft 2006 Danilo Sato

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

23 Java para Web - JSP Problema: Solução: JSP JSP = Java Server Pages
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 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 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> 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 Copyleft 2006 Danilo Sato

27 Java para Web - JSP Elemento JSP Sintaxe Interpretaçã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 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 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 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 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 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 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 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) 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) Copyleft 2006 Danilo Sato

36 MVC Model View Controller Notificação de alteração Consulta dados
Alteração do estado Seleciona a View View Controller Ações do usuário 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 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 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) 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() 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() 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 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 ... 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 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 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 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? 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 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 Copyleft 2006 Danilo Sato

50 Struts Básico - Visão Geral
Fluxo Básico de Controle 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) 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) 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) Geralmente uma requisição é encaminhada primeiramente para uma Action e depois para um JSP Copyleft 2006 Danilo Sato

54 Struts Básico - Visão Geral
Fluxo de uma requisição: O servidor recebe uma requisição cuja URL corresponde a um Servlet (ActionServlet) O container transfere o controle para o ActionServlet O ActionServlet encontra o ActionMapping correspondente à URL requisitada O ActionMapping especifica qual classe Action deve ser utilizada e o ActionForm associado O ActionForm é populado com os dados de formulário da requisição (feito automaticamente pelo Struts – Introspecção no JavaBean) Copyleft 2006 Danilo Sato

55 Struts Básico - Visão Geral
O controle é transferido para Action correspondente (através de uma chamada do método execute()) A Action utiliza os dados do ActionForm e acessa a camada de negócio (Model) para gerar uma resposta para a requisição 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 A Action retorna um ActionForward para o ActionServlet indicando a página JSP (ou outro recurso) que exibirá a resposta Copyleft 2006 Danilo Sato

56 Struts Básico - Visão Geral
A página JSP constrói o resultado com informações obtidas dos contextos utilizados (request ou session) ou do ActionForm A página JSP encaminha o resultado para o contêiner O contêiner encaminha a resposta para o cliente que iniciou a requisição Copyleft 2006 Danilo Sato

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


Carregar ppt "Java para Web com Struts"

Apresentações semelhantes


Anúncios Google