博客文章已经迁移:http://www.arm4u.com/read.php?tid=36
J2EE开发中,乱码问题一直都萦绕在程序员的开发过程当中。但是只要我们对各种乱码出现的情况进行分析、总结,问题就能迎刃而解。
解决这类问题,通常需要思考以下问题:
1、在什么情况(如软件环境等)下产生了乱码?
2、数据来源时的编码方式是什么?在当前环境下处理这些数据(如正常显示)需要进行什么样的转码?
3、数据被使用后,需要通过什么编码方式处理才能在转发后避免乱码的发生?
问题一:通过Http请求的URL地址传递参数(Form表单Get()方式提交)
假设,URL中的访问地址为:【http://127.0.0.1:8080/myweb/TestServlet?name=琳达】。“myweb”是我们在服务器端发布的web应用的名称,“TestServlet”是具体的Servlet的名称,问号后的“name”是向服务器端传递的参数,“琳达”是参数“name”所对应的值。
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String uname = request.getParameter("name");
System.out.println(uname);//打印时在控制台出现乱码
// 省略
}
说明:
在Servlet中,通过Servlet提供的HttpServletRequest对象的getParameter()方法来获取客户端请求的内容。通过URL请求的方式(即get()方式)传递参数时,getParameter()方法进行自动URL解码采用的编码方式取决Servlet引擎Tomcat默认用iso8859-1(或者ISO-8859-1)进行编码。
在这里,尤其要注意的是通过Http请求的URL中自带参数进行访问提交到服务器属于Get()传送,就是把数据串在请求的URL后面作为参数。当访问地址该地址后,浏览器会对URL进行URL encode(即对URL进行编码),然后发送给服务器。
代码:
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String uname = request.getParameter("name");
System.out.println(uname);//乱码
if(uname!=null){
//将uname的值通过原来的编码方式(ISO-8859-1)转换成可显示中文的编码(GB2312)
uname=new String(uname.getBytes("ISO-8859-1"),"GB2312");
}else{
uname="游客";
}
System.out.println(uname);//输出中文“琳达”
// 省略
}
问题二:Form表单Post()方式提交
假设,在index.html文件中存在一个Form表单,提交方式为Post()方式。表单中有一个元素<input name="name" value="琳达" type="text" />。通过Form表单提交至服务器端的Servlet来处理业务,其中很重要的一点就是在Servlet中如何准确获取Form表单提交的内容,比如表单中名称为“name”的值。
<form name="Name" action="TestServlet" method="post">
<input name="name" value="琳达" type="text" />
<input type="submit" name="Submit" value="GO">
</form>
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String uname = request.getParameter("name");
System.out.println(uname);//打印时在控制台出现乱码
// 省略
}
说明:
Post()提交方式下,传递参数也需要进行URL encode,编码方式取决于页面中的<meta http-equiv="Content-Type" content="text/html; charset=字符集GBK,utf-8等"/>。这个属性除了说明此网页在浏览器下是通过什么编码进行网页的解释之外,Post()方式下会用此处定义的编码方式进行编码而后提交到服务器。如果请求的页面是JSP,则<%@ page language="java" import="java.util.*" pageEncoding="GBK,utf-8等"%>可进行相应的配置。
在讲解Get()处理方式中,我们用了强制转码的方式解决乱码问题,但是通过Post()提交方式Servlet提供了解决方案:request.SetCharacterEncoding("字符集");方法。
代码:
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//请求的页面设置了GBK方式进行编码,那么通过request来设置获取的对应编码
request.setCharacterEncoding("GBK");
String uname = request.getParameter("name");
System.out.println(uname);//正常的文字
// 省略
}
本文讲解了如何对客户端发送的数据进行正常的解码方式,主要通过Get()和Post()为主的两种提交方式在服务器端对乱码的不同处理来帮助大家理解乱码产生的原因和通俗的解决方式。今后还会做更加详细、深入的探讨,比如Servlet对Get()和Post()为何要做不同处理?是否还有其他方式来解决这个问题?
期待大家的关注,也希望得到宝贵的建议。
分享到:
相关推荐
servlet与jsp中文乱码处理,详细介绍多种乱码处理方法,包括使用过滤器的方法
jspservlet取参数乱码问题分析jspservlet取参数乱码问题分析jspservlet取参数乱码问题分析jspservlet取参数乱码问题分析jspservlet取参数乱码问题分析
jsp传参 servlet接收中文乱码问题的解决方法.docx
彻底解决Servlet及jsp解决中文乱码问题
讲述javaweb开发中的jsp乱码问题 get、post的区别 http协议的图解
Jsp和Servlet中文乱码问题
解决jsp+servlet开发中的中文乱码问题
NULL 博文链接:https://tongqiuyan.iteye.com/blog/1120389
jsp+servlet+mysql乱码解决的 累积各路方法 最终终成正果
Servlet + Tomcat 中文乱码的解决方法,浏览器把Unicode字符转换为GBK字符,这样页面的内容和浏览器的显示模式都设成了GBK,就不会乱码了
最简单的写法 只要JSP页面的 编码格式和 web.xml 编码格式一样就行
下面小编就为大家带来一篇jsp传参 servlet接收中文乱码问题的解决方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
JSP_利用Filter解决Servlet输出中文乱码的问题.docx
主要内容包括web应用程序运行原理、主流集成开发工具(eclipse/myeclipse)和运行环境(tomcat)的配置和使用、servlet、jsp、jdbc、jsp表达式语言(el)、servlet监听器和过滤器、定制标记库、jstl、mvc模式、dao...
彻底解决servlet中文乱码问题,对于gbk、utf-8、iso-8859-1之间的选择,做了详细的讲解!
乱码总结,其中包括java,servlet,jsp,struts2,等,属个人总结,仅提供参考
jsp和servlet操作mysql中文乱码问题的解决办法.docx
本文档详细地介绍了如何解决MySql数据库中的中文乱码问题,此问题的解决将极大地帮助基于MySql的PHP编程、JSP编程、Servlet编程及C#或.Net编程!测试过的开发平台包括 Netbeans和Eclipse。测试过的服务器包括Apache、...
在利用Servlet/JSP技术开发java Web应用程序的时候,不可避免的会遇到中文乱码问题,本文首先介绍了Web应用中常用的编码方式,然后分析了J2EE平台下Web应用中文乱码问题产生的原因,并在此基础上针对不同情况提出了解决...
JSP Servlet 汉字编码问题 乱码解决方法