解决javaweb Tomcat中文乱码的完整思路。

        相信很多初学者在刚开始使用Tomcat的时候都被中文乱码问题所困扰过,我曾经也遇到了这个问题,苦苦搜寻各大社区,看了无数帖子,结果依然没有解决问题。原因有两个,一是我比较笨<,二是确实这个问题过于基础,网上解决方案也比较含糊。所以很难找到完整整理出来的解决这个问题的思路。今天我来整理一下。

    首先,要知道为什么会出现这个问题。Tomcat的默认编码是ISO-8859-1这,是不支持中文的。但我们的javaweb项目又大部分使用UTF-8或者GBK这样支持中文的编码开发,所以当我们吧项目的内容给服务器解析时,如果不做任何处理,Tomcat就默认使用ISO-8859-1来解析,乱码自然就产生了。当然,Tomcat的编码也不是不可以改变的,就是到Tomcat的\conf目录下找到server.xml文件,打开并找到:<Connector port="8080" protocol="HTTP/1.1"  connectionTimeout="20000" redirectPort="8443" />这段代码。


然后改成这样:


就是加上一句:URIEncoding="UTF-8"  

可是,问题并没有这么简单。相信很多人也试过了,这样改过之后,编码问题依然存在。(而且并不建议这样更改,建议让服务器保持默认编码)

为什么? 我们先梳理下这个过程。

在我们把项目发到Tomcat,然后通过浏览器访问的过程中,有三个涉及到编码的地方:

一:你使用IED(一般是eclipse)使用的编码,这是你项目从头到尾原始不变的编码。

二:Tomcat的编码,默认IOS-8859-1,更改server.xml中的编码格式,只是更改了Tomcat对get请求的解析编码,也就是说,改这个地方只是告诉Tomcat对所有的get请求采取指定的编码来解码,然而遇到post请求时,依然用默认编码解码。而且一般不建议更改server.xml中默认编码,我们可以通过别的方式来处理请求编码。

三:浏览器的编码。IE和Firefox默认使用GB2312,Google默认使用UTF-8(反正是不统一的)


        我们知道我们在用浏览器想服务器发送页面请求,到服务器响应反馈数据这个过程中,数据都是以字节的形式传输的,就是说,地址栏的信息需要被服务器重新解析成字符,而服务器反馈的字节数据也会被浏览器重新解析过来。所以,要解决乱码问题,我们必定需要让服务器知道,该怎么解析请求,以及让浏览器知道,该怎么解析响应数据。

一:指定服务器处理请求的编码:这一般是在处理post请求才会遇到(一般是提交表单数据),只需要在处理请求的对应servlet中处理request请求的编码,即在获取参数之前 调用 request.setCharacterEncoding("utf-8");

如果IDE指定的GBK也可以改成GBK.

由于request.setCharacterEncoding("utf-8");方法只对请求体有效,但对于get而言,没有请求体,所以此方法只对post请求体中的参数有效,除了路径以外和附带参数还有cookie以外,请求头其他地方一般不会出现中文(即http://localhost:8080/a/b.jsp?name="张三"或http://localhost:8080/哈哈/呵呵.jsp),一般情况不建议url中出现中文的,但如果出现,需要使用URL编码处理,否则无法发送给服务器。这可以用javascript来完成。

例如:

<script type="text/javascript">
      function _go(){
      loction="http://localhost:8080/a/b.jsp?name="+encodeURI("张三");
      }
     </script>

     <a href="javascript:_go();">链接</a>

如果希望在Cookie中使用中文,那么先需要对中文进行URL编码,然后把编码后的字符串放到Cookie上。例如:

String name = URLEncoder.encode("姓名","UTF-8");
String value = URLEncoder.encode("张三","UTF-8");
Cookie c = new Cookie(name,value);
response.addCookie(c);


服务器会自动识别数据是否使用来URL编码,如果使用了服务器会自动把数据解码。


二:指定响应编码:如果是jsp或html页面,可以设置相应头 

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">来告诉浏览器用什么编码解析,但一定要和IDE编辑时的编码一样,否则依然乱码。

在jsp中还需要注意在第一句的page标签中 pageEncoding="utf-8"也要保持一致。


如果是在servlet中通过respond响应,那么也需要在HttpServlet添加:response.setContentType("text/html;utf-8");或者response.setCharacterEncoding("UTF-8");

响应post请求:


响应get请求:


需要注意的是,要把这句话尽可能放得靠前。一定要在流开启之前调用。

另外,response.setContentType("text/html;utf-8");这句话有两个作用,一个是告诉浏览器改用“text/html”格式解析页面,一个让浏览器使用“UTF-8”解析数据,包含了response.setCharacterEncoding("UTF-8");这句话的作用,所以一般调用前面那句就够了。

这样基本可以解决Tomcat乱码问题。


  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在JavaWeb项目中配置Tomcat,您可以按照以下步骤进行操作: 1. 首先,您需要从Apache Tomcat的官方网站上下载Tomcat的最新版本并进行安装 。根据您的操作系统选择适合的版本,并按照安装向导进行安装过程。 2. 安装完成后,您需要将您的JavaWeb项目部署到Tomcat服务器中。您可以将项目的WAR文件复制到Tomcat的webapps目录下,或者在Tomcat的管理界面中选择部署您的项目 。 3. 在Tomcat的安装目录中,您可以找到一个名为conf的目录。在该目录下,您可以找到一个名为server.xml的文件。您可以通过编辑该文件来配置Tomcat的各种设置。 4. 在server.xml文件中,您可以找到一个名为<Host>的标签,其中包含了Tomcat服务器的主机配置。您可以在这个标签中添加一个新的<Context>标签,来配置您的JavaWeb项目。 5. 在<Context>标签中,您需要设置项目的路径、项目的目录以及其他相关的配置。您可以指定项目的访问路径、会话管理、安全性设置等等 。 6. 配置完成后,您可以启动Tomcat服务器,并访问您的JavaWeb项目。您可以在浏览器中输入Tomcat服务器的地址和项目的路径,来查看您的项目是否成功配置并运行。 综上所述,要在JavaWeb项目中配置Tomcat,您需要先下载并安装Tomcat,然后将项目部署到Tomcat服务器中,并在Tomcat的配置文件中进行相应的设置。配置完成后,您就可以访问您的JavaWeb项目了。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [JavaWeb——tomcat下载安装及其配置](https://blog.csdn.net/qq_54773252/article/details/125838811)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值