tomcat 9.0.x 版本 + Servlet 请求/响应 和 控制台的中文乱码问题解决(不使用过滤器,做个渗透)

tomcat 9.0.x 版本 + Servlet 请求和控制台 中文乱码问题解决(不使用 filter 的情况)

ps:这老破问题,卡我好长时间啊,非得欠欠儿的用最新版的tomcat,用7.0.47版本它不香嘛!以下不加特殊声明所说的 tomcat 均为 9.0.x 版本 而且 编码格式均以 UTF-8 为目标

1. 和 请求/响应无关 的中文乱码问题

	这里要记录一下,使用 tomcat 在 servlet 中随便打印一行中文数据都出现乱码啊啊啊啊啊啊!
	sout,serr这种情况,居然都有乱码?这明明和 请求/响应 无关啊!
	
	面向百度编程------>
	得到的结果是:这个问题要么修改 tomcat 的配置文件,要么在IDEA中tomcat的配置中
	有个 VM Options,给他填充一个数据: -Dfile.encoding=utf-8
	(就是给这个项目的 tomcat 命名的那个设置面板里,能找到一行 VM Options)
	
	配置文件我没有改,懒得去找path了,直接改 VM Options 它不方便嘛!
	
	控制我们自己打印的数据信息 中文乱码问题 完美解决

2. tomcat 启动时,还有日常的日志打印 中文乱码问题

	这个不得已,必须得去改配置文件了

	在 tomcat 的安装路径下,找到conf文件夹,里面有个 logging.properties 配置文件,我们用记事本打开它,然后在

java.util.logging.ConsoleHandler.level = FINE
java.util.logging.ConsoleHandler.formatter = org.apache.juli.OneLineFormatter

	这两行的下面添加一行配置:

java.util.logging.ConsoleHandler.encoding = UTF-8

	完美解决日志信息的中文乱码问题

3. servlet 中 请求/响应 中文乱码问题解决

	这里请求的话就只分为 get/post 这两种最常用的方式 去解决中文乱码

	1. get请求
		咱们捋一下逻辑啊
		
		1.1 
		get请求没有请求报文,只能在url上传输参数,那么出现乱码的第一个地方:在我们填写完url后,浏览器传给tomcat,tomcat解析的时候就不老实地按照utf-8解析,导致我们拿到数据就是乱码的
		然后 resp.getWrite().write(param) 打在页面上,自然而然就是乱码。
		如何解决tomcat解析URI时出现的乱码问题呢?

	    改配置文件!
	    还是 tomcat 的安装目录下的 cong 文件夹,找到server.xml,然后在 <Connector> 标签中,拼接参数: URIEncoding="UTF-8"
	    (注意:这里是URI不是URL)
	    
	    这个做法,仅适用于 tomcat 8 以前的版本!tomcat 8 以后的版本,自动设置了这个参数,如果我们强行添加,反而在 tomcat 解析 URI的时候 出现乱码
	    
	    1.2 
	    tomcat 以utf-8正常解析参数后,我们使用 resp.getWrite().write() 给页面打印中文时候还出现乱码!
	    这种情况就要说我们没有给定响应的解析格式(暂时这么理解吧),我们也不知道它是按照哪儿种编码格式解析响应中的数据,我们就一劳永逸的直接设置响应的解析格式:

		在doGet方法中加上这两行代码:
	   
	    resp.setContentType("text/html;charset=utf-8");// 这个是告诉浏览器,服务器返回的响应是什么格式的文件
		resp.setCharacterEncoding("utf-8");// 这个是告诉浏览器,服务器返回的响应你要以什么编码格式解析

	2. post请求

		2.1
		这个post请求就方便很多了
		post请求是含有请求报文的,我们在doPost方法直接加上三行代码,:

		req.setCharacterEncoding("utf-8);// 这个是告诉服务器,请求报文以什么编码格式解析,这里是utf-8
		resp.setContentType("text/html;charset=utf-8");// 这个是告诉浏览器,服务器返回的响应是什么格式的文件,这里是text/html
		resp.setCharacterEncoding("utf-8");// 这个是告诉浏览器,服务器返回的响应你要以什么编码格式解析,这里是utf-8

综上,tomcat常见的中文乱码导致原因

	1. 浏览器向服务器发送请求时,服务器解析请求出现乱码;
	2. 服务器向浏览器返回响应时,出现乱码
	3. 在 tomcat 的环境下,jvm出现中文乱码(-Dfile.encoding=utf-8)

知道了乱码原因,对于 tomcat + servlet + jsp 来说,挨个步骤排查就很好解决了,这里注意一点就是 tomcat 8 以后的版本,在浏览器get请求服务器的时候,URI上的编码格式,默认就是UTF-8,已经不需要我们修改配置文件了,但是 tomcat 8 之前,还是要在 server.xml 中添加 URIEncoding=“UTF-8”

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值