SlideShare une entreprise Scribd logo
1  sur  309
Java Básico – Módulo 1
                                     Java Web




             Java Web

             Régis Melo
              @regismelo




@regismelo                                  1
Java Básico – Módulo 1
                                            Java Web




                  Missão

Apresentar, motivar e exercitar a plataforma
Java voltada para desenvolvimento de
aplicações WEB.




  @regismelo                                       2
Java Básico – Módulo 1
                                              Java Web




              Metodologias
• Exposição e discussão teóricas;
• Exercícios práticos de projeto e modelagem em
  laboratório.




 @regismelo                                          3
Java Básico – Módulo 1
                                              Java Web




 O que esse curso não cobre ou não é?

Não Cobre:
• Conceitos gerais de Java e da plataforma J2SE.
Não é:
• Um curso para aprender Java – este é um curso
  para se aprofundar na plataforma, estudando os
  recursos voltados para web.



 @regismelo                                          4
Java Básico – Módulo 1
                                                               Java Web




                         Programa
  I.         Iniciando
  II.        Introdução aos Applets
  III.       Introdução a Servlets
  IV.        Revisão do protocolo HTTP
  V.         Trabalhando com dados de formulários
  VI.        Processamento e ciclo de vida de um Servlet
  VII.       Obtendo informações do ambiente
  VIII.      Controle de Fluxo e Colaboração
  IX.        Cookies
  X.         Gerenciamento de Sessões
  XI.        Java Server Pages
  XII.       Tag Libs

@regismelo                                                            5
Java Básico – Módulo 1
                                              Java Web




              Antes de iniciar…

Vamos nos apresentar
• Nome;
• Empresa;
• Experiência com programação;
• Razões de estar fazendo esse treinamento;
• Expectativas desse curso.


 @regismelo                                          6
Java Básico – Módulo 1
                                          Java Web




             Livros sugeridos




@regismelo                                       7
Java Básico – Módulo 1
                                   Java Web




             Módulo I



             Iniciando




@regismelo                                8
Java Básico – Módulo 1
                                 Java Web




 "People only see what they
    are prepared to see."

              Ralph Waldo Emerson


@regismelo                              9
Java Básico – Módulo 1
                                                Java Web




                   Iniciando

• Nesse curso, abordaremos uma série de
  tecnologias do J2EE – Java 2 Enterprise Edition;


• Iremos nos focar nos assuntos relacionados ao
  desenvolvimento para web.




 @regismelo                                           10
Java Básico – Módulo 1
                                           Java Web




             Plataforma J2SE e J2EE




@regismelo                                       11
Java Básico – Módulo 1
                                                      Java Web




Breve histórico do desenvolvimento Web
• No início as páginas eram apenas institucionais;


• Não havia necessidade de dinamismo;


• Serviços não eram oferecidos nas páginas;


• Tecnologias utilizadas  HTML e eventualmente Applets.




  @regismelo                                                12
Java Básico – Módulo 1
                                     Java Web




Página da Sefaz, em Dezembro de 1998




@regismelo                                 13
Java Básico – Módulo 1
                                               Java Web




Breve histórico do desenvolvimento Web

• Com o passar do tempo, percebeu-se a
  necessidade de interação;

• O problema era como tornar as página dinâmicas;


• Diversas tecnologias surgiram com esse fim.




 @regismelo                                          14
Java Básico – Módulo 1
                                                      Java Web




Breve histórico do desenvolvimento Web

Tecnologias para desenvolvimento web
• CGI – Common Gateway Interface
   – Surgiu em meados de 1996;
   – Na época era uma das única soluções para criação de
     web sites dinâmicos;
   – Em 1996, existiam cerca de 100.000 web sites e o
     browser mais utilizado era o Netscape Navigator 2.0 (o
     primeiro browser a suportar JavaScript – outra
     tecnologia para tornar páginas dinâmicas)
 @regismelo                                                 15
Java Básico – Módulo 1
                                                 Java Web




Breve histórico do desenvolvimento Web

• CGI – Common Gateway Interface




                       Um programa CGI pode
                        ser implementado em
                         diversas linguagens


 @regismelo                                            16
Java Básico – Módulo 1
                                      Java Web




Breve histórico do desenvolvimento Web

• CGI – Ciclo de Vida




 @regismelo                                 17
Java Básico – Módulo 1
                                                     Java Web




Breve histórico do desenvolvimento Web

Tecnologias para desenvolvimento web
• CGI – Common Gateway Interface
   – A escalabilidade é um dos principais problemas de
     aplicações CGI;
   – Para cada cliente, um novo processo é executado;
   – Se você tem um cliente, você tem um “executável”
     rodando;
   – Se você tem 1.000.000 de clientes…

 @regismelo                                                18
Java Básico – Módulo 1
                                                         Java Web




               Hello World em CGI/Perl

#!/usr/local/bin/perl
# simple Hello World script
print "Content-type: text/plainnn";
print 'Hello World!';




                              Toda a produção da página fica
                               dentro de um programa que
                                  roda do lado servidor.




  @regismelo                                                   19
Java Básico – Módulo 1
                                                         Java Web




Breve histórico do desenvolvimento Web

Tecnologias para desenvolvimento web
• ASP – Active Server Pages
   – Tecnologia bastante madura para o desenvolvimento
     de página dinâmicas;
   – É uma tecnologia desenvolvida pela Microsoft (não é
     multi-plataforma);
   – Excelentes ferramentas de desenvolvimento;
   – Diferente do CGI, é bastante escalável.

 @regismelo                                                    20
Java Básico – Módulo 1
                                                         Java Web




               Hello World em ASP
<%
Dim I
%>                                 Código é embutido dentro
                                        da página HTML.
<%                              <% e %> delimitam o código que
For I = 1 To 5 Step 1             será processado no servidor
%>
   <FONT SIZE="<%= I %>">Hello World</FONT><BR>
<%
Next
%>




  @regismelo                                                     21
Java Básico – Módulo 1
                                             Java Web




              Hello World em ASP

Hello World
Hello World
Hello World
Hello World
Hello World


@regismelo                                         22
Java Básico – Módulo 1
                                                 Java Web




Breve histórico do desenvolvimento Web

Tecnologias para desenvolvimento web
• PHP
   – Linguagem de programação Server Side, HTML
     embedded;
   – Em teoria, similar ao ASP.




 @regismelo                                            23
Java Básico – Módulo 1
                                            Java Web




             Hello World em PHP

<HTML>
<HEAD></HEAD>
<BODY>
This is in Html<BR>
<?php echo “Hello World<BR>"; ?>
</BODY>
</HTML>


@regismelo                                        24
Java Básico – Módulo 1
                                              Java Web




Breve histórico do desenvolvimento Web


   “As tecnologias Java para web surgiram para
      resolver os problemas de escalabilidade,
          facilidade de uso e portabilidade.”




 @regismelo                                         25
Java Básico – Módulo 1
                                              Java Web




             Página da Sefaz, Junho/2004




@regismelo                                          26
Java Básico – Módulo 1
                                        Java Web




                  Módulo II



             Applets - Conceitos




@regismelo                                    27
Java Básico – Módulo 1
                                                Java Web




   Tecnologias Java para Web - Applets

• Os applets surgiram em meados de 1996;
• Applets = primeira tecnologia Java voltada para
  web;
• Foram amplamente utilizadas para dar
  dinamismo as páginas;
• As páginas HTML eram estáticas – o dinamismo
  era resolvido utilizando applets;
• Código Java, executado do lado cliente.
 @regismelo                                           28
Java Básico – Módulo 1
                                   Java Web



               Applets



Exemplo de
uma applet




  @regismelo                             29
Java Básico – Módulo 1
                                                   Java Web




                      Applets

• Algumas aplicações que necessitam de
  interatividade intensiva, utilizam applets.




 @regismelo                                              30
Java Básico – Módulo 1
                                                       Java Web




                      Applets - Exemplo
Biblioteca gráfica                            Classe que deve
para “desenhar”                              ser extendida para
                                               criar uma nova
                                                    applet
import java.applet.Applet;
import java.awt.Graphics;
class HelloWorld extends Applet{
  public void paint(Graphics g){
          g.drawString(“Hello World!”, 160, 70);
    }    Método especial da applet chamado
}         pelo browser para “desenhar” o
                 conteúdo da applet

    @regismelo                                               31
Java Básico – Módulo 1
                                                          Java Web


               Applets – Exemplo
        A página HTML que utiliza a applet


<html>
<body>
<h1> O Applet Hello World” </h1>
<applet code = “HelloWorld.class” width = 400 height = 100>
</applet>
</body>                     Tag HTML utilizada para
</html>                       referenciar a applet


   @regismelo                                                   32
Java Básico – Módulo 1
                                           Java Web




             Applets – Exemplo




@regismelo                                       33
Java Básico – Módulo 1
                                                Java Web




              Applets - Problemas

• Código Java executado do lado cliente =
  necessidade de uma JVM no lado cliente;
• Os browsers passaram a incorporar JVMs;
• Atualização de versão das applets é feita de
  forma automática, porém...
• Necessidade de constante atualização das
  JVMs.


 @regismelo                                           34
Java Básico – Módulo 1
                                               Java Web




              Applets - Problemas

• Para complicar, recentemente a instalação
  padrão dos principais browsers deixou de vir com
  suporte a JVMs;
• As applets caíram em desuso...




 @regismelo                                          35
Java Básico – Módulo 1
                                                                  Java Web




                                 Para saber mais

Core Servlets and JSP Pages (CSAJSP-Chapter1.pdf)
1.1 Servlets
1.2 The Advantages of Servlets Over "Traditional" CGI
      – Efficient
      – Convenient
      – Powerful
      – Portable
      – Secure
      – Inexpensive
1.3 JavaServer Pages
1.4 The Advantages of JSP
      – Versus Active Server Pages (ASP)
      – Versus PHP
      – Versus Pure Servlets
      – Versus Server-Side Includes (SSI)
      – Versus JavaScript
      – Versus Static HTML




   @regismelo                                                           36
Java Básico – Módulo 1
                                    Java Web




             Módulo III



Iniciando no mundo dos Servlets




@regismelo                                37
Java Básico – Módulo 1
                                              Java Web




              O que são Servlets?

• Sevlets são a resposta da tecnologia Java a
  programação CGI(Common Gateway Interface);

• Eles são programas que rodam em um servidor
  Web, agindo como uma camada intermediária
  entre uma requisição feita por um browser, ou
  outro cliente (em geral HTTP), com outras
  aplicações e banco de dados.


 @regismelo                                         38
Java Básico – Módulo 1
                                             Java Web




             O que são Servlets?




@regismelo                                         39
Java Básico – Módulo 1
                                                     Java Web


             Hello World com Servlets
import java.io.*; import javax.servlet.*;
import javax.servlet.http.*;
public class HelloWorld extends HttpServlet
{
  public void doGet ( HttpServletRequest       request,
                      HttpServletResponse response )
       throws ServletException, IOException
  {
       PrintWriter out;
       response.setContentType("text/html");
       out = response.getWriter();
       out.println( “Hello World!” );
       out.close();
  }
}
@regismelo                                                 40
Java Básico – Módulo 1
                                                    Java Web




               O que são Servlets?
• Servlets são multi-thread (não sofrem com problemas de
  escalabilidade como as aplicações CGI)




  @regismelo                                              41
Java Básico – Módulo 1
                                                Java Web




                Servlets x CGI
• Eficientes
   – Em CGI cada requisição gera um novo
     processo no servidor. A JVM cria threads de
     execução para cada requisição;


• Convenientes
   – Servlets já possuem todas as ferramentas
     para tratar documentos HTML, Cabeçalhos
     HTTP, Cookies, Gerenciamento de sessão etc.

 @regismelo                                           42
Java Básico – Módulo 1
                                                Java Web




                Servlets x CGI
• Poderosos

   – Servlets podem “falar” diretamente com o
     servidor Web (programas CGI precisam de
     uma API específica para cada servidor);

   – Servlets podem compartilhar dados facilitando
     a implementação de recursos compartilhados
     como pool conexões com o BD etc;

 @regismelo                                           43
Java Básico – Módulo 1
                                                Java Web




                Servlets x CGI
• Poderosos

   – Servlets podem manter dados entre as
     requisições, facilitando os mecanismos de
     gerenciamento de sessão etc.




 @regismelo                                           44
Java Básico – Módulo 1
                                                Java Web




                 Servlets x CGI
• Portáveis
   – Feitos em Java e implementam um API
     padrão;
• Seguros
   – CGI são executados como scripts shell do
     sistema;
• Baratos
   – Existem servidores bons e gratuitos.


 @regismelo                                           45
Java Básico – Módulo 1
                                                                    Java Web


                 Entendendo o Hello World
     Classes do pacote java.io
      utilizadas para produzir                Pacote com implementação das
          a saída do servlet                   interfaces e classes de Servlet

import java.io.*;
import javax.servlet.*;                        Implementação de Servlet
import javax.servlet.http.*;                   para funcionar com HTTP


public class HelloWorld extends HttpServlet
{
   ....
}


                 Servlets HTTP devem herdar
                         dessa classe


    @regismelo                                                              46
Java Básico – Módulo 1
                                                                 Java Web


                Entendendo o Hello World
                                             Método chamado quando
                                           um usuário faz uma requisição

 public void doGet ( HttpServletRequest request,
                    HttpServletResponse response )
     throws ServletException, IOException
{
     ...
}
Exceção geral disparada quando
 o servlet tem algum problema
                                            Encapsula os dados relativos a
                                           requisição (request) e o resultado
                Exceção disparada quando
                                             que será produzido (response)
                 problemas na produção
                   da página acontecem

   @regismelo                                                           47
Java Básico – Módulo 1
                                                                      Java Web


                 Entendendo o Hello World

     Representa a saída                        Informa o tipo de conteúdo
(a página que será produzida)                      que será produzido

                            {

                                PrintWriter out;
                                response.setContentType("text/html");
                                out = response.getWriter();
                                out.println( “Hello World!” );
                                out.close();
Produz o resultado
                            }

                 Finaliza o processo de geração da página

    @regismelo                                                              48
Java Básico – Módulo 1
                                                     Java Web


             Entendendo o HelloWorld
import java.io.*; import javax.servlet.*;
import javax.servlet.http.*;
public class HelloWorld extends HttpServlet
{
  public void doGet ( HttpServletRequest       request,
                      HttpServletResponse response )
       throws ServletException, IOException
  {
       PrintWriter out;
       response.setContentType("text/html");
       out = response.getWriter();
       out.println( “Hello World!” );
       out.close();
  }
}
@regismelo                                                 49
Java Básico – Módulo 1
                                                Java Web




              Como rodar Servlets?
• Para rodar Servlets é necessário instalar um
  servidor web que implemente a especificação de
  Servlets;

• Pelo fato de Servlet ser uma especificação, e não
  uma implementação, o código escrito em um
  servidor de um fornecedor deverá funcionar sem
  alterações em outro servidor de outro fornecedor.



 @regismelo                                           50
Java Básico – Módulo 1
                                               Java Web




              Como rodar Servlets?

• A especificação da API de Servlets está
  atualmente na versão 2.4;

• Existem dezenas de fornecedores e projetos
  open source que disponibilizam servidores
  compatíveis com a especificação de Servlets;

• O software servidor é conhecido como container.

 @regismelo                                          51
Java Básico – Módulo 1
                                                             Java Web




                          Containers
Alguns containers disponíveis:
              SUN Microsystems
              Atualmente conhecido como SUN One

              A solução IBM é conhecida como WebSphere

              BEA WebLogic
              Líder do mercado em soluções pagas

              JRUN – Solução da Macromedia
              Boa integração com seus produtos

              Borland Application Server


 @regismelo                                                        52
Java Básico – Módulo 1
                                              Java Web




                 Containers
Utilizaremos nesse treinamento o Jakarta TomCat




 @regismelo                                         53
Java Básico – Módulo 1
                                                 Java Web




                     TomCat

• O TomCat é um servidor open source;
• Fruto do projeto Jakarta, sub-projeto do projeto
  Apache;
• O projeto Jakarta constrói aplicativos open
  source para java;
• É a atual “reference implementation” da API
  Servlets e JSP;
• Bastante utilizado e robusto.

 @regismelo                                            54
Java Básico – Módulo 1
                                                Java Web




                    TomCat
• O TomCat pode ser obtido no site
  http://jakarta.apache.org/tomcat;

• A versão que utilizaremos nesse treinamento é o
  TomCat 4.1.24, que suporta a especificação 2.3
  da API Servlet (e JSP 1.2 que abordaremos mais
  a frente);

• O arquivo disponível para instalação é o
  tomcat-4.1.24-LE-jdk14.exe.
 @regismelo                                           55
Java Básico – Módulo 1
                                              Java Web




              Instalando o TomCat
• Opções da instalação:

                                        TomCat rodará
                                       como um serviço
                                       (use somente em
                                        um ambiente de
                                          produção)




 @regismelo                                         56
Java Básico – Módulo 1
                                              Java Web




              Instalando o TomCat
• Ao final da instalação:

                                      Porta que o TomCat
                                       ficará escutando


                                        Usuário/senha
                                         utilizado para
                                          Administrar
                                           o TomCat




 @regismelo                                         57
Java Básico – Módulo 1
                                                Java Web




              Instalando o TomCat

• Depois da instalação concluída, você pode iniciar
  o servidor;
• Para isso, utilize o ícone “Start TomCat”;
• Ou carregue-o digitando o comando
  <tomcat>/bin/startup.bat ou
  <tomcat>/bin/startup.sh (linux/unix);
• O TomCat é feito em Java, por isso, o mesmo
  código roda em qualquer S.O. que tenha uma
  JVM.
 @regismelo                                           58
Java Básico – Módulo 1
                                        Java Web




             TomCat rodando




@regismelo                                    59
Java Básico – Módulo 1
                                               Java Web




              TomCat rodando

• Para verificar se o TomCat está rodando
  corretamente, digite no seu browser:

   http://localhost:8080




                                   Porta selecionada
                                     na instalação

 @regismelo                                            60
Java Básico – Módulo 1
                                        Java Web




             TomCat rodando




@regismelo                                    61
Java Básico – Módulo 1
                                              Java Web




              Configurando uma Aplicação

• Vamos agora configurar uma aplicação que irá
  rodar no TomCat;
• As aplicações no TomCat, ficam em geral no
  diretório <tomcat>/webapps;
