解决使用ssm框架javaweb项目的乱码问题

  • 背景:使用ssm框架做的javaweb项目,tomcat7.0
  • 乱码问题分为两种情况
    • get请求
    • post请求
  • 乱码产生的原因
    乱码是因为编码和解码的格式不一致

以下分别从两种请求分析编码和解码问题


get请求

请求参数直接通过浏览器地址栏传递到服务器中

    //使用jsp页面,编码是UTF-8
    localhost:8081/springmvc-day03-crm/list?username=张三丰

分析:
编码方式:页面是用的是UTF-8对参数进行编码传递到服务器中
解码方式:如果没有修改tomcat的编码格式,tomcat对于get请求使用的是默认格式ISO-8859-1进行的解码.
因此由于编码和解码不一致,就导致后台接受的参数出现了乱码情况

解决方式2种

  • 方式1 使用代码
    先用tomcat默认的格式解码,然后再编码
        username = new String(username.getBytes("ISO-8859-1","UTF-8"))  
  • 方式2 修改tomcat的server.xml配置文件(推荐使用)
    在配置文件添加属性 URIEncoding=”UTF-8”
    server.xml配置文件

post请求

请求参数是在请求体重传递到服务器中

  • 解决方案

因为使用了ssm框架,直接在web.xml配置一个过滤器即可
注意,这个过滤器要配在过滤器的第一位

 <filter>
    <filter-name>characterEncoding</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
  </filter>
  <filter-mapping>
    <filter-name>characterEncoding</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

对于为什么这个过滤器要在第一位,这跟tomcat对post的解码机制有关.

当第一次调用getParameter方法取参数的的时候,tomcat根据设置的编码进行解码,解码后的参数就放在一个数组中,以后就从这个数组从取值,不会再进行解码.
如果其他过滤器在这个编码过滤器之前调用了参数,那么这个过滤器的编码并没有起作用,参数仍然使用的ISO-8859-1进行解码,即使设置了编码格式,tomcat也不再进行解码了,这样还是造成了乱码

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值