Java - Servlet post参数写错

时间:2016-01-13 05:45:38

标签: java servlets post encoding

我在netbeans项目上正常工作。我将post参数从html表单发送到servlet,然后使用request.getParameter捕获它们......一切正常。但几个小时前,我不知道netbeans发生了什么,因为我创建的所有新servlet,请求的post参数编码都不好。我的意思是,如果我发送“tílde”或“ñ”,它将被收到“tÃlde”或“Ô。旧的servlet仍然正常工作,很好地接收了post参数。

使用GET参数工作正常,但POST参数始终与新servlet相同。旧的servlet工作得很好。

我测试了使用php接收参数并且它们被正确格式化,所以我放弃了作为jsp编码的可能性。

我认为可能是netbeans错误,但我真的不知道。

这里有一些代码和图片:

servlet

public class TestParameters extends HttpServlet {

protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    response.setContentType("text/html;charset=UTF-8");
    PrintWriter out = response.getWriter();

    System.out.println("> Ñ,ñ, tílde. Parámetros: " + request.getParameter("name"));
}

JSP:

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    </head>
    <body>
        <form method="post" action="/TestParameters">
            <input type="text" name="name">
            <button type="submit">Enviar</button>
        </form>
    </body>
</html>

Html输入:

Text for example

使用POSTparámeters的NetBeans控制台:

enter image description here

带有GETparámeters的Netbeans控制台:

enter image description here

使用php接收,效果很好:

echo $_POST['name'];

Php html echo:

enter image description here

1 个答案:

答案 0 :(得分:0)

最后我解决了我的问题。我已经实现了一个编码所有请求的过滤器。但这仅适用于我需要的POST参数。那是因为对于POST参数,Tomcat的默认编码是iso-8859-1而我忽略了这一点。对于GET参数,方式是

Encoding filter for java web application