Docker容器tomcat中文名文件404错误不一定是URIEncoding,有可能是LANG=zh_CN.UTF-8引起

使用Docker部署tomcat,出现中文名文件无法读取,访问就是404错误。在网上搜索一通,都说是在tomcat的配置文件server.xml中修改一下URIEncoding为utf-8就行,但是我怎么测试都不行。最终发现,是Docker启动时,传入了环境变量LANG="zh_CN.UTF-8"导致。

先说网上通用处理方式。在tomcat根目录的conf文件夹下,修改server.xml文件,增加URIEncoding="UTF-8"配置。变成如下:

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

但是我测试后,还是不行。中文文件访问,依然是无法找到文件,404错误。

继续寻找各种资料和解决方案,都不行。继续折腾好久,仍然没有解决。网上说的各种都试过。

最后,想想是不是tomcat版本问题。

于是用Docker启动一个最新版本的tomcat 11,啥环境变量和文件映射都不做,一测试,居然没问题。也就是tomcat 11默认就是支持中文文件名。

那么全新的tomcat9呢?什么环境变量和文件映射都不做,一测试,居然也行。原来tomcat本身是没有问题的,问题出在启动容器时的传参。现在采用排除法,找到问题参数。

当前启动传参如下。

docker run -it --name tomcat-test  --rm -p 8888:8080 \
-e TZ="Asia/Shanghai" \
-e LANG="zh_CN.UTF-8" \
-e JAVA_OPTS="-Dfile.encoding=utf-8" \
tomcat:9.0.16-jre8

逐一排查后,发现传参-e LANG="zh_CN.UTF-8"后,会导致file.encoding变成ANSI_X3.4-1968,而不是默认的UTF-8。

写个test.jsp文件,拷贝到容器内tomcat的ROOT目录下,直接访问,输出一下各种参数。

<%@ page language="java" contentType="text/html;charset=UTF-8"pageEncoding="UTF-8" %>
<%@ page import="java.util.Date" %>
<%@ page import="java.util.TimeZone" %>
<%@ page import="javax.servlet.ServletContext" %><!DOCTYPE html>
<html lang="zh-cn">
<head><meta charset="UTF-8"><title>容器环境测试测试</title>
</head>
<body><%// 获取当前时间Date currentDate = new Date();// 获取当前时区TimeZone timeZone = TimeZone.getDefault();// 获取ServletContext对象ServletContext context = request.getServletContext();// 获取当前JSP页面的真实路径String realPath = context.getRealPath("/");String contextPath = context.getContextPath();String serverInfo = context.getServerInfo();String virtualServerName = context.getVirtualServerName();
%><p>当前时间:<%= currentDate.toString() %></p>
<p>当前时区: <%= timeZone.getDisplayName() %></p>
<p>物理路径RealPath: <%= realPath %></p>
<p>环境路径ContextPath: <%= contextPath %></p>
<p>服务端容器: <%= serverInfo %></p>
<p>虚拟服务名称: <%= virtualServerName %></p>
<p>当前字符集编码file.encoding: <%= System.getProperty("file.encoding")  %></p>
<p>Java环境变量java.opts: <%= System.getenv("JAVA_OPTS") %></p>
<p>Java环境变量sun.jnu.encoding: <%= System.getProperty("sun.jnu.encoding") %></p>
</body>
</html>

输出结果,如下图所示。 文本编码不是UTF-8,变成了ANSI_X3.4-1968。

当启动容器时,去掉该环境变量传入,就可以识别中文名文件了。

由于这个问题折腾了太久,暂时也就不想去深究为什么。想想这个LANG变量对目前功能没啥影响,就先不传入了吧。后面遇到影响了再说。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/522.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

空气源热泵电控系统部分控制功能的逻辑

空气源热泵的电控系统&#xff0c;是一台空气源热泵设备的大脑&#xff0c;电控系统逻辑的合理性、执行的精准性&#xff0c;直接决定设备运行的稳定、能效高低、运行寿命。 控制功能 &#xff08;1&#xff09;压缩机防频繁起停 压缩机再次启动间隔时间为3分钟&#xff0c;即压…

