zoukankan      html  css  js  c++  java
  • SpringMVC的编码过滤器配置

    [1] 浏览器服务器交互的编码格式介绍

    问题:

    在浏览器和服务器的数据交互流程中,处理英文数据以外还有中文数据。

    浏览器发起的请求数据中包含中文,服务器响应的数据包含中文。而浏览器

    默认的编码格式为iso-8859-1,也就说浏览器默认发送给服务器的请求数据的

    编码格式为iso-8859-1。同理,服务器响应给浏览器的数据,浏览器在接受到后

    会按照iso-8859-1的编码格式来进行解码获取数据。但是tomcat服务器使用的

    编码格式为utf-8,这样造成,浏览器发起的请求数据在服务器端使用utf-8的格式

    接收出现乱码,服务器响应的utf-8类型的数据被浏览器解析时出现乱码。一旦出 现乱码问题,一定是编码格式和解码格式不一致造成的,怎么办?

    解决:

    请求编码格式:

    因为浏览器是客户端的,在发起请求的时候,普通用户是不懂技术的,所以

    请求数据编码格式的设置只能在服务器端来解决。既然浏览器发起的请求默认

    使用的是iso-8859-1的方式进行的编码,而服务器端使用的是utf-8来进行 解码,而我们在Servlet中获取的封装了此次请求的请求数据的request对象

    已经是tomcat服务器将请求数据按照utf-8的格式解析后封装的request对 象。所以我们req.getParameter获取的中文数据已经是乱码了,所以将请求 数据进行反编码,变为没有被tomcat服务器解析的状态,然后使用正确的编 码格式进行解码来获取数据。

      String uname = request.getParameter("uname");
        String uname2=new String(uname.getBytes("iso-8859-1"),"utf-8");

    响应编码格式:

    响应数据是服务器响应给浏览器,让浏览器显示给用户的。但是用户不懂技术的,用户自己是不会主动设置浏览器的编码格式来正确的显示响应数据的。需要我们在服务器端响应数据的数据,告诉浏览器使用指定的编码格式来解析响应数据

    并显示给用户。

    resp.setCharacterEncoding(“utf-8”)

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

    请求编码格式的公共解决:

    虽然我们使用反编码可以将乱码的中文请求数据变为正常数据,但是需要每个数据

    独立进行反编码,一旦请求数据过多,造成代码编写麻烦。能不能在某个地方我们

    配置一次,以后就无需配置了呢?

    get请求:

    i.request.setCharacterEncoding(”utf-8“);

    ii.在tomcat的server.xml文件中进行编码格式的配置

    post请求:

    1. request.setCharacterEncoding(”utf-8“);

    使用过滤器配置项目的编码格式:

    因为每次都在Servlet中设置编码格式,过于麻烦,所以在过滤器中进行统一的编 码格式设置。

  • 相关阅读:
    改进IT服务流程17步 IT管理
    ISO 17799 /27001标准简介
    风险管理_cissp
    操作安全_cissp
    isms实施步骤
    CISSP要点-第五章安全体系结构和设计
    WLC+AP,跨专线实现异地多SSID流量分流 H-REAP
    186、说一下C++左值引用和右值引用
    180、C++从代码到可执行程序经历了什么?
    177、你知道回调函数吗?它的作用?
  • 原文地址:https://www.cnblogs.com/vincentmax/p/14309503.html
Copyright © 2011-2022 走看看