php网站开发教学,哪些论坛是wordpress,wordpress群发留言,人才招聘网站怎么做在JQuery中#xff0c;我们可以进行REST ful中delete和put的请求#xff0c;但是在java EE标准中#xff0c;默认只有在POST请求的时候#xff0c;servlet 才会通过getparameter()方法取得请求体中的相应的请求参数的数据。而PUT#xff0c;delete请求的请求体中数据则默认…在JQuery中我们可以进行REST ful中delete和put的请求但是在java EE标准中默认只有在POST请求的时候servlet 才会通过getparameter()方法取得请求体中的相应的请求参数的数据。而PUTdelete请求的请求体中数据则默认不会被解析。 关于delete请求delete请求用来从服务器上删除资源。因此我们只需要把要删除的资源的ID上传给服务器即使是批量删除的时候也可以通过URL传参的方式将多个id传给servlet因此可以满足我们的需求可以直接发送请求。关于put请求(指的是带有请求体) 没有文件时SpringMVC提供了一个将post转换为put和delete的方法通过在web.xml中注册一个HiddenHttpMethodFilter过滤器。上传文件时我们可以通过在web.xml中注册一个MultipartFilter一定要在HiddenHttpMethodFilter之前。SpringMVC实现PUT,DELETE请求 context-paramparam-namecontextConfigLocation/param-nameparam-valueclasspath:applicationContext.xml/param-value/context-paramlistenerlistener-classorg.springframework.web.context.ContextLoaderListener/listener-class/listenerservletservlet-namedispatcher/servlet-nameservlet-classorg.springframework.web.servlet.DispatcherServlet/servlet-classinit-paramparam-namecontextConfigLocation/param-nameparam-valueclasspath:dispatcher-servlet.xml/param-value/init-paramload-on-startup1/load-on-startup/servletservlet-mappingservlet-namedispatcher/servlet-nameurl-pattern//url-pattern/servlet-mappingfilterfilter-nameHiddenHttpMethodFilter/filter-namefilter-classorg.springframework.web.filter.HiddenHttpMethodFilter/filter-class/filterfilter-mappingfilter-nameHiddenHttpMethodFilter/filter-nameservlet-namedispatcher/servlet-name/filter-mapping 然后我们看源码 Overrideprotected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)throws ServletException, IOException {String paramValue request.getParameter(this.methodParam);if (POST.equals(request.getMethod()) StringUtils.hasLength(paramValue)) {String method paramValue.toUpperCase(Locale.ENGLISH);HttpServletRequest wrapper new HttpMethodRequestWrapper(request, method);filterChain.doFilter(wrapper, response);}else {filterChain.doFilter(request, response);}} this.methodParam属性被默认初始化为_method通过request.getParameter(this.methodParam);判断是put还是deletePOST.equals(request.getMethod())而且必须要求是post方式提交的然后它把request进行包装后传给下一个filter。因此我们需要在提交的时候添加一个字段form action idformData nameformData methodpostinput typetext nameusername idusername/input typehidden name_method valuedelete/input typesubmit valuesubmit/
/form 或者在$.ajax中 function login() {$.ajax({type: post,//请求方式url: , //发送请求地址timeout: 30000,//超时时间30秒data: {username: $(#username).val(),password: $(#password).val(),_method: delete},dataType: json,//设置返回数据的格式success: function (data) {console.log(data);},error: function () { //请求出错的处理}});} 然后我们就可以在后台RequestMapping(value , method RequestMethod.PUT)注解中标识我们的方法最后就可以成功地获得数据。 SpringMVC实现PUT请求上传文件 可是后来我又有遇到另外一个需求那就是修改的时候需要传送文件到put方法中于是这种方法就不可行了但是我在HiddenHttpMethodFilter源码中看到这样一句话 * pbNOTE: This filter needs to run after multipart processing in case of a multipart* POST request, due to its inherent need for checking a POST body parameter./b* So typically, put a Spring {link org.springframework.web.multipart.support.MultipartFilter}* ibefore/i this HiddenHttpMethodFilter in your {code web.xml} filter chain. 和MultipartFilter源码中这样的注释 /*** Set the bean name of the MultipartResolver to fetch from Springs* root application context. Default is filterMultipartResolver.*/ 也就是说我们可以通过在web.xml中注册一个MultipartFilter一定要在HiddenHttpMethodFilter之前。filterfilter-nameMultipartFilter/filter-namefilter-classorg.springframework.web.multipart.support.MultipartFilter/filter-class/filterfilter-mappingfilter-nameMultipartFilter/filter-nameservlet-namedispatcher/servlet-name/filter-mappingfilterfilter-nameHiddenHttpMethodFilter/filter-namefilter-classorg.springframework.web.filter.HiddenHttpMethodFilter/filter-class/filter 然后再在Spring的 root application context中添加如下代码 bean idfilterMultipartResolverclassorg.springframework.web.multipart.commons.CommonsMultipartResolverproperty namemaxUploadSize value209715200/property namedefaultEncoding valueUTF-8/property nameresolveLazily valuetrue//bean FormData对象是html5的一个对象目前的一些主流的浏览器都已经兼容。FormData对象是html5的一个对象目前的一些主流的浏览器都已经兼容。 function test() {var form new FormData(document.getElementById(tf));form.append(_method, put);$.ajax({url: url,type: post,data: form,processData: false,contentType: false,success: function (data) {window.clearInterval(timer);console.log(over..);},error: function (e) {alert(错误);window.clearInterval(timer);}});get();//此处为上传文件的进度条} form idtf methodpost nameformDada enctypemultipart/form-datainput typefile namefile/input typetext nameid/input typetext namename/input typebutton value提 onclicktest()/
/form 最后就可以实现将文件上传提交给put方法。 转载于:https://www.cnblogs.com/morethink/p/6378015.html