经常使用表单,一直使用的都是POST方式,POST将数据封装到请求体中,相对于GET安全一点;而POST处理中文编码问题也比GET简单(GET需要将URL编码,后台接受到后还需要解码)。今天我想要使用GET方式提交表单,却遇到了参数丢失的问题(姑且这样称呼这个问题吧),并不是GET方式表单提交的数据就会丢失,而是自己对表单理解的还不到位,使用错误。

一个GET方式提交的表单:

<form action="${pageContext.request.contextPath }/myServlet?name=lz" method="GET">
<input type="text" name="password"/>
<input type="submit" value="提交"/>
</form>

重点在于?号后面的name参数,我想当然的以为password的值会最加到后面,就如:

http://localhost:8888/11/myServlet?name=lz&password=123

但是事实上,真正的URL为:

http://localhost:8888/11/myServlet?password=123

没错,完全不管?号后面是否有值,直接将password追加到?号后面,所以我们在后台想要得到这个name的值,当然就得不到了。

而我们常用的POST方式会怎样呢?

将method改为POST之后,再次提交,可以发现提交的URL:

http://localhost:8888/11/myServlet?name=lz

而password参数封装在请求体中传给后台,所以后台既可以得到name的值,也可以得到password的值,都没有问题。

我们姑且将追加在?后面的参数称之为查询字符串,而将写在input中的值称之为表单数据。

注意:查询字符串不能使用GET方式的表单进行提交,想要提交可以使用隐藏域的方式(作为表单数据),而POST没有问题;表单数据不论使用哪种方式提交都是可以正确提交到后台的。

这个例子即使是比较极端的,但是如果有类似的需求还是需要注意一下。

既然这里说到表单,我再记录一下如何使用表单发PUT或者DELET类型的请求,其实表单只支持GET或POST的请求,其method的方法选项也只有这两种,如果我们使用RestFul风格的URl,就需要解决这个问题。

步骤:

1.在web.xml中配置HiddenHttpMethodFilter 这个Filter,其实就是这个Filter将POST请求转变为PUT或是DELET,其实在页面发的还是POST请求:

    <!--配置将POST转换为PUT,DELETE的Filter  -->
<filter>
<filter-name>HiddenHttpMethodFilter</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>HiddenHttpMethodFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

2.表单一定要使用POST请求,然后在表单中添加一个隐藏域:

    <%-- 因为使用PUT提交,所以需要一个隐藏域name=_method --%>
<input type="hidden" name="_method" value="PUT"/>

隐藏域input的名应定要是_method,至此,就可以根据隐藏域value的值发出PUT或DELETE请求了。

使用GET方式提交的表单遇到的问题的更多相关文章

  1. 如何通过iframe以post方式提交form表单

    以前用过一次这种技术,这次用居然忘了,现纪录下来,下次再用就来看看. 首先在html中需要准备好form和iframe元素代码如下: <form id="speaker_form&qu ...

  2. 如何通过submit提交form表单获取后台传来的返回值

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/qq_34651764/article/details/76373846 小伙伴是不是遇到过这样的问题 ...

  3. formidable处理提交的表单或文件的简单介绍

    一般来说,客户端向服务端提交数据有GET和POST这两种方式,在之前的文章node.js当中的http模块与url模块的简单介绍当中我们可以知道通过req.url与url模块的配合处理可以快速得到客户 ...

  4. formidable处理提交的表单或图片文件的简单介绍

    一般来说,客户端向服务端提交数据有GET和POST这两种方式,在之前的文章node.js当中的http模块与url模块的简单介绍当中我们可以知道通过req.url与url模块的配合处理可以快速得到客户 ...

  5. Jquery通过Ajax方式来提交Form表单

    今天刚好看到Jquery的ajax提交数据到服务器的方法,原文是: 保存数据到服务器,成功时显示信息. jQuery 代码: $.ajax({ type: "POST", url: ...

  6. jquery的ajax提交form表单方式总结

    方法一: function AddHandlingFeeToRefund() { var AjaxURL= "../OrderManagement/AjaxModifyOrderServic ...

  7. jquery下的提交,点击按钮没反应,post方法不执行 JSON方式在FORM表单下不起作用

    jquery下的提交,点击按钮没反应,post方法不执行 JSON方式在FORM表单下不起作用

  8. 通过jQuery的Ajax方式来提交Form表单

    通过jQuery的Ajax方式来提交Form表单 $.ajax({ url:ajaxCallUrl, type:"POST", cache:true, async:false, d ...

  9. ajax提交form表单资料详细汇总

    一.ajax提交form表单和不同的form表单的提交主要区别在于,ajax提交表单是异步提交的,而普通的是同步提交的表单.通过在后台与服务器进行少量数据交换,ajax 可以使网页实现异步更新.这意味 ...

随机推荐

  1. Python程序员不完全指南

    Python 基础 Python基础 基础数据类型 深浅copy 文件操作 函数 初识函数 函数进阶 装饰器函数 迭代器和生成器 各种推导式 递归函数 内置函数和匿名函数 异常处理 常用模块 模块和包 ...

  2. html与css与JavaScript的关系

    “HTML是网页的结构,CSS是网页的外观,而JavaScript是页面的行为.” 1)HTML—Hypertext Markup Language. 超文本标记语言.用来描述网页的语言. <h ...

  3. 利用层序遍历(含空节点)和中序遍历重建二叉树 python

    给定一颗二叉树的层序遍历(不含None的形式)和中序遍历序列,利用两个序列完成对二叉树的重建. 还是通过一个例子来说明整个过程,下图所示的二叉树,层序遍历结果为[a,b,c,d,e],中序遍历结果为[ ...

  4. iOS9的新特性以及适配方案-----转载

    2015年9月8日,苹果宣布iOS 9操作系统的正式版在太平洋时间9月16日正式推出,北京时间9月17日凌晨1点推送. 新的iOS 9系统比iOS8更稳定,功能更全面,而且还更加开放.iOS 9加入了 ...

  5. HOG特征简述

    ---恢复内容开始--- 参考文献:http://blog.csdn.net/zouxy09/article/details/7929348 分为几步: 1)cell:有n×m个像素组成,计算每个像素 ...

  6. IAuthenticationManager.SignOut 退不了

      AuthenticationManager.SignOut(); 这个退不了,然后就加上   AuthenticationManager.SignOut( DefaultAuthenticatio ...

  7. ubuntu 添加应用到Dash启动器

    打开终端输入 $sudo vim /usr/share/applications/name.desktop name是你的程序标识名称 在打开的编辑器中添加以下内容,这里以配置NetBeans为例: ...

  8. HihoCoder1049 后序遍历 分治水题

    水题,是为了给难题(树形DP)做铺垫 描述 在参与过了美食节之后,小Hi和小Ho在别的地方又玩耍了一阵子,在这个过程中,小Ho得到了一个非常有意思的玩具——一棵由小球和木棍连接起来的二叉树! 小Ho对 ...

  9. Java调用函数传递参数到底是值传递还是引用传递

    今天翻看微信上有关Java技术的公众号时,看到了一篇关于Java中值传递的问题,文章讨论了在Java中调用函数进行传参的时候到底是值传递还是引用传递这个面试时会问到的问题.之前也接触过类似的问题,但只 ...

  10. System.IO.Pipelines来对消息进行Buffer合并

    System.IO.Pipelines来对消息进行Buffer合并 https://www.cnblogs.com/smark/p/9927455.html .net core使用Pipelines进 ...