JSP+Servlet项目中,项目统一使用utf-8编码。配置过滤器过滤所以请求并设置utf-8编码,jsp页面也都设置utf-8,但是还有一点很容易忽视的就是tomcat也要设置utf-8,默认情况下,tomcat使用的的编码方式:iso8859-1,将tomcat修改为utf-8编码

修改tomcat下的conf/server.xml文件,

<Connector port="8080"
URIEncoding="UTF-8" protocol="HTTP/1.1"

               connectionTimeout="20000"

               redirectPort="8443" />

这样就不会出现中文乱码了。

以下网友也说的很好

一、表单提交时出现乱码:

在进行表单提交的时候,经常提交一些中文,自然就避免不了出现中文乱码的情况,对于表单来说有两种提交方式:get和post提交方式。所以请求的时候便有get请求和post请求。以前我一直以为get请求和post请求方式出现的乱码的解决方式是一样的,但是今天才知道两种请求方式所产生的乱码的解决方式是不同的。每种方式都有着不同的解决方法,之所以出现乱码,原因就在于get请求时,其传递给服务器的数据是附加在URL地址之后的;而post的请求时,其传递给服务器的数据是作为请求体的一部分传递给服务器。这也就导致了对它们所产生的乱码的处理方式是不同的。

1、客户端的get请求

对于不同的请求方式,解决乱码的问题也是不一样的,对于客户端的get请求来说,服务器端处理要想不出现乱码,解决这个问题稍微复杂一些,需要用到String类型的构造函数,其中的一个构造函数就是用指定的编码方式去解码,一般都用“UTF-8”的方式。只要在服务器端将请求得到的参数重新构造成一个字符串就行了。如下所示:

String  stuname = request.getParameter("stuname");

String str = new String(stuname.getBytes("ISO-8859-1"),"utf-8")

经过构造之后,客户端输入中文,且表单时get请求的情况下,str就变成了中文了。如果请求参数比较多,最好将它封装成一个工具类:

public class MyUtil

{

public static String getNewString(String str) throws UnsupportedEncodingException

{

return new String(str.getBytes("ISO-8859-1"),"UTF-8");

}

}

String stuname= MyUtil.getNewString(request.getParameter("stuname"));

2、客户端的post请求

对于客户端的post请求来说,处理乱码的问题就比较简单了,因为请求的数据时作为请求体的一部分传递给服务器的,所以只要修改请求内的编码就行了。只要在服务器端的最开始处将请求的数据设置为“UTF-8”就行了,输入如下语句:

request. setCharacterEncoding(“UTF-8”);

这样用户在服务器端获取到的中文数据就不再是乱码了。

二、超链接时出现乱码(低版本浏览器不行IE6)

在Web开发中,挺多的时候都是通过超链接去传递中文参数的,这也会导致在显示的时候也会出现乱码,对于超链接来说,它实际上是向服务器端发送了一个请求,而它发出的请求是属于get请求,所以对于超链接的乱码来说,它处理乱码的方式和表单的get请求出现乱码的方式是一样的。

String stuname= MyUtil.getNewString(request.getParameter("stuname"));

三、重定向时出现乱码(低版本浏览器不行IE6)

有时写上response的sendRedirect()方法进行重定向时也会出现乱码,重定向时实际上也是向服务器发送了一个请求,所以解决乱码的方法和和上面是一样的。

四、浏览器版本低导致的乱码

上网的时候,有时提交的一些信息在地址栏显示的是“%2C%C6%CC%C6”的字样,其实这都是防止出现乱码进行的解决方案,如果你的浏览器是IE6或以下版本,则我们的第二种情况和第三种情况会出现乱码(尤其是当中文是奇数的时候),这就不好使了所以我们必须采用另一种比较实际的作法:

在java.net包中提供了URLEncoder类和URLDcoder类,这两个类又分别提供了encode和decode两个静态方法,分别用于进行编码和解码。我们将要传递的中文参数进行编码之后,在传递给服务器,服务器解码之后,就可以显示中文了。

