一、基本概念
1、Jsp页面指令也叫做page指令。Page指令是在<%...%>l里面。以下属性在page指令中:
1)pageEncoding: 指定JSP页面的编码方式,默认情况下为ISO-8859-1,在页面上显示中文时,必须修改为gbk或者2312.。
2)contentType: 设置MIME类型和字符集,格式为<%@page contentType="MIME,charset=字符集"%>。默认情况下,MIME类型为text/html,字符集为ISO-8859-1,如需要显示中文,需要设置为gbk或者gb2312。
(什么是MIME类型? 描述被传输文档的类型的一种方法。因其格式借用了多用途网际邮件扩展(MIME)而得名。由以斜杠分隔的一个主类型和一个副类型组成。例如: text/html , image/gif , application/octet-stream 。在HTTP中,MIME类型包含在 Content-Type 头(header)中被传输。)
2、servlet通过request对象获取客户端的请求信息。
jsp向servlet传递参数有两种方式,GET和POST。jsp通过response内部对象对用户进行相应,在servlet中也是使用response对象(doGet方法或者doPost方法中的第二个参数)完成对用户的响应。设置响应内容的MIME类型:
response.setContentType("text/html;charset=gb2312");
二、问题:Servlet接收和JSP传递的参数后乱码问题。
解析:
jsp向servlet传递参数有两种方式,GET和POST。而这两种传递机制又有所不同(这是产生乱码的根源,想从根本上解决问题就要深刻理解这点)
当用GET方式发送参数的时候,Tomcat会以get的缺省编码方式iso8859-1对汉字进行编码,编码后追加到url,web浏览器先将参数转码为ISO-8859-1格式,然后再发送出去,因此servlet接收到得get请求的参数是ISO-8859-1格式的,要想得到中文格式,必须对参数进行转码
当用POST方式发送参数的时候,参数会按照页面的编码方式发送参数出去,servlet只要与jsp页面编码方式一致就可以得到相应的文字格式了。 post提交时,如果没有设置提交的编码格式,则会以iso8859-1(Tomcat默认编码格式)方式进行提交,如果接受的jsp或者servlet却以utf-8或者gbk或者gb2312的方式接受则会导致乱码。
三、解决方案及代码说明
EncodingTest.jsp:
<%@page contentType="text/html" pageEncoding="GBK"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gbk">
<title>中文传递</title>
</head>
<body>
<h1>页面提交中文测试!</h1>
<h2>GET方式</h2>
<a href="servlet?param=jsp-->中文">GET方式提交中文测试</a>
<h2>POST方式</h2>
<form action="servlet" method="post">
<input type="text" name="param" value="jsp-->中文"/>
<button type="submit" name="提交中文参数测试" value="提交中文参数测试"/>
</form>
</body>
</html>
EncodingServlet:
public class servlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String param = request.getParameter("param");
System.out.println("GET方式获取的中文参数值(转码前):" + param);
String x = new String(param.getBytes("ISO-8859-1"), "GBK");
System.out.println("GET方式获取的中文参数值:" + x);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("GBK");
String param = request.getParameter("param");
System.out.println("POST方式获取的中文参数值:" + param);
}
}
测试结果:
GET方式获取的中文参数值(转码前):jsp-->????
GET方式获取的中文参数值:jsp-->中文
POST方式获取的中文参数值:jsp-->中文
搞清楚问题的本质,从根源处解决问题就不会像一个救火队员一样在自己的项目开发中到处救火了(解决乱码问题)
分享到:
相关推荐
jsp传参 servlet接收中文乱码问题的解决方法.docx
JSP乱码 N种解决方案
F:\文档\PDF格式学习资料\主题:Java Web开发(JSP、Servlet)乱码终极解决方案.txtF:\文档\PDF格式学习资料\主题:Java Web开发(JSP、Servlet)乱码终极解决方案.txtF:\文档\PDF格式学习资料\主题:Java Web开发...
jsp+servlet+mysql乱码解决的 累积各路方法 最终终成正果
servlet与jsp中文乱码处理,详细介绍多种乱码处理方法,包括使用过滤器的方法
JSP中文乱码的产生原因及解决方案,比较全面的解决中文乱码问题
解决jsp+servlet开发中的中文乱码问题
JSP乱码解决方案大家可以看看,可以有利于大家,在JSP页面乱码问题,扥到更好的解决方案
JSP解决乱码JSP解决乱码JSP解决乱码JSP解决乱码JSP解决乱码
Jsp和Servlet中文乱码问题
下面小编就为大家带来一篇jsp传参 servlet接收中文乱码问题的解决方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
讲述javaweb开发中的jsp乱码问题 get、post的区别 http协议的图解
jspservlet取参数乱码问题分析jspservlet取参数乱码问题分析jspservlet取参数乱码问题分析jspservlet取参数乱码问题分析jspservlet取参数乱码问题分析
彻底解决Servlet及jsp解决中文乱码问题
JSP与Servlet学习课件
Jsp传递参数时出现乱码的详细解决方案,适合被乱码困扰的朋友。
对jsp两个页面间传递变量出现变量乱码的解决 word文档
JSP中文乱码的产生原因及解决方案.docx
JSP与Servlet核心技术JSP与Servlet核心技术JSP与Servlet核心技术
主要介绍了JSP页面传参出现中文乱码的解决方案,非常实用,需要的朋友可以参考下