当前位置:首页 > 青鸟知识 > java

处理JSP参数传递乱码

来源:湖南长沙it培训学校 发布日期:2016-05-21

计较机生于美国,英语是他的母语,而英语之外的其它说话对他来讲都是外语。他跟我们一样,不管外语把握到甚么程度,也不会像母语那样应用得那末好,经常也会出一些“拼写缺点”标题。

乱码的呈现底子缘由在于编码息争码应用了分歧的编码计划。好比用GBK编码的文件,用UTF-8往解码成果必定都是火星文。所以要处置这个标题,中间思惟就在于应用同一的编码计划。

jsp页面间的参数传送有以下几种格式:1、表单(form)的提交。2、直接应用URL后接参数的形势(超等链接)。3、若是两个jsp页面在两个分歧的窗口中,而且这两个窗口是父子的关系,子窗口中的jsp也可以应用javas cript和DOM(window.opener.XXX.value)来取得父窗口中的jsp的输出元素的值。上面就前两种格式中呈现的乱码标题做一下合成。

1、表单(form)的提交完成参数页面间的传送

在先容表单传送参数的内容之前,先来体会一些豫备常识。表单的提交格式和请求报文中对汉字的处置。

表单的提交格式:

但凡应用的表单的提交格式首要是:post和get两种。二者的辨别在于:post格式是把数据内容放在请求的数据注释部门,没有长度的限制;get格式则是把数据内容直接跟在请求的头部的URL前面,有长度的限制。上面是统一个页面两种格式的请求报许文。

在下面的请求页面的username输出框里输出的是“世界杯”三个汉字,password输出框中输出 123 后按下Submit按钮提交请求。截获到的请求报文以下:

请求报文中对汉字的处置:

从下面两种报文能够看出页面上输出的“世界杯”三个汉字被替代成了 %E4%B8%96%E7%95%8C%E6%9D%AF”多么一个字符串,然后发给办事器的。看到这,可以会有两个标题:标题1、这个字符串是甚么?标题2、为何要做多么的替代?

这个字符串是“世界杯”这三个汉字对应的 UTF-8”编码 E4B896E7958CE69DAF 在每一个字节前追加一个 % 后构成的。至于为何要做多么的转化,我的理解是:由于请求报文会以 ISO-8859-1 的编码格式编码后,经由过程搜集流的格式传送到办事器端。 ISO-8859-1 仅支撑数字、英文字母和一些特别字符,所以像汉字等多么的字符 ISO-8859-1 是不熟习的。所以就必需先给这些 ISO-8859-1 不支撑的字符做个“整形”手术。多么才干精确的将页面上的信息传送到办事器端。

这时分可以又会有别的一个标题:下面的例子中为何会选用 UTF-8 编码,其它的编码计划能够吗?谜底是能够的。在jsp页面代码的头部有多么一段代码 %@ page language= java contentType= text/html; charset=UTF-8 pageEncoding= UTF-8 % 此中charset的值就是阅读器在提交请求报文前,对请求报文做“整形”手术时用的字符集,同是也是阅读器诠释办事器的照应页面时的字符集。

在体会了以上内容后,起头合成表双方式传送参数的乱码标题。

以上例为例,点击 Submit 按钮后,阅读器将做完“整形”手术后的请求报文发送给WEB办事器上的Servlet容器,容器在收到这个请求报文后,会解析这个请求报文并用这个报文的信息天生一个HttpServletRequest对象,然后将这个HttpServletRequest对象传给这个页面所要请求的jsp或Servlet(上例中为 requestresult.jsp )。在这个被请求的jsp或Servlet(上例中为 requestresult.jsp )中,应用HttpServletRequest对象的getParameter( )方式来取得上一页面传来的参数。默许环境下,这一方式应用的是 ISO-8859-1 来解码,所以对英文或数字的参数值自然能精确取得,但对汉字多么的字符是解不出来的,由于那几个汉字曾做过“整形”手术,已认不出来了。要想再把它们认出来,那就得要把手术的主刀大夫找到,然后再做一次“恢复”手术。上面供应的几个计划,可用于分歧的环境。

下一篇:Java开辟Servlets

拒绝套路 试听有礼

数据已加密保证您的信息安全