您的位置:首页 > Web前端 > JavaScript

Jsp+servlet乱码处理的几种方式

2014-07-12 09:54 113 查看
乱码既不会凭空产生,也不会凭空消失,只会从一个地方转移到另一个地方,从一种形式转换成另一种形式。

下面是小编总结的几种在eclipse中的jsp上和servlet传值时可能出现乱码的情形和几种解决方式。

1.复制粘贴乱码

在复制javascript文件或是servlet文件到eclipse中时有时会产生乱码,其原因是复制的代码的编码方式和eclipse中的编码方式不同,不过一般只在有中文的地方才会有乱码。常见的中文编码方式有gbk,gb2312,gb18030,不过小编建议使用utf-8,因为utf-8更加通用,兼容性更好。eclipse中在出现乱码的文件的文件名上点击右键,选properties,修改编码方式即可。



但是已经成乱码的文字一般不会恢复原样,改了编码方式后,把代码全删了,保存,再复制一遍,保存,一般就OK了,也可以手动修改成乱码的文字。

2.servlet传值乱码

用jsp的form表单把值传到servlet后(一般传中文时可能有乱码),或是在servlet中设置的request中的属性(request.setAttribute("name",value);)和在session中设置的属性(request.getSession().setAttribute("name",value);)产生乱码(在页面上显示时是乱码)。这时可以在servlet的doGet或是doPost方法的最前面加上两句设置传值编码方式的语句。(用哪个方法在哪个方法里加)



加上上图绿色的两句话后乱码一般会消除。

3.设置过滤器

可以设置处理乱码的过滤器,这样就不用在每个servlet中都设置上述编码方式了。

(1)使用filter---针对doPost方式传值

创建一个类继承Filter接口,这里有一个示例,命名为EncodingFilter(名字随意起)

package com.iweb01.filter;

import java.io.IOException;

import javax.servlet.Filter;

import javax.servlet.FilterChain;

import javax.servlet.FilterConfig;

import javax.servlet.ServletException;

import javax.servlet.ServletRequest;

import javax.servlet.ServletResponse;

public class EncodingFilter implements Filter {

@Override

public void destroy() {

// TODO Auto-generated method stub

}

@Override

public void doFilter(ServletRequest arg0, ServletResponse arg1,

FilterChain arg2) throws IOException, ServletException {

// TODO Auto-generated method stub

arg0.setCharacterEncoding("utf-8");

arg1.setCharacterEncoding("utf-8");

arg2.doFilter(arg0, arg1);

}

@Override

public void init(FilterConfig arg0) throws ServletException {

// TODO Auto-generated method stub

}

}

然后配置web.xml

<filter>

<filter-name>encodingFilter</filter-name>

<filter-class>com.iweb01.filter.EncodingFilter</filter-class>

</filter>

<filter-mapping>

<filter-name>encodingFilter</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

在web.xml中加上上述内容即可。

注意:这种方式只能对所有doPost方法的传值进行过滤,用doGet方法传的值还是有可能乱码。

(2)修改tomcat的server.xml---针对doGet方式传值

doGet方法的传值,如在使用ajax时,可能会有乱码。(从javascript函数向servlet传过去的是乱码)

doGet方式传值产生乱码的现象可以用这种方式避免。

找到tomcat的安装目录,进入conf文件夹,修改server.xml。

打开server.xml,找到如下位置,加上一句 URIEncoding="utf-8" 即可。







这样doGet方式的传值也不会乱码了。

附上检测乱码的方式

在javascript中可以使用alert();来把值输出看看是不是有乱码。

在jsp中可以使用out.println();或是用${ name }输出request或session中设置的属性值,看看有没有乱码。

在servlet中直接用System.out.println();输出属性和变量的值看哪里有乱码即可。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: