学科分类
目录
Java Web

获取网络连接信息

在填写表单数据时,难免会输入中文,例如,姓名、公司名称等,为了查看请求参数会不会发生中文乱码问题,接下来,再次访问form.html文件,在表单中填写中文的用户名“传智播客”,如图1所示。

图1 运行结果

点击图1所示的【提交】按钮,这时,控制台打印出了每个参数的值,具体如图2所示。

图2 运行结果

​ 从图2可以看出,当输入的用户名为中文时,出现了乱码问题。通过分析发现,浏览器在传递请求参数时,默认采用的编码方式是gbk,但在解码时采用的是默认的iso8859-1,因此,导致控制台打印的参数信息出现乱码。

为了解决上述问题,在HttpServletRequest接口中,提供了一个setCharacterEncoding()方法,该方法用于设置request对象的解码方式,接下来,对例5-18进行修改,将参数的解码方式改为gbk,修改后具体如例1所示。

例1 RequestParamsServlet.java

 1    package cn.itcast.chapter05.request; 
 2    import java.io.*;
 3    import javax.servlet.*;
 4    import javax.servlet.http.*;
 5    public class RequestParamsServlet extends HttpServlet {
 6        public void doGet(HttpServletRequest request, HttpServletResponse response)
 7                throws ServletException, IOException {
 8             request.setCharacterEncoding("utf-8");
 9            String name = request.getParameter("username");
 10            String password = request.getParameter("password");
 11            System.out.println("用户名:" + name);
 12            System.out.println("密   码:" + password);
 13            String[] hobbys= request.getParameterValues("hobby");
 14             System.out.print("爱好:");
 15            for (int i = 0; i < hobbys.length; i++) {
 16                System.out.print(hobbys[i]+" ");
 17            }
 18        }
 19        public void doPost(HttpServletRequest request, HttpServletResponse response)
 20                throws ServletException, IOException {
 21            doGet(request, response);
 22        }
 23    }

启动Tomcat服务器,再次访问form.html网页,输入中文用户名“传智播客”,控制台打印的结果如图3所示。

图3 运行结果

从图3可以看出,控制台输出的参数信息没有出现乱码。需要注意的是,这种解决乱码的方式只对POST方式有效,而对GET方式无效。为了验证GET方式的演示效果,接下来,将form.html文件中method属性的值改为“GET”。重新访问form.html网页并填写中文信息,控制台打印的结果如图4所示。

图4 运行结果

从图4可以看出,使用get方式提交表单,用户名出现了乱码,这就验证了setCharacterEncoding()

方法只对POST提交方式有效的结论。为了解决GET方式提交表单的中文乱码问题,我们可以首先使用错误码表iso8859-1将用户名重新编码,然后使用码表gbk进行解码。接下来,对例1进行修改,在第9行和第10行代码之间增加一行代码,如下所示:

name=new String(name.getBytes("iso8859-1"),"utf-8");

重启Tomcat服务器,再次访问form.html网页,输入中文用户名“传智播客”,这时,控制台的打印结果没有出现乱码,如图5所示。

图5 运行结果

点击此处
隐藏目录