进行编码:URLEncoder.encode(stuname,”UTF-8”)

传递给服务器:<a href=”/1.jsp?stuname<%=stuname%>”>传递</a>

进行解码:URLDecoder.decode(stuname,”UTF-8”);

这样就可以得到传递过来的中文参数了,我发现许多网站用的都是这种方式解决中参数的。

五、返回浏览器显示的乱码

在Servlet编程中,经常需要通过response对象将一些信息返回给浏览器,给我们的客户端,而我们在服务器端显示的中文,但是响应给客户端浏览器却是乱码,这主要是由于response对象的getWriter()方法返回的PrintWriter对象默认使用“ISO-8859-1”字符集编码进行Unicode字符串到字节数组的转换,由于ISO8859-1字符集中根本就没有包含中文字符,所以Java在进行转换的时候会将无效的字符编码输出给客户端,于是便出现了乱码,为此ServletResponse接口中便定义了setCharacterEncoding、setContentType等方法来指定getWriter方法返回的PrintWriter对象所使用的字符集编码,所以我们在写Servlet程序中,在调用getWriter方法之前设置这些方法的值。我们为了防止乱码,经常将以下两条语句一起写上:

response.setContentType(“text/html;charset=utf-8”);

response. setCharacterEncoding(“UTF-8”);

只要编写Servlet文件中含有响应给客户端的信息,那么就要写上这两句话。最好写上第二句话,因为它的优先级高,它的设置结果将覆盖setContentType等方法设置的字符编码集。

六、修改Tomcat的编码

在上述的get请求所导致乱码问题中,还有一种解决的方案,我们常用Tomcat作为运行Servlet和JSP的容器,而Tomcat内部默认的编码是ISO-8859-1,所以对于get请求方式,其传递的数据(URI)会附加在访问的资源后面,其编码是Tomcat默认的,如果修改该URI的编码,那么对于所有的get请求方式便不会出现乱码了包括上边说的重定向和超链接,在Tomcat的配置文件server.xml中找到修改Tomcat的端口的地方,在其内部加入URIEncoding属性,设置为和你的项目中所设的编码一样的值,这里全部都是UTF-8。如下所示:

<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000"redirectPort="8443"  URIEncoding="UTF-8" />

七、使用MySQL数据库乱码

有时会用JDBC连接MySQL数据库,可能会出现乱码,所以要在连接之后加上如下的语句:

useUnicode=true&characterEncoding=UTF-8

这样就可以解决乱码问题了。

在编写Servlet和JSP的时候,为了避免出现乱码,最重要的就是:采用一致的编码,如果编码都一致了,肯定不会出现乱码。如果出现了乱码肯定那个地方不一致了。

扩展:

Javaweb开发中响应乱码和请求乱码的解决方案 

http://bbs.itcast.cn/article-320-1.html 

这篇文章需然写的不是特别详细,但是思路很清晰,比较容易看懂。

