当前位置:首页 > 述职报告 > 【解决JSP/Servlet开发中的中文乱码问题】jsp中文乱码问题
 

【解决JSP/Servlet开发中的中文乱码问题】jsp中文乱码问题

发布时间:2019-02-28 03:48:20 影响了:

  摘要 基于JSP/Servlet技术的Java Web应用开发中,中文乱码是个恼人的问题,给开发者带来不小的麻烦,本文就着重讨论了JSP/Servlet开发中几种典型的中文乱码问题,并给出了相应的解决方案。
  关键词 JSP/Servlet;中文乱码
  中图分类号TP39 文献标识码A 文章编号 1674-6708(2011)34-0193-01
  0 引言
  基于JSP/Servlet技术的Java Web应用开发中,中文乱码是个如影随形的问题,总是挥之不去,对于Java Web应用开发的初学者造成不少的困扰。Java Web应用是由多种Web组件协同合作的,同时还需要浏览器和数据库的支持,中文乱码问题产生的根源就在于这些Web组件之间、或web组件与浏览器、与数据库所使用的字符集标准不统一。因此,要解决中文乱码,其基本原则就是:保持数据传输的起点、终点、传输通道上的编码一致。
  1 几种典型乱码情形解决方案
  下面分几种常见的情形给出中文乱码的解决方案,这些解决方案统一使用UTF-8作为编码字符集。
  1.1浏览器显示中文时的乱码
  浏览器在显示JSP页面时,若页面含中文内容,可能会出现中文乱码,其原因是:JSP页面与浏览器的字符集不匹配。
  解决方案:让JSP页面与浏览器使用统一的编码字符集。可在JSP中使用如下代码实现:
  其中,pageEncoding="utf-8"代表JSP使用utf-8字符集,contentType="text/html;charset=utf-8"代表浏览器使用utf-8字符集解释收到的数据。
  若是从Servlet向浏览器输出内容,可在Servlet中使用如下代码使浏览器采用utf-8编码进行显示:
  response.setContentType("text/html;charset=utf-8");
  PrintWriter out = response.getWriter();
  out.println("中文!");
  1.2获取表单中文参数时的乱码
  对于表单,在JSP/Servlet中可采用request.getParameter(“参数名”)来获取参数值,但若不做适当处理,表单参数值为中文时就会发生乱码问题。这是因为,表单参数使用post方式提交时,是通过request对象传输的,且Tomcat对其的编码方式是iso-8859-1,当表单页和获取表单的组件不是采用与之相同的字符集时就会出现乱码了。
  解决方案:让表单页、封装表单数据的request对象和接收表单数据的组件采用统一的编码字符集。假定表单页为index.jsp,接收表单页为receive.jsp,则具体如下:
  1)表单页index.jsp:
  
  表单传中文
  
  
   输入
  
  
   var _gaq = _gaq || [];_gaq.push(["_setAccount", "UA-22575914-1"]);_gaq.push(["_setDomainName", ".省略"]);_gaq.push(["_trackPageview"]);(function () {var ga = document.createElement("script"); ga.type = "text/javascript"; ga.async = true;ga.src = ("https:" == document.location.protocol ? "https://ssl" : "https://www") + ".省略/ga.js";var s = document.getElementsByTagName("script")[0]; s.parentNode.省略";var _siteid =691;var _istoken = 1;var _model = "Model01"; WebPageSpeed =359; UrchinTrack();
  2)接收表单数据页receive.jsp:
  
   接收中文
   使用request取到的表单参数:
  
   var _gaq = _gaq || [];_gaq.push(["_setAccount", "UA-22575914-1"]);_gaq.push(["_setDomainName", ".省略"]);_gaq.push(["_trackPageview"]);(function () {var ga = document.createElement("script"); ga.type = "text/javascript"; ga.async = true;ga.src = ("https:" == document.location.protocol ? "https://ssl" : "https://www") + ".省略/ga.js";var s = document.getElementsByTagName("script")[0]; s.parentNode.省略";var _siteid =691;var _istoken = 1;var _model = "Model01"; WebPageSpeed =359; UrchinTrack();
  若接收表单的是Servlet,则在Servlet中,取表单参数值之前先使用request.setCharacterEncoding("utf-8") 进行转码即可。
  1.3 进行数据库操作时的乱码
  这里数据库以MySQL为例进行讨论。当JSP/Servlet要与数据库进行交互时,若JSP/Servlet、传输通道、数据库三者采用的编码字符集不一致也会导致乱码问题的出现。传输通道是指:JSP/Servlet连接数据库的连接对象。
  解决方案:
  第一步:确定JSP/Servlet采用utf-8编码,要写至数据库的中文数据正常,若数据来自表单,则参考1.2正确取到中文参数值。
  第二步:确定数据库采用utf-8编码。对于MySQL而言,可以使用其配置向导设置数据库采用utf-8作为默认字符集;创建表时,对于允许中文的字段,设字段的字符集为utf-8。
  第三步:连接MySQL数据库的连接对象上设置字符集为utf-8。假设数据库名为db1,则获取连接的数据库URL如下:jdbc:mysql://localhost:3306/db1?user=root&password=123456
  &useUnicode=true&characterEncoding=utf8
  其中,useUnicode=true&characterEncoding=utf8为关键代码,表示连接对象(即数据的传输通道)采用utf-8编码字符集。
  2 结论
  JSP/Servlet开发Java Web应用时的中文乱码问题虽然恼人,但只要把握住解决问题的基本原则:保持数据传输的起点、终点、传输通道上的编码一致,在出现中文乱码后仔细检查各处的编码字符集是否一致并即时予以纠正,相信初学者也能很好地解决中文乱码问题了。
  
  
  参考文献
  [1]孙卫琴.Tomcat与Java Web开发技术详解[M].电子工业出版社,2005,8.
  [2]王国辉,等.JSP数据库系统开发完全手册[M].人民邮电出版社,2006,3.
本文为全文原貌 未安装PDF浏览器用户请先下载安装 原版全文

猜你想看
相关文章

Copyright © 2008 - 2022 版权所有 职场范文网

工业和信息化部 备案号:沪ICP备18009755号-3