您的位置:首页 > 编程语言 > Java开发

JavaWeb 修炼之路(六)请求和响应中的编码

2017-06-09 09:12 183 查看

编码

常见字符编码:iso-8859-1(不支持中文)、gbk(系统默认编码,中国的国际码)、utf-8(万国码,支持全世界编码)

下面这张图是服务端向客户端发送数据的编解码过程:



这个是客户端请求后,在服务端获取参数的解码过程:



GET请求编码设置:需要在Tomcat的/conf/server.xml中添加一句话(最好不要用!)



尽量使用一下方法:

String name = request.getParameter("name");


byte[] bytes = name.getBytes("ISO-8859-1");


name = new String(bytes,"utf-8");


响应编码:

当时用
response.getWriter()
来向客户端发送字符数据时,如果在之前没有设置编码,默认使用iso。因为iso不支持中文,所以一定会出现乱码;

当使用
response.getWriter()
之前可以使用
response.setCharacterEncoding()
来设置字符流的编码为gbk或utf-8

在使用
response.getWriter()
之前可以用
response.setHeader("Content-Type","text/html;charset=utf-8")
来设置响应头,通知浏览器这边使用的是

response.setHeader("Content-Type","text/html;charset=utf-8")
的快捷方法是:
setContentType("text/html;charset=utf-8")


请求编码:

客户端发送给服务器的请求参数是什么编码:
客户端首先打开一个页面,然后在页面中提交表单或者点击超链接!在请求这个页面时,服务器响应的编码是什么,客户端发送请求时的编码就是什么;

服务器端默认使用什么编码来解码参数:
服务器默认使用iso-8859-1来解码!所以一定会出现乱码!因为iso不支持中文!

GET请求编码处理:

String username = new String(request.getParameter("iso-8859-1"),"utf-8");


server.xml
中配置
URIEncodeing=utf-8


POST请求编码处理:
String username = new String(request.getParameter("iso-8859-1"),"utf-8");


在获取参数之前调用
request.setCharacterEncoding("utf-8")


URL编码:
表单的类型:Content-Type:application/x-www-form-urlencoded,就是把中文转换成%后面跟随两位的十六进制
为什么要用 ?在客户端和服务器之间传递中文时,需要把它转换成网络适合的方式。

它不是字符编码;

它是用来在客户端和服务器之间传递参数的一种方式;

URL编码需要先指定一种字符编码,把字符串解码后得到字节数组,然后把小于0的字节+256,再转换成16进制,前面加个“%”;

POST请求默认使用URL编码!Tomcat会自动使用URL解码!

URL编码:
String username = URLEncoder.encode(username,"utf-8")


URL解码:
String username = URLDecoder.decode(username,"utf-8")


![URL编解码](https://img-blog.csdn.net/20170612092234970?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2VpeGluXzM4ODI5NDMx/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

最后需要把链接中的中文参数,使用URL编码!

## 路径 ##

web.xml中<url-pattern>路径
要么以“*”开头,要么以“/”开头

转发和包含路径
(常用)以“/”开头:相对当前项目路径;

不以“/”开头:相对当前Servlet路径;

重定向路径(客户端路径)
以“/”开头,相对当前主机,所以需要自己手动添加项目;

页面中超链接和表单路径
与重定向相同,都是客户端路径,需要添加项目名!

ServletContext获取资源路径
相对当前项目目录,即当然index.jsp所在目录;

ClassLoader获取资源路径
相对classes目录

Class获取资源路径
以“/”开头相对classes目录

不以“/”开头相对当前.class文件所在目录

9191
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: