Java Web项目中的Servlet页面乱码问题

前言

首先,我们得了解为什么会Servlet乱码。

在进行Java web的开发时,我们最常用的是Tomcat服务器。
浏览器默认的编码是ANSI(大陆地区就是GBK),而Tomcat在8及之前的版本都是ISO-8859-1,我使用的是Tomcat10.0.23(编码以及变成了UTF-8.

因此默认编码不统一,就会导致乱码。
不同于HTML页面与JSP页面,他们都能很方便的设置编码(当然Servlet其实也方便),并且编码都在十分显眼的位置,不容易忽视。例如HTML可以在中设置编码

<meta charset=“UTF-8”>

而JSP更是可以直接在标签属性中设置

<%@ page contentType=“text/html;charset=UTF-8” language=“java” %>

而Servlet大多数时候,我们只用它来进行逻辑处理和跳转功能,这也就容易让我们忽视其中的编码问题。

解决方案

有时,我们会想要简单的测试一个项目是否成功运行,或者做一点简单的逻辑处理。
因此这时候选择Servlet直接输出是个不错的主意。
我们通常会这样写

PrintWriter writer = response.getWriter();
String str=“<h1>HelloWorld!你好世界”;
writer.println(str);

但如果你这时候运行Tomcat服务器,你会发现你的中文无法正常显示。
这时候我们只需要在项目中加上

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

这条信息会被直接加在页面的响应头中,浏览器收到之后也会按照指定的编码进行解码。
如此一来,Servlet乱码问题就解决了。

不过,值得注意的一点是,
如果你仅仅加入这样的代码,不加入编码方式

response.setContentType(“text/html”);

最后的响应头中任然会自动出现charset=UTF-8 (Edge浏览器亲测),可惜目前还不明白是什么原理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值