SlideShare une entreprise Scribd logo
1  sur  24
Tratando as requisições
dos clientes com
formulários




  www.jetsoftware.com.br
Agenda
 Formulários de dados
 Criando e submetendo formulários HTML
 Lendo parâmetros individuais de request.
 Lendo um conjunto completo de parâmetros
 de request.
 Tratando dados incompletos e errados
 Tratando submissão de formulários
 incompletos.
 Filtrando caracteres especiais dos parâmetros
 de request.
               www.jetsoftware.com.br
Formulários básicos




          www.jetsoftware.com.br
A finalidade de
formulários de dados
 URL de exemplo
    http://host/path?user=Marcio+Marinho&orige
    m=RJ&dest=SP
 Parse dos dados ( query ) em CGI tradicional
    Ler os dados ( QUERY_STRING ) PARA
    requests de GET, outra forma ( standard input
    ) para requests POST.
    Cortar pares, separar os nomes dos
    parâmetros ( a esquerda do = ) dos valores
    dos parâmetros ( direita do = ).
    Decodificação da URL ( “%7E” vira “~”)
 Muito simples com servlets
    Use request.getParameter para todos os casos
    Recebemos o resultado da URL decodificada
                   www.jetsoftware.com.br
Criando formularios
     de dados (via GET)
<!DOCTYPE html PUBLIC quot;-//W3C//DTD HTML 4.01 Transitional//ENquot;
   quot;http://www.w3.org/TR/html4/loose.dtdquot;>
<html>
  <head>
    <meta http-equiv=quot;Content-Typequot; content=quot;text/html; charset=ISO-8859-1quot;>
    <title>Insert title here</title>
  </head>
  <body>
    <form name=quot;meu_formquot; action=“/testeWeb/MeuProgramaquot;>
        Nome: <input type=quot;textquot; name=quot;nomequot; value=quot;Marcioquot;/>
       <br>
        Sobre Nome: <input type=quot;textquot; name=quot;sobreNomequot; value=quot;Marinhoquot;/>
         <input type=quot;submitquot; value=quot;enviarquot;/>
    </form>
  </body>
</html>




                               www.jetsoftware.com.br
Formulário de entrada (GET)




          www.jetsoftware.com.br
Resultado




            www.jetsoftware.com.br
Criando formularios
de dados (via POST)
<!DOCTYPE html PUBLIC quot;-//W3C//DTD HTML 4.01 Transitional//ENquot;
   quot;http://www.w3.org/TR/html4/loose.dtdquot;>
<html>
 <head>
  <meta http-equiv=quot;Content-Typequot; content=quot;text/html; charset=ISO-8859-1quot;>
  <title>Insert title here</title>
 </head>
 <body>
  <form name=quot;meu_formquot; action=quot;/testeWeb/MeuProgramaquot;
   method=quot;POSTquot;>
     Nome: <input type=quot;textquot; name=quot;nomequot; value=quot;Marcioquot;/>
    <br>
     Sobre Nome: <input type=quot;textquot; name=quot;sobreNomequot; value=quot;Marinhoquot;/>
    <input type=quot;submitquot; value=quot;enviarquot;/>
  </form>
 </body>
</html>

                           www.jetsoftware.com.br
Formulário de entrada (POST)




          www.jetsoftware.com.br
Resultado




            www.jetsoftware.com.br
Lendo dados de formulários




          www.jetsoftware.com.br
Lendo dados dos
formulários dentro do servlet
 request.getParameter(“nome”);
    Retorna o valor da URL decodificada da primeira ocorrência do
    nome na query string.
    Funciona igualmente para requests GET e POST.
    Retorna null se o parâmetro não for encontrado
 request.getParameterValues(“nome”);
    Retorna um array de valores da URL decodificada de todas
    ocorrências do nome na query string.
    Retorna um array de um elemento se o parâmetro não estiver
    repetido.
    Retorna null se o parâmetro não existir na query string.
 request.getParameterNames() ou request.getParameterMap()
    Retorna uma Enumeration ou Map dos parâmetros do request.
    Geralmente usados para debug


                      www.jetsoftware.com.br
