对于不少java web开发的新手来说,jsp中文乱码问题肯定困扰自己很久了,笔者自己曾经也为这个问题头疼过,现在就将我自己常用的解决办法与大家分享一下,希望对有需要的人有意点点帮助,更欢迎大虾们批评与指正。
解决这个问题的一个原则就是编码一致(jsp页面、请求和响应编码、服务器编码、数据库编码的一致),具体叙述如下:
1.修改jsp页面的默认编码格式为pageEcoding="UTF-8"(笔者建议统一使用UTF-8的编码格式,下同)
在MyEclipse(java web 程序员通常都用这个IDE,其他的IDE应该相似,顺便插一句,MyEclipse最好用6.5版本的)里面修改jsp页面的默认编码格式,这样的话,每次新建jsp页面的时候,jsp页面的pagEncoding属性就会设置成你配置的那个值,具体见下图:
2.添加过滤器(filter),使得web的请求和响应的编码格式一致:
2.1编写filter的java类:
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 {
public void destroy() {
// TODO Auto-generated method stub
}
public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException {
// TODO Auto-generated method stub
arg0.setCharacterEncoding("UTF-8");
arg1.setContentType("text/html;charset=UTF-8");
arg2.doFilter(arg0, arg1);
}
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
}
2.2 在web.xml中配置filter,对所有的请求与相应进行过滤,统一编码(笔者的filter名字为encodingFilter):
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>com.labxznu.filter.EncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
3.配置tomcat(java web项目常用的服务器)的链接编码
在tomcat安装目录下,找到conf目录,打开该目录下的server.xml文件,按照下面的代码进行配置,红色部分为要添加的内容,将其添上即可:
<Connector port="8090" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8"/>
4.将数据库的编码格式设置成utf-8(一般来说,进行前三步的设置就可以解决乱码问题,如果不行的话再加上这一步)。
最后:以上就是笔者个人解决中文乱码的常用方法,希望给有需要的朋友一点帮助,欢迎大虾进行必要的指正与补充!谢谢浏览!