Encode de parâmetros em requisição GET ou POST

5 respostas
P

Pessoal,

tenho uma página JSP com uma form simples: um campo de texto e um botão de submit.
A action da form aponta para um servlet, que imprime o conteudo do parâmetro associado a caixa de texto, com um simples System.out.println(…)

Problema:
se digitar na caixa de texto caracteres com acento, o parâmetro impresso pelo servlet não está codificado (exemplo: versão --> versão).

Eis o código da página JSP:

<%@ page contentType="text/html"%>
<%@ page pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title></title>
    </head>
    <body>
        <form action="myLittle.do" method="post">
            Texto: <input id="texto" type="text" name="texto" value="" /><br>
            <input type="submit"/>
        </form>
    </body>
</html>

e eis o código do servlet:

/*
 * MyLittleServlet.java
 *
 * Created on May 14, 2007, 10:22 PM
 *
 */

package org.patrizio.servlets;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 *
 * @author Patrizio
 */
public class MyLittleServlet extends HttpServlet {
    
    /**
     * Overrides <code>HttpServlet</code>.
     */
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
    throws ServletException, IOException {
        processRequest(req, resp);
    }

    /**
     * Overrides <code>HttpServlet</code>.
     */
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
    throws ServletException, IOException {
        processRequest(req, resp);
    }
    
    /**
     * Método para processar requisições GET e POST.
     */
    private void processRequest(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        
        String s = request.getParameter("texto");
        
        // Ipoteticamente, poderia inserir a String em uma base de dados.
        System.out.println(s);
    }
    
}

O problema acontece tanto com requisições GET que com POST.
Deve ser uma besteira, más, pois sou iniciante em java web …

Valeu

5 Respostas

F

Olá

Isso aqui esta sendo impresso no console do DOS

// Ipoteticamente, poderia inserir a String em uma base de dados. System.out.println(s);
Se for, é normal acontecer isso. Experimenta jogar em outra pagina.

P

Em outra página imprime ok, pois decodifica o texto em UTF-8 de novo.
Porém, se o valor precisa ser processado dentro da Servlet (por exemplo repassando-o para uma camada de persistência), é preciso decodificar o texto (versão --> versão).

Onde está o erro? No envio de dados (página JSP) o no controlador (Servlet)?

Obrigado

R

Passe para header do HTTP que vc quer utilizar a codificação UTF-8 com metodo setContentType(); do objeto HttpServletResponse

/**
      * Método para processar requisições GET e POST.
      */
     private void processRequest(HttpServletRequest request,
             HttpServletResponse response) throws ServletException, IOException {
         
        response.setContentType("text/html; charset=utf-8"); 
        String s = request.getParameter("texto");
         
         // Ipoteticamente, poderia inserir a String em uma base de dados.
         System.out.println(s);
     }

Uma outra forma é no HTML :

&lt;form action="myLittle.do" method="post" accept-charset ="utf-8"&gt;
             Texto: &lt;input id="texto" type="text" name="texto" value="" /&gt;<br>
             &lt;input type="submit"/&gt;
         &lt;/form&gt;
P

Fiz um teste usando uma página HTML para a FORM, sem essas diretivas no começo da página:

<%@ page contentType="text/html"%>
<%@ page pageEncoding="UTF-8"%>

Funcionou.
Então retirei as diretivas “page” do começo da página JSP (a mesma que postei na primeira mensagem) e funcionou cara.
Ainda não entendi porque, então perguntarei para o meu amigo google … :slight_smile:
Mas valeu pela dica.

P

A proposito. Sem retirar essas duas diretivas não funciona de jeioto nenhum (pelo que eu vi …)

Criado 19 de maio de 2007
Ultima resposta 20 de mai. de 2007
Respostas 5
Participantes 3