SQL优化——访问路径(ACCESS PATH)

文章目录 1、常见访问路径1.1、TABLE ACCESS FULL1.2、TABLE ACCESS BY USER ROWID1.3、TABLE ACCESS BY ROWID RANGE1.4、TABLE ACCESS BY INDEX ROWID1.5、INDEX UNIQUE SCAN1.6、INDEX RANGE SCAN1.7、INDEX SKIP SCAN1.8、INDEX FULL SCAN1.9、INDEX FAST FULL SCAN1.10、I…

软件需求开发和管理过程性指导文件

1. 目的 2. 适用范围 3. 参考文件 4. 术语和缩写 5. 需求获取的方式 5.1. 与用户交谈向用户提问题 5.1.1. 访谈重点注意事项 5.1.2. 访谈指南 5.2. 参观用户的工作流程 5.3. 向用户群体发调查问卷 5.4. 已有软件系统调研 5.5. 资料收集 5.6. 原型系统调研 5.6.1. …

vue 实现实时搜索文档关键字并高亮显示

最近接到的一个新需求&#xff1a;实时搜索文档关键字并高亮显示&#xff0c;听起来好难的样子&#xff0c;仔细分析起来其实也蛮简单的。 实现思路 通过 input 实现关键字的输入&#xff0c;监听关键字的变化&#xff0c;用正则表达式来匹配关键字&#xff0c;然后给关键字添…

Linux上的uname

2024年4月19日&#xff0c;周五上午 这是我第一篇用CSDN上的markdown编辑器写的博客&#xff0c;感觉还不错 uname 是一个常用的命令行工具&#xff0c;uname 的全称是 “Unix Name”&#xff0c;它是一个 Unix 和类 Unix 操作系统上的命令行工具&#xff0c;用于获取操作系统相…

【全网瞩目】你想知道的Llama3都在这里

Meta发布了开放式生成人工智能模型 Llama 系列的最新产品&#xff1a; Llama 3。或者更准确地说&#xff0c;该公司首次发布了其新的 Llama 3 系列中的两个模型&#xff0c;其余模型将在未来某个不确定的日期发布。 Meta 称&#xff0c;与上一代 Llama 型号 Llama 2 8B 和 Llam…

【支付宝】对接手机网站支付踩坑点记录

前言 简单记录一下对接Wap支付的问题&#xff0c;alipay和wxpay认证过程差不多&#xff0c;有个体商户或企业即可&#xff0c;前者文档不易懂后者还好&#xff0c;但是wxpay门槛高&#xff0c;个人认为pc网站支付(native支付)就是为了收300认证费&#xff01; 应用公私钥 第一…

React Router 5 vs 6:使用上的主要差异与升级指南

React Router 5 的一些API 在 React Router 6 上有时可能找不到&#xff0c;可能会看到如下画面&#xff1a;export ‘useHistory’ was not found in ‘react-router-dom’ … React Router目前有两个大的版本&#xff0c;即React Router 5、6。React Router 6 在设计上更加简…

【Anki】25考研408真题【2009-2023】

介绍 24年的真题解析还没有出&#xff01;只到23年&#xff01;一共有15套真题。 预览 客观题和主观题有两个目录。王道建议第一轮只写选择题&#xff0c;第二轮再开始写大题。 客观题&#xff1a; 主观题&#xff1a; 插件建议 See Previous Card Ratings in Reviewer 代码&am…

PM要会项目管理?完整版项目管理经验分享

近9个月&#xff0c;公司发生许多事情&#xff0c;包括产品研发部的人员结构调整。 原本以产品经理负责制的小组研发&#xff0c;变成了以项目经理负责制的项目组研发。 对于这一调整&#xff0c;我是支持的&#xff0c;毕竟产品在跟进项目时对技术的管控能力确实不如懂技术的…

彻底解决:IDEA java: 警告: 源发行版 17 需要目标发行版 17

一、出现的原因 JDK版本不匹配 二、解决方法 1.点击File -->Project Structure-->Project 修改这两处 2.在Project Structure-->Modules中的红框位置都要调整对应版本 3.点击File-->settings-->java compile将对应框的版本修改成对应版本即可 4.修改Pom文件中…

2010年认证杯SPSSPRO杯数学建模C题(第一阶段)高校图书馆的智能服务全过程文档及程序

2010年认证杯SPSSPRO杯数学建模 C题 高校图书馆的智能服务 原题再现&#xff1a; 图书馆源于保存记事的习惯。图书馆是为读者在馆内使用文献而提供的专门场所。而高校的图书馆为教学和科研服务&#xff0c;具有服务性和学术性强的特点。   现在的高校图书馆存在着许多不良的…

吴恩达llama课程笔记:第四课提示词技术

羊驼Llama是当前最流行的开源大模型&#xff0c;其卓越的性能和广泛的应用领域使其成为业界瞩目的焦点。作为一款由Meta AI发布的开放且高效的大型基础语言模型&#xff0c;Llama拥有7B、13B和70B&#xff08;700亿&#xff09;三种版本&#xff0c;满足不同场景和需求。 吴恩…

【oracle数据库安装篇二】Linux6.8基于ASM安装oracle11gR2单机

说明 本篇文章主要介绍了Linux6.8基于ASM安装oracle11gR2单机的配置过程&#xff0c;图文并茂&#xff0c;整个安装过程直观易懂&#xff0c;无论是对于初学者还是有一定经验的系统管理员&#xff0c;都能从中获得很大的帮助。 相比于上一篇【oracle数据库安装篇一】Linux5.6…

嵌入式面试-回答UART

说明&#xff1a; 此文章是在阅读了一些列面试相关资料之后对于一些常见问题的整理&#xff0c;主要针对的是嵌入式软件面试中涉及到的问答&#xff0c;努力精准的抓住重点进行描述。若有不足非常欢迎指出&#xff0c;感谢&#xff01;在总结过程中有些答案没标记参考来源&…

C++算法题 - 区间

目录 228. 汇总区间56. 合并区间57. 插入区间452. 用最少数量的箭引爆气球 228. 汇总区间 LeetCode_link 给定一个 无重复元素 的 有序 整数数组 nums 。 返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表 。也就是说&#xff0c;nums 的每个元素都恰好被某个区间范围所…

Maven通过flatten-maven-plugin插件实现多模块版本统一管理

正文 起因是公司开始推代码版本管理的相关制度&#xff0c;而开发过程中经常使用多模块构建项目&#xff0c;每次做版本管理时都需要对每个模块及子模块下的pom文件中parent.version和模块下依赖中的version进行修改&#xff0c;改的地方非常多&#xff0c;且非常容易漏。为此…

衣康酸(ITA)应用领域广泛 工业发酵法为其主流制备方法

衣康酸&#xff08;ITA&#xff09;应用领域广泛 工业发酵法为其主流制备方法 衣康酸&#xff08;ITA&#xff09;又称亚甲基丁二酸、甲叉琥珀酸&#xff0c;化学式为C5H6O4&#xff0c;是一种不饱和二元有机酸。衣康酸外观呈白色结晶粉末&#xff0c;含强烈刺激性气味&#xf…

【机器学习】小波变换在特征提取中的实践与应用

小波变换在特征提取中的实践与应用 一、小波变换的基本原理与数学表达二、基于小波变换的特征提取方法与实例三、小波变换在特征提取中的优势与展望 在信号处理与数据分析领域&#xff0c;小波变换作为一种强大的数学工具&#xff0c;其多尺度分析特性使得它在特征提取中扮演着…

浅析STM32H750启动文件

目录 概述 1 启动文件介绍 1.1 启动文件功能 1.2 汇编语言指令 2 启动代码细节 2.1 分配栈空间 2.2 分配堆空间 2.3 中断向量表 2.4 复位程序 2.5 中断服务程序 2.5.1 CPU内部中断程序 2.5.2 CPU内部扩展中断程序 2.6 用户堆栈初始化 3 总结 概述 本文以startup_stm3…