Tomcat

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > Tomcat > Tomcat中GET和POST请求时乱码

Tomcat中GET和POST请求时乱码问题及解决

作者:编程工人

这篇文章主要介绍了Tomcat中GET和POST请求时乱码问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

Tomcat中GET和POST请求时乱码

自从Tomcat5.x开始,GET和POST方法提交的信息,Tomcat采用了不同的方式来处理编码。

对于POST请求,Tomcat会仍然使用request.setCharacterEncoding方法所设置的编码来处理,如果未设置,则使用默认的iso-8859-1编码。

而GET请求则不同,Tomcat对GET请求并不会考虑使用request.setCharacterEncoding方法设置的编码,而会永远使用iso-8859-1编码,因此,tomcat将会使用iso-8859-1将提交的字节转换成字符串。

一般的处理乱码的方式都是用

request.setCharacterEncoding("utf-8");

但是这种方法只对POST方法提交的表单才有效果。

提供一下四种解决方法

1. 将GET请求改成POST请求,然后就可以使用request.setCharacterEncoding("utf-8");方法设置编码,并使用request.getParameter方法直接获得中文请求参数了,这种方法简单明了。

2.不用改GET请求,在Servlet中使用如下的代码来得到中文请求参数。

String name = new String(request.getParameter("name").getBytes("ISO-8859-1"), "utf-8");

3.对于GET方法,还可以通过修改Tomcat的配置来搞定,方法如下:

在conf/server.xml里的<Connector />标签内加URIEncoding="GBK",或者是UTF-8。

如:

<Connector port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="utf-8"/>

4.在使用get传输参数时,将参数中的中文转换成url格式,也就是使用urlEncode和urlDecode来传输,使用这种方式就是把中文转换成以%开头的编码在url中传输。

使用这种方法时,要注意两点:

对于POST方法提交的表单,上面的方法二仍然有效,个人建议使用方法二,因为方法二的代码是利用了Java的编码能力,对于所有的Web服务器都会有效,而setCharacterEncoding方法是通过Web服务器支持的,并不是所有的Web服务器都会对该方法有很好的支持。

Tomcat无法响应get post请求

这是一个新手很容易犯的错误,因为我是在B站跟着尚硅谷学的servlet,它的代码PrintWriter对象用完之后居然没有关闭!!!

导致我在idea运行的时候是可以正常运行的,然后自己导出war包部署项目就出现tomcat无法响应请求。

doGet和doPost正确方法:

public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
        response.setContentType("text/html");
        // Hello
        PrintWriter out = response.getWriter();
        out.println("<html><body>");
        out.println("<h1>" + message + "</h1>");
        out.println("</body></html>");
        out.flush();
        out.close();
}

一定要记得加入out.close()啊。

-----------------------------分割线--------------------

我发现还有一个错误,就是windows下的tomcat控制台需要按回车键程序才能继续执行,解决方法:

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文