JAVA WEB 中的编码分析

  • ServletPath和PathInfo中的中文
  • QueryString中的中文
public void service(org.apache.coyote.Request req,
                    org.apache.coyote.Response res)
    throws Exception {

    Request request = (Request) req.getNote(ADAPTER_NOTES);
    Response response = (Response) res.getNote(ADAPTER_NOTES);

    if (request == null) {

        // Create objects
        request = connector.createRequest();
        request.setCoyoteRequest(req);
        response = connector.createResponse();
        response.setCoyoteResponse(res);

        // Link objects
        request.setResponse(response);
        response.setRequest(request);

        // Set as notes
        req.setNote(ADAPTER_NOTES, request);
        res.setNote(ADAPTER_NOTES, response);

        // Set query string encoding
        req.getParameters().setQueryStringEncoding
            (connector.getURIEncoding());

    }
所以,结论是,queryStringEncoding编码的优先级是,第一是随contentType(设置了useBodyEncodingForURI),第二随URIEncoding(没有设置useBodyEncodingForURI),第三则是默认编码(即没有设置contentType,设置了useBodyEncodingForURI=true)
protected void parseParameters() {

        parametersParsed = true;

        Parameters parameters = coyoteRequest.getParameters();
        boolean success = false;
        try {
            // Set this every time in case limit has been changed via JMX
            parameters.setLimit(getConnector().getMaxParameterCount());

            // getCharacterEncoding() may have been overridden to search for
            // hidden form field containing request encoding
            String enc = getCharacterEncoding();

            boolean useBodyEncodingForURI = connector.getUseBodyEncodingForURI();
            if (enc != null) {
                parameters.setEncoding(enc);
                if (useBodyEncodingForURI) {
                    parameters.setQueryStringEncoding(enc);
                }
            } else {
                parameters.setEncoding
                    (org.apache.coyote.Constants.DEFAULT_CHARACTER_ENCODING);
                if (useBodyEncodingForURI) {
                    parameters.setQueryStringEncoding
                        (org.apache.coyote.Constants.DEFAULT_CHARACTER_ENCODING);
                }
            }
<Connector executor="tomcatThreadPool" protocol="org.apache.coyote.http11.Http11NioProtocol"
           port="8080" URIEncoding="UTF-8" useBodyEncodingForURI="true" compression="off" enableLookups="false"
           maxKeepAliveRequests="20" bufferSize="8192" connectionTimeout="5000"
           redirectPort="8443" server="DPServer"/>

Original: https://www.cnblogs.com/csophys/p/6287994.html
Author: csophys
Title: JAVA WEB 中的编码分析

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/580008/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Java项目代码是如何分层的

    1、背景 说起应用分层,大部分人都会认为这个不是很简单嘛 就controller,service, mapper三层。看起来简单,很多人其实并没有把他们职责划分开,在很多代码中,c…

    Java 2023年6月5日
    094
  • NLP中的语言模型预训练相关总结

    NLP中的语言模型预训练相关总结 NLP中的语言模型预训练相关总结 前言 one-hot 模型 word2vec模型 ELMO模型 Open AT GPT Bert 总结 参考资料…

    Java 2023年6月7日
    060
  • 单点登录SSO(Single Sign On)

    token表示按照一定的规则(通用的、官方的,如JWT)生成的字符串(可以包含用户的信息) jwt头部信息 有效载荷,包含用户主体信息 签名哈希,防伪标志 在任意一个模块进行登录,…

    Java 2023年6月13日
    081
  • 自定义注解获取当前登录用户

    在做项目的时候,我们经常会用到当前登录的用户,获取这个用户相关的信息,总是用User user = session.getAttribute(“user”)…

    Java 2023年6月16日
    0159
  • docker安装Java开发相关环境

    docker安装Java开发环境 官网:https://www.docker.com/ 主要安装: mysql:5.7.29 Redis RabbitMQ nginx 如果在获取镜…

    Java 2023年6月5日
    080
  • 聊聊动态线程池的9个场景

    聊聊动态线程池的9个场景 大家好,我是小马哥。 线程池是一种基于 池化思想管理线程 的工具,使用线程池可以减少 创建销毁线程的开销,避免线程过多导致 系统资源耗尽。在 高并发以及大…

    Java 2023年6月14日
    0137
  • 抽象类和接口

    Loading Tips: 除非必须使用,否则不要用接口 和 抽象类(大多时候,常规类就可以解决问题) 在合理的范围内尽可能抽象,相比于抽象类,我们 更倾向于接口的使用 poste…

    Java 2023年6月15日
    0102
  • 57.如果有一天我变得很有钱

    dsfds posted @2022-09-28 08:32 随遇而安== 阅读(7 ) 评论() 编辑 Original: https://www.cnblogs.com/55z…

    Java 2023年6月7日
    081
  • 若依(ruoyi)代码生成树表结构的那些坑

    若依(RuoYI)代码生成树表结构的那些坑 相信许多做后端开发的同学,一定用过若依这款框架,这款框架易上手,适合用来做后台管理系统,但是其中也存在一些坑,稍不注意就会中招(大佬可以…

    Java 2023年6月15日
    089
  • 实体类中方法名尽量避免set,get,报错com.fasterxml.jackson.databind.JsonMappingException: (was java.lang.NullPointerException)

    自己建了一个实体类 public class MissPoint implements Serializable{ private static final long serial…

    Java 2023年6月8日
    070
  • Java中的Optional

    在我们日常的开发中,我们经常会遇到 NullPointerException。如何才能优雅的处理NPE?这里告诉大家一个较为流行的方法 java.util.Optional 使用O…

    Java 2023年6月7日
    072
  • SpringAMQP的使用

    SpringAMQP是基于RabbitMQ封装的一套模板,并且还利用SpringBoot对其实现了自动装配,使用起来非常方便。 SpringAmqp的官方地址:https://sp…

    Java 2023年6月7日
    083
  • 重学Java(一):什么是对象

    本系列文章内容来自于《Thinking in Java》作者的最新续作《On Java》基础卷,作者根据最新 Java 8、11、17的内容,重讲了Java的编程思想,值得初学者阅…

    Java 2023年6月7日
    081
  • 容器编排工具很多套,出身名门的Swarm上不了

    Swarm集群编排 什么是Swarm ​ Swarm是Docker公司自研发的容器集群管理系统,Swarm在早期是作为一个独立服务存在,在Docker Engine v1.12中集…

    Java 2023年6月15日
    082
  • java 反射

    引用:http://blog.csdn.net/ahwr24/article/details/7255379 try {//得到类对象Class c = Class.forName…

    Java 2023年5月29日
    0129
  • Spring-Cloud-Ribbon学习笔记(一):入门

    Spring Cloud Ribbon是一个基于Http和TCP的客户端负载均衡工具,它是基于Netflix Ribbon实现的。它不像服务注册中心、配置中心、API网关那样独立部…

    Java 2023年5月30日
    065
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球