• request和response的setCharacterEncoding()方法


    1、pageEncoding="UTF-8"的作用是设置jsp编译成Servlet时使用的编码

    2、contentType="text/html;charset=UTF-8"的作用是指定服务器响应给浏览器的编码

    jsp页面要经过两次的编码,第一阶段会用pageEncoding,第二阶段会用utf8-utf8,第三阶段就是由Tomcat出来的网页,
    用的是contentType属性。
    
    第一阶段是jsp翻译成.java源文件,它会根据pageEncoding的设定读取jsp,结果是由指定的编码方案翻译成统一的
    UTF-8JAVA源码,如果pageEncoding设定错了,或者没有设定,出来的就是中文乱码。
    
    第二阶段是从.java源码编译到字节码文件.class,不论jsp编写时候用的是什么编码方案,经过这个阶段的结果全部
    是UTF-8的encoding的java源码。
    
    对第二节阶段的解释,javac用UTF-8的encoding读取java源文件,编译成UTF-8encoding的二进制文件
    (即.class文件),这是JVM对常数字串在二进制文件内的表达规范。
    
    第三阶段就是Tomcat(或者其容器对象)载入和执行阶段二来的二进制文件,输出的结果,也就是在客户端
    (即浏览器页面)见到的,这时隐藏在阶段一和阶段二的参数contentType就发挥了功效。
    

    3、request.setCharacterEncoding("UTF-8")的作用是设置对客户端请求(例如:由浏览器表单提交的请求参数)和数据取值时的编码,不指定的话默认是IOS-8859-1(注意 request.setCharacterEncoding只能解决POST请求方式的乱码)。

    4、解决get方式的乱码可以修改tomcat配置文件中的server.xml中的URIEncoding属性

    或者使用使用过滤器来对request对象进行代理 使其可以处理get请求方式的乱码或者

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

    5、response.setContentType("text/html;charset=utf-8")的作用是指定服务器响应给浏览器的编码,同时浏览器也是根据这个参数对其接收到的数据进行重新编码(或者称为解码)。

    response.setContentType这个方法设置发送到客户端的响应的内容类型 此时响应还没有提交 给出的内容
    类型可以包括字符编码说明 例如:text/html;charset=utf-8 如果该方法在getWritter方法被调用之前被调用
    那么响应的字符编码将仅从给出的内容类型中设置 该方法如果在getWritter方法被调用之后或者在被提交之后调用
    将不会设置响应的字符编码 在使用http协议的情况中 该方法设置Content-type实体报头
    

    6.response.setCharacterEncoding(“UTF-8”)的作用是指定服务器响应给浏览器的编码。

    对于发送数据,服务器按照response.setCharacterEncoding 》contentType 》pageEncoding的优先顺序,对要发送的数据进行编码。

    注意,GET是URL解码的方式,默认解码格式Tomcat编码格式,所以URL解码是UTF-8,覆盖掉了request容器解码的格式。

    POST是实体内容解码方式,默认解码格式是request所设置的编码格式,与URL(Tomcat解码方式)无关。

    Tomcat8以后的服务器中response容器默认以UTF-8的格式解析数据,所以不需要设置request的编码格式。

    request.setCharacterEncoding(“utf-8”);

    post得到前台数据:(request容器默认是gbk格式)
    request.setCharacterEncoding(“utf-8”);
    System.out.println(request.getParameter(“name”));

    GET得到前台数据:(不需要设置编码格式,默认是按照tomcat服务器的编码格式)
    System.out.println(request.getParameter(“name”));

    GET POST给前台传数据
    response.setCharacterEncoding(“utf-8”);
    response.getWriter().write(“我爱你”);

    本文参考:https://blog.csdn.net/qq_38409944/article/details/81327414

  • 相关阅读:
    java代码读取yarn聚合目录日志
    Java内存区域的划分和异常
    Hbase restFul API
    Sql Server函数全解(一)字符串函数
    Sql Server之数据类型详解
    Sql Server之使用T_SQL创建,修改,查看数据库信息
    《Java编程思想》笔记 第一章 对象导论
    spring之Autowire
    spring之scope作用域
    spring之注入类型
  • 原文地址:https://www.cnblogs.com/gesh-code/p/14883527.html
Copyright © 2020-2023  润新知