Formulário com parâmetros
<form name=“form_3paramquot; action=quot;/testeWeb/Servlet3Paramquot; method=quot;POSTquot;>
  Parametro 1: <input type=quot;textquot; name=quot;parametro1quot;/>
  <br>
  Parametro 2: <input type=quot;textquot; name=quot;parametro2quot;/>
  <br>
  Parametro 3: <input type=quot;textquot; name=quot;parametro3quot;/>
  <br>
  <input type=quot;submitquot; value=quot;enviarquot;/>
</form>




                             www.jetsoftware.com.br
Lendo os parâmetros
response.setContentType(quot;text/htmlquot;);
PrintWriter out = response.getWriter();
String docType = quot;<!DOCTYPE HTML PUBLIC quot;-//W3C//DTD HTML 4.0
   “ + quot;Transitional//ENquot;>nquot;;

String title = quot;Lendo um formulário com 3 parâmetrosquot;;
out.println(docType + quot;<HTML>nquot; +
   quot;<HEAD><TITLE>“ + title +
   quot;</TITLE></HEAD>nquot; +
   quot;<BODY BGCOLOR=quot;#FDF5E6quot;>nquot; +
   quot;<H1 ALIGN=quot;CENTERquot;>quot; + title +
   quot;</H1>nquot; + quot;<UL>nquot; +
   quot; <LI><B>parâmetro1</B>: “ +
   request.getParameter(quot;parametro1quot;) + quot;nquot; +
   quot; <LI><B>parâmetro2</B>: “ +
   request.getParameter(quot;parametro2quot;) + quot;nquot; +
   quot; <LI><B>parâmetro3</B>: “ +
   request.getParameter(quot;parametro3quot;) + quot;nquot; +
   quot;</UL>nquot; +
   quot;</BODY></HTML>quot;); www.jetsoftware.com.br
Resultado




            www.jetsoftware.com.br
