JavaWeb--乱码及路径问题

JavaWeb乱码处理详解

      我们知道,计算机上所有的数据(包含各种各样的文件)保存在内存上是以二进制的形式保存的,所以我们就要对数据进行编码,之所以出现乱码是因为保存到内存时使用的编码类型和读取数据时所使用的编码类型不一致所导致的,还有一种情况是该编码不支持此类语言,比如iso-8859-1不支持中文.而在JavaWeb中乱码存在于服务器响应和客户端的请求中.可以用过滤器进行编码的统一处理(这在后续Filter的文章中会讲到的),这里我们先谈谈如何单独处理.

服务器响应中的乱码问题

      首先我们需要明确,服务器(eg:Tomcat)默认使用的编码类型是iso-8859-1,而大部分浏览器会把数据当成gbk的,因为服务器将响应体内容发给浏览器,服务器和浏览器编码不一致会出现乱码,更何况iso不支持中文,也会出现乱码.服务器可以使用response.setCharacterEncoding(“utf-8”);设置响应编码,即设置response.getWriter()这个字符流,使其发出去的字符都是”utf-8”编码,但这还不够,因为浏览器会把数据会用gbk进行解码,还是乱码,所以我们应该让浏览器知道响应用的是什么编码,所以应该用response.setHeader(“Content-Type”,”text/html;charset=utf-8”);设置响应头,使浏览器清楚响应的编码.后来由于这是共性的问题,所以Tomcat将其封装成一个方法,用如下代码代替上述两行代码response.setContentType(“text/html;charset=utf-8”),它的功能是设置服务器编码为utf-8,而且告诉浏览器服务器响应的编码.所以在响应之前,我们只需要调用它就不会出现乱码

客户端请求中的乱码问题

      请求中的乱码是服务器端在获取页面参数时出现的.客户端在给出参数时有两种方法,一是通过地址栏给出(是gbk的,一般很少用),另一种是点击表单或超链接进行传递(根据页面的响应决定,若页面响应过来是utf-8的,那参数就是utf-8的),而Tomcat(7.0及以前)默认使用的是iso处理请求参数.当为POST请求时,我们只需在获取参数前执行resquest.setCharacterEncoding(“utf-8”)就可以了.但是GET请求就不是如此,有两种处理方法:首先可以在Tomcat的安装目录下找到conf/server.xml,在connector标签中加入URIEncoding=”utf-8”,基本上也不用,因为我们发送给客户的是项目,未包含项目所要发布的环境,出现乱码时我们不可能给客户说去改配置文件,那么我们如何处理呢,首先我们先将参数传递过来String name=request.getParameter(“name”),然后再将其保存为iso的字节数组(因为Tomcat服务器默认是iso的),Byte bytes[]=name.getBytes(“ISO-8859-1”),在重新以utf-8编码进行保存,name=new String (bytes,”utf-8”);然后再获取就不会出现乱码了.

JavaWeb路径问题详解

      在JavaWeb中路径问题最常见的分为两种,一种是客户端路径,一种是服务器路径.

客户端路径

      客户端路径,故名思意就是在客户端使用到的路径,包括重定向路径,以及页面超链接和表单的路径,以”/”开头就是相对当前主机,简而言之就是需要输入项目名,如果不以”/”开头,就是相对当前页面所在路径.(一般不用)

服务器端路径

      服务器端路径就是这些路径是服务器对其进行直接操作的,包括转发和包含路径,以”/”开头相对当前项目路径,不以”/”开头,相对当前Servlet所在路径.

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值