• Vamos criar um diretório chamado curso debaixo
  dessa pasta:

   <tomcat>/webapps/curso

 @regismelo                                         62
Java Básico – Módulo 1
                                                Java Web




              Configurando uma Aplicação

• Essa pasta conterá nosso site;
• A API de Servlets, a partir da versão 2.2, prevê
  uma estrutura padrão de diretórios das
  aplicações web;
• Isso significa que da sua aplicação web, bem
  como seus arquivos de configuração se
  comportarão da mesma forma independente do
  produto que você esteja utilizado.

 @regismelo                                           63
Java Básico – Módulo 1
                                                     Java Web




              Configurando uma Aplicação

• Document Root
   É a pasta raiz da sua aplicação web. Nela, colocaremos
   nossos arquivos HTML, JSP, etc.


• WEB-INF
   Pasta padrão que conterá informações de configuração
   do seu site e suas classes (veja mais a frente).



 @regismelo                                                64
Java Básico – Módulo 1
                                                       Java Web




              Configurando uma Aplicação

• WEB-INF/web.xml
   Arquivo XML que descreve os servlets e outros
   componentes de sua aplicação.


• WEB-INF/classes
   Contém as classes Java (e recursos associados)
   requeridos por sua aplicação
   (o nosso HelloWorld.class ficará nesse diretório).


 @regismelo                                                  65
Java Básico – Módulo 1
                                                    Java Web




              Configurando uma Aplicação

• WEB-INF/lib
   Contém arquivos JAR requeridos por sua aplicação
   (como por exemplo, drivers JDBC).




 @regismelo                                               66
Java Básico – Módulo 1
                                                Java Web




             Nossa estrutura de diretório


                                    Nossa aplicação




                                    Nossos servlets
                                      ficarão aqui




@regismelo                                            67
Java Básico – Módulo 1
                                                  Java Web




              Configurando uma Aplicação

• Após a estrutura de diretórios ter sido criada,
  podemos compilar nossa classe HelloWorld;

• Podemos compilar essa classes usando nosso
  compilador favorito (Javac, Jikes ou a sua IDE).




 @regismelo                                             68
Java Básico – Módulo 1
                                                      Java Web




              Configurando uma Aplicação

• IMPORTANTE:

   Para compilar nossos servlets é necessário ter o arquivo
   servlet.jar no nosso classpath.

   Ele está disponível em <tomcat>/common/lib




 @regismelo                                                 69
Java Básico – Módulo 1
                                              Java Web




              Configurando uma Aplicação

• Após compilado o arquivo, devemos copiar o nosso
  HelloWorld.class para o diretório:

  <tomcat>/webapps/curso/WEB-INF/classes




 @regismelo                                         70
Java Básico – Módulo 1
                                                Java Web




               Configurando uma Aplicação

• Antes de testar nossa aplicação precisamos
  configurar o TomCat para carregar nossos Servlets;
• Essa configuração será feita no arquivo
  <tomcat>/conf/web.xml;
• Precisamos apenas dizer que o TomCat irá
  carregar os servlets a partir de um determinada
  URL padrão.



  @regismelo                                          71
Java Básico – Módulo 1
                                                Java Web




               Configurando uma Aplicação
• Procure a entrada abaixo no arquivo <tomcat>/conf/
  web.xml




                                       Perceba que essa
                                         entrada está
                                          comentada



  @regismelo                                          72
Java Básico – Módulo 1
                                                     Java Web




                Configurando uma Aplicação
 <servlet-mapping>
   <servlet-name>invoker</servlet-name>
   <url-pattern>/servlet/*</url-pattern>
 </servlet-mapping>



• Essa entrada diz que sempre que o usuário digitar...

  http://<servidor>:<porta>/<app>/servlet/<nomeServlet>


  O TomCat tentará carregar uma classe com o nome
  <nomeServlet> que herda de HttpServlet.
   @regismelo                                              73
Java Básico – Módulo 1
                                                 Java Web




               Configurando uma Aplicação
• Essa linha, originalmente está comentada por
  questões de segurança;
• Devemos retirar o comentário dessa linha para nosso
  servlet funcionar:




  @regismelo                                           74
Java Básico – Módulo 1
                                                     Java Web


             Relembrando o HelloWorld
import java.io.*; import javax.servlet.*;
import javax.servlet.http.*;
public class HelloWorld extends HttpServlet
{
  public void doGet ( HttpServletRequest       request,
                      HttpServletResponse response )
       throws ServletException, IOException
  {
       PrintWriter out;
       response.setContentType("text/html");
       out = response.getWriter();
       out.println( “Hello World!” );
       out.close();
  }
}
@regismelo                                                 75
Java Básico – Módulo 1
                                                       Java Web




                       Exercício
• Primeiro, instalar e configurar o TomCat;
• Iniciar o TomCat;
• Digitar o código do slide anterior e salvá-lo em um arquivo
  chamado HelloWorld.java;
• Compilar o código e copiar o .class para
  <tomcat>/webapps/curso/WEB-INF/classes;
• Verificar se o HelloWorld funciona digitando no browser:

    http://localhost:8080/curso/servlet/HelloWorld


                                                     45 minutos

  @regismelo                                                  76
Java Básico – Módulo 1
                                                                               Java Web




                                  Para saber mais
Core Servlets and JSP Pages (CSAJSP-Chapter1.pdf)
1.5 Installation and Setup
       – Obtain Servlet and JSP Software
       – Bookmark or Install the Servlet and JSP API Documentation
       – Identify the Classes to the Java Compiler
       – Package the Classes
       – Configure the Server
       – Start the Server
       – Compile and Install Your Servlets


Core Servlets and JSP Pages (CSAJSP-Chapter2.pdf)
2.1 Basic Servlet Structure
2.2 A Simple Servlet Generating Plain Text
      Compiling and Installing the Servlet
      Invoking the Servlet
2.3 A Servlet That Generates HTML
2.4 Packaging Servlets
      Creating Servlets in Packages
      Compiling Servlets in Packages
      Invoking Servlets in Packages

   @regismelo                                                                        77
Java Básico – Módulo 1
                                   Java Web




             Módulo IV



     Revisão do protocolo HTTP




@regismelo                               78
Java Básico – Módulo 1
                                                  Java Web




               Revisão do protocolo HTTP
• A web que conhecemos hoje funciona com o
  protocolo HTTP, que significa Hyper Text Transfer
  Protocol;

• HTTP é um protocolo, bastante simples, de
  transferência de dados;

• É um padrão, definido pela W3C
  (http 1.1  RFC 2616)


  @regismelo                                            79
Java Básico – Módulo 1
                                             Java Web




             Revisão do protocolo HTTP




@regismelo                                         80
Java Básico – Módulo 1
                                                Java Web




               Revisão do protocolo HTTP

• HTTP é um protocolo stateless, ou seja, não mantém
  estado;

• Cada requisição estabelece uma conexão com o
  servidor, recebe os dados e fecha a conexão.




  @regismelo                                          81
Java Básico – Módulo 1
                                                  Java Web




               HTTP - Requisição

• Quando um cliente faz uma requisição, ele especifica
  um comando, chamado método, que especifica o tipo
  de ação que ele quer efetuar;

• A primeira linha da requisição também especifica a
  URL e a versão do protocolo:

  GET /index.jsp HTTP/1.0


  @regismelo                                            82
Java Básico – Módulo 1
                                                   Java Web




                HTTP - Requisição

• Após enviado o comando, o cliente pode enviar
  informações adicionais (tipo do browser, versão, etc):

   GET /index.jsp HTTP/1.0
   User-Agent: Mozilla/4.0 (compatible; MSIE 4.0;
     Windows 95)
   Accept: image/gif, image/jpeg, text/*, */*




   @regismelo                                            83
Java Básico – Módulo 1
                                                Java Web




               HTTP - Requisição

• A requisição também pode ser feita com um método
  POST

  POST /index.jsp HTTP/1.0
  User-Agent: Mozilla/4.0 (compatible; MSIE 4.0;
    Windows 95)
  Accept: image/gif, image/jpeg, text/*, */*




  @regismelo                                          84
Java Básico – Módulo 1
                                                 Java Web




               HTTP - Requisição
Qual a diferença entre o método GET e o POST?

• GET, envia dados através da URI (tamanho limitado)

       <uri>?dados


• Um exemplo de um site que usa GET para enviar
  informações:

     http://www.google.com/search?q=cejug

  @regismelo                                           85
Java Básico – Módulo 1
                                                  Java Web




               HTTP - Requisição
Qual a diferença entre o método GET e o POST?

• POST envia os dados para o servidor como um fluxo
  de bytes – dados não aparecem na URL;

• Útil para grandes formulários a informação não deve
  ser exibida na URL (senhas, por exemplo);

• Desvantagem – usuário não pode fazer bookmarks
  da URL.
  @regismelo                                            86
Java Básico – Módulo 1
                                                  Java Web




                HTTP - Resposta

• Feita uma requisição, o servidor envia uma resposta;

• A primeira linha da resposta indica um código de
  status e sua descrição

  HTTP/1.0 200 OK




   @regismelo                                           87
Java Básico – Módulo 1
                                                      Java Web




                  HTTP - Resposta
Alguns códigos HTTP:

•   200  Código default, sucesso;
•   400  Erro de sintaxe na requisição;
•   404  Recurso não existe no servidor;
•   405  Método não permitido.

Para consultar a lista completa, acesse:
  http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

    @regismelo                                              88
Java Básico – Módulo 1
                                                   Java Web




                 HTTP - Resposta

• Após a linha de status, o servidor envia os
  cabeçalhos de resposta:

      Date: Saturday, 23-May-00 03:25:12 GMT
      Server: Tomcat Web Server/3.2
      MIME-version: 1.0
      Content-type: text/html
      Content-length: 1029
      Last-modified: Thursday, 7-May-00 12:15:35 GMT


   @regismelo                                            89
Java Básico – Módulo 1
                                          Java Web




             HTTP – Resumindo




@regismelo                                      90
Java Básico – Módulo 1
                                                   Java Web




                    TCP Monitor

• Uma boa forma de entender o protocolo HTTP é vê-lo
  funcionando;

• O programa TCP Monitor exibe as requisições feitas
  pelos clientes e a resposta feita por um servidor;

• O TCP Monitor é um utilitário, parte do projeto AXIS,
  do projeto Jakarta, e pode ser baixado em
  http://ws.apache.org/axis/
   @regismelo                                            91
Java Básico – Módulo 1
                                                    Java Web




               Configurando o TCP Monitor

• Primeiro passo – carregar o programa:
  java -cp axis.jar org.apache.axis.utils.tcpmon




  @regismelo                                              92
Java Básico – Módulo 1
                                                Java Web




               Configurando o TCP Monitor
Segundo passo – configurar
                                     Porta que será criada
                                      na nossa máquina




                                      O host para qual a
                                       requisição será
                                         direcionada

                                     Clique em adicionar
                                     depois de configurar

  @regismelo                                           93
Java Básico – Módulo 1
                                                Java Web




               Configurando o TCP Monitor

Terceiro passo – faça uma requisição normalmente do
seu browser para a porta configurada:



  http://localhost:88




  @regismelo                                          94
Java Básico – Módulo 1
                                                  Java Web




               Configurando o TCP Monitor
E finalmente, veja os detalhes da requisição HTTP:




  @regismelo                                            95
Java Básico – Módulo 1
                                                     Java Web




                      Exercício


• Faça uma requisição ao seu próprio servidor e veja
  informações sobre a requisição;

• Faça requisições a outros sites usando o TCP Monitor e
  descubra detalhes sobre alguns servidores.




  @regismelo                                               96
Java Básico – Módulo 1
                                   Java Web




              Módulo V



      Trabalhando com dados de
              formulários




@regismelo                               97
Java Básico – Módulo 1
                                                Java Web




               Dados vindos de formulários

• Conforme vimos na nossa revisão de HTTP, dados
  podem ser postados utilizando os método GET e
  POST;

• Iremos aprender nesse módulo como “capturar”
  esses dados nos nossos servlets.




  @regismelo                                          98
Java Básico – Módulo 1
                                                Java Web




   Relembrando HTML e Formulários…
             Para onde o formulário   Como o formulário
                 será submetido         será submetido



  <html>
    <form action="meuServlet" method=“get">
     <input name="nome" type="text"
      value="Digite seu nome aqui!" size="40"
      maxlength="40">
    </form>
  </html>


@regismelo                                            99
Java Básico – Módulo 1
                                                   Java Web




                Dados vindos de formulários

• No exemplo anterior, o formulário irá postar os dados
  para uma URL, no mesmo servidor, chamada
  meuServlet;

• Precisamos criar um servlet para receber os dados
  desse formulário

• Já sabemos criar um servlet, mas como receber os
  parâmetros passados?
   @regismelo                                           100
Java Básico – Módulo 1
                                                    Java Web


             Relembrando o HelloWorld
import java.io.*; import javax.servlet.*;
import javax.servlet.http.*;
public class HelloWorld extends HttpServlet
{
  public void doGet ( HttpServletRequest        request,
                      HttpServletResponse response )
       throws ServletException, IOException
  {
       PrintWriter out;
       response.setContentType("text/html");
       out = response.getWriter();
       out.println( “Hello World!” );
       out.close();
  }
}
@regismelo                                               101
Java Básico – Módulo 1
                                                 Java Web




          A Interface HttpServletRequest

• A instância de HttpServletRequest passada como
  parâmetro para o método doGet encapsula os dados
  vindos da requisição;

• Através dela poderemos saber todos os dados
  relativos a requisição;

• A interface HttpServletRequest herda de
  ServletRequest.
  @regismelo                                          102
Java Básico – Módulo 1
                                                      Java Web




               A Interface ServletRequest
Principais métodos:
• getParameter( String name ) 
  - Retorna o valor relativo a um determinado parâmetro
    passado;
  - Esse parâmetro pode ser um dado de um formulário
    submetido ou um dado passado na URL;
  - O retorno de getParameter sempre é String!
  - Cuidado  O nome do parâmetro é sensitive case.
  - Cuidado  Se o parâmetro não existir na requisição,
    getParameter retorna null.

  @regismelo                                               103
Java Básico – Módulo 1
                                                      Java Web




               …A Interface ServletRequest
Principais métodos:
• getParameterValues( String name ) 
  - Retorna os valores relativos a um determinado parâmetro
    passado;
  - Use esse método quando um dado de um formulário tiver
    mais de um valor (um “select”, por exemplo)
  - O retorno de getParameterValues é um array de Strings.

  - Cuidado  O nome do parâmetro é sensitive case.
  - Cuidado  Se o parâmetro não existir na requisição,
    getParameterValues retorna null.
  @regismelo                                               104
Java Básico – Módulo 1
                                                     Java Web




               …A Interface ServletRequest
Principais métodos:
• java.util.Map getParameterMap() 

  - Retornar todos os parâmetros passados na requisição, no
    formato de um Map.




  @regismelo                                              105
Java Básico – Módulo 1
                                                    Java Web




               …A Interface ServletRequest

Principais métodos:
• getMethod() 
  - Retorna o método utilizado para submeter os dados
    (GET, POST ou PUT).
• getQueryString() 
  - Retorna a query postada (URL).
• getParameterNames() 
  - Retorna um Enumeration de Strings contendo o nome de
    todos os parâmetros passados na requisição.

  @regismelo                                             106
Java Básico – Módulo 1
                                                Java Web




             Construindo um formulário
<html>
<form action="./servlet/Formulario" method="get">
  <p> <input name="nome" type="text" value="Digite
  seu nome aqui!" size="40" maxlength="40"> </p>
  <p>Interesses:</p>
  <SELECT NAME=“preferencias" MULTIPLE>
   <OPTION VALUE=“1"> Musica </OPTION>
  <OPTION VALUE=“2"> Computadores </OPTION>
  <OPTION VALUE=“3"> Ocio </OPTION>
  </SELECT>
  <p> <input type="submit" name="Submit"
  value="Submit"> </p>
</form>
</html>
@regismelo                                           107
Java Básico – Módulo 1
                                                              Java Web
                    Servlet Formulario
public class Formulario extends HttpServlet
{    public void doGet ( HttpServletRequest request,
                         HttpServletResponse response
           ) throws ServletException, IOException {
           PrintWriter     out;
           response.setContentType("text/html");
           out = response.getWriter();
           out.println("<HTML><HEAD><TITLE></TITLE>");
           String nome = request.getParameter("nome");
           out.println( "Nome --> " + nome + "<p>");
           String[] dados = request.getParameterValues(“preferencias");
           if ( dados == null )
                   out.println( "Dados é null." );
           else
                   for( int i=0; i < dados.length; i++ )
                           out.println( dados[i] );
  }
}


    @regismelo                                                     108
Java Básico – Módulo 1
                                                Java Web




               Entendedo o exemplo
• Os dados do formulário são submetidos via GET;

• Isso significa que também podemos disparar o
  servlet fazendo uma requisição na URL do tipo:

http://localhost:8080/curso/servlet/Formulario
  ?nome=blabla&preferencias=1&
  preferencias=2



  @regismelo                                         109
Java Básico – Módulo 1
                                                Java Web




               Alterando o exemplo
• Vamos alterar o exemplo anterior para que ele
  exiba todos os parâmetros passados;

• Vamos utilizar o método getParameterNames para
  descobrir quais parâmetros foram passados para o
  formulário;

• E o getParameterValues para obter os valores da
  requisição.
  @regismelo                                         110
Java Básico – Módulo 1
                                                                Java Web
                     Servlet Formulario2
public class Formulario2 extends HttpServlet
{   public void doGet ( HttpServletRequest request, HttpServletResponse
response )    throws IOException
     {
     PrintWriter     out;
     response.setContentType("text/html");
     out = response.getWriter();
     Enumeration paramNames = request.getParameterNames();
     while(paramNames.hasMoreElements())
     {
        String paramName = (String)paramNames.nextElement();
        out.println( "<p><b> " + paramName + "</b><p>");

         String[] paramValues = request.getParameterValues(paramName);
          for( int i=0; i < paramValues.length; ++i )
          {
             out.print( "--> " + paramValues[i]);
          }
     }
}
     @regismelo                                                      111
Java Básico – Módulo 1
                                                Java Web




               Suportando Post
• Para fazer com que o servlet suporte GET,
  implementamos o método doGet;

• Para fazer com que o servlet suporte POST,
  devemos implementar o método doPost.

 public void doPost( HttpServletRequest
  request,
                     HttpServletResponse response
                    )
  @regismelo                                         112
Java Básico – Módulo 1
                                                  Java Web




                Suportando Post
• Normalmente, é interessante suportar tanto get
  quanto post;

• Para isso, é só implementar os dois métodos

public void doPost( HttpServletRequest request,
                      HttpServletResponse response
               ) { ... }
public void doGet ( HttpServletRequest request,
                      HttpServletResponse response
               ) { ... }
  @regismelo                                           113
Java Básico – Módulo 1
                                                        Java Web




                       Exercício


• Construa um servlet que recebe as requisições de um
  formulário e exiba no browser;

• Crie um servlet que mostre a lista de fatoriais
  entre 0 e 10;

• Altere o servlet fatorial de forma que ele receba o valor
  máximo do fatorial a ser calculado e exiba o resultado do
  cálculo em uma tabela HTML.

  @regismelo                                                 114
Java Básico – Módulo 1
                                                               Java Web




                        Para saber mais

Core Servlets and JSP Pages (CSAJSP-Chapter3.pdf)

3.1 The Role of Form Data
3.2 Reading Form Data from Servlets
3.3 Example: Reading Three Explicit Parameters
3.4 Example: Reading All Parameters
3.5 A Resume Posting Service
3.6 Filtering Strings for HTML-Specific Characters
     Code for Filtering
     Example




  @regismelo                                                        115
Java Básico – Módulo 1
                                   Java Web




             Módulo VI



Processamento e ciclo de vida de
          um Servlet




@regismelo                              116
Java Básico – Módulo 1
                                               Java Web




               Servlet = Multi-Thread
• Como já mencionamos, servlets são multi-thread;
• A mesma instância do servlet processa diversas
  requisições.




  @regismelo                                        117
Java Básico – Módulo 1
                                                  Java Web




               Servlet = Multi Thread
• Portanto, é importante programarmos os servlets de
  modo “thread safe”;

• Isso significa – nada de propriedades de instância
  sendo utilizadas!

• Cuidado com o acesso a recursos que podem ser
  danificados com o acesso multi-thread (arquivos,
  por exemplo).
  @regismelo                                           118
Java Básico – Módulo 1
                                                       Java Web
                 Servlet Não Thread Safe
public class Problema extends HttpServlet
{   public String nome;
    public void doGet ( HttpServletRequest request,
                      HttpServletResponse response )
    {
          nome = request.getParameter(“nome”);
          doSomething();
    }

    public void doSomething()
    {
          deletarCliente(nome);
                                     Nome é uma propriedade
    }                             Não thread safe, compartilhada
}                                 pela mesma Instância do servlet
                                          Problemas 

    @regismelo                                               119
Java Básico – Módulo 1
                                                       Java Web
                 Servlet Thread Safe
public class Solucao extends HttpServlet
{
    public void doGet ( HttpServletRequest request,
                      HttpServletResponse response )
    {
          String nome = request.getParameter(“nome”);
          doSomething(nome);
    }

    public void doSomething( String nome )
    {
          deletarCliente(nome);
    }
                                    Nome é uma variável local.
}                                  Sem problemas com threads!
                                               
    @regismelo                                              120
Java Básico – Módulo 1
                                                  Java Web




               Interface SingleThreadModel
• Você pode sinalizar ao container para serializar o
  acesso a um servlet;

• Basta fazer que seu servlet implemente a interface
  SingleThreadModel;

• O Container pode garantir isso tornando o acesso
  ao servlet synchronized ou criando um pool de
  servlets, despachando cada acesso a um novo
  servlet.
  @regismelo                                           121
Java Básico – Módulo 1
                                              Java Web




             Interface SingleThreadModel




@regismelo                                         122
Java Básico – Módulo 1
                                                 Java Web




               Interface SingleThreadModel

• Cuidado! O acesso serializado ao servlet diminui
  drasticamente a performance!!

• Use-o somente quando for extremamente
  necessário (acesso a um arquivo no disco, por
  exemplo).

• Na versão 2.4 da API de Servlets,
  SingleThreadModel está deprecated.
  @regismelo                                          123
Java Básico – Módulo 1
                                                     Java Web
                 SingleThreadModel

public class Solucao extends HttpServlet
    implements SingleThreadModel
{
    public void doGet ( HttpServletRequest request,
                         HttpServletResponse response )
    {
          doSomething();
    }
 }




    @regismelo                                            124
Java Básico – Módulo 1
                                               Java Web




             Ciclo de vida de um Servlet




@regismelo                                          125
Java Básico – Módulo 1
                                                             Java Web


             Ciclo de vida de um Servlet
• O ciclo de vida de um servlet é controlado pelo container;
• Quando o servidor recebe uma requisição, ela é repassada
  para o container que a delega a um servlet. O container:
         1 – Carrega a classe na memória;
         2 – Cria uma instância da classe do servlet;
         3 – Inicializa a instância chamando o método init()
• Depois que o servlet foi inicializado, cada requisição é
  executado em um método service()
         • O container cria um objeto de requisição (ServletRequest) e
           de resposta (ServletResponse) e depois chama service()
           passando os objetos como parâmetros;
         • Quando a resposta é enviada, os objetos são destruídos.
• Quando o container decidir remover o servlet da memória, ele
  o@regismelo chamando o método destroy()
    finaliza                                                     126
Java Básico – Módulo 1
                                                          Java Web


        Ciclo de vida de um Servlet – init()
• O método init() é disparado quando o servlet é carregado;

• Você deve sobrescrevê-lo quando necessitar inicializar o
  servlet de alguma forma;

• A sintaxe do método é:

   public void init(ServletConfig config)
     throws ServletException

                                        Sobrescreva esse
   public void init()
                                        método caso
     throws ServletException            necessite inicializar algo

   @regismelo                                                   127
Java Básico – Módulo 1
                                                        Java Web


        Ciclo de vida de um Servlet – init()
• Caso você tenha algum problema na inicialização do Servlet,
  você deverá disparar a exceção UnavailableException
  (subclasse de ServletException).

   ...
   public void init()
     throws ServletException
   {
     String dir = getInitParameter(“diretorio”);
     // Problemas ao ler configuracao?
     if ( dir == null )
       throw new UnavailableException(“Erro na
     configuracao!”)
   }
   @regismelo                                                128
Java Básico – Módulo 1
                                                        Java Web


   Ciclo de vida de um Servlet – service()

• O método service() é o método que irá disparar o doGet ou
  doPost.

• Ele é um método abstrato na sua declaração em
  GenericServlet. HttpServlet implementa esse método
  repassando a chamada para doGet ou doPost.




   @regismelo                                                129
Java Básico – Módulo 1
                                                Java Web


                Diagrama de classes

• Servlets não
  necessariamente
  estão ligados a
  aplicações web.
  Essa é a razão de
  existir a classe
  GenericServlet e a
  implementação
  HttpServlet




   @regismelo                                        130
Java Básico – Módulo 1
                                                            Java Web


   Ciclo de vida de um Servlet – destroy()

• O método destroy() é chamado pelo container antes do servlet
  ser destruído;

• O momento em quem o servlet será desativado é decidido pelo
  container;

• É a última oportunidade para “limpar a casa”.

   public void destroy()
   {
     ...
   }
   @regismelo                                                    131
Java Básico – Módulo 1
                                                         Java Web


           Processamento em Background

• Um servlet pode fazer mais que simplesmente servir clientes;

• Ele pode trabalhar entre os acessos;

• Essa é uma habilidade interessante para processos muito
  demorados;

• Um cliente pode, por exemplo, disparar um processo e
  eventualmente ficar consultando o resultado do
  processamento.


   @regismelo                                                 132
Java Básico – Módulo 1
                                                          Java Web


        …Processamento em Background

• Para exemplificar, vamos criar um servlet que calcule números
  primos;

• Para fazer com que o processamento demore bastante, vamos
  iniciar a busca por números primos a partir de 1.000.000 (hum
  milhão);

• Vamos utilizar um thread para ficar realizando o
  processamento em background.