Lendo todos os parâmetros
@SuppressWarnings(quot;uncheckedquot;)
public void MostraTodosParametros(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {

  response.setContentType(quot;text/htmlquot;);
  PrintWriter out = response.getWriter();
  String docType = quot;<!DOCTYPE HTML PUBLIC quot;-//W3C//DTD HTML 4.0 quot; +
                           quot;Transitional//ENquot;>nquot;;
  String title = quot;Lendo todos parâmetrosquot;;
  out.println(docType +
                 quot;<HTML>nquot; +
                 quot;<HEAD><TITLE>quot;+title + quot;</TITLE></HEAD>nquot;+
                 quot;<BODY BGCOLOR=quot;#FDF5E6quot;>nquot; +
                 quot;<H1 ALIGN=CENTER>quot; + title + quot;</H1>nquot; +
                 quot;<TABLE BORDER=1 ALIGN=CENTER>nquot; +
                 quot;<TR BGCOLOR=quot;#FFAD00quot;>nquot; +
                 quot;<TH>Parameter Name<TH>Parameter Value(s)quot;);



                         www.jetsoftware.com.br
Lendo todos os parâmetros
    Enumeration paramNames = request.getParameterNames();
    while (paramNames.hasMoreElements()) {
      String paramName = (String) paramNames.nextElement();
      out.print(quot;<TR><TD>quot; + paramName + quot;n<TD>quot;);
      String[] paramValues = request.getParameterValues(paramName);
      if (paramValues.length == 1) {
        String paramValue = paramValues[0];
        if (paramValue.length() == 0)
          out.println(quot;<I>Sem Valor</I>quot;);
        else
          out.println(paramValue);
      } else {
        out.println(quot;<UL>quot;);
        for (int i = 0; i < paramValues.length; i++) {
          out.println(quot;<LI>quot; + paramValues[i]);
        }
        out.println(quot;</UL>quot;);
      }
    }
    out.println(quot;</TABLE>n</BODY></HTML>quot;);
}




                               www.jetsoftware.com.br
Lendo todos os parâmetros
formulário




          www.jetsoftware.com.br
Lendo todos os parâmetros
resultado




          www.jetsoftware.com.br
Tratando dados de formulário




          www.jetsoftware.com.br
Verificando falta de dados
ou dados errados
 Falta de dados
     Campo(s) faltando no formulário
         getParameter retornará null
     Campo em branco quando o formulário é submetido
         getParameter retornará uma string vazia (ou pode ser uma string com espaço em
         branco)
     Devemos checar por null antes de checarmos por string vazias.

  String param = request.getParameter(“nome”);
  if ( (param==null) || (param.trim().equals(“”))) {
    trateValoresFaltando(...);
  else
    facaOutraCoisa(param);
  }

     Dados malformados
         O valor é uma string não vazia, mas num formato errado.


                           www.jetsoftware.com.br
Verificando falta de dados
ou dados errados
 Use valores “default”
    Trocar valores faltando por valores padrão específicos da aplicação.
    Veja no próximo exemplo.
 Exiba o formulário novamente
    Exiba o formulário de novo, com os valores faltando em destaque.
    Os valores digitados anteriormente devem ser preservados.
    Algumas opções para implementar :
        Ter o mesmo servlet para apresentar o formulário, processar os dados,
        e apresentar o resultado.
        Ter um servlet para apresentar o formulário, um segundo servlet para
        processar os dados e exibir o resultado
        Ter uma página JSP para apresentar o formulário, um servlet ou JSP
        para processar os dados e apresentar o resultado.
        Ter um JSP para apresentar o formulário, preencher automáticamente
        os valores obtidos em um objeto de dados. Ter um servlet ou página
        JSP para processar e exibir os resultados.


                         www.jetsoftware.com.br
Tratando dados que faltaram
String nomeUsuario =
   request.getParameter(“nomeUsuario”);
nomeUsuario = trocarSeFaltar(nomeUsuario,”guest”);

private String trocarSeFaltar(String orig,
String destino) {
  if ((orig == null) ||
      (orig.trim().equals(quot;quot;))) {
    return(destino);
  } else {
    return(orig);
  }
}




                   www.jetsoftware.com.br
Perguntas ?




          www.jetsoftware.com.br

Contenu connexe

Similaire à 03 - Formulários &amp; Dados

Java mais ágil que nunca no desenvolvimento Web
Java mais ágil que nunca no desenvolvimento WebJava mais ágil que nunca no desenvolvimento Web
Java mais ágil que nunca no desenvolvimento WebBruno Borges
 
Apps Web em Wicket e Scala no GlassFish Java EE 6
Apps Web em Wicket e Scala no GlassFish Java EE 6Apps Web em Wicket e Scala no GlassFish Java EE 6
Apps Web em Wicket e Scala no GlassFish Java EE 6Bruno Borges
 
Formulários Web em PHP com plug-ins avançados e AJAX
Formulários Web em PHP com plug-ins avançados e AJAXFormulários Web em PHP com plug-ins avançados e AJAX
Formulários Web em PHP com plug-ins avançados e AJAXManuel Lemos
 
Apresentação Java Web Si Ufc Quixadá
Apresentação Java Web Si Ufc QuixadáApresentação Java Web Si Ufc Quixadá
Apresentação Java Web Si Ufc QuixadáZarathon Maia
 
Mini Curso de Python para Coding Dojo
Mini Curso de Python para Coding DojoMini Curso de Python para Coding Dojo
Mini Curso de Python para Coding DojoFabricio NErdmann
 
Introdução a linguagem de programação Python
Introdução a linguagem de programação PythonIntrodução a linguagem de programação Python
Introdução a linguagem de programação PythonMayron Cachina
 
LINQ - Language Integrated Query
LINQ - Language Integrated QueryLINQ - Language Integrated Query
LINQ - Language Integrated QueryDalton Valadares
 
[CLPE] Novidades do Asp.net 4
[CLPE] Novidades do Asp.net 4[CLPE] Novidades do Asp.net 4
[CLPE] Novidades do Asp.net 4Felipe Pimentel
 
Desenvolvendo aplicações web com o framework cakephp
Desenvolvendo aplicações web com o framework cakephpDesenvolvendo aplicações web com o framework cakephp
Desenvolvendo aplicações web com o framework cakephpRodrigo Aramburu
 

Similaire à 03 - Formulários &amp; Dados (20)

Tutorial Dwr - Combos Dependentes
Tutorial Dwr - Combos DependentesTutorial Dwr - Combos Dependentes
Tutorial Dwr - Combos Dependentes
 
Beagajs
BeagajsBeagajs
Beagajs
 
Aula 2 - ASP
Aula 2 - ASPAula 2 - ASP
Aula 2 - ASP
 
Java mais ágil que nunca no desenvolvimento Web
Java mais ágil que nunca no desenvolvimento WebJava mais ágil que nunca no desenvolvimento Web
Java mais ágil que nunca no desenvolvimento Web
 
Java script aula 08 - formulários
Java script   aula 08 - formuláriosJava script   aula 08 - formulários
Java script aula 08 - formulários
 
Ganhando tempo com casos de testes
Ganhando tempo com casos de testesGanhando tempo com casos de testes
Ganhando tempo com casos de testes
 
Apps Web em Wicket e Scala no GlassFish Java EE 6
Apps Web em Wicket e Scala no GlassFish Java EE 6Apps Web em Wicket e Scala no GlassFish Java EE 6
Apps Web em Wicket e Scala no GlassFish Java EE 6
 
Jdbc e hibernate
Jdbc e hibernateJdbc e hibernate
Jdbc e hibernate
 
Formulários Web em PHP com plug-ins avançados e AJAX
Formulários Web em PHP com plug-ins avançados e AJAXFormulários Web em PHP com plug-ins avançados e AJAX
Formulários Web em PHP com plug-ins avançados e AJAX
 
Apresentação Java Web Si Ufc Quixadá
Apresentação Java Web Si Ufc QuixadáApresentação Java Web Si Ufc Quixadá
Apresentação Java Web Si Ufc Quixadá
 
Spring Capitulo 02
Spring Capitulo 02Spring Capitulo 02
Spring Capitulo 02
 
Php 04 Mysql
Php 04 MysqlPhp 04 Mysql
Php 04 Mysql
 
Mini Curso de Python para Coding Dojo
Mini Curso de Python para Coding DojoMini Curso de Python para Coding Dojo
Mini Curso de Python para Coding Dojo
 
Php 07 Cakephp
Php 07 CakephpPhp 07 Cakephp
Php 07 Cakephp
 
Introdução a linguagem de programação Python
Introdução a linguagem de programação PythonIntrodução a linguagem de programação Python
Introdução a linguagem de programação Python
 
LINQ - Language Integrated Query
LINQ - Language Integrated QueryLINQ - Language Integrated Query
LINQ - Language Integrated Query
 
[CLPE] Novidades do Asp.net 4
[CLPE] Novidades do Asp.net 4[CLPE] Novidades do Asp.net 4
[CLPE] Novidades do Asp.net 4
 
Introducao logica
Introducao logicaIntroducao logica
Introducao logica
 
Desenvolvendo aplicações web com o framework cakephp
Desenvolvendo aplicações web com o framework cakephpDesenvolvendo aplicações web com o framework cakephp
Desenvolvendo aplicações web com o framework cakephp
 
Uma Breve Introdução ao MongoDB
Uma Breve Introdução ao MongoDBUma Breve Introdução ao MongoDB
Uma Breve Introdução ao MongoDB
 

03 - Formulários &amp; Dados

  • 1. Tratando as requisições dos clientes com formulários www.jetsoftware.com.br
  • 2. Agenda Formulários de dados Criando e submetendo formulários HTML Lendo parâmetros individuais de request. Lendo um conjunto completo de parâmetros de request. Tratando dados incompletos e errados Tratando submissão de formulários incompletos. Filtrando caracteres especiais dos parâmetros de request. www.jetsoftware.com.br
  • 3. Formulários básicos www.jetsoftware.com.br
  • 4. A finalidade de formulários de dados URL de exemplo http://host/path?user=Marcio+Marinho&orige m=RJ&dest=SP Parse dos dados ( query ) em CGI tradicional Ler os dados ( QUERY_STRING ) PARA requests de GET, outra forma ( standard input ) para requests POST. Cortar pares, separar os nomes dos parâmetros ( a esquerda do = ) dos valores dos parâmetros ( direita do = ). Decodificação da URL ( “%7E” vira “~”) Muito simples com servlets Use request.getParameter para todos os casos Recebemos o resultado da URL decodificada www.jetsoftware.com.br
  • 5. Criando formularios de dados (via GET) <!DOCTYPE html PUBLIC quot;-//W3C//DTD HTML 4.01 Transitional//ENquot; quot;http://www.w3.org/TR/html4/loose.dtdquot;> <html> <head> <meta http-equiv=quot;Content-Typequot; content=quot;text/html; charset=ISO-8859-1quot;> <title>Insert title here</title> </head> <body> <form name=quot;meu_formquot; action=“/testeWeb/MeuProgramaquot;> Nome: <input type=quot;textquot; name=quot;nomequot; value=quot;Marcioquot;/> <br> Sobre Nome: <input type=quot;textquot; name=quot;sobreNomequot; value=quot;Marinhoquot;/> <input type=quot;submitquot; value=quot;enviarquot;/> </form> </body> </html> www.jetsoftware.com.br
  • 6. Formulário de entrada (GET) www.jetsoftware.com.br
  • 7. Resultado www.jetsoftware.com.br
  • 8. Criando formularios de dados (via POST) <!DOCTYPE html PUBLIC quot;-//W3C//DTD HTML 4.01 Transitional//ENquot; quot;http://www.w3.org/TR/html4/loose.dtdquot;> <html> <head> <meta http-equiv=quot;Content-Typequot; content=quot;text/html; charset=ISO-8859-1quot;> <title>Insert title here</title> </head> <body> <form name=quot;meu_formquot; action=quot;/testeWeb/MeuProgramaquot; method=quot;POSTquot;> Nome: <input type=quot;textquot; name=quot;nomequot; value=quot;Marcioquot;/> <br> Sobre Nome: <input type=quot;textquot; name=quot;sobreNomequot; value=quot;Marinhoquot;/> <input type=quot;submitquot; value=quot;enviarquot;/> </form> </body> </html> www.jetsoftware.com.br
  • 9. Formulário de entrada (POST) www.jetsoftware.com.br
  • 10. Resultado www.jetsoftware.com.br
  • 11. Lendo dados de formulários www.jetsoftware.com.br
  • 12. Lendo dados dos formulários dentro do servlet request.getParameter(“nome”); Retorna o valor da URL decodificada da primeira ocorrência do nome na query string. Funciona igualmente para requests GET e POST. Retorna null se o parâmetro não for encontrado request.getParameterValues(“nome”); Retorna um array de valores da URL decodificada de todas ocorrências do nome na query string. Retorna um array de um elemento se o parâmetro não estiver repetido. Retorna null se o parâmetro não existir na query string. request.getParameterNames() ou request.getParameterMap() Retorna uma Enumeration ou Map dos parâmetros do request. Geralmente usados para debug www.jetsoftware.com.br
  • 13. Formulário com parâmetros <form name=“form_3paramquot; action=quot;/testeWeb/Servlet3Paramquot; method=quot;POSTquot;> Parametro 1: <input type=quot;textquot; name=quot;parametro1quot;/> <br> Parametro 2: <input type=quot;textquot; name=quot;parametro2quot;/> <br> Parametro 3: <input type=quot;textquot; name=quot;parametro3quot;/> <br> <input type=quot;submitquot; value=quot;enviarquot;/> </form> www.jetsoftware.com.br
  • 14. Lendo os parâmetros response.setContentType(quot;text/htmlquot;); PrintWriter out = response.getWriter(); String docType = quot;<!DOCTYPE HTML PUBLIC quot;-//W3C//DTD HTML 4.0 “ + quot;Transitional//ENquot;>nquot;; String title = quot;Lendo um formulário com 3 parâmetrosquot;; out.println(docType + quot;<HTML>nquot; + quot;<HEAD><TITLE>“ + title + quot;</TITLE></HEAD>nquot; + quot;<BODY BGCOLOR=quot;#FDF5E6quot;>nquot; + quot;<H1 ALIGN=quot;CENTERquot;>quot; + title + quot;</H1>nquot; + quot;<UL>nquot; + quot; <LI><B>parâmetro1</B>: “ + request.getParameter(quot;parametro1quot;) + quot;nquot; + quot; <LI><B>parâmetro2</B>: “ + request.getParameter(quot;parametro2quot;) + quot;nquot; + quot; <LI><B>parâmetro3</B>: “ + request.getParameter(quot;parametro3quot;) + quot;nquot; + quot;</UL>nquot; + quot;</BODY></HTML>quot;); www.jetsoftware.com.br
  • 15. Resultado www.jetsoftware.com.br
  • 16. Lendo todos os parâmetros @SuppressWarnings(quot;uncheckedquot;) public void MostraTodosParametros(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType(quot;text/htmlquot;); PrintWriter out = response.getWriter(); String docType = quot;<!DOCTYPE HTML PUBLIC quot;-//W3C//DTD HTML 4.0 quot; + quot;Transitional//ENquot;>nquot;; String title = quot;Lendo todos parâmetrosquot;; out.println(docType + quot;<HTML>nquot; + quot;<HEAD><TITLE>quot;+title + quot;</TITLE></HEAD>nquot;+ quot;<BODY BGCOLOR=quot;#FDF5E6quot;>nquot; + quot;<H1 ALIGN=CENTER>quot; + title + quot;</H1>nquot; + quot;<TABLE BORDER=1 ALIGN=CENTER>nquot; + quot;<TR BGCOLOR=quot;#FFAD00quot;>nquot; + quot;<TH>Parameter Name<TH>Parameter Value(s)quot;); www.jetsoftware.com.br
  • 17. Lendo todos os parâmetros Enumeration paramNames = request.getParameterNames(); while (paramNames.hasMoreElements()) { String paramName = (String) paramNames.nextElement(); out.print(quot;<TR><TD>quot; + paramName + quot;n<TD>quot;); String[] paramValues = request.getParameterValues(paramName); if (paramValues.length == 1) { String paramValue = paramValues[0]; if (paramValue.length() == 0) out.println(quot;<I>Sem Valor</I>quot;); else out.println(paramValue); } else { out.println(quot;<UL>quot;); for (int i = 0; i < paramValues.length; i++) { out.println(quot;<LI>quot; + paramValues[i]); } out.println(quot;</UL>quot;); } } out.println(quot;</TABLE>n</BODY></HTML>quot;); } www.jetsoftware.com.br
  • 18. Lendo todos os parâmetros formulário www.jetsoftware.com.br
  • 19. Lendo todos os parâmetros resultado www.jetsoftware.com.br
  • 20. Tratando dados de formulário www.jetsoftware.com.br
  • 21. Verificando falta de dados ou dados errados Falta de dados Campo(s) faltando no formulário getParameter retornará null Campo em branco quando o formulário é submetido getParameter retornará uma string vazia (ou pode ser uma string com espaço em branco) Devemos checar por null antes de checarmos por string vazias. String param = request.getParameter(“nome”); if ( (param==null) || (param.trim().equals(“”))) { trateValoresFaltando(...); else facaOutraCoisa(param); } Dados malformados O valor é uma string não vazia, mas num formato errado. www.jetsoftware.com.br
  • 22. Verificando falta de dados ou dados errados Use valores “default” Trocar valores faltando por valores padrão específicos da aplicação. Veja no próximo exemplo. Exiba o formulário novamente Exiba o formulário de novo, com os valores faltando em destaque. Os valores digitados anteriormente devem ser preservados. Algumas opções para implementar : Ter o mesmo servlet para apresentar o formulário, processar os dados, e apresentar o resultado. Ter um servlet para apresentar o formulário, um segundo servlet para processar os dados e exibir o resultado Ter uma página JSP para apresentar o formulário, um servlet ou JSP para processar os dados e apresentar o resultado. Ter um JSP para apresentar o formulário, preencher automáticamente os valores obtidos em um objeto de dados. Ter um servlet ou página JSP para processar e exibir os resultados. www.jetsoftware.com.br
  • 23. Tratando dados que faltaram String nomeUsuario = request.getParameter(“nomeUsuario”); nomeUsuario = trocarSeFaltar(nomeUsuario,”guest”); private String trocarSeFaltar(String orig, String destino) { if ((orig == null) || (orig.trim().equals(quot;quot;))) { return(destino); } else { return(orig); } } www.jetsoftware.com.br
  • 24. Perguntas ? www.jetsoftware.com.br