servlet 解决乱码问题解决乱码问题
主要介绍了servlet 解决乱码问题 ,需要的朋友可以参考下
对于servlet大家应该都很熟悉了,今天再复习一下,如果有哪里写的不好或不对的地点希望广大的网友批评指正。今天只
讨论get和post两w种方式,他们之间有很多的不同点,所以解决编码的方式也会不一样,post的乱码问题好解决一点,下面先
简单说下http协议,以便我能更好的记忆原理性的东西和他们之间的不同点。
get方式和post方式都是基于http协议的,它的目的是为了提供一种发布和接收html页面的方法,由客户端发起请求,服务器端
进行响应。
一个完整的请求消息包括:一个请求行,若干消息头和请求实体内容
请求行包括请求方式(get或post), 资源路径(要访问的地址),http版本号(http1.1)
若干消息头(比如包涵了浏览器的内核信息(user-agent),打开它的父页面是谁(refer)等
在请求实体内容和消息头中有一行空行,将消息头和请求实体内容分开,实体内容有用户提交的
一个完整的响应消息包括:状态行,一个或多个应答头,一个空行,响应实体
状态行:包括http协议版本号,状态码和原因叙述
常见状态码:200 正常
404:请求资源不存在
500:服务器内部错误
粗略说完http后可以介绍get和post方式的不同之处了
get方式:
get方式是将提交的内容放到url的后面,长度有所限制,post和get都是基于http协议的,get方式是放到了请求行里,因为
它的参数是在url中的,而post方式是放到请求实体内容里的,post方式相对安全,浏览器不保留缓存信息,而get方式会wk保
留缓存,可以从浏览器的历史记录里查看提交的内容,并且get方式长度有限制,而post没有。
正是因为get方式和post方式提交数据时在http协议的位置不同,解决他们的编码方式也会不同
post方式乱码问题解决:
在servlet的service方法(doGet或doPost方法也可以)中,将request的编码设置为UTF-8
req.setCharacterEncoding("UTF-8");
这样,request的编码就没有问题了,然后将response的编码也设置为UTF-8;
resp.setCharacterEncoding("UTF-8");
这样,response的编码也没有问题了,但是这样写了以后到浏览器还是可能会出问题的,因为浏览器不知道你的编码格
式是什么,所以就按着浏览器的默认格式来显示,所以要把浏览器进行显示时的编码方式也要设置为UTF-8,语句如下:
resp.setContextType("text/html;charset=utf-8");
同时还要保证你的开发工具编码和项目的编码一致,不然可能会出现乱码问题,这里都是以UTF-8为例
get方式乱码问题解决:
get方式除了上面的操作外还要在tomcat的conf目录下的server.xml配置文件里面加上一句话,找到下面这句话,
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
修改后为
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" userBodyEncodingForURI="true" />