   @regismelo                                                  133
Java Básico – Módulo 1
                                                    Java Web
                 ServletBackground
import java.io.*;           import java.util.*;
import javax.servlet.*;     import javax.servlet.http.*;
public class ServletBackground extends HttpServlet
implements Runnable
{

private long lastprime = 0; // Ultimo primo encontrado
Date lastprimeModified = new Date();
Thread searcher; // Thread para busca

public void init() throws ServletException {
    searcher = new Thread( this );
    searcher.setPriority( Thread.MIN_PRIORITY );
    searcher.start();
}
// ... Continua 
    @regismelo                                           134
Java Básico – Módulo 1
                                                          Java Web
                  ServletBackground
//  ... Continuação
public void run() {
    long candidate = 1000001L; // um milhao e um
    // Loop para buscar eternamente primos...
    while (!searcher.interrupted()) {
                if (isPrime(candidate)) {
                      lastprime = candidate;
                      lastprimeModified = new Date();
                }
                candidate += 2; // Nos. pares não são primos
                // Dormir por 200ms...
                try {
                      Thread.sleep(200);
                }
                catch (InterruptedException ignored) { }
    }
     @regismelo                                             135
}
Java Básico – Módulo 1
                                                         Java Web
                  ServletBackground
//  ... Continuação
private static boolean isPrime(long candidate) {
    long sqrt = (long) Math.sqrt(candidate);
    for (long i = 3; i <= sqrt; i += 2) {
                if (candidate % i == 0) return false;     }
    return true;
}
public void doGet(HttpServletRequest req,HttpServletResponse res)
    throws ServletException, IOException {
    res.setContentType("text/plain");
    PrintWriter out = res.getWriter();
    if (lastprime == 0) {
                out.println(“Procurando o 1o. primo...");
    }
    else {out.println(“O último primo encontrado foi " +
                       lastprime);
              out.println(" em " + lastprimeModified);
    }
     @regismelo                                             136
}
Java Básico – Módulo 1
                                                           Java Web
                  ServletBackground
//  ... Continuação
    public void destroy() {
           // Sinalizar para o thread parar...
           searcher.interrupt();
    }
}




    @regismelo                                                  137
Java Básico – Módulo 1
                                                        Java Web




                        Exercício


• Crie um servlet que exibe (usando System.out.println) os
  devidos eventos do ciclo de vida (init, service e destroy);

• Implementa o exemplo ServletBackground e observe-o
  funcionar.




  @regismelo                                                 138
Java Básico – Módulo 1
                                                        Java Web




                      Para saber mais

Core Servlets and JSP Pages (CSAJSP-Chapter2.pdf)

2.6 The Servlet Life Cycle
     – The init Method
     – The service Method
     – The doGet, doPost, and doXxx Methods
     – The SingleThreadModel Interface
     – The destroy Method




  @regismelo                                                 139
Java Básico – Módulo 1
                                       Java Web




                Módulo VII



         Obtendo informações do
                ambiente




@regismelo                                  140
Java Básico – Módulo 1
                                                        Java Web




                Obtendo informações
• Em alguns casos é bastante importante conhecer
  informações do ambiente cliente e servidor;

• Por exemplo, você pode decidir utilizar JavaScript ou não,
  dependendo da capacidade do browser que fez a
  requisição;

• Ou, até mesmo, exibir a página utilizando uma outra língua,
  dependo do cliente que fez a requisição.



   @regismelo                                                141
Java Básico – Módulo 1
                                                     Java Web




               Obtendo informações
Métodos interessantes ligados a HttpServletRequest:
• getLocale() 
  - Retorna o “Locale” associado ao cliente;
  - Locale é um objeto java, que dá informações relativas a
    localização;
  - As informações são extraídas a partir de Accept-
    Language. Se o cliente não prover esse cabeçalho HTTP,
    getLocale retorna o Locale default do servidor.




  @regismelo                                              142
Java Básico – Módulo 1
                                                              Java Web
                          Localizacao
public class Localizacao extends HttpServlet {
    public void doGet ( HttpServletRequest request,
                             HttpServletResponse response ) {
       PrintWriter out;
       response.setContentType("text/html");
       out = response.getWriter();
       out.println( "<p> getDisplayName            --> " +
                request.getLocale().getDisplayName() );
       out.println( "<p> getCountry                --> " +
                request.getLocale().getCountry() );
       out.println( "<p> getDisplayLanguage --> " +
                request.getLocale().getDisplayLanguage() );
       out.println( "<p> getISO3Country            --> " +
                request.getLocale().getISO3Country()    );
       out.println( "<p> getISO3Country            --> " +
                request.getLocale().getISO3Language()      );
       out.close();
    }
 }   @regismelo                                                    143
Java Básico – Módulo 1
                                               Java Web




             Rodando o exercício anterior




@regismelo                                          144
Java Básico – Módulo 1
                                                               Java Web




                 Obtendo informações
Dicas com relação ao Locale
• getISO3Country 
  - Retorna 3 bytes indicando o país;
  - Você pode obter a lista dos países em
     http://userpage.chemie.fu-berlin.de/diverse/doc/ISO_3166.html
  - Alguns países:

       - BRA – Brasil;
       - USA – Estados Unidos;
       - ARG – Argentina


  @regismelo                                                         145
Java Básico – Módulo 1
                                                                     Java Web




                  Obtendo informações
Dicas com relação ao Locale
• getISO3Language 
  - Retorna 3 bytes indicando a linguagem preferencial do
    cliente;

  - Você pode obter a lista das linguagens em
     http://ftp.ics.uci.edu/pub/ietf/http/related/iso639.txt

  - Algumas linguagens:
       - por – Português;
       - eng – Inglês.
  @regismelo                                                              146
Java Básico – Módulo 1
                                                       Java Web




               Obtendo informações
Métodos interessantes ligados a HttpServletRequest:
• String getHeader( String name ) 
  - Obtém o valor associado a um determinado header
• Enumeration getHeaderNames() 
  - Obtém o nome de todos os headers da requisição


- Headeres úteis:
  - user-agent – Indica o browser e o S.O. do cliente;
  - refer – Indica de onde o usuário veio (a URL).

  @regismelo                                                147
Java Básico – Módulo 1
                                                               Java Web
                              HttpHeader
public class HttpHeaderExemplo extends HttpServlet {
    public void doGet ( HttpServletRequest request,
                       HttpServletResponse response ) {
      PrintWriter out;
      response.setContentType("text/html");
      out = response.getWriter();
      Enumeration enum = request.getHeaderNames();

            String header;
            while( enum.hasMoreElements() ) {
                 header = (String)enum.nextElement();
                 out.println( "<p> " + header + " --> ");
                 out.println( request.getHeader( header ) );
    }
            out.close();
        }
}
        @regismelo                                                  148
Java Básico – Módulo 1
                                    Java Web
             HttpHeader




@regismelo                               149
Java Básico – Módulo 1
                                                      Java Web




               Obtendo informações
Métodos interessantes ligados a HttpServletRequest:
• String getRemoteAddr() 
  - Retorna o endereço IP do cliente que fez a requisição
• String getRemoteHost() 
  - Retorna o nome do cliente que fez a requisição.


- Com esses métodos você consegue saber quem
  acessa o seu site.


  @regismelo                                               150
Java Básico – Módulo 1
                                                           Java Web
                       HttpAddrExemplo
public class HttpAddrExemplo extends HttpServlet {
    public void doGet ( HttpServletRequest request,
                       HttpServletResponse response ) {
      PrintWriter out;
      response.setContentType("text/html");
      out = response.getWriter();

        out.println( "<p> getRemoteAddr --> " +
                          request.getRemoteAddr() );
        out.println( "<p> getRemoteHost --> " +
                          request.getRemoteHost() );

        out.close();
    }
}


    @regismelo                                                  151
Java Básico – Módulo 1
                                         Java Web
             HttpAddrExemplo




@regismelo                                    152
Java Básico – Módulo 1
                                                          Java Web




                         Exercício


• Construa um servlet que a partir da requisição do cliente
  exibe qual o browser está sendo utilizado e qual S.O.;
• Além disso, o servlet deverá exibir o IP do cliente;
• O Servlet deverá mostrar a frase:
    “The quick brown fox jumps over the lazy dog” ou
    “A rápida raposa castanha pula sobre o cachorro preguiçoso”
  Dependendo da língua preferida do usuário.

  Dica  Para mudar as configurações de língua, no Internet
  Explorer acesse o menu Tools/Internet Options/Languages.
  @regismelo                                                   153
Java Básico – Módulo 1
                                                                     Java Web




                         Para saber mais

Core Servlets and JSP Pages
CHAPTER 5 (CSAJSP-Chapter5.pdf)
   Accessing the Standard CGI Variables
   5.1 Servlet Equivalent of CGI Variables
   5.2 A Servlet That Shows the CGI Variables
CHAPTER 6 (CSAJSP-Chapter6.pdf)
   Generating the Server Response: HTTP Status Codes
   6.1 Specifying Status Codes
   6.2 HTTP 1.1 Status Codes and Their Purpose
   6.3 A Front End to Various Search Engines
CHAPTER 7(CSAJSP-Chapter7.pdf)
   Generating the Server Response: HTTP Response Headers
   7.1 Setting Response Headers from Servlets
   7.2 HTTP 1.1 Response Headers and Their Meaning
   7.3 Persistent Servlet State and Auto-Reloading Pages
   7.4 Using Persistent HTTP Connections
   7.5 Using Servlets to Generate GIF Images
@regismelo                                                                154
Java Básico – Módulo 1
                                     Java Web




             Módulo VIII



Controle de fluxo e colaboração




@regismelo                                155
Java Básico – Módulo 1
                                                        Java Web




                  Controle de Fluxo
• Utilizando técnicas de controle de fluxo você pode
  redirecionar uma requisição;

• Redirecionar, significa ir para uma outra página ou um outro
  servlet;

• Você pode, por exemplo, receber uma requisição gerada a
  partir de uma página estática, fazer um processamento, e
  desviar para uma página dinâmica.



   @regismelo                                                156
Java Básico – Módulo 1
                                                      Java Web




                 Controle de Fluxo
• A primeira maneira de redirecionar uma página é retornando
  para o browser um cabeçalho HTTP de forma que ele gere
  uma nova requisição para outra página;




   @regismelo                                              157
Java Básico – Módulo 1
                                                       Java Web




                 Controle de Fluxo
Método de HttpServletResponse

• void sendRedirect(String location) 
  - Retorna um status HTTP que força o cliente a fazer uma
    nova requisição a nova location.

  - OBS: Você só pode utilizar esse método antes do
    response ser enviado para o cliente, do contrário, o
    método disparará IllegalStateException.


  @regismelo                                                158
Java Básico – Módulo 1
                                                                Java Web
                       SendRedirectExemplo
public class SendRedirectExemplo extends HttpServlet {
    public void doGet ( HttpServletRequest request,
                       HttpServletResponse response ) {

                  // Faça alguma coisa aqui ...

    response.sendRedirect( “http://www.sagaranatech.com“ );

                  // Oops!Nesse ponto você não pode mais gerar conteúdo!
     }
}




     @regismelo                                                      159
Java Básico – Módulo 1
                                                        Java Web




            Desvantagens do sendRedirect
• O método sendRedirect retorna para o browser um código
  HTTP que faz com que ele faça outra requisição;

• Isso significa que para o redirecionamento acontecer, outra
  requisição é necessária;

• Essa é uma abordagem que pode ser lenta...




   @regismelo                                                160
Java Básico – Módulo 1
                                                        Java Web




                 Redirecionamento
• Existe uma outra forma de redirecionar, sem necessitar uma
  nova requisição;

• É mais rápido redirecionar dentro do próprio servidor (sem
  realizar uma nova requisição);

• Antes de ver como redirecionar, vamos aprender um pouco
  sobre “Servlet Collaboration”.




   @regismelo                                                161
Java Básico – Módulo 1
                                                       Java Web




                Servlet Collaboration
• Eventualmente é interessante se comunicar com outros
  servlets dentro do mesmo servidor;

• Damos a isso o nome de “colaboração”;

• O seu servlet, por exemplo, pode fazer algum
  processamento e transferir a responsabilidade de lidar com
  a requisição para outro servlet.




   @regismelo                                               162
Java Básico – Módulo 1
                                                        Java Web




                Servlet Collaboration
• Para suportar delegação, a API 2.1 de servlets inclue a
  interface javax.servlet.RequestDispatcher;

• Utilize o método

  public RequestDispatcher
  ServletRequest.getRequestDispatcher(String path)

• Dessa forma, você só pode redirecionar para recursos
  dentro do mesmo contexto.

   @regismelo                                                163
Java Básico – Módulo 1
                                                              Java Web




                         Contextos?
• Web Containers suportam a implantação de múltiplas
  aplicações web;
   – Definindo contextos separados para execução de servlets
• No TomCat, essas aplicações estão na pasta webapps/
• Todo diretório de contexto tem uma estrutura definida, que
  consiste de
   – Área de documentos do contexto (/), acessível externamente;
   – Área inacessível (/WEB-INF), que possui pelo menos um arquivo de
     configuração padrão (web.xml);
   – O WEB-INF pode conter ainda dois diretórios reconhecidos pelo
     servidor: o classpath da aplicação (WEB-INF/classes) e outro JARs
     para inclusão no classpath (/WEB-INF/lib).
   @regismelo                                                      164
Java Básico – Módulo 1
                                                       Java Web




                       Contextos
• Contextos isolam as aplicações web;

• A grande vantagem dos contextos é que uma aplicação não
  “quebra” outra aplicação;

• Tudo está isolado, inclusive as classes que estão na
  memória.




   @regismelo                                               165
Java Básico – Módulo 1
                                   Java Web




             Contextos




@regismelo                              166
Java Básico – Módulo 1
                                                          Java Web




                Servlet Collaboration
• Voltando para o RequestDispatcher...
  public RequestDispatcher
  ServletRequest.getRequestDispatcher(String path)

• O objeto RequestDispatcher possui dois métodos
  importantes:
   – forward( ServletRequest request, ServletResponse response )
     
       - Redireciona para a página;
   – include( ServletRequest request, ServletResponse response ) 
       - Inclue a página no response.

   @regismelo                                                  167
Java Básico – Módulo 1
                                                               Java Web
                          ForwardExemplo
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
public class ForwardExemplo extends HttpServlet {
  public void doGet (   HttpServletRequest request,
                               HttpServletResponse response
                          ) throws ServletException, IOException
      {
           PrintWriter out;
           response.setContentType("text/html");

                 RequestDispatcher rd =
                        request.getRequestDispatcher("/DiaHoje.jsp" );

                 rd.forward( request, response );
    }
}
    @regismelo                                                      168
Java Básico – Módulo 1
                                                               Java Web
                           IncludeExemplo
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
public class IncludeExemplo extends HttpServlet {
  public void doGet (   HttpServletRequest request,
                               HttpServletResponse response
                          ) throws ServletException, IOException
      {
           PrintWriter out;
           response.setContentType("text/html");

                 RequestDispatcher rd =
                        request.getRequestDispatcher("/DiaHoje.jsp" );

                 rd.include( request, response );
    }
}
    @regismelo                                                      169
Java Básico – Módulo 1
                                                         Java Web
                    IncludeExemplo2
public class IncludeExemplo2 extends HttpServlet {
  public void doGet (    HttpServletRequest request,
                                HttpServletResponse response
                           ) throws ServletException, IOException
       {
           PrintWriter out;
           response.setContentType("text/html");
           out = response.getWriter();
           RequestDispatcher rd =
                  request.getRequestDispatcher("/Menu.html" );
           rd.include( request, response );
           out.println( "Regis Melo" );
           rd = request.getRequestDispatcher("/Bottom.html" );
           rd.include( request, response );
     }
}

    @regismelo                                                170
Java Básico – Módulo 1
                                                 Java Web




               Definindo atributos
• Na API de Servlets, você pode disponibilizar
  informações entre servlets através da requisição;

• O tempo de vida dessas informações é curto –
  somente o tempo da requisição.




  @regismelo                                          171
Java Básico – Módulo 1
                                                      Java Web




               Definindo atributos
Métodos da interface ServletRequest
• setAttribute( String name, Object o ) 
  - Disponibiliza uma informação que só será visível para
    essa requisição;
• removeAttribute( String name ) 
  - Remove um atributo da requisição
• Object getAttribute( String name ) 
  - Obtém o atributo da requisição
• Enumeration getAttributeNames() 
  - Retorna o nome de todos os atributos na requisição.
  @regismelo                                               172
Java Básico – Módulo 1
                                                                   Java Web
                          ForwardExemplo
// import ...
public class ForwardExemplo extends HttpServlet {
  public void doGet (   HttpServletRequest request,
                               HttpServletResponse response
                          ) throws ServletException, IOException
      {
           PrintWriter out;
           response.setContentType("text/html");

                 RequestDispatcher rd =
                        request.getRequestDispatcher("/DiaHoje.jsp" );

                 request.setAttribute( “cdCliente”, new Integer(10) );

                 rd.forward( request, response );
    }                                     Esse atributo estará disponível
}                                            para a página que está
                                               sendo redirecionada
    @regismelo                                                              173
Java Básico – Módulo 1
                                                     Java Web




                      Exercício


• Defina um arquivo HTML representando um header, outro
  representando um footer;

• Faça com que seu servlet inclua esses dois arquivos e
  exiba um conteúdo qualquer.




  @regismelo                                              174
Java Básico – Módulo 1
                                                    Java Web




                     Exercício


• Crie um novo servlet que receberá os dados de um
  formulário e gravará no banco de dados;

• Caso os dados sejam gravados com sucesso, redirecione
  para uma página estática, mostrando sucesso;

• Caso algum erro aconteça, redirecione para uma página
  de erro.


 @regismelo                                              175
Java Básico – Módulo 1
                                                        Java Web




                       Exercício


• Ainda no mesmo exercício, crie um link na sua aplicação
  que listará os dados de uma tabela no banco de dados;

• Você deverá criar dois servlets - um deverá fazer a
  consulta no banco de dados, e disponibilizar na
  requisição os registros utilizando um ArrayList. Após feito
  isso, esse servlet deverá redirecionar para outro servlet
  que construirá a página a partir do ArrayList
  disponibilizado na requisição.

  @regismelo                                                 176
Java Básico – Módulo 1
                                                                        Java Web




                         Para saber mais

Core Servlets and JSP Pages (CSAJSP-Chapter15.pdf)

15.1 Forwarding Requests 354
     Using Static Resources 354
     Supplying Information to the Destination Pages 355
     Interpreting Relative URLs in the Destination Page 357
     Alternative Means of Getting a RequestDispatcher 358
15.2 Example: An On-Line Travel Agent 358
15.3 Including Static or Dynamic Content 375
15.4 Example: Showing Raw Servlet and JSP Output 377
15.5 Forwarding Requests From JSP Pages 380




@regismelo                                                                   177
Java Básico – Módulo 1
                                   Java Web




             Módulo IX



             Cookies




@regismelo                              178
Java Básico – Módulo 1
                                                        Java Web


                         Cookies
• “Cookies são pequenas informações, enviadas pelo web server
  para um browser, que pode ser lida posteriormente do
  browser”;

• Cookies foram introduzidos no Netscape Navigator
  (Netscape 0.94 beta);

• Apesar de não serem um padrão oficial (definido pela IETF,
  Internet Engineering Task Force), cookies se tornaram um
  padrão de fato.

• Atualmente, a especificação está padronizada através da RFC
  2109 (http://www.ietf.org/rfc/rfc2109.txt)
   @regismelo                                                179
Java Básico – Módulo 1
                                                               Java Web


                             Cookies
• A API Servlet provê a classe javax.servlet.http.Cookie para
  trabalhar com cookies;

• Todos os detalhes do cookie, são gerenciados pela API.

• Para criar um cookie
       new javax.servlet.http.Cookie( String name, String value )

• Para adicionar um cookie
       Cookie cookie = new Cookie( “ID”, “1975” );
       response.addCookie( cookie )




   @regismelo                                                       180
Java Básico – Módulo 1
                                                          Java Web


                         Cookies

• Cuidado!

  – Os cookies são enviados no cabeçalho HTTP, portanto, você
    deve adicionar os cookies antes de fechar o response;


  – Por padrão, os browsers devem suportar, no máximo, 20 cookies
    por site, 300 por usuário e limitam o tamanho dos cookies a no
    máximo 4096 bytes.




  @regismelo                                                    181
Java Básico – Módulo 1
                                                                  Java Web


                             Cookies
• Para recuperar os cookies gravados, use:

       public Cookie cookie[ ] = request.getCookies()

• Esse método, retorna um array de cookies que contém todos
  os cookies enviados pelo browser ou um array vazio, se
  nenhum cookie for enviado;

• Cuidado! A API Servlet anterior a versão 2.1 podia retornar
  null se nenhum cookie fosse enviado. Por isso, considere que
  isso pode acontecer.



   @regismelo                                                          182
Java Básico – Módulo 1
                                                          Java Web


                          Cookies
• O código abaixo, exibe todos os cookies com seus devidos
  valores:
  public class Biscoito extends HttpServlet {
        public void doGet ( HttpServletRequest request,
                           HttpServletResponse response ) {
          PrintWriter out;
          response.setContentType("text/html");
          out = response.getWriter();
          Cookie[] cookies = request.getCookies();
          for( int i=0, n = cookies.length; i < n; i++ ) {
            out.println( “<p>” );
            out.println( “Name – “ + cookies[i].getName() );
            out.println( “Valor – “ + cookies[i].getValue() );
          }
          out.close();
        }
   @regismelo                                                  183
   }
Java Básico – Módulo 1
                                                        Java Web


                         Cookies
• Uma boa dica para o uso de cookies é salvar um ID de usuário
  para personalizar o conteúdo;

• Diversos sites realizam esse tipo de operação. A Amazon, por
  exemplo;

• Porém, cuidado! O usuário poderá excluir ou até mesmo
  desabilitar os cookies.

• Usar cookies “impunemente” é uma péssima prática.




   @regismelo                                                184
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP
Introdução ao Java Web com Applets, Servlets e JSP

Contenu connexe

Tendances

Desenvolvimento de Sistemas Web - HTML5 - Introdução
Desenvolvimento de Sistemas Web - HTML5 - IntroduçãoDesenvolvimento de Sistemas Web - HTML5 - Introdução
Desenvolvimento de Sistemas Web - HTML5 - IntroduçãoFabio Moura Pereira
 
Java Web Dev Introdução
Java Web Dev IntroduçãoJava Web Dev Introdução
Java Web Dev IntroduçãoMarcio Marinho
 
Construindo aplicações web java com netbeans
Construindo aplicações web java com netbeansConstruindo aplicações web java com netbeans
Construindo aplicações web java com netbeansSliedesharessbarbosa
 
Java Web - MVC básico com JSP e Servlets
Java Web - MVC básico com JSP e ServletsJava Web - MVC básico com JSP e Servlets
Java Web - MVC básico com JSP e ServletsEduardo Mendes
 
Desenvolvimento web - conceitos, tecnologia e tendências.
Desenvolvimento web - conceitos, tecnologia e tendências.Desenvolvimento web - conceitos, tecnologia e tendências.
Desenvolvimento web - conceitos, tecnologia e tendências.Valmir Justo
 
Java, NetBeans e Orientação a Objetos
Java, NetBeans e Orientação a ObjetosJava, NetBeans e Orientação a Objetos
Java, NetBeans e Orientação a ObjetosJoão Longo
 
Construindo portlets para IBM WebSphere Portal – Parte 1
Construindo portlets para IBM WebSphere Portal – Parte 1Construindo portlets para IBM WebSphere Portal – Parte 1
Construindo portlets para IBM WebSphere Portal – Parte 1rodrigoareis
 
Como escolher o Framework Java para web?
Como escolher o Framework Java para web?Como escolher o Framework Java para web?
Como escolher o Framework Java para web?Anderson Araújo
 
JSF com Primefaces
JSF com PrimefacesJSF com Primefaces
JSF com PrimefacesFabio Noth
 
Melhores práticas de deployment do IBM Connections
Melhores práticas de deployment do IBM ConnectionsMelhores práticas de deployment do IBM Connections
Melhores práticas de deployment do IBM Connectionsrodrigoareis
 
JSF e outras tecnologias Java Web - IMES.java
JSF e outras tecnologias Java Web - IMES.javaJSF e outras tecnologias Java Web - IMES.java
JSF e outras tecnologias Java Web - IMES.javaEduardo Bregaida
 
Java Web 3 - Servlets e JSP 1
Java Web 3 - Servlets e JSP 1Java Web 3 - Servlets e JSP 1
Java Web 3 - Servlets e JSP 1Eduardo Mendes
 
Introdução ao desenvolvimento Web
Introdução ao desenvolvimento WebIntrodução ao desenvolvimento Web
Introdução ao desenvolvimento WebSérgio Souza Costa
 
Java 8 - A Evolução da Linguagem
Java 8 - A Evolução da LinguagemJava 8 - A Evolução da Linguagem
Java 8 - A Evolução da LinguagemPetronio Candido
 

Tendances (20)

Desenvolvimento de Sistemas Web - HTML5 - Introdução
Desenvolvimento de Sistemas Web - HTML5 - IntroduçãoDesenvolvimento de Sistemas Web - HTML5 - Introdução
Desenvolvimento de Sistemas Web - HTML5 - Introdução
 
Java Web Dev Introdução
Java Web Dev IntroduçãoJava Web Dev Introdução
Java Web Dev Introdução
 
Construindo aplicações web java com netbeans
Construindo aplicações web java com netbeansConstruindo aplicações web java com netbeans
Construindo aplicações web java com netbeans
 
Java Web - MVC básico com JSP e Servlets
Java Web - MVC básico com JSP e ServletsJava Web - MVC básico com JSP e Servlets
Java Web - MVC básico com JSP e Servlets
 
JavaFX 1.2
JavaFX 1.2JavaFX 1.2
JavaFX 1.2
 
Desenvolvimento web - conceitos, tecnologia e tendências.
Desenvolvimento web - conceitos, tecnologia e tendências.Desenvolvimento web - conceitos, tecnologia e tendências.
Desenvolvimento web - conceitos, tecnologia e tendências.
 
Java, NetBeans e Orientação a Objetos
Java, NetBeans e Orientação a ObjetosJava, NetBeans e Orientação a Objetos
Java, NetBeans e Orientação a Objetos
 
JSF - JavaServer Faces
JSF - JavaServer FacesJSF - JavaServer Faces
JSF - JavaServer Faces
 
Java Web, o Tutorial
Java Web, o TutorialJava Web, o Tutorial
Java Web, o Tutorial
 
Construindo portlets para IBM WebSphere Portal – Parte 1
Construindo portlets para IBM WebSphere Portal – Parte 1Construindo portlets para IBM WebSphere Portal – Parte 1
Construindo portlets para IBM WebSphere Portal – Parte 1
 
Como escolher o Framework Java para web?
Como escolher o Framework Java para web?Como escolher o Framework Java para web?
Como escolher o Framework Java para web?
 
JSF com Primefaces
JSF com PrimefacesJSF com Primefaces
JSF com Primefaces
 
Melhores práticas de deployment do IBM Connections
Melhores práticas de deployment do IBM ConnectionsMelhores práticas de deployment do IBM Connections
Melhores práticas de deployment do IBM Connections
 
JSF e outras tecnologias Java Web - IMES.java
JSF e outras tecnologias Java Web - IMES.javaJSF e outras tecnologias Java Web - IMES.java
JSF e outras tecnologias Java Web - IMES.java
 
ASP.NET - Conceitos Básicos
ASP.NET - Conceitos BásicosASP.NET - Conceitos Básicos
ASP.NET - Conceitos Básicos
 
Java Web 3 - Servlets e JSP 1
Java Web 3 - Servlets e JSP 1Java Web 3 - Servlets e JSP 1
Java Web 3 - Servlets e JSP 1
 
Introdução ao desenvolvimento Web
Introdução ao desenvolvimento WebIntrodução ao desenvolvimento Web
Introdução ao desenvolvimento Web
 
Principais Tecnologias WEB
Principais Tecnologias WEBPrincipais Tecnologias WEB
Principais Tecnologias WEB
 
Curso asp - basico
Curso   asp - basicoCurso   asp - basico
Curso asp - basico
 
Java 8 - A Evolução da Linguagem
Java 8 - A Evolução da LinguagemJava 8 - A Evolução da Linguagem
Java 8 - A Evolução da Linguagem
 

En vedette

Mini-Curso sobre Bootstrap 3
Mini-Curso sobre Bootstrap 3Mini-Curso sobre Bootstrap 3
Mini-Curso sobre Bootstrap 3Diego Doná
 
Java pra web mais fácil com MVC
Java pra web mais fácil com MVCJava pra web mais fácil com MVC
Java pra web mais fácil com MVCCecilia Fernandes
 
Software de qualidade e qualidade de código
Software de qualidade e qualidade de códigoSoftware de qualidade e qualidade de código
Software de qualidade e qualidade de códigoGuilherme Silveira
 
Apostila Java Web (Servlets e JSPs)
Apostila Java Web (Servlets e JSPs)Apostila Java Web (Servlets e JSPs)
Apostila Java Web (Servlets e JSPs)Ricardo Terra
 
Requisitos de Software
Requisitos de SoftwareRequisitos de Software
Requisitos de SoftwareSilvio Cadete
 
Apresentação Java Web - Jsf+Hibernate
Apresentação Java Web - Jsf+HibernateApresentação Java Web - Jsf+Hibernate
Apresentação Java Web - Jsf+HibernateZarathon Maia
 
Qualidade de software
Qualidade de softwareQualidade de software
Qualidade de softwareLuiz China
 
Desenvolvimento Web/Java com Framework Demoiselle
Desenvolvimento Web/Java com Framework DemoiselleDesenvolvimento Web/Java com Framework Demoiselle
Desenvolvimento Web/Java com Framework DemoiselleSerge Rehem
 
X-Zone - Garantia da Qualidade de Software
X-Zone - Garantia da Qualidade de SoftwareX-Zone - Garantia da Qualidade de Software
X-Zone - Garantia da Qualidade de SoftwareAlexandreBartie
 
Criação Web com Bootstrap e Material Design
Criação Web com Bootstrap e Material DesignCriação Web com Bootstrap e Material Design
Criação Web com Bootstrap e Material DesignDaniel Brandão
 
Introdução aos Servlets e JSPs
Introdução aos Servlets e JSPsIntrodução aos Servlets e JSPs
Introdução aos Servlets e JSPsLuiz Ricardo Silva
 
O uso dos porquês
O uso dos porquêsO uso dos porquês
O uso dos porquêsRebeca Kaus
 
Boa Práticas no Desenvolvimento Java Enterprise
Boa Práticas no Desenvolvimento Java EnterpriseBoa Práticas no Desenvolvimento Java Enterprise
Boa Práticas no Desenvolvimento Java EnterpriseOziel Moreira Neto
 
4 Tarefa Plano Aula Bullying Claudia Cunha O Ignacio
4 Tarefa Plano Aula Bullying Claudia Cunha O Ignacio4 Tarefa Plano Aula Bullying Claudia Cunha O Ignacio
4 Tarefa Plano Aula Bullying Claudia Cunha O IgnacioFAETEC - ETESC
 
Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...
Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...
Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...Tchelinux
 
Viva jovem, venha conhecer!
Viva jovem, venha conhecer!Viva jovem, venha conhecer!
Viva jovem, venha conhecer!Rebeca Kaus
 
Agile Brazil 2013 - Resumo
Agile Brazil 2013 - ResumoAgile Brazil 2013 - Resumo
Agile Brazil 2013 - ResumoBruno Nardini
 
Semanal fechada 6 ano
Semanal fechada 6 anoSemanal fechada 6 ano
Semanal fechada 6 anoRebeca Kaus
 

En vedette (20)

Mini-Curso sobre Bootstrap 3
Mini-Curso sobre Bootstrap 3Mini-Curso sobre Bootstrap 3
Mini-Curso sobre Bootstrap 3
 
Java pra web mais fácil com MVC
Java pra web mais fácil com MVCJava pra web mais fácil com MVC
Java pra web mais fácil com MVC
 
Software de qualidade e qualidade de código
Software de qualidade e qualidade de códigoSoftware de qualidade e qualidade de código
Software de qualidade e qualidade de código
 
Apostila Java Web (Servlets e JSPs)
Apostila Java Web (Servlets e JSPs)Apostila Java Web (Servlets e JSPs)
Apostila Java Web (Servlets e JSPs)
 
Requisitos de Software
Requisitos de SoftwareRequisitos de Software
Requisitos de Software
 
Apresentação Java Web - Jsf+Hibernate
Apresentação Java Web - Jsf+HibernateApresentação Java Web - Jsf+Hibernate
Apresentação Java Web - Jsf+Hibernate
 
servlet-introducao
servlet-introducaoservlet-introducao
servlet-introducao
 
Use a cabeça jsp & servlets
Use a cabeça   jsp & servletsUse a cabeça   jsp & servlets
Use a cabeça jsp & servlets
 
Qualidade de software
Qualidade de softwareQualidade de software
Qualidade de software
 
Desenvolvimento Web/Java com Framework Demoiselle
Desenvolvimento Web/Java com Framework DemoiselleDesenvolvimento Web/Java com Framework Demoiselle
Desenvolvimento Web/Java com Framework Demoiselle
 
X-Zone - Garantia da Qualidade de Software
X-Zone - Garantia da Qualidade de SoftwareX-Zone - Garantia da Qualidade de Software
X-Zone - Garantia da Qualidade de Software
 
Criação Web com Bootstrap e Material Design
Criação Web com Bootstrap e Material DesignCriação Web com Bootstrap e Material Design
Criação Web com Bootstrap e Material Design
 
Introdução aos Servlets e JSPs
Introdução aos Servlets e JSPsIntrodução aos Servlets e JSPs
Introdução aos Servlets e JSPs
 
O uso dos porquês
O uso dos porquêsO uso dos porquês
O uso dos porquês
 
Boa Práticas no Desenvolvimento Java Enterprise
Boa Práticas no Desenvolvimento Java EnterpriseBoa Práticas no Desenvolvimento Java Enterprise
Boa Práticas no Desenvolvimento Java Enterprise
 
4 Tarefa Plano Aula Bullying Claudia Cunha O Ignacio
4 Tarefa Plano Aula Bullying Claudia Cunha O Ignacio4 Tarefa Plano Aula Bullying Claudia Cunha O Ignacio
4 Tarefa Plano Aula Bullying Claudia Cunha O Ignacio
 
Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...
Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...
Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...
 
Viva jovem, venha conhecer!
Viva jovem, venha conhecer!Viva jovem, venha conhecer!
Viva jovem, venha conhecer!
 
Agile Brazil 2013 - Resumo
Agile Brazil 2013 - ResumoAgile Brazil 2013 - Resumo
Agile Brazil 2013 - Resumo
 
Semanal fechada 6 ano
Semanal fechada 6 anoSemanal fechada 6 ano
Semanal fechada 6 ano
 

Similaire à Introdução ao Java Web com Applets, Servlets e JSP

Jsf com hibernate, spring security e maven
Jsf com hibernate, spring security e mavenJsf com hibernate, spring security e maven
Jsf com hibernate, spring security e mavenLeandro Costa
 
Frameworks Opensource: ferramentas para desenvolvimento rápido de aplicações Web
Frameworks Opensource: ferramentas para desenvolvimento rápido de aplicações WebFrameworks Opensource: ferramentas para desenvolvimento rápido de aplicações Web
Frameworks Opensource: ferramentas para desenvolvimento rápido de aplicações WebJairo Junior
 
GlassFish, Maven, Cloud e Java EE
GlassFish, Maven, Cloud e Java EEGlassFish, Maven, Cloud e Java EE
GlassFish, Maven, Cloud e Java EEBruno Borges
 
Desenvolvimento web com groovy e grails.
Desenvolvimento web com groovy e grails.Desenvolvimento web com groovy e grails.
Desenvolvimento web com groovy e grails.Bryan Ollivie
 
Anatomia do JSF – JavaServer Faces
Anatomia do JSF – JavaServer FacesAnatomia do JSF – JavaServer Faces
Anatomia do JSF – JavaServer Facescejug
 
Palestra Ruby on Rails SETA 2008/01
Palestra Ruby on Rails SETA 2008/01Palestra Ruby on Rails SETA 2008/01
Palestra Ruby on Rails SETA 2008/01Douglas Roeder
 
Netbeans 6.7: a única IDE que você precisa!
Netbeans 6.7: a única IDE que você precisa!Netbeans 6.7: a única IDE que você precisa!
Netbeans 6.7: a única IDE que você precisa!João Longo
 
Desenvolvimento rápido de aplicações com JEE e JavaFX
Desenvolvimento rápido de aplicações com JEE e JavaFXDesenvolvimento rápido de aplicações com JEE e JavaFX
Desenvolvimento rápido de aplicações com JEE e JavaFXjesuinoPower
 
Spring: Overview do framework mais popular para desenvolvimento em Java
Spring: Overview do framework mais popular para desenvolvimento em JavaSpring: Overview do framework mais popular para desenvolvimento em Java
Spring: Overview do framework mais popular para desenvolvimento em JavaMariana de Azevedo Santos
 
GlassFish, Maven, Cloud e o futuro do Java EE
GlassFish, Maven, Cloud e o futuro do Java EEGlassFish, Maven, Cloud e o futuro do Java EE
GlassFish, Maven, Cloud e o futuro do Java EEBruno Borges
 
Desenvolvimento Ria com Java
Desenvolvimento Ria com JavaDesenvolvimento Ria com Java
Desenvolvimento Ria com JavaTI Infnet
 
Desenvolvimento RIA com Java
Desenvolvimento RIA com JavaDesenvolvimento RIA com Java
Desenvolvimento RIA com Javaarmeniocardoso
 
Ruby on Rails como deve ser utilizada e onde - Julio Cartier Maia Gomes
Ruby on Rails como deve ser utilizada e onde - Julio Cartier Maia GomesRuby on Rails como deve ser utilizada e onde - Julio Cartier Maia Gomes
Ruby on Rails como deve ser utilizada e onde - Julio Cartier Maia GomesPotiLivre Sobrenome
 

Similaire à Introdução ao Java Web com Applets, Servlets e JSP (20)

Introdução a jsf
Introdução a jsfIntrodução a jsf
Introdução a jsf
 
Jsf com hibernate, spring security e maven
Jsf com hibernate, spring security e mavenJsf com hibernate, spring security e maven
Jsf com hibernate, spring security e maven
 
Frameworks Opensource: ferramentas para desenvolvimento rápido de aplicações Web
Frameworks Opensource: ferramentas para desenvolvimento rápido de aplicações WebFrameworks Opensource: ferramentas para desenvolvimento rápido de aplicações Web
Frameworks Opensource: ferramentas para desenvolvimento rápido de aplicações Web
 
Java virtual machine quantas linguas fala a jvm2
Java virtual machine   quantas linguas fala a jvm2Java virtual machine   quantas linguas fala a jvm2
Java virtual machine quantas linguas fala a jvm2
 
GlassFish, Maven, Cloud e Java EE
GlassFish, Maven, Cloud e Java EEGlassFish, Maven, Cloud e Java EE
GlassFish, Maven, Cloud e Java EE
 
Interplan java basico_modulo1
Interplan java basico_modulo1Interplan java basico_modulo1
Interplan java basico_modulo1
 
Desenvolvimento web com groovy e grails.
Desenvolvimento web com groovy e grails.Desenvolvimento web com groovy e grails.
Desenvolvimento web com groovy e grails.
 
Anatomia do JSF – JavaServer Faces
Anatomia do JSF – JavaServer FacesAnatomia do JSF – JavaServer Faces
Anatomia do JSF – JavaServer Faces
 
Netbeans slides
Netbeans slidesNetbeans slides
Netbeans slides
 
Palestra Ruby on Rails SETA 2008/01
Palestra Ruby on Rails SETA 2008/01Palestra Ruby on Rails SETA 2008/01
Palestra Ruby on Rails SETA 2008/01
 
Netbeans 6.7: a única IDE que você precisa!
Netbeans 6.7: a única IDE que você precisa!Netbeans 6.7: a única IDE que você precisa!
Netbeans 6.7: a única IDE que você precisa!
 
MC - Java Enterprise Edition 6 (Java EE)
MC - Java Enterprise Edition 6 (Java EE)MC - Java Enterprise Edition 6 (Java EE)
MC - Java Enterprise Edition 6 (Java EE)
 
Desenvolvimento rápido de aplicações com JEE e JavaFX
Desenvolvimento rápido de aplicações com JEE e JavaFXDesenvolvimento rápido de aplicações com JEE e JavaFX
Desenvolvimento rápido de aplicações com JEE e JavaFX
 
Spring: Overview do framework mais popular para desenvolvimento em Java
Spring: Overview do framework mais popular para desenvolvimento em JavaSpring: Overview do framework mais popular para desenvolvimento em Java
Spring: Overview do framework mais popular para desenvolvimento em Java
 
GlassFish, Maven, Cloud e o futuro do Java EE
GlassFish, Maven, Cloud e o futuro do Java EEGlassFish, Maven, Cloud e o futuro do Java EE
GlassFish, Maven, Cloud e o futuro do Java EE
 
Desenvolvimento Ria com Java
Desenvolvimento Ria com JavaDesenvolvimento Ria com Java
Desenvolvimento Ria com Java
 
Desenvolvimento RIA com Java
Desenvolvimento RIA com JavaDesenvolvimento RIA com Java
Desenvolvimento RIA com Java
 
Mc1 JAVA
Mc1 JAVAMc1 JAVA
Mc1 JAVA
 
Ruby on Rails como deve ser utilizada e onde - Julio Cartier Maia Gomes
Ruby on Rails como deve ser utilizada e onde - Julio Cartier Maia GomesRuby on Rails como deve ser utilizada e onde - Julio Cartier Maia Gomes
Ruby on Rails como deve ser utilizada e onde - Julio Cartier Maia Gomes
 
Ruby on rails como deve ser utilizada e onde
Ruby on rails como deve ser utilizada e ondeRuby on rails como deve ser utilizada e onde
Ruby on rails como deve ser utilizada e onde
 

Introdução ao Java Web com Applets, Servlets e JSP

  • 1. Java Básico – Módulo 1 Java Web Java Web Régis Melo @regismelo @regismelo 1
  • 2. Java Básico – Módulo 1 Java Web Missão Apresentar, motivar e exercitar a plataforma Java voltada para desenvolvimento de aplicações WEB. @regismelo 2
  • 3. Java Básico – Módulo 1 Java Web Metodologias • Exposição e discussão teóricas; • Exercícios práticos de projeto e modelagem em laboratório. @regismelo 3
  • 4. Java Básico – Módulo 1 Java Web O que esse curso não cobre ou não é? Não Cobre: • Conceitos gerais de Java e da plataforma J2SE. Não é: • Um curso para aprender Java – este é um curso para se aprofundar na plataforma, estudando os recursos voltados para web. @regismelo 4
  • 5. Java Básico – Módulo 1 Java Web Programa I. Iniciando II. Introdução aos Applets III. Introdução a Servlets IV. Revisão do protocolo HTTP V. Trabalhando com dados de formulários VI. Processamento e ciclo de vida de um Servlet VII. Obtendo informações do ambiente VIII. Controle de Fluxo e Colaboração IX. Cookies X. Gerenciamento de Sessões XI. Java Server Pages XII. Tag Libs @regismelo 5
  • 6. Java Básico – Módulo 1 Java Web Antes de iniciar… Vamos nos apresentar • Nome; • Empresa; • Experiência com programação; • Razões de estar fazendo esse treinamento; • Expectativas desse curso. @regismelo 6
  • 7. Java Básico – Módulo 1 Java Web Livros sugeridos @regismelo 7
  • 8. Java Básico – Módulo 1 Java Web Módulo I Iniciando @regismelo 8
  • 9. Java Básico – Módulo 1 Java Web "People only see what they are prepared to see." Ralph Waldo Emerson @regismelo 9
  • 10. Java Básico – Módulo 1 Java Web Iniciando • Nesse curso, abordaremos uma série de tecnologias do J2EE – Java 2 Enterprise Edition; • Iremos nos focar nos assuntos relacionados ao desenvolvimento para web. @regismelo 10
  • 11. Java Básico – Módulo 1 Java Web Plataforma J2SE e J2EE @regismelo 11
  • 12. Java Básico – Módulo 1 Java Web Breve histórico do desenvolvimento Web • No início as páginas eram apenas institucionais; • Não havia necessidade de dinamismo; • Serviços não eram oferecidos nas páginas; • Tecnologias utilizadas  HTML e eventualmente Applets. @regismelo 12
  • 13. Java Básico – Módulo 1 Java Web Página da Sefaz, em Dezembro de 1998 @regismelo 13
  • 14. Java Básico – Módulo 1 Java Web Breve histórico do desenvolvimento Web • Com o passar do tempo, percebeu-se a necessidade de interação; • O problema era como tornar as página dinâmicas; • Diversas tecnologias surgiram com esse fim. @regismelo 14
  • 15. Java Básico – Módulo 1 Java Web Breve histórico do desenvolvimento Web Tecnologias para desenvolvimento web • CGI – Common Gateway Interface – Surgiu em meados de 1996; – Na época era uma das única soluções para criação de web sites dinâmicos; – Em 1996, existiam cerca de 100.000 web sites e o browser mais utilizado era o Netscape Navigator 2.0 (o primeiro browser a suportar JavaScript – outra tecnologia para tornar páginas dinâmicas) @regismelo 15
  • 16. Java Básico – Módulo 1 Java Web Breve histórico do desenvolvimento Web • CGI – Common Gateway Interface Um programa CGI pode ser implementado em diversas linguagens @regismelo 16
  • 17. Java Básico – Módulo 1 Java Web Breve histórico do desenvolvimento Web • CGI – Ciclo de Vida @regismelo 17
  • 18. Java Básico – Módulo 1 Java Web Breve histórico do desenvolvimento Web Tecnologias para desenvolvimento web • CGI – Common Gateway Interface – A escalabilidade é um dos principais problemas de aplicações CGI; – Para cada cliente, um novo processo é executado; – Se você tem um cliente, você tem um “executável” rodando; – Se você tem 1.000.000 de clientes… @regismelo 18
  • 19. Java Básico – Módulo 1 Java Web Hello World em CGI/Perl #!/usr/local/bin/perl # simple Hello World script print "Content-type: text/plainnn"; print 'Hello World!'; Toda a produção da página fica dentro de um programa que roda do lado servidor. @regismelo 19
  • 20. Java Básico – Módulo 1 Java Web Breve histórico do desenvolvimento Web Tecnologias para desenvolvimento web • ASP – Active Server Pages – Tecnologia bastante madura para o desenvolvimento de página dinâmicas; – É uma tecnologia desenvolvida pela Microsoft (não é multi-plataforma); – Excelentes ferramentas de desenvolvimento; – Diferente do CGI, é bastante escalável. @regismelo 20
  • 21. Java Básico – Módulo 1 Java Web Hello World em ASP <% Dim I %> Código é embutido dentro da página HTML. <% <% e %> delimitam o código que For I = 1 To 5 Step 1 será processado no servidor %> <FONT SIZE="<%= I %>">Hello World</FONT><BR> <% Next %> @regismelo 21
  • 22. Java Básico – Módulo 1 Java Web Hello World em ASP Hello World Hello World Hello World Hello World Hello World @regismelo 22
  • 23. Java Básico – Módulo 1 Java Web Breve histórico do desenvolvimento Web Tecnologias para desenvolvimento web • PHP – Linguagem de programação Server Side, HTML embedded; – Em teoria, similar ao ASP. @regismelo 23
  • 24. Java Básico – Módulo 1 Java Web Hello World em PHP <HTML> <HEAD></HEAD> <BODY> This is in Html<BR> <?php echo “Hello World<BR>"; ?> </BODY> </HTML> @regismelo 24
  • 25. Java Básico – Módulo 1 Java Web Breve histórico do desenvolvimento Web “As tecnologias Java para web surgiram para resolver os problemas de escalabilidade, facilidade de uso e portabilidade.” @regismelo 25
  • 26. Java Básico – Módulo 1 Java Web Página da Sefaz, Junho/2004 @regismelo 26
  • 27. Java Básico – Módulo 1 Java Web Módulo II Applets - Conceitos @regismelo 27
  • 28. Java Básico – Módulo 1 Java Web Tecnologias Java para Web - Applets • Os applets surgiram em meados de 1996; • Applets = primeira tecnologia Java voltada para web; • Foram amplamente utilizadas para dar dinamismo as páginas; • As páginas HTML eram estáticas – o dinamismo era resolvido utilizando applets; • Código Java, executado do lado cliente. @regismelo 28
  • 29. Java Básico – Módulo 1 Java Web Applets Exemplo de uma applet @regismelo 29
  • 30. Java Básico – Módulo 1 Java Web Applets • Algumas aplicações que necessitam de interatividade intensiva, utilizam applets. @regismelo 30
  • 31. Java Básico – Módulo 1 Java Web Applets - Exemplo Biblioteca gráfica Classe que deve para “desenhar” ser extendida para criar uma nova applet import java.applet.Applet; import java.awt.Graphics; class HelloWorld extends Applet{ public void paint(Graphics g){ g.drawString(“Hello World!”, 160, 70); } Método especial da applet chamado } pelo browser para “desenhar” o conteúdo da applet @regismelo 31
  • 32. Java Básico – Módulo 1 Java Web Applets – Exemplo A página HTML que utiliza a applet <html> <body> <h1> O Applet Hello World” </h1> <applet code = “HelloWorld.class” width = 400 height = 100> </applet> </body> Tag HTML utilizada para </html> referenciar a applet @regismelo 32
  • 33. Java Básico – Módulo 1 Java Web Applets – Exemplo @regismelo 33
  • 34. Java Básico – Módulo 1 Java Web Applets - Problemas • Código Java executado do lado cliente = necessidade de uma JVM no lado cliente; • Os browsers passaram a incorporar JVMs; • Atualização de versão das applets é feita de forma automática, porém... • Necessidade de constante atualização das JVMs. @regismelo 34
  • 35. Java Básico – Módulo 1 Java Web Applets - Problemas • Para complicar, recentemente a instalação padrão dos principais browsers deixou de vir com suporte a JVMs; • As applets caíram em desuso... @regismelo 35
  • 36. Java Básico – Módulo 1 Java Web Para saber mais Core Servlets and JSP Pages (CSAJSP-Chapter1.pdf) 1.1 Servlets 1.2 The Advantages of Servlets Over "Traditional" CGI – Efficient – Convenient – Powerful – Portable – Secure – Inexpensive 1.3 JavaServer Pages 1.4 The Advantages of JSP – Versus Active Server Pages (ASP) – Versus PHP – Versus Pure Servlets – Versus Server-Side Includes (SSI) – Versus JavaScript – Versus Static HTML @regismelo 36
  • 37. Java Básico – Módulo 1 Java Web Módulo III Iniciando no mundo dos Servlets @regismelo 37
  • 38. Java Básico – Módulo 1 Java Web O que são Servlets? • Sevlets são a resposta da tecnologia Java a programação CGI(Common Gateway Interface); • Eles são programas que rodam em um servidor Web, agindo como uma camada intermediária entre uma requisição feita por um browser, ou outro cliente (em geral HTTP), com outras aplicações e banco de dados. @regismelo 38
  • 39. Java Básico – Módulo 1 Java Web O que são Servlets? @regismelo 39
  • 40. Java Básico – Módulo 1 Java Web Hello World com Servlets import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloWorld extends HttpServlet { public void doGet ( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException { PrintWriter out; response.setContentType("text/html"); out = response.getWriter(); out.println( “Hello World!” ); out.close(); } } @regismelo 40
  • 41. Java Básico – Módulo 1 Java Web O que são Servlets? • Servlets são multi-thread (não sofrem com problemas de escalabilidade como as aplicações CGI) @regismelo 41
  • 42. Java Básico – Módulo 1 Java Web Servlets x CGI • Eficientes – Em CGI cada requisição gera um novo processo no servidor. A JVM cria threads de execução para cada requisição; • Convenientes – Servlets já possuem todas as ferramentas para tratar documentos HTML, Cabeçalhos HTTP, Cookies, Gerenciamento de sessão etc. @regismelo 42
  • 43. Java Básico – Módulo 1 Java Web Servlets x CGI • Poderosos – Servlets podem “falar” diretamente com o servidor Web (programas CGI precisam de uma API específica para cada servidor); – Servlets podem compartilhar dados facilitando a implementação de recursos compartilhados como pool conexões com o BD etc; @regismelo 43
  • 44. Java Básico – Módulo 1 Java Web Servlets x CGI • Poderosos – Servlets podem manter dados entre as requisições, facilitando os mecanismos de gerenciamento de sessão etc. @regismelo 44
  • 45. Java Básico – Módulo 1 Java Web Servlets x CGI • Portáveis – Feitos em Java e implementam um API padrão; • Seguros – CGI são executados como scripts shell do sistema; • Baratos – Existem servidores bons e gratuitos. @regismelo 45
  • 46. Java Básico – Módulo 1 Java Web Entendendo o Hello World Classes do pacote java.io utilizadas para produzir Pacote com implementação das a saída do servlet interfaces e classes de Servlet import java.io.*; import javax.servlet.*; Implementação de Servlet import javax.servlet.http.*; para funcionar com HTTP public class HelloWorld extends HttpServlet { .... } Servlets HTTP devem herdar dessa classe @regismelo 46
  • 47. Java Básico – Módulo 1 Java Web Entendendo o Hello World Método chamado quando um usuário faz uma requisição public void doGet ( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException { ... } Exceção geral disparada quando o servlet tem algum problema Encapsula os dados relativos a requisição (request) e o resultado Exceção disparada quando que será produzido (response) problemas na produção da página acontecem @regismelo 47
  • 48. Java Básico – Módulo 1 Java Web Entendendo o Hello World Representa a saída Informa o tipo de conteúdo (a página que será produzida) que será produzido { PrintWriter out; response.setContentType("text/html"); out = response.getWriter(); out.println( “Hello World!” ); out.close(); Produz o resultado } Finaliza o processo de geração da página @regismelo 48
  • 49. Java Básico – Módulo 1 Java Web Entendendo o HelloWorld import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloWorld extends HttpServlet { public void doGet ( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException { PrintWriter out; response.setContentType("text/html"); out = response.getWriter(); out.println( “Hello World!” ); out.close(); } } @regismelo 49
  • 50. Java Básico – Módulo 1 Java Web Como rodar Servlets? • Para rodar Servlets é necessário instalar um servidor web que implemente a especificação de Servlets; • Pelo fato de Servlet ser uma especificação, e não uma implementação, o código escrito em um servidor de um fornecedor deverá funcionar sem alterações em outro servidor de outro fornecedor. @regismelo 50
  • 51. Java Básico – Módulo 1 Java Web Como rodar Servlets? • A especificação da API de Servlets está atualmente na versão 2.4; • Existem dezenas de fornecedores e projetos open source que disponibilizam servidores compatíveis com a especificação de Servlets; • O software servidor é conhecido como container. @regismelo 51
  • 52. Java Básico – Módulo 1 Java Web Containers Alguns containers disponíveis: SUN Microsystems Atualmente conhecido como SUN One A solução IBM é conhecida como WebSphere BEA WebLogic Líder do mercado em soluções pagas JRUN – Solução da Macromedia Boa integração com seus produtos Borland Application Server @regismelo 52
  • 53. Java Básico – Módulo 1 Java Web Containers Utilizaremos nesse treinamento o Jakarta TomCat @regismelo 53
  • 54. Java Básico – Módulo 1 Java Web TomCat • O TomCat é um servidor open source; • Fruto do projeto Jakarta, sub-projeto do projeto Apache; • O projeto Jakarta constrói aplicativos open source para java; • É a atual “reference implementation” da API Servlets e JSP; • Bastante utilizado e robusto. @regismelo 54
  • 55. Java Básico – Módulo 1 Java Web TomCat • O TomCat pode ser obtido no site http://jakarta.apache.org/tomcat; • A versão que utilizaremos nesse treinamento é o TomCat 4.1.24, que suporta a especificação 2.3 da API Servlet (e JSP 1.2 que abordaremos mais a frente); • O arquivo disponível para instalação é o tomcat-4.1.24-LE-jdk14.exe. @regismelo 55
  • 56. Java Básico – Módulo 1 Java Web Instalando o TomCat • Opções da instalação: TomCat rodará como um serviço (use somente em um ambiente de produção) @regismelo 56
  • 57. Java Básico – Módulo 1 Java Web Instalando o TomCat • Ao final da instalação: Porta que o TomCat ficará escutando Usuário/senha utilizado para Administrar o TomCat @regismelo 57
  • 58. Java Básico – Módulo 1 Java Web Instalando o TomCat • Depois da instalação concluída, você pode iniciar o servidor; • Para isso, utilize o ícone “Start TomCat”; • Ou carregue-o digitando o comando <tomcat>/bin/startup.bat ou <tomcat>/bin/startup.sh (linux/unix); • O TomCat é feito em Java, por isso, o mesmo código roda em qualquer S.O. que tenha uma JVM. @regismelo 58
  • 59. Java Básico – Módulo 1 Java Web TomCat rodando @regismelo 59
  • 60. Java Básico – Módulo 1 Java Web TomCat rodando • Para verificar se o TomCat está rodando corretamente, digite no seu browser: http://localhost:8080 Porta selecionada na instalação @regismelo 60
  • 61. Java Básico – Módulo 1 Java Web TomCat rodando @regismelo 61
  • 62. Java Básico – Módulo 1 Java Web Configurando uma Aplicação • Vamos agora configurar uma aplicação que irá rodar no TomCat; • As aplicações no TomCat, ficam em geral no diretório <tomcat>/webapps; • Vamos criar um diretório chamado curso debaixo dessa pasta: <tomcat>/webapps/curso @regismelo 62
  • 63. Java Básico – Módulo 1 Java Web Configurando uma Aplicação • Essa pasta conterá nosso site; • A API de Servlets, a partir da versão 2.2, prevê uma estrutura padrão de diretórios das aplicações web; • Isso significa que da sua aplicação web, bem como seus arquivos de configuração se comportarão da mesma forma independente do produto que você esteja utilizado. @regismelo 63
  • 64. Java Básico – Módulo 1 Java Web Configurando uma Aplicação • Document Root É a pasta raiz da sua aplicação web. Nela, colocaremos nossos arquivos HTML, JSP, etc. • WEB-INF Pasta padrão que conterá informações de configuração do seu site e suas classes (veja mais a frente). @regismelo 64
  • 65. Java Básico – Módulo 1 Java Web Configurando uma Aplicação • WEB-INF/web.xml Arquivo XML que descreve os servlets e outros componentes de sua aplicação. • WEB-INF/classes Contém as classes Java (e recursos associados) requeridos por sua aplicação (o nosso HelloWorld.class ficará nesse diretório). @regismelo 65
  • 66. Java Básico – Módulo 1 Java Web Configurando uma Aplicação • WEB-INF/lib Contém arquivos JAR requeridos por sua aplicação (como por exemplo, drivers JDBC). @regismelo 66
  • 67. Java Básico – Módulo 1 Java Web Nossa estrutura de diretório Nossa aplicação Nossos servlets ficarão aqui @regismelo 67
  • 68. Java Básico – Módulo 1 Java Web Configurando uma Aplicação • Após a estrutura de diretórios ter sido criada, podemos compilar nossa classe HelloWorld; • Podemos compilar essa classes usando nosso compilador favorito (Javac, Jikes ou a sua IDE). @regismelo 68
  • 69. Java Básico – Módulo 1 Java Web Configurando uma Aplicação • IMPORTANTE: Para compilar nossos servlets é necessário ter o arquivo servlet.jar no nosso classpath. Ele está disponível em <tomcat>/common/lib @regismelo 69
  • 70. Java Básico – Módulo 1 Java Web Configurando uma Aplicação • Após compilado o arquivo, devemos copiar o nosso HelloWorld.class para o diretório: <tomcat>/webapps/curso/WEB-INF/classes @regismelo 70
  • 71. Java Básico – Módulo 1 Java Web Configurando uma Aplicação • Antes de testar nossa aplicação precisamos configurar o TomCat para carregar nossos Servlets; • Essa configuração será feita no arquivo <tomcat>/conf/web.xml; • Precisamos apenas dizer que o TomCat irá carregar os servlets a partir de um determinada URL padrão. @regismelo 71
  • 72. Java Básico – Módulo 1 Java Web Configurando uma Aplicação • Procure a entrada abaixo no arquivo <tomcat>/conf/ web.xml Perceba que essa entrada está comentada @regismelo 72
  • 73. Java Básico – Módulo 1 Java Web Configurando uma Aplicação <servlet-mapping> <servlet-name>invoker</servlet-name> <url-pattern>/servlet/*</url-pattern> </servlet-mapping> • Essa entrada diz que sempre que o usuário digitar... http://<servidor>:<porta>/<app>/servlet/<nomeServlet> O TomCat tentará carregar uma classe com o nome <nomeServlet> que herda de HttpServlet. @regismelo 73
  • 74. Java Básico – Módulo 1 Java Web Configurando uma Aplicação • Essa linha, originalmente está comentada por questões de segurança; • Devemos retirar o comentário dessa linha para nosso servlet funcionar: @regismelo 74
  • 75. Java Básico – Módulo 1 Java Web Relembrando o HelloWorld import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloWorld extends HttpServlet { public void doGet ( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException { PrintWriter out; response.setContentType("text/html"); out = response.getWriter(); out.println( “Hello World!” ); out.close(); } } @regismelo 75
  • 76. Java Básico – Módulo 1 Java Web Exercício • Primeiro, instalar e configurar o TomCat; • Iniciar o TomCat; • Digitar o código do slide anterior e salvá-lo em um arquivo chamado HelloWorld.java; • Compilar o código e copiar o .class para <tomcat>/webapps/curso/WEB-INF/classes; • Verificar se o HelloWorld funciona digitando no browser: http://localhost:8080/curso/servlet/HelloWorld 45 minutos @regismelo 76
  • 77. Java Básico – Módulo 1 Java Web Para saber mais Core Servlets and JSP Pages (CSAJSP-Chapter1.pdf) 1.5 Installation and Setup – Obtain Servlet and JSP Software – Bookmark or Install the Servlet and JSP API Documentation – Identify the Classes to the Java Compiler – Package the Classes – Configure the Server – Start the Server – Compile and Install Your Servlets Core Servlets and JSP Pages (CSAJSP-Chapter2.pdf) 2.1 Basic Servlet Structure 2.2 A Simple Servlet Generating Plain Text Compiling and Installing the Servlet Invoking the Servlet 2.3 A Servlet That Generates HTML 2.4 Packaging Servlets Creating Servlets in Packages Compiling Servlets in Packages Invoking Servlets in Packages @regismelo 77
  • 78. Java Básico – Módulo 1 Java Web Módulo IV Revisão do protocolo HTTP @regismelo 78
  • 79. Java Básico – Módulo 1 Java Web Revisão do protocolo HTTP • A web que conhecemos hoje funciona com o protocolo HTTP, que significa Hyper Text Transfer Protocol; • HTTP é um protocolo, bastante simples, de transferência de dados; • É um padrão, definido pela W3C (http 1.1  RFC 2616) @regismelo 79
  • 80. Java Básico – Módulo 1 Java Web Revisão do protocolo HTTP @regismelo 80
  • 81. Java Básico – Módulo 1 Java Web Revisão do protocolo HTTP • HTTP é um protocolo stateless, ou seja, não mantém estado; • Cada requisição estabelece uma conexão com o servidor, recebe os dados e fecha a conexão. @regismelo 81
  • 82. Java Básico – Módulo 1 Java Web HTTP - Requisição • Quando um cliente faz uma requisição, ele especifica um comando, chamado método, que especifica o tipo de ação que ele quer efetuar; • A primeira linha da requisição também especifica a URL e a versão do protocolo: GET /index.jsp HTTP/1.0 @regismelo 82
  • 83. Java Básico – Módulo 1 Java Web HTTP - Requisição • Após enviado o comando, o cliente pode enviar informações adicionais (tipo do browser, versão, etc): GET /index.jsp HTTP/1.0 User-Agent: Mozilla/4.0 (compatible; MSIE 4.0; Windows 95) Accept: image/gif, image/jpeg, text/*, */* @regismelo 83
  • 84. Java Básico – Módulo 1 Java Web HTTP - Requisição • A requisição também pode ser feita com um método POST POST /index.jsp HTTP/1.0 User-Agent: Mozilla/4.0 (compatible; MSIE 4.0; Windows 95) Accept: image/gif, image/jpeg, text/*, */* @regismelo 84
  • 85. Java Básico – Módulo 1 Java Web HTTP - Requisição Qual a diferença entre o método GET e o POST? • GET, envia dados através da URI (tamanho limitado) <uri>?dados • Um exemplo de um site que usa GET para enviar informações: http://www.google.com/search?q=cejug @regismelo 85
  • 86. Java Básico – Módulo 1 Java Web HTTP - Requisição Qual a diferença entre o método GET e o POST? • POST envia os dados para o servidor como um fluxo de bytes – dados não aparecem na URL; • Útil para grandes formulários a informação não deve ser exibida na URL (senhas, por exemplo); • Desvantagem – usuário não pode fazer bookmarks da URL. @regismelo 86
  • 87. Java Básico – Módulo 1 Java Web HTTP - Resposta • Feita uma requisição, o servidor envia uma resposta; • A primeira linha da resposta indica um código de status e sua descrição HTTP/1.0 200 OK @regismelo 87
  • 88. Java Básico – Módulo 1 Java Web HTTP - Resposta Alguns códigos HTTP: • 200  Código default, sucesso; • 400  Erro de sintaxe na requisição; • 404  Recurso não existe no servidor; • 405  Método não permitido. Para consultar a lista completa, acesse: http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html @regismelo 88
  • 89. Java Básico – Módulo 1 Java Web HTTP - Resposta • Após a linha de status, o servidor envia os cabeçalhos de resposta: Date: Saturday, 23-May-00 03:25:12 GMT Server: Tomcat Web Server/3.2 MIME-version: 1.0 Content-type: text/html Content-length: 1029 Last-modified: Thursday, 7-May-00 12:15:35 GMT @regismelo 89
  • 90. Java Básico – Módulo 1 Java Web HTTP – Resumindo @regismelo 90
  • 91. Java Básico – Módulo 1 Java Web TCP Monitor • Uma boa forma de entender o protocolo HTTP é vê-lo funcionando; • O programa TCP Monitor exibe as requisições feitas pelos clientes e a resposta feita por um servidor; • O TCP Monitor é um utilitário, parte do projeto AXIS, do projeto Jakarta, e pode ser baixado em http://ws.apache.org/axis/ @regismelo 91
  • 92. Java Básico – Módulo 1 Java Web Configurando o TCP Monitor • Primeiro passo – carregar o programa: java -cp axis.jar org.apache.axis.utils.tcpmon @regismelo 92
  • 93. Java Básico – Módulo 1 Java Web Configurando o TCP Monitor Segundo passo – configurar Porta que será criada na nossa máquina O host para qual a requisição será direcionada Clique em adicionar depois de configurar @regismelo 93
  • 94. Java Básico – Módulo 1 Java Web Configurando o TCP Monitor Terceiro passo – faça uma requisição normalmente do seu browser para a porta configurada: http://localhost:88 @regismelo 94
  • 95. Java Básico – Módulo 1 Java Web Configurando o TCP Monitor E finalmente, veja os detalhes da requisição HTTP: @regismelo 95
  • 96. Java Básico – Módulo 1 Java Web Exercício • Faça uma requisição ao seu próprio servidor e veja informações sobre a requisição; • Faça requisições a outros sites usando o TCP Monitor e descubra detalhes sobre alguns servidores. @regismelo 96
  • 97. Java Básico – Módulo 1 Java Web Módulo V Trabalhando com dados de formulários @regismelo 97
  • 98. Java Básico – Módulo 1 Java Web Dados vindos de formulários • Conforme vimos na nossa revisão de HTTP, dados podem ser postados utilizando os método GET e POST; • Iremos aprender nesse módulo como “capturar” esses dados nos nossos servlets. @regismelo 98
  • 99. Java Básico – Módulo 1 Java Web Relembrando HTML e Formulários… Para onde o formulário Como o formulário será submetido será submetido <html> <form action="meuServlet" method=“get"> <input name="nome" type="text" value="Digite seu nome aqui!" size="40" maxlength="40"> </form> </html> @regismelo 99
  • 100. Java Básico – Módulo 1 Java Web Dados vindos de formulários • No exemplo anterior, o formulário irá postar os dados para uma URL, no mesmo servidor, chamada meuServlet; • Precisamos criar um servlet para receber os dados desse formulário • Já sabemos criar um servlet, mas como receber os parâmetros passados? @regismelo 100
  • 101. Java Básico – Módulo 1 Java Web Relembrando o HelloWorld import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloWorld extends HttpServlet { public void doGet ( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException { PrintWriter out; response.setContentType("text/html"); out = response.getWriter(); out.println( “Hello World!” ); out.close(); } } @regismelo 101
  • 102. Java Básico – Módulo 1 Java Web A Interface HttpServletRequest • A instância de HttpServletRequest passada como parâmetro para o método doGet encapsula os dados vindos da requisição; • Através dela poderemos saber todos os dados relativos a requisição; • A interface HttpServletRequest herda de ServletRequest. @regismelo 102
  • 103. Java Básico – Módulo 1 Java Web A Interface ServletRequest Principais métodos: • getParameter( String name )  - Retorna o valor relativo a um determinado parâmetro passado; - Esse parâmetro pode ser um dado de um formulário submetido ou um dado passado na URL; - O retorno de getParameter sempre é String! - Cuidado  O nome do parâmetro é sensitive case. - Cuidado  Se o parâmetro não existir na requisição, getParameter retorna null. @regismelo 103
  • 104. Java Básico – Módulo 1 Java Web …A Interface ServletRequest Principais métodos: • getParameterValues( String name )  - Retorna os valores relativos a um determinado parâmetro passado; - Use esse método quando um dado de um formulário tiver mais de um valor (um “select”, por exemplo) - O retorno de getParameterValues é um array de Strings. - Cuidado  O nome do parâmetro é sensitive case. - Cuidado  Se o parâmetro não existir na requisição, getParameterValues retorna null. @regismelo 104
  • 105. Java Básico – Módulo 1 Java Web …A Interface ServletRequest Principais métodos: • java.util.Map getParameterMap()  - Retornar todos os parâmetros passados na requisição, no formato de um Map. @regismelo 105
  • 106. Java Básico – Módulo 1 Java Web …A Interface ServletRequest Principais métodos: • getMethod()  - Retorna o método utilizado para submeter os dados (GET, POST ou PUT). • getQueryString()  - Retorna a query postada (URL). • getParameterNames()  - Retorna um Enumeration de Strings contendo o nome de todos os parâmetros passados na requisição. @regismelo 106
  • 107. Java Básico – Módulo 1 Java Web Construindo um formulário <html> <form action="./servlet/Formulario" method="get"> <p> <input name="nome" type="text" value="Digite seu nome aqui!" size="40" maxlength="40"> </p> <p>Interesses:</p> <SELECT NAME=“preferencias" MULTIPLE> <OPTION VALUE=“1"> Musica </OPTION> <OPTION VALUE=“2"> Computadores </OPTION> <OPTION VALUE=“3"> Ocio </OPTION> </SELECT> <p> <input type="submit" name="Submit" value="Submit"> </p> </form> </html> @regismelo 107
  • 108. Java Básico – Módulo 1 Java Web Servlet Formulario public class Formulario extends HttpServlet { public void doGet ( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException { PrintWriter out; response.setContentType("text/html"); out = response.getWriter(); out.println("<HTML><HEAD><TITLE></TITLE>"); String nome = request.getParameter("nome"); out.println( "Nome --> " + nome + "<p>"); String[] dados = request.getParameterValues(“preferencias"); if ( dados == null ) out.println( "Dados é null." ); else for( int i=0; i < dados.length; i++ ) out.println( dados[i] ); } } @regismelo 108
  • 109. Java Básico – Módulo 1 Java Web Entendedo o exemplo • Os dados do formulário são submetidos via GET; • Isso significa que também podemos disparar o servlet fazendo uma requisição na URL do tipo: http://localhost:8080/curso/servlet/Formulario ?nome=blabla&preferencias=1& preferencias=2 @regismelo 109
  • 110. Java Básico – Módulo 1 Java Web Alterando o exemplo • Vamos alterar o exemplo anterior para que ele exiba todos os parâmetros passados; • Vamos utilizar o método getParameterNames para descobrir quais parâmetros foram passados para o formulário; • E o getParameterValues para obter os valores da requisição. @regismelo 110
  • 111. Java Básico – Módulo 1 Java Web Servlet Formulario2 public class Formulario2 extends HttpServlet { public void doGet ( HttpServletRequest request, HttpServletResponse response ) throws IOException { PrintWriter out; response.setContentType("text/html"); out = response.getWriter(); Enumeration paramNames = request.getParameterNames(); while(paramNames.hasMoreElements()) { String paramName = (String)paramNames.nextElement(); out.println( "<p><b> " + paramName + "</b><p>"); String[] paramValues = request.getParameterValues(paramName); for( int i=0; i < paramValues.length; ++i ) { out.print( "--> " + paramValues[i]); } } } @regismelo 111
  • 112. Java Básico – Módulo 1 Java Web Suportando Post • Para fazer com que o servlet suporte GET, implementamos o método doGet; • Para fazer com que o servlet suporte POST, devemos implementar o método doPost. public void doPost( HttpServletRequest request, HttpServletResponse response ) @regismelo 112
  • 113. Java Básico – Módulo 1 Java Web Suportando Post • Normalmente, é interessante suportar tanto get quanto post; • Para isso, é só implementar os dois métodos public void doPost( HttpServletRequest request, HttpServletResponse response ) { ... } public void doGet ( HttpServletRequest request, HttpServletResponse response ) { ... } @regismelo 113
  • 114. Java Básico – Módulo 1 Java Web Exercício • Construa um servlet que recebe as requisições de um formulário e exiba no browser; • Crie um servlet que mostre a lista de fatoriais entre 0 e 10; • Altere o servlet fatorial de forma que ele receba o valor máximo do fatorial a ser calculado e exiba o resultado do cálculo em uma tabela HTML. @regismelo 114
  • 115. Java Básico – Módulo 1 Java Web Para saber mais Core Servlets and JSP Pages (CSAJSP-Chapter3.pdf) 3.1 The Role of Form Data 3.2 Reading Form Data from Servlets 3.3 Example: Reading Three Explicit Parameters 3.4 Example: Reading All Parameters 3.5 A Resume Posting Service 3.6 Filtering Strings for HTML-Specific Characters Code for Filtering Example @regismelo 115
  • 116. Java Básico – Módulo 1 Java Web Módulo VI Processamento e ciclo de vida de um Servlet @regismelo 116
  • 117. Java Básico – Módulo 1 Java Web Servlet = Multi-Thread • Como já mencionamos, servlets são multi-thread; • A mesma instância do servlet processa diversas requisições. @regismelo 117
  • 118. Java Básico – Módulo 1 Java Web Servlet = Multi Thread • Portanto, é importante programarmos os servlets de modo “thread safe”; • Isso significa – nada de propriedades de instância sendo utilizadas! • Cuidado com o acesso a recursos que podem ser danificados com o acesso multi-thread (arquivos, por exemplo). @regismelo 118
  • 119. Java Básico – Módulo 1 Java Web Servlet Não Thread Safe public class Problema extends HttpServlet { public String nome; public void doGet ( HttpServletRequest request, HttpServletResponse response ) { nome = request.getParameter(“nome”); doSomething(); } public void doSomething() { deletarCliente(nome); Nome é uma propriedade } Não thread safe, compartilhada } pela mesma Instância do servlet  Problemas  @regismelo 119
  • 120. Java Básico – Módulo 1 Java Web Servlet Thread Safe public class Solucao extends HttpServlet { public void doGet ( HttpServletRequest request, HttpServletResponse response ) { String nome = request.getParameter(“nome”); doSomething(nome); } public void doSomething( String nome ) { deletarCliente(nome); } Nome é uma variável local. } Sem problemas com threads!  @regismelo 120
  • 121. Java Básico – Módulo 1 Java Web Interface SingleThreadModel • Você pode sinalizar ao container para serializar o acesso a um servlet; • Basta fazer que seu servlet implemente a interface SingleThreadModel; • O Container pode garantir isso tornando o acesso ao servlet synchronized ou criando um pool de servlets, despachando cada acesso a um novo servlet. @regismelo 121
  • 122. Java Básico – Módulo 1 Java Web Interface SingleThreadModel @regismelo 122
  • 123. Java Básico – Módulo 1 Java Web Interface SingleThreadModel • Cuidado! O acesso serializado ao servlet diminui drasticamente a performance!! • Use-o somente quando for extremamente necessário (acesso a um arquivo no disco, por exemplo). • Na versão 2.4 da API de Servlets, SingleThreadModel está deprecated. @regismelo 123
  • 124. Java Básico – Módulo 1 Java Web SingleThreadModel public class Solucao extends HttpServlet implements SingleThreadModel { public void doGet ( HttpServletRequest request, HttpServletResponse response ) { doSomething(); } } @regismelo 124
  • 125. Java Básico – Módulo 1 Java Web Ciclo de vida de um Servlet @regismelo 125
  • 126. Java Básico – Módulo 1 Java Web Ciclo de vida de um Servlet • O ciclo de vida de um servlet é controlado pelo container; • Quando o servidor recebe uma requisição, ela é repassada para o container que a delega a um servlet. O container: 1 – Carrega a classe na memória; 2 – Cria uma instância da classe do servlet; 3 – Inicializa a instância chamando o método init() • Depois que o servlet foi inicializado, cada requisição é executado em um método service() • O container cria um objeto de requisição (ServletRequest) e de resposta (ServletResponse) e depois chama service() passando os objetos como parâmetros; • Quando a resposta é enviada, os objetos são destruídos. • Quando o container decidir remover o servlet da memória, ele o@regismelo chamando o método destroy() finaliza 126
  • 127. Java Básico – Módulo 1 Java Web Ciclo de vida de um Servlet – init() • O método init() é disparado quando o servlet é carregado; • Você deve sobrescrevê-lo quando necessitar inicializar o servlet de alguma forma; • A sintaxe do método é: public void init(ServletConfig config) throws ServletException Sobrescreva esse public void init() método caso throws ServletException necessite inicializar algo @regismelo 127
  • 128. Java Básico – Módulo 1 Java Web Ciclo de vida de um Servlet – init() • Caso você tenha algum problema na inicialização do Servlet, você deverá disparar a exceção UnavailableException (subclasse de ServletException). ... public void init() throws ServletException { String dir = getInitParameter(“diretorio”); // Problemas ao ler configuracao? if ( dir == null ) throw new UnavailableException(“Erro na configuracao!”) } @regismelo 128
  • 129. Java Básico – Módulo 1 Java Web Ciclo de vida de um Servlet – service() • O método service() é o método que irá disparar o doGet ou doPost. • Ele é um método abstrato na sua declaração em GenericServlet. HttpServlet implementa esse método repassando a chamada para doGet ou doPost. @regismelo 129
  • 130. Java Básico – Módulo 1 Java Web Diagrama de classes • Servlets não necessariamente estão ligados a aplicações web. Essa é a razão de existir a classe GenericServlet e a implementação HttpServlet @regismelo 130
  • 131. Java Básico – Módulo 1 Java Web Ciclo de vida de um Servlet – destroy() • O método destroy() é chamado pelo container antes do servlet ser destruído; • O momento em quem o servlet será desativado é decidido pelo container; • É a última oportunidade para “limpar a casa”. public void destroy() { ... } @regismelo 131
  • 132. Java Básico – Módulo 1 Java Web Processamento em Background • Um servlet pode fazer mais que simplesmente servir clientes; • Ele pode trabalhar entre os acessos; • Essa é uma habilidade interessante para processos muito demorados; • Um cliente pode, por exemplo, disparar um processo e eventualmente ficar consultando o resultado do processamento. @regismelo 132
  • 133. Java Básico – Módulo 1 Java Web …Processamento em Background • Para exemplificar, vamos criar um servlet que calcule números primos; • Para fazer com que o processamento demore bastante, vamos iniciar a busca por números primos a partir de 1.000.000 (hum milhão); • Vamos utilizar um thread para ficar realizando o processamento em background. @regismelo 133
  • 134. Java Básico – Módulo 1 Java Web ServletBackground import java.io.*; import java.util.*; import javax.servlet.*; import javax.servlet.http.*; public class ServletBackground extends HttpServlet implements Runnable { private long lastprime = 0; // Ultimo primo encontrado Date lastprimeModified = new Date(); Thread searcher; // Thread para busca public void init() throws ServletException { searcher = new Thread( this ); searcher.setPriority( Thread.MIN_PRIORITY ); searcher.start(); } // ... Continua  @regismelo 134
  • 135. Java Básico – Módulo 1 Java Web ServletBackground //  ... Continuação public void run() { long candidate = 1000001L; // um milhao e um // Loop para buscar eternamente primos... while (!searcher.interrupted()) { if (isPrime(candidate)) { lastprime = candidate; lastprimeModified = new Date(); } candidate += 2; // Nos. pares não são primos // Dormir por 200ms... try { Thread.sleep(200); } catch (InterruptedException ignored) { } } @regismelo 135 }
  • 136. Java Básico – Módulo 1 Java Web ServletBackground //  ... Continuação private static boolean isPrime(long candidate) { long sqrt = (long) Math.sqrt(candidate); for (long i = 3; i <= sqrt; i += 2) { if (candidate % i == 0) return false; } return true; } public void doGet(HttpServletRequest req,HttpServletResponse res) throws ServletException, IOException { res.setContentType("text/plain"); PrintWriter out = res.getWriter(); if (lastprime == 0) { out.println(“Procurando o 1o. primo..."); } else {out.println(“O último primo encontrado foi " + lastprime); out.println(" em " + lastprimeModified); } @regismelo 136 }
  • 137. Java Básico – Módulo 1 Java Web ServletBackground //  ... Continuação public void destroy() { // Sinalizar para o thread parar... searcher.interrupt(); } } @regismelo 137
  • 138. Java Básico – Módulo 1 Java Web Exercício • Crie um servlet que exibe (usando System.out.println) os devidos eventos do ciclo de vida (init, service e destroy); • Implementa o exemplo ServletBackground e observe-o funcionar. @regismelo 138
  • 139. Java Básico – Módulo 1 Java Web Para saber mais Core Servlets and JSP Pages (CSAJSP-Chapter2.pdf) 2.6 The Servlet Life Cycle – The init Method – The service Method – The doGet, doPost, and doXxx Methods – The SingleThreadModel Interface – The destroy Method @regismelo 139
  • 140. Java Básico – Módulo 1 Java Web Módulo VII Obtendo informações do ambiente @regismelo 140
  • 141. Java Básico – Módulo 1 Java Web Obtendo informações • Em alguns casos é bastante importante conhecer informações do ambiente cliente e servidor; • Por exemplo, você pode decidir utilizar JavaScript ou não, dependendo da capacidade do browser que fez a requisição; • Ou, até mesmo, exibir a página utilizando uma outra língua, dependo do cliente que fez a requisição. @regismelo 141
  • 142. Java Básico – Módulo 1 Java Web Obtendo informações Métodos interessantes ligados a HttpServletRequest: • getLocale()  - Retorna o “Locale” associado ao cliente; - Locale é um objeto java, que dá informações relativas a localização; - As informações são extraídas a partir de Accept- Language. Se o cliente não prover esse cabeçalho HTTP, getLocale retorna o Locale default do servidor. @regismelo 142
  • 143. Java Básico – Módulo 1 Java Web Localizacao public class Localizacao extends HttpServlet { public void doGet ( HttpServletRequest request, HttpServletResponse response ) { PrintWriter out; response.setContentType("text/html"); out = response.getWriter(); out.println( "<p> getDisplayName --> " + request.getLocale().getDisplayName() ); out.println( "<p> getCountry --> " + request.getLocale().getCountry() ); out.println( "<p> getDisplayLanguage --> " + request.getLocale().getDisplayLanguage() ); out.println( "<p> getISO3Country --> " + request.getLocale().getISO3Country() ); out.println( "<p> getISO3Country --> " + request.getLocale().getISO3Language() ); out.close(); } } @regismelo 143
  • 144. Java Básico – Módulo 1 Java Web Rodando o exercício anterior @regismelo 144
  • 145. Java Básico – Módulo 1 Java Web Obtendo informações Dicas com relação ao Locale • getISO3Country  - Retorna 3 bytes indicando o país; - Você pode obter a lista dos países em http://userpage.chemie.fu-berlin.de/diverse/doc/ISO_3166.html - Alguns países: - BRA – Brasil; - USA – Estados Unidos; - ARG – Argentina @regismelo 145
  • 146. Java Básico – Módulo 1 Java Web Obtendo informações Dicas com relação ao Locale • getISO3Language  - Retorna 3 bytes indicando a linguagem preferencial do cliente; - Você pode obter a lista das linguagens em http://ftp.ics.uci.edu/pub/ietf/http/related/iso639.txt - Algumas linguagens: - por – Português; - eng – Inglês. @regismelo 146
  • 147. Java Básico – Módulo 1 Java Web Obtendo informações Métodos interessantes ligados a HttpServletRequest: • String getHeader( String name )  - Obtém o valor associado a um determinado header • Enumeration getHeaderNames()  - Obtém o nome de todos os headers da requisição - Headeres úteis: - user-agent – Indica o browser e o S.O. do cliente; - refer – Indica de onde o usuário veio (a URL). @regismelo 147
  • 148. Java Básico – Módulo 1 Java Web HttpHeader public class HttpHeaderExemplo extends HttpServlet { public void doGet ( HttpServletRequest request, HttpServletResponse response ) { PrintWriter out; response.setContentType("text/html"); out = response.getWriter(); Enumeration enum = request.getHeaderNames(); String header; while( enum.hasMoreElements() ) { header = (String)enum.nextElement(); out.println( "<p> " + header + " --> "); out.println( request.getHeader( header ) ); } out.close(); } } @regismelo 148
  • 149. Java Básico – Módulo 1 Java Web HttpHeader @regismelo 149
  • 150. Java Básico – Módulo 1 Java Web Obtendo informações Métodos interessantes ligados a HttpServletRequest: • String getRemoteAddr()  - Retorna o endereço IP do cliente que fez a requisição • String getRemoteHost()  - Retorna o nome do cliente que fez a requisição. - Com esses métodos você consegue saber quem acessa o seu site. @regismelo 150
  • 151. Java Básico – Módulo 1 Java Web HttpAddrExemplo public class HttpAddrExemplo extends HttpServlet { public void doGet ( HttpServletRequest request, HttpServletResponse response ) { PrintWriter out; response.setContentType("text/html"); out = response.getWriter(); out.println( "<p> getRemoteAddr --> " + request.getRemoteAddr() ); out.println( "<p> getRemoteHost --> " + request.getRemoteHost() ); out.close(); } } @regismelo 151
  • 152. Java Básico – Módulo 1 Java Web HttpAddrExemplo @regismelo 152
  • 153. Java Básico – Módulo 1 Java Web Exercício • Construa um servlet que a partir da requisição do cliente exibe qual o browser está sendo utilizado e qual S.O.; • Além disso, o servlet deverá exibir o IP do cliente; • O Servlet deverá mostrar a frase: “The quick brown fox jumps over the lazy dog” ou “A rápida raposa castanha pula sobre o cachorro preguiçoso” Dependendo da língua preferida do usuário. Dica  Para mudar as configurações de língua, no Internet Explorer acesse o menu Tools/Internet Options/Languages. @regismelo 153
  • 154. Java Básico – Módulo 1 Java Web Para saber mais Core Servlets and JSP Pages CHAPTER 5 (CSAJSP-Chapter5.pdf) Accessing the Standard CGI Variables 5.1 Servlet Equivalent of CGI Variables 5.2 A Servlet That Shows the CGI Variables CHAPTER 6 (CSAJSP-Chapter6.pdf) Generating the Server Response: HTTP Status Codes 6.1 Specifying Status Codes 6.2 HTTP 1.1 Status Codes and Their Purpose 6.3 A Front End to Various Search Engines CHAPTER 7(CSAJSP-Chapter7.pdf) Generating the Server Response: HTTP Response Headers 7.1 Setting Response Headers from Servlets 7.2 HTTP 1.1 Response Headers and Their Meaning 7.3 Persistent Servlet State and Auto-Reloading Pages 7.4 Using Persistent HTTP Connections 7.5 Using Servlets to Generate GIF Images @regismelo 154
  • 155. Java Básico – Módulo 1 Java Web Módulo VIII Controle de fluxo e colaboração @regismelo 155
  • 156. Java Básico – Módulo 1 Java Web Controle de Fluxo • Utilizando técnicas de controle de fluxo você pode redirecionar uma requisição; • Redirecionar, significa ir para uma outra página ou um outro servlet; • Você pode, por exemplo, receber uma requisição gerada a partir de uma página estática, fazer um processamento, e desviar para uma página dinâmica. @regismelo 156
  • 157. Java Básico – Módulo 1 Java Web Controle de Fluxo • A primeira maneira de redirecionar uma página é retornando para o browser um cabeçalho HTTP de forma que ele gere uma nova requisição para outra página; @regismelo 157
  • 158. Java Básico – Módulo 1 Java Web Controle de Fluxo Método de HttpServletResponse • void sendRedirect(String location)  - Retorna um status HTTP que força o cliente a fazer uma nova requisição a nova location. - OBS: Você só pode utilizar esse método antes do response ser enviado para o cliente, do contrário, o método disparará IllegalStateException. @regismelo 158
  • 159. Java Básico – Módulo 1 Java Web SendRedirectExemplo public class SendRedirectExemplo extends HttpServlet { public void doGet ( HttpServletRequest request, HttpServletResponse response ) { // Faça alguma coisa aqui ... response.sendRedirect( “http://www.sagaranatech.com“ ); // Oops!Nesse ponto você não pode mais gerar conteúdo! } } @regismelo 159
  • 160. Java Básico – Módulo 1 Java Web Desvantagens do sendRedirect • O método sendRedirect retorna para o browser um código HTTP que faz com que ele faça outra requisição; • Isso significa que para o redirecionamento acontecer, outra requisição é necessária; • Essa é uma abordagem que pode ser lenta... @regismelo 160
  • 161. Java Básico – Módulo 1 Java Web Redirecionamento • Existe uma outra forma de redirecionar, sem necessitar uma nova requisição; • É mais rápido redirecionar dentro do próprio servidor (sem realizar uma nova requisição); • Antes de ver como redirecionar, vamos aprender um pouco sobre “Servlet Collaboration”. @regismelo 161
  • 162. Java Básico – Módulo 1 Java Web Servlet Collaboration • Eventualmente é interessante se comunicar com outros servlets dentro do mesmo servidor; • Damos a isso o nome de “colaboração”; • O seu servlet, por exemplo, pode fazer algum processamento e transferir a responsabilidade de lidar com a requisição para outro servlet. @regismelo 162
  • 163. Java Básico – Módulo 1 Java Web Servlet Collaboration • Para suportar delegação, a API 2.1 de servlets inclue a interface javax.servlet.RequestDispatcher; • Utilize o método public RequestDispatcher ServletRequest.getRequestDispatcher(String path) • Dessa forma, você só pode redirecionar para recursos dentro do mesmo contexto. @regismelo 163
  • 164. Java Básico – Módulo 1 Java Web Contextos? • Web Containers suportam a implantação de múltiplas aplicações web; – Definindo contextos separados para execução de servlets • No TomCat, essas aplicações estão na pasta webapps/ • Todo diretório de contexto tem uma estrutura definida, que consiste de – Área de documentos do contexto (/), acessível externamente; – Área inacessível (/WEB-INF), que possui pelo menos um arquivo de configuração padrão (web.xml); – O WEB-INF pode conter ainda dois diretórios reconhecidos pelo servidor: o classpath da aplicação (WEB-INF/classes) e outro JARs para inclusão no classpath (/WEB-INF/lib). @regismelo 164
  • 165. Java Básico – Módulo 1 Java Web Contextos • Contextos isolam as aplicações web; • A grande vantagem dos contextos é que uma aplicação não “quebra” outra aplicação; • Tudo está isolado, inclusive as classes que estão na memória. @regismelo 165
  • 166. Java Básico – Módulo 1 Java Web Contextos @regismelo 166
  • 167. Java Básico – Módulo 1 Java Web Servlet Collaboration • Voltando para o RequestDispatcher... public RequestDispatcher ServletRequest.getRequestDispatcher(String path) • O objeto RequestDispatcher possui dois métodos importantes: – forward( ServletRequest request, ServletResponse response )  - Redireciona para a página; – include( ServletRequest request, ServletResponse response )  - Inclue a página no response. @regismelo 167
  • 168. Java Básico – Módulo 1 Java Web ForwardExemplo import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import java.util.*; public class ForwardExemplo extends HttpServlet { public void doGet ( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException { PrintWriter out; response.setContentType("text/html"); RequestDispatcher rd = request.getRequestDispatcher("/DiaHoje.jsp" ); rd.forward( request, response ); } } @regismelo 168
  • 169. Java Básico – Módulo 1 Java Web IncludeExemplo import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import java.util.*; public class IncludeExemplo extends HttpServlet { public void doGet ( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException { PrintWriter out; response.setContentType("text/html"); RequestDispatcher rd = request.getRequestDispatcher("/DiaHoje.jsp" ); rd.include( request, response ); } } @regismelo 169
  • 170. Java Básico – Módulo 1 Java Web IncludeExemplo2 public class IncludeExemplo2 extends HttpServlet { public void doGet ( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException { PrintWriter out; response.setContentType("text/html"); out = response.getWriter(); RequestDispatcher rd = request.getRequestDispatcher("/Menu.html" ); rd.include( request, response ); out.println( "Regis Melo" ); rd = request.getRequestDispatcher("/Bottom.html" ); rd.include( request, response ); } } @regismelo 170
  • 171. Java Básico – Módulo 1 Java Web Definindo atributos • Na API de Servlets, você pode disponibilizar informações entre servlets através da requisição; • O tempo de vida dessas informações é curto – somente o tempo da requisição. @regismelo 171
  • 172. Java Básico – Módulo 1 Java Web Definindo atributos Métodos da interface ServletRequest • setAttribute( String name, Object o )  - Disponibiliza uma informação que só será visível para essa requisição; • removeAttribute( String name )  - Remove um atributo da requisição • Object getAttribute( String name )  - Obtém o atributo da requisição • Enumeration getAttributeNames()  - Retorna o nome de todos os atributos na requisição. @regismelo 172
  • 173. Java Básico – Módulo 1 Java Web ForwardExemplo // import ... public class ForwardExemplo extends HttpServlet { public void doGet ( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException { PrintWriter out; response.setContentType("text/html"); RequestDispatcher rd = request.getRequestDispatcher("/DiaHoje.jsp" ); request.setAttribute( “cdCliente”, new Integer(10) ); rd.forward( request, response ); } Esse atributo estará disponível } para a página que está sendo redirecionada @regismelo 173
  • 174. Java Básico – Módulo 1 Java Web Exercício • Defina um arquivo HTML representando um header, outro representando um footer; • Faça com que seu servlet inclua esses dois arquivos e exiba um conteúdo qualquer. @regismelo 174
  • 175. Java Básico – Módulo 1 Java Web Exercício • Crie um novo servlet que receberá os dados de um formulário e gravará no banco de dados; • Caso os dados sejam gravados com sucesso, redirecione para uma página estática, mostrando sucesso; • Caso algum erro aconteça, redirecione para uma página de erro. @regismelo 175
  • 176. Java Básico – Módulo 1 Java Web Exercício • Ainda no mesmo exercício, crie um link na sua aplicação que listará os dados de uma tabela no banco de dados; • Você deverá criar dois servlets - um deverá fazer a consulta no banco de dados, e disponibilizar na requisição os registros utilizando um ArrayList. Após feito isso, esse servlet deverá redirecionar para outro servlet que construirá a página a partir do ArrayList disponibilizado na requisição. @regismelo 176
  • 177. Java Básico – Módulo 1 Java Web Para saber mais Core Servlets and JSP Pages (CSAJSP-Chapter15.pdf) 15.1 Forwarding Requests 354 Using Static Resources 354 Supplying Information to the Destination Pages 355 Interpreting Relative URLs in the Destination Page 357 Alternative Means of Getting a RequestDispatcher 358 15.2 Example: An On-Line Travel Agent 358 15.3 Including Static or Dynamic Content 375 15.4 Example: Showing Raw Servlet and JSP Output 377 15.5 Forwarding Requests From JSP Pages 380 @regismelo 177
  • 178. Java Básico – Módulo 1 Java Web Módulo IX Cookies @regismelo 178
  • 179. Java Básico – Módulo 1 Java Web Cookies • “Cookies são pequenas informações, enviadas pelo web server para um browser, que pode ser lida posteriormente do browser”; • Cookies foram introduzidos no Netscape Navigator (Netscape 0.94 beta); • Apesar de não serem um padrão oficial (definido pela IETF, Internet Engineering Task Force), cookies se tornaram um padrão de fato. • Atualmente, a especificação está padronizada através da RFC 2109 (http://www.ietf.org/rfc/rfc2109.txt) @regismelo 179
  • 180. Java Básico – Módulo 1 Java Web Cookies • A API Servlet provê a classe javax.servlet.http.Cookie para trabalhar com cookies; • Todos os detalhes do cookie, são gerenciados pela API. • Para criar um cookie new javax.servlet.http.Cookie( String name, String value ) • Para adicionar um cookie Cookie cookie = new Cookie( “ID”, “1975” ); response.addCookie( cookie ) @regismelo 180
  • 181. Java Básico – Módulo 1 Java Web Cookies • Cuidado! – Os cookies são enviados no cabeçalho HTTP, portanto, você deve adicionar os cookies antes de fechar o response; – Por padrão, os browsers devem suportar, no máximo, 20 cookies por site, 300 por usuário e limitam o tamanho dos cookies a no máximo 4096 bytes. @regismelo 181
  • 182. Java Básico – Módulo 1 Java Web Cookies • Para recuperar os cookies gravados, use: public Cookie cookie[ ] = request.getCookies() • Esse método, retorna um array de cookies que contém todos os cookies enviados pelo browser ou um array vazio, se nenhum cookie for enviado; • Cuidado! A API Servlet anterior a versão 2.1 podia retornar null se nenhum cookie fosse enviado. Por isso, considere que isso pode acontecer. @regismelo 182
  • 183. Java Básico – Módulo 1 Java Web Cookies • O código abaixo, exibe todos os cookies com seus devidos valores: public class Biscoito extends HttpServlet { public void doGet ( HttpServletRequest request, HttpServletResponse response ) { PrintWriter out; response.setContentType("text/html"); out = response.getWriter(); Cookie[] cookies = request.getCookies(); for( int i=0, n = cookies.length; i < n; i++ ) { out.println( “<p>” ); out.println( “Name – “ + cookies[i].getName() ); out.println( “Valor – “ + cookies[i].getValue() ); } out.close(); } @regismelo 183 }
  • 184. Java Básico – Módulo 1 Java Web Cookies • Uma boa dica para o uso de cookies é salvar um ID de usuário para personalizar o conteúdo; • Diversos sites realizam esse tipo de operação. A Amazon, por exemplo; • Porém, cuidado! O usuário poderá excluir ou até mesmo desabilitar os cookies. • Usar cookies “impunemente” é uma péssima prática. @regismelo 184

Notes de l'éditeur

  1. Comente nesse ponto a necessidade de conversão de tipos caso seja necessário receber um inteiro ou uma data, por exemplo.
  2. Comente nesse ponto a necessidade de conversão de tipos caso seja necessário receber um inteiro ou uma data, por exemplo.
  3. Comente nesse ponto a necessidade de conversão de tipos caso seja necessário receber um inteiro ou uma data, por exemplo.
  4. Comente nesse ponto a necessidade de conversão de tipos caso seja necessário receber um inteiro ou uma data, por exemplo.
  5. Comente nesse ponto a necessidade de conversão de tipos caso seja necessário receber um inteiro ou uma data, por exemplo.
  6. Comente nesse ponto a necessidade de conversão de tipos caso seja necessário receber um inteiro ou uma data, por exemplo.
  7. Comente nesse ponto a necessidade de conversão de tipos caso seja necessário receber um inteiro ou uma data, por exemplo.
  8. Comente nesse ponto a necessidade de conversão de tipos caso seja necessário receber um inteiro ou uma data, por exemplo.
  9. Comente nesse ponto a necessidade de conversão de tipos caso seja necessário receber um inteiro ou uma data, por exemplo.
  10. Comente nesse ponto a necessidade de conversão de tipos caso seja necessário receber um inteiro ou uma data, por exemplo.
  11. Comente nesse ponto a necessidade de conversão de tipos caso seja necessário receber um inteiro ou uma data, por exemplo.
  12. Comente nesse ponto a necessidade de conversão de tipos caso seja necessário receber um inteiro ou uma data, por exemplo.
  13. Comente nesse ponto a necessidade de conversão de tipos caso seja necessário receber um inteiro ou uma data, por exemplo.
  14. Veja o exemplo do Struts em ./samples/TagLibraries-BodyTagSupport-Struts.txt ou softsite.com.br/university/java/web/TagLibraries-BodyTagSupport-Struts.txt
  15. Veja o exemplo do Struts em ./samples/TagLibraries-BodyTagSupport-Struts.txt ou softsite.com.br/university/java/web/TagLibraries-BodyTagSupport-Struts.txt