细说表单提交的GET和POST

一、GET方式

1、地址栏(URI)会跟上参数数据。以?开头,多个参数之间以&分割。

GET /day09/testMethod.html?name=eric&password=123456 HTTP/1.1
Host: localhost:8080
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-cn,en-us;q=0.8,zh;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Referer: http://localhost:8080/day09/testMethod.html
Connection: keep-alive

2、GET提交参数数据有限制,不超过1KB

3、GET方式不适合提交敏感密码。

4、注意: 浏览器直接访问的请求,默认提交方式是GET方式

二、POST方式

1、参数不会跟着URI后面。参数而是跟在请求的实体内容中。没有?开头,多个参数之间以&分割

POST /day09/testMethod.html HTTP/1.1
Host: localhost:8080
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-cn,en-us;q=0.8,zh;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Referer: http://localhost:8080/day09/testMethod.html
Connection: keep-alive

name=eric&password=123456

2、POST提交的参数数据没有限制。

3、POST方式提交敏感数据。

三、两种方式传递的请求参数获取方法

核心的API

request.getParameter("参数名");  根据参数名获取参数值(注意,只能获取一个值的参数)
request.getParameterValue("参数名“);根据参数名获取参数值(可以获取多个值的参数)
request.getParameterNames();   获取所有参数名称列表 

四、请求参数编码问题

请认真看下边的这张图:

分析:

1、我们在编写HTML或者JSP的时候,我们设置的编码为UTF-8。请求参数在传递的时候,会变成字节,这个转换时以我们设置的UTF-8为标准的

2、我们是用 request.getParameter("参数名")这个方法获取的时候,它是使用 "iso-8859-1" 进行解码的,所以就出现了中国特色的乱码问题。

解决方法:

修改POST方式参数编码:

request.setCharacterEncoding("utf-8");

这个编码的设置,只是对请求信息的实体部分进行的设置,所以只对POST方法有效。

修改GET方式参数编码:

手动解码:

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

五、实例分析

public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        Enumeration<String> enums=request.getParameterNames();
        while(enums.hasMoreElements()){
            String name=enums.nextElement();
            String name1=new String(name.getBytes("iso-8859-1"),"UTF-8"); //手动设置编码
            if("habit".equals(name)){
                System.out.println(name1+":");
                String [] values=request.getParameterValues(name);
                for(String str:values){
                    String str1=new String(str.getBytes("iso-8859-1"),"UTF-8");
                    System.out.print(str1+"  ");
                }
                System.out.println();
            }else{
                String value=request.getParameter(name);
                String values=new String(value.getBytes("iso-8859-1"),"UTF-8");
                System.out.println(name1+":"+values);
            }
        }
    
    }


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

        request.setCharacterEncoding("UTF-8"); //进行编码格式设置
        Enumeration<String> enums=request.getParameterNames(); //获取变量
        while(enums.hasMoreElements()){
            String name=enums.nextElement();
            if("habit".equals(name)){ //对于多值变量特殊处理
                System.out.println(name+":");
                String [] values=request.getParameterValues(name);
                for(String str:values){
                    System.out.print(str+"  ");
                }
                System.out.println();
            }else{
                String value=request.getParameter(name);
                System.out.println(name+":"+value);
            }
        }
    }

index.jsp

 
  <body>
    <form method="get" action="/HttpServletRequest/RequestDemo2">
        用户名<input type="text" name="userName"><br/>
        密码<input type="password" name="password"><br/>
        性别:
        <input type="radio" name="gender" value="男"/><input type="radio" name="gender" value="女"/><br/>
        籍贯:
        <select name="jiguan">
            <option value="广东">广东</option>
            <option value="上海">上海</option>
        </select><br/>
        爱好
        <input type="checkbox" name="habit" value="篮球"/>篮球
        <input type="checkbox" name="habit" value="足球"/>足球
        <input type="checkbox" name="habit" value="羽毛球"/>羽毛球<br/>
        个人简介:
        <textarea rows="5" cols="10" name="info"></textarea><br/>
        <!-- 隐藏域 -->
        <input type="hidden" name="id" value="001"/><br/>
        <input type="submit" value="sbmit"/>
    </form>
  </body>

 

posted @ 2015-12-15 22:00  好人难寻  阅读(254)  评论(0编辑  收藏  举报