Servlet解决参数乱码问题

为什么会产生乱码?

之所以会产生乱码,是由于服务器端和客户端的编码方式不一致造成的。客户端与服务器端的交互过程中,存在着两次数据交换:第一次,客户端向服务器端发起请求,第二次数据交换,服务器端响应客户端的请求后做出应答,将处理结果返回给客户端。

前提了解,无论服务器端是在接受数据还是在返回数据时,如果不指定其数据编码格式,那么他就会以其默认的“iso8859-1”来编码。  

首先看客户端向服务器端发出请求:

  客户端的页面以何种编码方式打开某个页面,通过http协议发送请求给服务器端时,就以何种编码方式将提交数据转换成其对应的二进制数来进行http传输。这个编码方式是在页面制作时已经指定了的,最常见的是做一个html文件时通过<meta http-equiv="content-type" content="text/html; charset=UTF-8">指定编码格式为utf8。那么,在服务器端接受这些数据时就要通过utf8来将这些二进制数据进行解码。如果用其他的编码方式,比如gbk来解码,就会出现乱码。

  举例:客户端传输“北京”两个字给服务器端,如果页面打开时是utf-8格式,那么就会以utf8来将“北京”转化成其对应的二进制数A:1000100111001010(瞎编的),在服务器端接收时,如果没有指定以utf8来接受这个二进制流A,那么服务器以其默认编码格式ISO8859-1来解码A,以为不同的编码方式对应的码表不一样,同样是1000100111001010,ISO8859-1可能解析不出来相应的字符,那么就会以?或者乱码来代替,然后输出,这是我们就看到了乱码。

  所以我们要做的就是统一两边的编码格式,在服务器端以客户端页面的编码格式来解析传过来的二进制数据流。可在servlet的doGet()和doPost()方法中作如下操作:

页面以get方法提交表单:

处理GET 提交方法的servlet 中的doGet()方法

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        String username = request.getParameter("username");
        username = new String(username.getBytes("iso8859-1"),"utf-8");//将接收来的二进制数据流以iso8859-1解码再转换成utf-8
        System.out.println(username);
    }

对于doPost()方法,代码如下

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        //解决post方法提交数据中的乱码问题
        //
        request.setCharacterEncoding("utf-8");//将解码方式设为来源网页的编码方式即可,这句话加在这个方法的第一句
        String add = request.getParameter("address");
        System.out.println(add);

    }

再看服务器端向客户端返回数据

  原理基本上同客户端向服务器端发送请求,要做到两边编码方式一致。做法就是在服务器响应时,第一,设置客户端相应的http协议它的数据输出编码格式为指定的格式(假如utf8);第二将要输出的数据以utf8格式编码。

public class RequestAllexampleServlet2 extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        response.setContentType("text/html;charset=utf-8");//设置http输出格式
        response.setCharacterEncoding("utf-8");//设置字符编码格式
        response.getWriter().write("北京");

    }

访问这个Servlet结果为:

时间: 2024-10-12 23:37:54

Servlet解决参数乱码问题的相关文章

jQuery Ajax传值给Servlet,在Servlet里接受参数乱码的解决方法

最近在学jquery ui,在做一个小功能的时候需要将前台的值获取到,通过Ajax传递给Servlet,然后再在返回数据结果,但是在Servlet接受参数的时候,通过后台打印,发现接受乱码,代码示例如下: public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/ht

servlet 解决乱码问题

对于servlet大家应该都很熟悉了,今天再复习一下,如果有哪里写的不好或不对的地点希望广大的网友批评指正.今天只讨论get和post两w种方式,他们之间有很多的不同点,所以解决编码的方式也会不一样,post的乱码问题好解决一点,下面先简单说下http协议,以便我能更好的记忆原理性的东西和他们之间的不同点. get方式和post方式都是基于http协议的,它的目的是为了提供一种发布和接收html页面的方法,由客户端发起请求,服务器端进行响应. 一个完整的请求消息包括:一个请求行,若干消息头和请求

Web---演示servlet技术(servlet生命周期),解决中文乱码问题

本节讲解决中文乱码问题的4种方法. 还有更好的方法,也就是用过滤器,这里就不演示了,博主目前也不会~呼?(^?^*)~过段时间才会学. servlet生命周期演示: index.jsp: <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Tra

解决url中文参数乱码的问题--解码

<html> <body> <h3 class="projectName" id="projectName"></h3> <script type="text/javascript"> var unitID;    var unitName;    //获取参数的函数    function geturlPara()    {        var url = document.URL;

http中 get方法 传送中文参数乱码解决办法

http传送参数有两种方法:get 和post  当时使用get方法传递中文参数是会有乱码现象 解决办法: 1.在jsp压面url后面的参数使用 encodeURI:"&zxbghy="+ encodeURI(zxbghy) 2.在后台java获取参数时使用字节数组:temphgdmhy = new String(hgdmhy.getBytes("ISO-8859-1"), "UTF-8");  案例,用get方法传递两个中文参数:zxb

解决servlet请求中文乱码的通用过滤器程序

import java.io.IOException; import java.io.UnsupportedEncodingException; import java.util.Map; import java.util.Set; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletExcepti

解决URL带中文参数乱码问题

通过配置Tomcat来解决URL代中文参数乱码的问题. 首先打开Tomcat安装目录 打开conf文件夹 打开server.xml,在大约65行的位置,加一个属性 URIEncoding="UTF-8" 这样就支持Url中文参数了.

纯JS设置首页,加入收藏,获取URL参数,解决中文乱码

雪影工作室版权所有,转载请注明[http://blog.csdn.net/lina791211] 1.前言 纯Javascript 设置首页,加入收藏. 2.设置首页 // 设置为主页 function SetHome(obj, vrl) { try { obj.style.behavior = 'url(#default#homepage)'; obj.setHomePage(vrl); } catch (e) { if (window.netscape) { try { netscape.s

get、post请求参数乱码解决方法(qq:2798641729)

在实际的项目中我们会遇见中文乱码的问题,这个问题是很恶心的事,所以我在这里提供了一些解决中文乱码的方法,希望能给大家一些帮助. 一.单独参数乱码 post请求:request.setCharacterEncoding("utf-8"); 当客户端通过GET请求发送数据给服务器时,使用request.getParameter()获取的数据是被服务器误认为ISO-8859-1编码的,也就是说客户端发送过来的数据无论是UTF-8还是GBK,服务器都认为是ISO-8859-1,这就说明我们需要