Servlet/JSP Introdução Fábio Nogueira de Lucena Instituto de Informática (UFG)
Introdução Motivação, conceitos básicos, ...
Motivação Bem, você já deve estar usando Java .... Caso contrário “ Muitos” estão usando Segurança Eficiência, ... Servlet/JSP são tecnologias Java para a camada de apresentação de aplicações web
Cenário “típico” (tiers) Extraído de http://java.sun.com/javaee/5/docs/tutorial/doc/geysj.html
Outra perspectiva... Extraído de http://java.sun.com/javaee/5/docs/tutorial/doc/geysj.html
Em mais detalhes... Extraído de http://java.sun.com/javaee/5/docs/tutorial/doc/geysj.html
Pré-requisitos para os exemplos Java 5.0 (compilar, executar, ...) Noções de orientação a objetos e de UML Tomcat http://jakarta.apache.org/tomcat Editor de sua preferência Emacs, ... Deve gravar nos formatos UTF-8, ISO-8859-1,... Uma shell para execução do compilador Linux (bash) Windows (cmd) Um browser Firefox, .... Seu entusiasmo também é bem-vindo!
Elementos básicos Aplicação web exige  cliente  e  servidor Cliente Envia requisição para o servidor Aguarda resposta Repete os passos acima... Servidor Aguarda requisição Envia resposta Repete os passos acima...
Serviços Entre cliente e servidor há uma  rede Oferece serviços de comunicação Mesma rede, qualquer que seja a aplicação Oferecidos pelo  servidor   Uma parte gerencia a rede (conexões, ...) Outra parte a lógica de aplicação Retorna página estática Página dinâmica exige  extensão  ( server extensions ) CGI ( Common Gateway Interface )  Netscape Server (NSAPI) Microsoft Internet Information Server (ISAPI), e outros ...
Da perspectiva Java  Extensões do servidor são escritas usando Servlet API ( Servlet Application Programming Interface ) Módulos resultantes são conhecidos por Servlets ou componentes web Servlet é executado em um  contêiner Tomcat Jetty Resin, ...
Processo típico empregando Servlets Cliente ( browser ) Servidor Servidor Web Apache + Tomcat Entre cliente/servidor Browser  faz requisição de URL via rede Requisição atinge Servidor Web Servidor web retorna página estática ou encaminha para contêiner Contêiner encaminha para servlet correspondente Servlet providencia a resposta (toda funcionalidade de Java à disposição)
Fontes de referência Existem várias fontes de informação. Consulte algumas delas por meio dos links abaixo: http://del.icio.us/kyriosdata/servlet http://del.icio.us/kyriosdata/jsp
Compreendendo  Servlets Servlet = classe que implementa resposta à requisição de browser
Meu Primeiro Servlet (ambientação) [ http://exemplos.googlecode.com/svn/trunk/scwcd/exemplo ]
Meu Primeiro Servlet (RosnarDoCao) import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class RosnarDoCao extends  HttpServlet  { public void  service ( HttpServletRequest  request, HttpServletResponse  response) throws ServletException, IOException { PrintWriter pw = resonse.getWriter(); pw.println(“<html><head></head><body>”); pw.println(“<h1>O cão rosna...</h1>”); pw.println(“</body></html>”); } }
Servlet (resumo parcial) O que é? Tecnologia que estende função de servidor web Classe em Java Módulo de extensão do servidor Onde é executado? No servidor Quem executa? Contêiner (Tomcat, Jetty, Resin, ...) Qual a função? Produzir resposta para requisição
Perspectiva de programador Criar classe Em geral, várias classes Compilar Servlet é código em Java (deve ser compilado) Implantar Como dizer para o contêiner o que fazer e para quais requisições? (Em inglês:  deployment ) Executar Como disparar a execução de um servlet?
Criando classe (RosnarDoCao) import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class RosnarDoCao extends  HttpServlet  { public void  service ( HttpServletRequest  r, HttpServletResponse  s) throws ServletException, IOException { PrintWriter pw = s.getWriter(); pw.println(“<html><head></head><body>”); pw.println(“<h1>O cão rosna...</h1>”); pw.println(“</body></html>”); } }
Compilando um Servlet Um servlet típico faz uso dos pacotes javax.servlet javax.servlet.http Estes pacotes estão implementados em $CATALINA_HOME\lib\servlet-api.jar Acrescente à variável CLASSPATH $CATALINA_HOME\common\lib\servlet-api.jar Compile a classe javac –cp $CLASSPATH RosnarDoCao.java
Implantando (web.xml) Descritor de implantação da aplicação Trata-se de arquivo xml <?xml version=&quot;1.0&quot; encoding=&quot;ISO-8859-1&quot;?> Elemento raiz ( web-app ) O que é preciso para descrever um servlet? servlet servlet-name servlet-class servlet-mapping servlet-name url-pattern
Implantando (continuação) (web.xml) <?xml version=&quot;1.0&quot; encoding=&quot;ISO-8859-1&quot;?> < web-app  xmlns=&quot;http://java.sun.com/xml/ns/j2ee&quot; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot; xsi:schemaLocation=&quot;http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd&quot; version=&quot;2.4&quot;> < servlet > <servlet-name>Rosnar</servlet-name> <servlet-class>RosnarDoCao</servlet-class> </ servlet > < servlet-mapping > <servlet-name>Rosnar</servlet-name> <url-pattern>/servlet/RosnarDoCao</url-pattern> </ servlet-mapping > </ web-app >
Implantando (continuação) (Tomcat) Cenário “mais simples impossível” exemplo   (diretório do “contexto” da aplicação) WEB-INF   (dir) web.xml   (descrição da aplicação web) classes   (dir) RosnarDoCao.java   (nosso servlet) RosnarDoCao.class   (arquivo gerado pelo javac) Copie todo o diretório  exemplo  para  $CATALINA_HOME\webapps Observações A estrutura acima é rígida (acostume-se com ela)
Executando um Servlet Inicie o contêiner (Tomcat) startup.bat  (para interromper use  shutdown.bat ) Inicie o seu  browser  Visite o URL http://localhost:8080/exemplo/servlet/RosnarDoCao Resultado
Revisão Criou-se uma aplicação mínima (contexto  exemplo ) O Tomcat foi iniciado O browser foi iniciado Uma requisição feita ao URL http://localhost:8080/exemplo/servlet/RosnardoCao O Tomcat recebe e repassa a requisição para o servlet correspondente (ver web.xml) Servlet rosnar é executado e a resposta enviada para o browser Interromper o Tomcat ( shutdown.bat )
Relação entre Servlet, Servlet contêiner e  Servlet API
Servlet e Tomcat Servlet usa Servlet API javax.servlet javax.servlet.http Por meio da Servlet API um Servlet comunica-se com o contêiner para: Obter detalhes de uma requisição Fornecer o resultado de um requisição Um Servlet é executado no contêiner
Contexto RosnarDoCao  faz uso de Servlet API Contêiner Tomcat implementa a Servlet API
Estrutura de pacotes Onde encontrar http://java.sun.com/products/servlet   Pacotes javax.servlet javax.servlet.http
Alguns detalhes... javax.servlet 14 interfaces 9 classes 2 exceções javax.servlet.http 8 interfaces 7 classes
Componentes envolvidos Aplicação Web (por exemplo,  RosnarDoCao ) Servlet API (interface usada pelo servlet) Servlet API (implementada pelo Tomcat) Componente  servlet-api.jar  (contém implementação da Servlet API.
Elementos envolvidos na execução Cliente (através do  browser ) Servidor que hospeda: Servidor Web (não necessariamente está disponível) Tomcat que hospeda: Aplicação Web
Comunicação entre elementos Browser  requisita URL, servidor web recebe, analisa e encaminha para o Tomcat, que identifica aplicação web e chama  service  para o servlet em questão
Pacote javax.servlet
Componentes (14 interfaces) Filter FilterChain FilterConfig RequestDispatcher  Servlet  ServletConfig ServletContext ServletContextAttributeListener ServletContextListener  ServletRequest ServletRequestAttributeListener ServletRequestListener ServletResponse SingleThreadModel
Componentes (9 classes) GenericServlet ServletContextAttributeEvent ServletContextEvent ServletInputStream ServletOutputStream ServletRequestAttributeEvent ServletRequestEvent ServletRequestWrapper ServletResponseWrapper
Componentes (2 exceções) ServletException UnavailableException
Interface Servlet Relembrando... Servlet é um pequeno programa em Java que estende a funcionalidade de um servidor Web. Um servlet recebe e responde requisições de um cliente web, por exemplo,  browser Para isto, um servlet implementa Servlet javax.servlet.Servlet
Métodos da interface Servlet destroy()  ServletConfig getServletConfig()  String getServletInfo() void init(ServletConfig config)  void service(ServletRequest request,   ServletResponse response) Chamado pelo contêiner para que o servlet responda à requisição realizada pelo cliente!
Requisição e resposta (detalhes) javax.servlet.ServletRequest javax.servlet.ServletResponse
Pacote javax.servlet.http Oferece a funcionalidade básica para servlets HTTP
Componentes (8 interfaces) HttpServletRequest HttpServletResponse HttpSession HttpSessionActivationListener HttpSessionAttributeListener HttpSessionBindingListener HttpSessionContext HttpSessionListener
Componentes (7 classes) Cookie HttpServlet HttpServletRequestWrapper HttpServletResponseWrapper HttpSessionBindingEvent HttpSessionEvent HttpUtils (todos os métodos foram não recomendados) ( deprecated )
Classe javax.servlet.http.HttpServlet
Compreendendo  JavaServer Pages [ http://exemplos.googlecode.com/svn/trunk/scwcd/jaca/ ]  JavaServer Page =  Página HTML (web) + código em Java
Ilustração (página estática, Servlet e JSP) Jaca.html <html> <body> <h1>A jaca caiu</h1> </body> </html> Jaca.java import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class Java extends HttpServlet {   public void service(HttpServletRequest req,   HttpServletResponse resp)   throws ServletException, IOException {   PrintWriter pw = resp.getWriter();   pw.println(“<html><body>”);   if (“jaca”.equals(“jaca”))    pw.println(“<h1>A jaca caiu</h1>”);   else   pw.println(“<h1>A jaca não caiu</h1>”);   pw.println(“</body>”);   pw.println(“</html>”);   } }   Arquivo HTML Classe Java Jaca.jsp <html><body> <% if (“jaca”.equals(“jaca”)) { %> <h1>A jaca caiu</h1> <% } else { %> <h1>A jaca não caiu</h1> <% } %> </body></html>
Executando página JSP Obtenha a minúscula aplicação “jaca” de http://exemplos.googlecode.com/svn/trunk/scwcd/jaca/ Copie o diretório criado para o Tomcat (diretório $CATALINA_HOME/webapps) Inicie o Tomcat (startup) Ao menos de forma explícita Não há o que compilar! Aponte o  browser  para http://localhost:8080/jaca/jaca.jsp
Quando usar JSP? Quando usar Servlet? JSP exibe o resultado da requisição Servlet sabe o que precisa ser feito para atender a requisição Modelo MVC (Model-View-Controller)
HTTP Noções
Só serão fornecidas noções, ... Se você estiver interessado em detalhes... http://www.w3.org/Protocols/rfc2616/rfc2616
Protocolo HTTP HTTP HyperText Transfer Protocol Modelo requisição/resposta Mensagem HTTP (usada para requisição) Mensagem HTTP (usada para resposta) Protocolo sem estado  ( stateless ) Após resposta, servidor “esquece” cliente Para servidor toda requisição é “nova”, a “primeira”
Mensagem HTTP Requisição do cliente Resposta do servidor Elementos de uma mensagem: Linha inicial (identifica propósito) Cabeçalho (informações como tipo, tamanho) Linha em branco Corpo da mensagem (opcional) Todas as linhas terminam com CRLF ASCII 13 (carriage return) seguido de 10 (line feed)
Requisição HTTP Enviado do cliente para o servidor Linha inicial Nome do método Caminho do recurso requisitado (URI) Versão de HTTP empregada Exemplo GET /exemplo/servlet/RosnarDoCao HTTP/1.1 Veremos detalhes usando Tcpmon...
Métodos (requisição) HTTP 1.1 GET  (recuperar um recurso) HEAD  (recuperar meta-informação) resposta não contém  header POST  (enviar dados para o servidor) PUT  (adicionar um recurso ao servidor) disponibiliza dados via um URI OPTIONS DELETE TRACE CONNECT
Resposta HTTP Primeira linha ( status ) HTTP/1.1 404 Not Found HTTP/1.1 500 Internal Error Resposta completa HTTP/1.1 200 OK Server: Apache-Coyote/1.1 Content-Type: text/html;charset=ISO-8859-1 Content-Length: 58 Date: Sun, 09 Apr 2006 19:53:18 GMT <html> <body> <h1>A jaca caiu</h1> </body> </html>
Monitorando conexões TCP/IP... TCPMON ( http://tcpmon.dev.java.net )
Monitorando pelo  browser Browser Firefox Firebug https://addons.mozilla.org/en-US/firefox/addon/1843 Tamper Data https://addons.mozilla.org/en-US/firefox/addon/966

servlet-introducao

  • 1.
    Servlet/JSP Introdução FábioNogueira de Lucena Instituto de Informática (UFG)
  • 2.
  • 3.
    Motivação Bem, vocêjá deve estar usando Java .... Caso contrário “ Muitos” estão usando Segurança Eficiência, ... Servlet/JSP são tecnologias Java para a camada de apresentação de aplicações web
  • 4.
    Cenário “típico” (tiers)Extraído de http://java.sun.com/javaee/5/docs/tutorial/doc/geysj.html
  • 5.
    Outra perspectiva... Extraídode http://java.sun.com/javaee/5/docs/tutorial/doc/geysj.html
  • 6.
    Em mais detalhes...Extraído de http://java.sun.com/javaee/5/docs/tutorial/doc/geysj.html
  • 7.
    Pré-requisitos para osexemplos Java 5.0 (compilar, executar, ...) Noções de orientação a objetos e de UML Tomcat http://jakarta.apache.org/tomcat Editor de sua preferência Emacs, ... Deve gravar nos formatos UTF-8, ISO-8859-1,... Uma shell para execução do compilador Linux (bash) Windows (cmd) Um browser Firefox, .... Seu entusiasmo também é bem-vindo!
  • 8.
    Elementos básicos Aplicaçãoweb exige cliente e servidor Cliente Envia requisição para o servidor Aguarda resposta Repete os passos acima... Servidor Aguarda requisição Envia resposta Repete os passos acima...
  • 9.
    Serviços Entre clientee servidor há uma rede Oferece serviços de comunicação Mesma rede, qualquer que seja a aplicação Oferecidos pelo servidor Uma parte gerencia a rede (conexões, ...) Outra parte a lógica de aplicação Retorna página estática Página dinâmica exige extensão ( server extensions ) CGI ( Common Gateway Interface ) Netscape Server (NSAPI) Microsoft Internet Information Server (ISAPI), e outros ...
  • 10.
    Da perspectiva Java Extensões do servidor são escritas usando Servlet API ( Servlet Application Programming Interface ) Módulos resultantes são conhecidos por Servlets ou componentes web Servlet é executado em um contêiner Tomcat Jetty Resin, ...
  • 11.
    Processo típico empregandoServlets Cliente ( browser ) Servidor Servidor Web Apache + Tomcat Entre cliente/servidor Browser faz requisição de URL via rede Requisição atinge Servidor Web Servidor web retorna página estática ou encaminha para contêiner Contêiner encaminha para servlet correspondente Servlet providencia a resposta (toda funcionalidade de Java à disposição)
  • 12.
    Fontes de referênciaExistem várias fontes de informação. Consulte algumas delas por meio dos links abaixo: http://del.icio.us/kyriosdata/servlet http://del.icio.us/kyriosdata/jsp
  • 13.
    Compreendendo ServletsServlet = classe que implementa resposta à requisição de browser
  • 14.
    Meu Primeiro Servlet(ambientação) [ http://exemplos.googlecode.com/svn/trunk/scwcd/exemplo ]
  • 15.
    Meu Primeiro Servlet(RosnarDoCao) import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class RosnarDoCao extends HttpServlet { public void service ( HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter pw = resonse.getWriter(); pw.println(“<html><head></head><body>”); pw.println(“<h1>O cão rosna...</h1>”); pw.println(“</body></html>”); } }
  • 16.
    Servlet (resumo parcial)O que é? Tecnologia que estende função de servidor web Classe em Java Módulo de extensão do servidor Onde é executado? No servidor Quem executa? Contêiner (Tomcat, Jetty, Resin, ...) Qual a função? Produzir resposta para requisição
  • 17.
    Perspectiva de programadorCriar classe Em geral, várias classes Compilar Servlet é código em Java (deve ser compilado) Implantar Como dizer para o contêiner o que fazer e para quais requisições? (Em inglês: deployment ) Executar Como disparar a execução de um servlet?
  • 18.
    Criando classe (RosnarDoCao)import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class RosnarDoCao extends HttpServlet { public void service ( HttpServletRequest r, HttpServletResponse s) throws ServletException, IOException { PrintWriter pw = s.getWriter(); pw.println(“<html><head></head><body>”); pw.println(“<h1>O cão rosna...</h1>”); pw.println(“</body></html>”); } }
  • 19.
    Compilando um ServletUm servlet típico faz uso dos pacotes javax.servlet javax.servlet.http Estes pacotes estão implementados em $CATALINA_HOME\lib\servlet-api.jar Acrescente à variável CLASSPATH $CATALINA_HOME\common\lib\servlet-api.jar Compile a classe javac –cp $CLASSPATH RosnarDoCao.java
  • 20.
    Implantando (web.xml) Descritorde implantação da aplicação Trata-se de arquivo xml <?xml version=&quot;1.0&quot; encoding=&quot;ISO-8859-1&quot;?> Elemento raiz ( web-app ) O que é preciso para descrever um servlet? servlet servlet-name servlet-class servlet-mapping servlet-name url-pattern
  • 21.
    Implantando (continuação) (web.xml)<?xml version=&quot;1.0&quot; encoding=&quot;ISO-8859-1&quot;?> < web-app xmlns=&quot;http://java.sun.com/xml/ns/j2ee&quot; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot; xsi:schemaLocation=&quot;http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd&quot; version=&quot;2.4&quot;> < servlet > <servlet-name>Rosnar</servlet-name> <servlet-class>RosnarDoCao</servlet-class> </ servlet > < servlet-mapping > <servlet-name>Rosnar</servlet-name> <url-pattern>/servlet/RosnarDoCao</url-pattern> </ servlet-mapping > </ web-app >
  • 22.
    Implantando (continuação) (Tomcat)Cenário “mais simples impossível” exemplo (diretório do “contexto” da aplicação) WEB-INF (dir) web.xml (descrição da aplicação web) classes (dir) RosnarDoCao.java (nosso servlet) RosnarDoCao.class (arquivo gerado pelo javac) Copie todo o diretório exemplo para $CATALINA_HOME\webapps Observações A estrutura acima é rígida (acostume-se com ela)
  • 23.
    Executando um ServletInicie o contêiner (Tomcat) startup.bat (para interromper use shutdown.bat ) Inicie o seu browser Visite o URL http://localhost:8080/exemplo/servlet/RosnarDoCao Resultado
  • 24.
    Revisão Criou-se umaaplicação mínima (contexto exemplo ) O Tomcat foi iniciado O browser foi iniciado Uma requisição feita ao URL http://localhost:8080/exemplo/servlet/RosnardoCao O Tomcat recebe e repassa a requisição para o servlet correspondente (ver web.xml) Servlet rosnar é executado e a resposta enviada para o browser Interromper o Tomcat ( shutdown.bat )
  • 25.
    Relação entre Servlet,Servlet contêiner e Servlet API
  • 26.
    Servlet e TomcatServlet usa Servlet API javax.servlet javax.servlet.http Por meio da Servlet API um Servlet comunica-se com o contêiner para: Obter detalhes de uma requisição Fornecer o resultado de um requisição Um Servlet é executado no contêiner
  • 27.
    Contexto RosnarDoCao faz uso de Servlet API Contêiner Tomcat implementa a Servlet API
  • 28.
    Estrutura de pacotesOnde encontrar http://java.sun.com/products/servlet Pacotes javax.servlet javax.servlet.http
  • 29.
    Alguns detalhes... javax.servlet14 interfaces 9 classes 2 exceções javax.servlet.http 8 interfaces 7 classes
  • 30.
    Componentes envolvidos AplicaçãoWeb (por exemplo, RosnarDoCao ) Servlet API (interface usada pelo servlet) Servlet API (implementada pelo Tomcat) Componente servlet-api.jar (contém implementação da Servlet API.
  • 31.
    Elementos envolvidos naexecução Cliente (através do browser ) Servidor que hospeda: Servidor Web (não necessariamente está disponível) Tomcat que hospeda: Aplicação Web
  • 32.
    Comunicação entre elementosBrowser requisita URL, servidor web recebe, analisa e encaminha para o Tomcat, que identifica aplicação web e chama service para o servlet em questão
  • 33.
  • 34.
    Componentes (14 interfaces)Filter FilterChain FilterConfig RequestDispatcher Servlet ServletConfig ServletContext ServletContextAttributeListener ServletContextListener ServletRequest ServletRequestAttributeListener ServletRequestListener ServletResponse SingleThreadModel
  • 35.
    Componentes (9 classes)GenericServlet ServletContextAttributeEvent ServletContextEvent ServletInputStream ServletOutputStream ServletRequestAttributeEvent ServletRequestEvent ServletRequestWrapper ServletResponseWrapper
  • 36.
    Componentes (2 exceções)ServletException UnavailableException
  • 37.
    Interface Servlet Relembrando...Servlet é um pequeno programa em Java que estende a funcionalidade de um servidor Web. Um servlet recebe e responde requisições de um cliente web, por exemplo, browser Para isto, um servlet implementa Servlet javax.servlet.Servlet
  • 38.
    Métodos da interfaceServlet destroy() ServletConfig getServletConfig() String getServletInfo() void init(ServletConfig config) void service(ServletRequest request, ServletResponse response) Chamado pelo contêiner para que o servlet responda à requisição realizada pelo cliente!
  • 39.
    Requisição e resposta(detalhes) javax.servlet.ServletRequest javax.servlet.ServletResponse
  • 40.
    Pacote javax.servlet.http Oferecea funcionalidade básica para servlets HTTP
  • 41.
    Componentes (8 interfaces)HttpServletRequest HttpServletResponse HttpSession HttpSessionActivationListener HttpSessionAttributeListener HttpSessionBindingListener HttpSessionContext HttpSessionListener
  • 42.
    Componentes (7 classes)Cookie HttpServlet HttpServletRequestWrapper HttpServletResponseWrapper HttpSessionBindingEvent HttpSessionEvent HttpUtils (todos os métodos foram não recomendados) ( deprecated )
  • 43.
  • 44.
    Compreendendo JavaServerPages [ http://exemplos.googlecode.com/svn/trunk/scwcd/jaca/ ] JavaServer Page = Página HTML (web) + código em Java
  • 45.
    Ilustração (página estática,Servlet e JSP) Jaca.html <html> <body> <h1>A jaca caiu</h1> </body> </html> Jaca.java import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class Java extends HttpServlet { public void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { PrintWriter pw = resp.getWriter(); pw.println(“<html><body>”); if (“jaca”.equals(“jaca”)) pw.println(“<h1>A jaca caiu</h1>”); else pw.println(“<h1>A jaca não caiu</h1>”); pw.println(“</body>”); pw.println(“</html>”); } } Arquivo HTML Classe Java Jaca.jsp <html><body> <% if (“jaca”.equals(“jaca”)) { %> <h1>A jaca caiu</h1> <% } else { %> <h1>A jaca não caiu</h1> <% } %> </body></html>
  • 46.
    Executando página JSPObtenha a minúscula aplicação “jaca” de http://exemplos.googlecode.com/svn/trunk/scwcd/jaca/ Copie o diretório criado para o Tomcat (diretório $CATALINA_HOME/webapps) Inicie o Tomcat (startup) Ao menos de forma explícita Não há o que compilar! Aponte o browser para http://localhost:8080/jaca/jaca.jsp
  • 47.
    Quando usar JSP?Quando usar Servlet? JSP exibe o resultado da requisição Servlet sabe o que precisa ser feito para atender a requisição Modelo MVC (Model-View-Controller)
  • 48.
  • 49.
    Só serão fornecidasnoções, ... Se você estiver interessado em detalhes... http://www.w3.org/Protocols/rfc2616/rfc2616
  • 50.
    Protocolo HTTP HTTPHyperText Transfer Protocol Modelo requisição/resposta Mensagem HTTP (usada para requisição) Mensagem HTTP (usada para resposta) Protocolo sem estado ( stateless ) Após resposta, servidor “esquece” cliente Para servidor toda requisição é “nova”, a “primeira”
  • 51.
    Mensagem HTTP Requisiçãodo cliente Resposta do servidor Elementos de uma mensagem: Linha inicial (identifica propósito) Cabeçalho (informações como tipo, tamanho) Linha em branco Corpo da mensagem (opcional) Todas as linhas terminam com CRLF ASCII 13 (carriage return) seguido de 10 (line feed)
  • 52.
    Requisição HTTP Enviadodo cliente para o servidor Linha inicial Nome do método Caminho do recurso requisitado (URI) Versão de HTTP empregada Exemplo GET /exemplo/servlet/RosnarDoCao HTTP/1.1 Veremos detalhes usando Tcpmon...
  • 53.
    Métodos (requisição) HTTP1.1 GET (recuperar um recurso) HEAD (recuperar meta-informação) resposta não contém header POST (enviar dados para o servidor) PUT (adicionar um recurso ao servidor) disponibiliza dados via um URI OPTIONS DELETE TRACE CONNECT
  • 54.
    Resposta HTTP Primeiralinha ( status ) HTTP/1.1 404 Not Found HTTP/1.1 500 Internal Error Resposta completa HTTP/1.1 200 OK Server: Apache-Coyote/1.1 Content-Type: text/html;charset=ISO-8859-1 Content-Length: 58 Date: Sun, 09 Apr 2006 19:53:18 GMT <html> <body> <h1>A jaca caiu</h1> </body> </html>
  • 55.
    Monitorando conexões TCP/IP...TCPMON ( http://tcpmon.dev.java.net )
  • 56.
    Monitorando pelo browser Browser Firefox Firebug https://addons.mozilla.org/en-US/firefox/addon/1843 Tamper Data https://addons.mozilla.org/en-US/firefox/addon/966