最近学了jquery ui。在做一个小函数的时候,我需要获取前台值,通过Ajax传递给Servlet,然后返回数据结果。但是,当Servlet接受参数时,发现它通过后台打印接受乱码。代码示例如下:
public void doGet(Httpservletrequest请求,HttpServletResponse响应)引发ServletException,IOException { response . setcontenttype(' text/html;charset=utf-8 ');request . setcharacterencoding(' utf-8 ');PrintWriter out=response . getwriter();string test word=request . getparameter(' critical lword ')system . out . println(test word);out . println(test word);out . flush();out . close();}我只使用ajax get方法传递它,所以上面只截取了doGet()方法的代码。那么乱码有哪些情况呢?我来说说我的看法。我会以代码和截图的形式给出每个阶段的具体方法:
1.确保jsp页面没有乱码字符
首先,确保您的JSP页面没有乱码字符。具体代码如下:
“% @”页面页面编码=“utf-8”内容类型=“文本/html;可以在网页顶部添加charset=utf-8“%的内容,补充页面说明两个参数的具体含义。很多人可能会用,但我觉得有必要了解以下几点:
页面编码参数
PageEncoding属性用于指定JSP页面的字符编码,默认值为ISO-8859-1。由于该方法不支持中文,如果要指定JSP页面的字符编码方式支持中文编码,需要将Page指令的pageencoding属性设置为‘GB2312’、‘GBk’或‘UTF-8’。
B.contentType参数
contentType属性用于指定JSP页面的输出内容类型和字符编码方式。属性值中的部分内容类型可以是文本/HTML(纯文本HTML页面)、文本/纯文本(纯文本文件)等。
2.确保jQuery Ajax在交付前没有乱码字符
下面发布的Ajax代码,我想传递给后台的参数是get type,参数名是criticalword,代码如下:
$ ('# search ')。auto complete({ source : function(request,response) {alert('查看交付前是否有乱码' request . term);$.ajax({type:'get ',URL : '/SGAME/servlet/indexsearcheitems ',data : { criticalword : encodeuri(request . term)},success:function(response,status,xhr){ alert(response);}});},delay:100})由于我的代码被标记为红色,所以您应该在发送之前弹出alert()窗口,并进行测试以查看您的js文件是否有乱码。如果是,解决方案是:
1.检查上一步是否没有解决
2.js文件编码问题:在资源管理器中用记事本打开js,然后另存为,在编码中选择utf-8
下图:
当您的第一个弹出窗口中没有乱码字符时,这意味着在将其发送到Servlet之前没有问题。在进入下一步之前,做一个准备工作,如上图红队所示,先转码参数:
关键命令:encodeURI(请求.术语)
这种代码转换的目的是防止接收乱码字符的函数出现在Servlet中,形式是encodeURI(param)
3.当接受Ajax参数(请求)时,确保Servlet没有乱码字符
这一步,说明你离成功不远了。你只需要先设置请求和资源的编码方式,然后解码。doGet代码如下:
public void doGet(Httpservletrequest请求,HttpServletResponse响应)引发ServletException,IOException { response . setcontenttype(' text/html;charset=utf-8 ');request . setcharacterencoding(' utf-8 ');PrintWriter out=response . getwriter();string test word=URL decoder . decode(request . GetParameter(' criticalword '),' utf-8 ');system . out . println(test word);out . println(test word);out . flush();out . close();}主要有三点:
a . response . setcontenttype():用于将响应的字符编码设置回jsp或Ajax。
B.request . setcharactencoding():用于设置接收请求的响应代码。
C.这个函数需要导入java.net包来解码Ajax代码。
完成以上三个步骤后,和我一样,可以在返回之前添加一个System.out.println(yourParam)。如果是中文的就好
4.确保响应jsp时Servlet没有乱码字符
其实第3部分的关键点B设置好之后,回到html或者jsp的时候应该是中文。
注意:如果使用post方法,直接将Content Type : Application/x-www-form-URL encoded添加到Ajax中;Charset=utf-8就可以了,不需要转码。