jsp中文乱码 Servlet中文乱码 utf-8的更多相关文章

  1. jsp+servlet中文乱码问题

    jsp+servlet中文乱码问题 servlet想要获得前台传来的值 String strName=new String(request.getParameter("name") ...

  2. Servlet中文乱码问题解决办法

    首先对于源jsp网站和servlet里面的字符集要一样,一般支持中文的字符集为UTF-8最好采用这个字符集(除此之外还有gb2312); 对于源jsp文件的代码中需要设置 设置你的page里面的字符集 ...

  3. 中文乱码—Servlet—SpringMVC

    一.SpringMVC中的中文乱码问题 a:处理全局请求的中文乱码(配置Web.xml的字符编码过滤器) <filter> <filter-name>encodingFilte ...

  4. JSP开发过程遇到的中文乱码问题及解决方案

    对于程序猿来说,乱码问题真的很头疼,下面列举几种常见的乱码. 1.数据库编码不一致导致乱码 解决方法: 首先查看数据库编码,输入: show variables like "%char%&q ...

  5. Servlet 中文乱码问题解析及详细解决方法

    使用 servlet 向客户端浏览器回送中文时,经常出现中文乱码的问题,这里给大家完完全全地搞明白: 一.基本常识 中文系统默认是 GBK 编码(GBK是对GB2312的补充,包含它) 需要处理编码问 ...

  6. (转) jsp页面 URL传中文参数到Action里面出现乱码

    jsp页面 URL传中文参数到Action里面出现乱码,方法如下: 第一种:在Action中用 new String(str.getBytes("ISO8859_1"), &quo ...

  7. [转]Servlet 中文乱码问题及解决方案剖析

    原文地址:http://blog.csdn.net/xiazdong/article/details/7217022/ 一.常识了解 1.GBK包含GB2312,即如果通过GB2312编码后可以通过G ...

  8. Servlet 中文乱码问题及解决方案剖析

    转自:http://blog.csdn.net/xiazdong/article/details/7217022/ 一.常识了解 1.GBK包含GB2312,即如果通过GB2312编码后可以通过GBK ...

  9. Jsp页面中的中文乱码问题解决

    Jsp页面中的中文乱码问题解决 在编写Jsp页面的时候,发现写入其中的中文在浏览器浏览的时候会出现乱码的情况. 出现乱码的原因分析: 因为页面中对自己的编码格式的声明和页面的实际编码格式不相同,而浏览 ...

随机推荐

  1. [BZOJ]1069: [SCOI2007]最大土地面积

    题目大意:给出二维平面上n个点,求最大的由这些点组成的四边形面积.(n<=2000) 思路:求出凸包后旋转卡壳枚举对踵点对作为四边形的对角线,枚举或二分另外两个点,复杂度O(n^2)或O(nlo ...

  2. hihiocoder 1255(搜索)(2015ACM/ICPC北京站)

    题意: 给你四个矩形,判断能否从中选出3个组成一个矩形 思路: 1.搜索,如果两个能组成一个新的,则将他们合并,继续搜索 2.暴力判断 最开始没注意到3,一直以为要用4个,WR #include &l ...

  3. HL7工具安装步骤

    下载目录:http://gforge.hl7.org/gf/ 说明:在安装HL7V3学习工具之前,确保本机已安装IIS服务和Access数据库. 各种软件见附件. 1.下载安装步骤   RIM模型下载 ...

  4. 美团、java后台实习、面经

    3月27号投了美团java后台,29号收到面试邀请,好像是金融服务平台(提交简历的时候,我当时没注意随便填的···) 一面: 介绍项目经历 根据简历问一些问题:比如我简历上有区块链相关,会要求介绍一下 ...

  5. js数组求差集

    var arr1 = [2,3,5,88,99,444,66];var arr2 = [2,88,66]; arr_dive(arr1,arr2); function arr_dive(aArr,bA ...

  6. JVM Class详解之一

    首先看Class中包含哪些信息简单的说所有Java文件中有的信息class文件都有,编译器帮我们将java文件转化成了JVM能看懂的class格式而已 Class 概述 Class文件是一组以8位字节 ...

  7. url重定向或者重写

    有四种方式:1.urlMappings,返回200状态码 <system.web> <urlMappings > <add url="~/others.aspx ...

  8. 安装redis,搭建环境

    这里以redis-4.0.9为例   我自己为了好方便管理自己的软件包,就在/usr/local/目录下创建了一个software目录   mkdir  /usr/local/software cd  ...

  9. centos 7.X & centos6.X 防火墙基本命令

    Centos 7 firewall 命令:查看已经开放的端口: firewall-cmd --list-ports 开启端口 firewall-cmd --zone=public --add-port ...

  10. kexec 内核快速启动流程分析

    一.命令行 1. kexec -l $kpwd --append="$arg" 其中$kpwd =目标内核的路径 $arg =传给内核的参数,与/proc/cmdline一致时表示 ...