`

Servlet开发GET和POST中文乱码处理(转)

阅读更多

tomcat在开发WEB服务器端程序的时候,我们经常遇到中文乱码的情况
现在特殊说明如下,主要要清除几个概念:
1.JAVA class类的编码是Unicode统一编码的,支持中文和其他UTF-8的字符用作类名等等;
2.TOMCAT内部实现的编码方式,TOMCAT的默认是以ISO-8859-1作为默认的编码。
2.request,response请求和响应的编码方式。


TOMCAT的执行机制:GET和POST有区别:
首先TOMCAT内核以指定的编码conf/server.xml中(URIEncoding=“GBK”)来读取Unicode的class的byte编码文件
到TOMCAT内核运行机制,等待请求,对于GET方式使用request.setCharacterEncoding("GBK")指定的编码读入TOMCAT,
在获取字符串str时使用str = new String(str.getBytes("ISO-8859-1"),"GB2312")因为TOMCAT的编码为ISO-8859-1
所以在获取中文字符时一定要使用如上才可以获取到正确字符。
对于POST获得的数据,使用request.setCharacterEncoding("GBK")指定的编码读入TOMCAT,在获取字符时候直接使用
str = getParameter("variables")就可以了,如果有返回,直接按照response.setContentType("text/html; charset=GBK")指定的编码返回。


另外一个问题是怎么样改变POST方法的提交的数据编码方式?
 
POST请求需要指定它发送的参数和值的编码,因为大多数客户端可能没有设置一个明确的编码,默认使用的是ISO-8859-1,因此可以使用一个javax.servlet.Filter来改变编码。Tomcat已经提供了完成这个功能的过滤器的例子。请参看:
6.x 
webapps/examples/WEB-INF/classes/filters/SetCharacterEncodingFilter.java


如下是一个实例验证GET和POST提交中文参数的过程:
建一个form.html
文件如下:
<body>
<form action="./TestServlet" method="GET">
<input name="username">
<input type="submit">
</form>
</BR>
<form action="./TestServlet" method="POST">
<input name="username">
<input type="submit">
</form>
</body>


在TestServlet.java文件中修改代码最终的代码如下:


public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
   request.setCharacterEncoding("GBK");
   response.setContentType("text/html;charset=GBK");
   PrintWriter out = response.getWriter();
   out.println("<!DOCTYPE HTML PUBLIC /"-//W3C//DTD HTML 4.01 Transitional//EN/">");
   out.println("<HTML>");
   out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
   out.println(" <BODY>");
   out.print("你输入的用户名:");
   //GET方法代码转换
   String username=request.getParameter("username");
   username =new String(username.getBytes("ISO8859-1"),"GBK");
   out.print(username);
   out.println(", using the GET method");
   out.println(" </BODY>");
   out.println("</HTML>");
   out.flush();
   out.close();
}


public void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
   request.setCharacterEncoding("GBK");
   //response.setContentType("text/html");
  response.setContentType("text/html;charset=GBK");
   PrintWriter out = response.getWriter();
   out.println("<!DOCTYPE HTML PUBLIC /"-//W3C//DTD HTML 4.01 Transitional//EN/">");
   out.println("<HTML>");
   out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
   out.println(" <BODY>");
   out.print("你输入的用户名:");
   out.print(request.getParameter("username"));
   out.println(", using the POST method");
   out.println(" </BODY>");
   out.println("</HTML>");
   out.flush();
   out.close();
}
输入中文名,测试doGet(),doPost都无乱码。

分享到:
评论

相关推荐

    post和get提交乱码处理

    能处理所有servlet里的乱码,让你的网页里不在有乱码

    Tomcat中Get和Post出现乱码的解决办法

    通过简单的办法解决Tomcat中出现的乱码,本文章使用于jsp servlet初学者

    javaweb servlet(jsp)的乱码问题原理及解决

    讲述javaweb开发中的jsp乱码问题 get、post的区别 http协议的图解

    java过滤器中文乱码POST和GET

    主要解决表单提交中文乱码问题,主要针对页面GET提交的处理编码问题,设计知识 过滤器,servlet,装饰设计模式等

    jQuery调用AJAX时Get和post公用的乱码解决方法实例说明

    以前在新浪博客写过js调用AJAX时Get和post的乱码解决办法,但是使用js代码比较繁琐,我们在使用ajax进行数据交互时可以使用js的一个成熟框架—jQuery。 一个网站的设计,不管是注册登录还是分页查找,都需要提交参数...

    response响应数据变成???&使用jquery发送带中文参数数据的get请求得到响应数据乱码解决过程

    一. response响应数据变成???的说明 request请求数据设置编码使用:request.setCharacterEncoding(“UTF-8”); ... charset=UTF-8”);...使用jquery发送post和get请求时,请求端和响应端均设置了编码,为

    做Java项目过程中遇到乱码问题的解决方案

    在做java项目(特别是web项目)的过程中,中文乱码一直是我们开发人员比较头疼的问题,因为涉及到编码,解码,字符集,以及国际化等诸多问题,所以在着手解决的时候也缺乏相关的知识。我花了一些时间自己动手实验了...

    JSP利用过滤器解决request中文乱码问题

    本文为大家分享了JSP用过滤器解决request中文乱码问题,具体内容如下 (1)客户端的数据一般是通过HTTP GET/POST方式提交给服务器,在服务器端用request.getParameter() 读取参数时,很容易出现中文乱码现象。 (2...

    JSP用过滤器解决request getParameter中文乱码问题

    (1)客户端的数据一般是通过HTTP GET/POST方式提交给服务器,在服务器端用request.getParameter()读取参数时,很容易出现中文乱码现象。 (2)用过滤器解决request中文乱码问题。 (3)代码如下: package my; ...

    ASP.NET之表单和控件详解

    主要介绍的有如下知识点: HTML表单的提交方式、HTM控件、获取HTML表单内容、乱码问题、SQL注入、服务器端表单、HTML服务器控件 ...对于一个普通HTML表单来说,它有两个重要的属性:action和...它有两个可能值get和post。

    吴天雄--JavaWeb完整笔记.doc

    模块二:使用eclipse和idea快速开发jsp(idea和tomcat的相关配置、eclipse创建web项目、jsp页面元素、jsp九大内置对象、四大作用域对象、解决get/post请求乱码问题、cookie和session详解、请求重定向);模块三:...

    Servlet-1-filter-3.rar

    对get、post请求进行全站防乱码控制

    网页教程《跟姐姐学JSP》

    2.2.2. POST乱码 2.2.3. GET乱码 3. 请求的跳转与转发 3.1. 范例 3.2. 如果用forward 3.3. 如果用redirect 3.4. forward和redirect的问题 3.4.1. 绝对路径与相对路径 3.4.1.1. 相对路径 3.4.1.2. 绝对路径 ...

    从J2SE到J2EE知识点介绍

    (四) form表单中的action,post和get 119 1. form中的action属性 119 2. from中的get和post 120 (五) jsp内置对象(request,response.session,out) 121 1. request和response 121 2. session 122 (六) Servlet的 xml...

    Java面试宝典2020修订版V1.0.1.doc

    14、jquery中的$.get和$.post请求区别? 27 15、jquery中如何操作样式的? 28 16、如何设置和获取HTML和文本的值? 28 17、Jquery能做些什么? 28 18、在ajax中data主要有哪几种? 28 19、jQuery中ajax由几部分组成...

    Bootstrap分页

    //处理乱码 Map, Object&gt; map = new HashMap, Object&gt;(); username=(username==null)?"":username; map.put("username", username);//username必须要和ibatis配置的property=username一致 Integer ...

    Jsp文件上传下载(工具类源码)

    // 设置字符编码为UTF-8, 统一编码,处理出现乱码问题 response.setCharacterEncoding("UTF-8"); // 实例化一个硬盘文件工厂,用来配置上传组件ServletFileUpload DiskFileItemFactory dfif = new ...

    Java学习笔记-个人整理的

    \contentsline {chapter}{Contents}{2}{section*.1} {1}Java基础}{17}{chapter.1} {1.1}基本语法}{17}{section.1.1} {1.2}数字表达方式}{17}{section.1.2} {1.3}补码}{19}{section.1.3} {1.3.1}总结}{23}{...

Global site tag (gtag.js) - Google Analytics