• Servelet------07 get和post获得请求参数的通用方式及获取请求参数中文乱码的解决


    概述:在前面的内容我们已经了解get的请求参数会封装在请求行中,我们可以通过: String  getQueryString();方法获得,而post方式的请求参数是以流的方式封装在请求体中,我们需要获得相应的流进行读取,这样对我们开发来说就十分的不方便,所以接下来介绍一种对于get和post方式获得请求参数通用的方法。

    方法:

               1.根据参数名称获取值:

        String  getParameter(String name);

         2.根据参数名称获取值的数组(多用于复选框)

        String[]  getParameterValues(String name);

        3.获取所有请求参数的名称:

        Enumeration<String> getParameterNames();

        4.获取所有参数和名称的map集合:

        Map<String,String[]>  getParameterMap;      (注意获取的值是一个数组)

    下面我们编写一个程序进行验证:

    get方法的form表单:

     相应的Servelet

     运行结果:

     

    post方式提交表单:

    运行结果:

    结果一样运行出来了。

    一个问题:中文乱码

    我们会发现当我们使用get方法将用户名输入中文的时候,我们获得的是正确的中文:

    当我们将用户名输入中文的时候:

    结果并不会出现乱码:

     但是如果我们使用post的方式提交参数,那么我们获取的中文就会乱码:

    输入中文:

    结果是:

    问题原因及解决方法:

    Tomcat8版本已经解决了get方式的中文乱码问题,但是并没有解决post方式的中文乱码问题,post方式虽然使用通用方式获得参数,但是在底层还是经过流的方式封装到请求体之中,

    所以我们需要设置流的编码格式和封装进请求行一致,也就是和表单页面的编码格式一致。

    方式:      request.setCharacterEncoding("utf-8");

    结果是:

        

    迎风少年
  • 相关阅读:
    hadoop常用命令详细解释
    2019-05-20 Sublime Text 编辑
    2019-05-20 什么是分布式系统、分布式锁
    2019-05-19 centos7下删掉一个目录下所有的文件
    2019-05-17 ABRT has detected 1 problem(s). For more info run: abrt-cli list --since 1558053651
    2019-05-17 java.net.BindException: Address already in use: JVM_Bind <null>:8083
    2019-05-16mysql忘记密码怎么办
    2019-05-16查看MySQL版本sql语句
    2019-05-15 cenots7动态IP地址改为静态
    2019-05-14 MySQL通过dos命令操作数据库
  • 原文地址:https://www.cnblogs.com/ZYH-coder0927/p/13663687.html
Copyright © 2020-2023  润新知