DELETE方法在SSM和SpringBoot的应用
DELETE方法在SSM和SpringBoot的应用Http协议中,四个表示操作方式的动词GET POST PUT DELETE,他们对应四种基本操作,GET用来获取资源,POST用来新建资源,PUT用来更新资源,DELETE用来删除资源
简单的说,就是我们在访问资源时,可以通过这四个状态来表示对于资源的不同操作,这四个状态表现为我们请求的四种方式/controller/1 HTTP GET :得到id为1 的资源/controller/1 HTTP DELETE :删除id为1的资源/controller/1 HTTP PUT :更新id为1 的资源/controller/1 HTTP POST :增加id为1 的资源
在访问同一个url的时候,通过不同的请求方式,对应到不同的controller处理单元。
但是在我们项目中其实只认识post和get请求,delete put都是有post请求映射过去的,在ssm项目和springboot项目中有不同的处理方式。
SSM处理DELETE请求在我们的ssm项目中,前端的请求需要加上一个字段,名称为_method,值为DELET ...
springboot自动装配
SpringBoot自动装配简述 最近在学习SpringBoot的相关技术,因为还没有很认真的阅读源码,所以对于自动装配进行一个简单的总结。
xxx-spring-boot-starter自动装配 springboot和spring最大的区别就是springboot的开箱即用,直接在pom文件中引入对应的依赖启动就可以了,比如引入springmvc我们可以引入spring-boot-starter-web来一起和springmvc相关的一些依赖,包括我们使用文件上传的commons-io等等,就不用像spring中一个一个的引入依赖了。
那么这种不用配置xml并且自动装配的原理又是什么呢?在SpringBoot中,有一种自动装配的过程,是通过在文件classpath:/META-INF/spring.factories 中添加配置org.springframework.boot.autoconfigure.EnableAutoConfiguration 的方式来配置Bean。换句话说,我们引入的依赖中会在对应文件classpath:/META-INF/spring.fac ...
springboot文件上传
Springboot文件上传之前讲过了ssm部分的文件上传,springboot中的上传和之前大同小异,现在总结一下。
依赖我们之前使用springmvc进行文件上传主要用到了一下两个依赖,但是在springboot中这两个依赖都被自动装配引入了,我们就不需要重复引入。
123456789101112 <!--文件上传依赖--> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.4</version> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifac ...
springboot获取路径问题
request.getServletContext().getRealPath()获取路径总是临时文件夹解决方法问题描述最近在文件上传的过程中总是会遇见使用getServletContext().getRealPath()得到的是临时文件的路径。并且每次重启服务,这个临时文件的路径还会变更。
解决方法
配置module对应的work directory为当前的module目录:当idea中已有一个Project的情况下,再添加一个新Module的时候,Module的working directory可能默认还是Project的目录。
在工作区module目录下建立public文件夹。
原理源码
我们可以看见SpringBoot启动后,默认会把commonDocRoot设置成这三个目录"src/main/webapp", "public", "static"。
1234567891011121314151617181920212223242526272829303132package org.springframew ...
收集饰品
题目描述
解题思路只考虑宝箱费用的时候:这个题目在仔细分析之后可以大概知道是一个状态压缩dp的做法,dp[i][j]用来表示使用1-i个宝箱,并且状态为j(二进制压缩表示)的时候花的最少的钱,但是我们发现我们想用前一个状态更新当前状态的时候,我们不能确定前一个状态的j是哪一个。我们更新策略可以使用当前状态j来更新后一个状态,那么我们的i就整体向后面移动了一位。相关理解如果我们使用dfs解决:
12345678910111213public static void dfs(int d,int state){ if(d == n){ //更新最后的价格 res = Math.min(res,dp[d][(1<<m) - 1]); } //选择当前宝箱 dp[d+1][state|s[d]] = dp[d][state] + cost[d]; dfs(d+1,state|s[d]); dp[d+1][state] = dp[d][state]; //不选择当前宝箱 ...
管道
题目描述
解题思路这个题目意思很拗口,其实理解一下几点就好:
每个阀门都是会放水的,向两边放水。
中间如果有一个阀门没有打开是不会阻隔水的,也就是说我们只要开放了一个闸门,只要等总会流过所有管道。
我们可以发现len是1e9数量级,n是1e5数量级。这个题目需要求的是最小的t我们t最小是si的最小值,最大是len。暴力做法就是枚举t,然后每个t用一下区间合并O(nlogn)看下是否流过所有管道。因此暴力的时间复杂度是O(1e5log1e5*1e9)。肯定超时了,但是我们发现我们t视具有单调性的,我们可以用二分枚举这个t,最后时间复杂度就是O(1e5*log1e5*log1e9)。
回忆一下区间合并思路我们数组维护每一个区间的左端点和右端点,根据左端点排序,从左往右枚举每个区间,但凡相邻两个区间不能合并,那么就合并失败了。
代码123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263import java.i ...
货运公司
题目
解题思路这个题目是一个分配问题,求解每个车运送满足条件的最大的利润。我们使用贪心算法解决。
贪心和二分很像,二分是在一个线段上找到满足条件的一边,而贪心是把一个集合分为两个集合,选择一边,这一边满足最优解好于或者等于另外一边。
我们将货物按照利润从大到小进行排序,将车子按照载重从小到大进行排序,枚举车子,找到能够满足车子载重的最大利润的一个货物,这样下去就可以找到答案。
证明 我们只需要将集合分成当前的车子选择最大的利润和没有选择最大的利润两个集合: 为了证明我们的算法是有效的,我们需要证明选择最大的最优解一定好于或者等于没有选择最大的所有解法。存在两种情况:
所有的货车枚举完了,最大的没有被选。这个情况我们将当前货车选择最大的,这个时候我们获得更大的利润,左边集合大于右边
所有的货车枚举完了,后面的选择了最大的。如下图所示,我们当前货车选择的不是最大的,后面的火车选择了当前货车能选择的最大的货物。我们只需要证明交换两个车的货物,这个情况比上面的绝对不差就好。由于后面的货车载重大于前面的货车,所以我们前面也就是当前枚举的货车能载次大的货物,那么后面的也可以。我们交换之后不 ...
跨域问题
跨域问题总结什么是跨域为什么会跨域
跨域问题一直是前端的一大难题,从前端出道到至今,无论是自己还是身边的同事,以及网上前端朋友都被这个问题困扰着。
贴上标准的前端跨域报错:
Access to XMLHttpRequest at 'http://127.0.0.1:8080/cors_backend_war_exploded/test' from origin 'http://localhost:8081' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
说到跨域不得不谈的就是浏览器的同源策略,跨域也是因为浏览器这个机制引起的,这个机制的存在还是在于安全。
什么是源
Web内容的源由用于访问它的URL 的方案(协议),主机(域名)和端口定义。只有当方案,主机和端口都匹配时,两个对象具有相同的起源。
同源不同源一句话就可以判断:就是url中 scheme host ...
文件下载(一)
spring文件下载(一)我们在前面讲了文件的上传,现在讲讲文件的下载。
文件下载主要就是设置我们Response的Headers中"Content-Disposition=attachment;filename=...。告诉我们浏览器要将数据保存到磁盘上,不在浏览器上直接解析。
前端
这里留一个坑,就是使用ajax请求前端下载文件是没有反应的,但是使用a标签就是没有问题
填坑
ajax回调已经把response的数据傻瓜式的以字符串的方式解析,ajax请求只是个“字符型”的请求,即请求的内容是以文本类型存放的。文件的下载是以二进制形式进行的,虽然可以读取到返回的response,但只是读取而已,console.log可以打印出读取的字符串,但是无法执行下载的。还可以使用post请求完成下载。可以参考
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455<%@ page contentType="text/htm ...
文件上传(一)
Spring 文件上传(一) 这一节主要总结一下,ssm项目中配置CommonsMultipartResolver来完成前端文件上传的功能。
环境配置**jar**包
CommonsMultipartResolver 主要用到了以下几个jar包:
commons-fileupload:这是Apache Commons FileUpload库的jar包,提供了文件上传的功能,CommonsMultipartResolver使用了这个库来解析文件上传请求。
commons-io:这是Apache Commons IO库的jar包,提供了一些IO操作的工具类,CommonsMultipartResolver可能会用到这些工具类来处理上传的文件数据。
这些jar包为CommonsMultipartResolver提供了文件上传所需的基本功能和支持,使得它能够有效地处理文件上传请求。
123456789101112 <!--文件上传依赖--> <dependency> <groupId>commons-fileupload&l ...