美文网首页
记录工作中的一点小坑20170913

记录工作中的一点小坑20170913

作者: 他们叫我小白 | 来源:发表于2017-09-13 09:46 被阅读0次

4月份开始996加班直到8月中旬结束,然后就是忙碌的辞职、开始找工作,现在终于算是进入一种理性的状态了。记录一下工作中的一点坑。

初来公司,需要写一个自己部门的查询,然后就开始筹备,所有东西都是从0开始搭建,还好第一步只实现能展现即可。果断选择了spring boot。  因为之前公司也有类似的需求,是一个架构搭建了一套,我才第一次认识到了spring boot。然后自己私下学了简单应用,后来忙于工作和看书,这块就扔掉了。现在算是一个全新的机会学习吧。

第一个问题:用httpClient请求远程数据接口遇到登录问题,第一次用httpClient,这下直接蒙圈了,这怎么解决?之前开发的远程数据请求都是无权限验证,然后就开始百度,大概了解了机制后,开始解决这个问题。

第一步:去到登录页,拿到登录请求的链接的参数,这一步具体怎么操作,稍微说一下,用chrom浏览器(就是为了页面请求查看和调试方便)的调试台,然后查看了请求链接,和请求参数.

第二步:根据请求信息自己构造了PostMethod方法请求,这样就实现了远程登录。然后我们内部的系统是这样的,登录会携带一个returnUrl在成功后直接重定向到该请求,我的所有数据都是在这个请求里,然后再在同一个httpClient对象实例下去直接请求数据源,这样就拿到了数据。

这里只是在请求数据源前多了一步登录操作。问题还是非常容易解决。

其实这里还有个问题,因为我的请求是并发的,创建多个线程去请求数据,这样就造成了每一次查询都要并发的登录N次,这样的程序设计出来,呵呵!那怎么解决呢?

如果对session和cookie原理理解的同学很容易就会想到,我们可以把第一个请求的数据请求返回的结果中拿到这些值,然后保存起来,之后的每次创建httpClient对象就直接去容器中拿到这些信息携带过去就实现了,这里还有个问题是,我们的session机制的问题,服务端会设置一定时间过期,那么过期后怎么办呢,这里呢我想了几种解决方案。

方案1:请求进来先去判断容器里有没有,没有的话,去请求登录并返回结果中拿到的值去放到容器中,然后再进行数据请求,拿到的结果进行验证,如果返回登录页,则清空容器再进行登录操作保存最新值。

方案2:单独起一个线程去执行登录操作,并定时的拿这个值去验证是否过期,请求线程只负责拿值去请求即可。

方案3:借用生产者消费者的模型,如果请求数据发现请求过期、阻塞,唤醒一个永久存活的线程去执行登录操作,写到容器中,然后执行唤醒操作,自己请求返回正常则再次阻塞。

从复杂度来讲,每个请求都去执行登录操作是最简单的实现方式,其他几种

第二个坑是springboot的静态资源引用问题。

默认情况下html是在templates下,js,img等是在static下。在页面引入的时候写直接路径即可。

我以为是我配置哪里有问题了,搞到最后才明白,页面引入资源的时候,写的路径一定是从static下一层开始的,千万别带static。 这个问题搞了我2小时,还是今天早上我百度时候看了另外一个路径,然后自己尝试了下发现能找到,请求时候没写static,然后切换回原来的路径下发现也OK了。

对于js 引入的例子

这里的..  代表着  请求路径前缀,比如  http://localhost:8080/

如果这里配置了server.context-path=项目名    则..代表着http://localhost:8080/项目名

如果不加..  则 直接在填写的js路径前加上http://localhost:8080/

比如你引入路径为 src="/a/b/c",  则发现请求路径是http://localhost:8080/a/b/c

问题3:通常jsp页面我们一般用request对象获取项目的path,这样通过path+相对请求就可以构建完整的请求,但是html没有request对象,需要写相对或者绝对路径。在windows下昨晚用

http://127.0.0.1:8080/请求路径    ajax调用   不管怎么调试  都是进入了error。百度了半天也没有人说啥问题,今天早上又折腾了4小时就在最后快要绝望的时候,看到有个帖子说可能是跨域问题,于是我改了localhost  发现  请求就正常了。又做了其他测试,发现和上面的类似。

如果配置为url:'http://127.0.0.1:8090/项目自定义名称/请求路径',则ajax会因为跨域进入error

如果配置为url:'http://localhost:8090/项目自定义名称/请求路径',则ajax请求正常

如果配置为:url:'/请求路径',且未配置server.content-path,请求正常

如果配置为:url:'/请求路径',且配置server.content-path,请求报错

如果配置为:url:'../请求路径',且配置server.content-path,请求正常

这里留有疑问,关于linux和windows下对127.0.0.1的ajax的识别问题。抽时间一定要搞清楚ajax请求判断是否跨域这个问题是否与操作系统有关

相关文章

  • 记录工作中的一点小坑20170913

    4月份开始996加班直到8月中旬结束,然后就是忙碌的辞职、开始找工作,现在终于算是进入一种理性的状态了。记录一下工...

  • 20170913

    【感恩有你】20170913学习力践行记录D121 践行:环境标识指认“温馨小餐桌”

  • 小坑记录

    这里简单记录一下小坑,都是在开发过程中遇到的小问题,有的以后可能会写一些长篇来具体讨论一下,有的只是为了提醒自己不...

  • 产品小记(2)

    次篇作为入坑产品的第二篇,主要记录自己工作中遇到的坑,以及从坑中跳出后的一些学习和反思,避免下次再入同样的坑。 距...

  • 每日一画

    临摹 打卡20170913

  • 记录NSTimer的小坑

    了解过定时器NSTimer的都知道在不是用的时候都必须invalidate,避免造成内存泄漏。新到公司接手一个项目...

  • 问题总结

    不定期记录工作中遇到的开发、编译、测试的坑,主要是希望能坚持每日记录,之后再遇到问题也能解决。 20201215:...

  • EventKit小坑记录

    使用EventKit在将事件计入日历时,若不在主线程中执行的话,添加非重复事件能够正常添加,然而如果加上EKRec...

  • mybatis踩坑之——foreach循环嵌套if判断

    作为小猿一枚,记录一下工作中踩过的坑。 今天在修改别人的代码bug时,有一个需求是在做导出excel功能时,myb...

  • 一个php数组转json变对象的踩坑记录

    这里是工作中遇到的另一个小坑,虽然说起来很简单,但是如果不注意还是会中招。这里记录下来防止以后再犯这种错误。 问题...

网友评论

      本文标题:记录工作中的一点小坑20170913

      本文链接:https://www.haomeiwen.com/subject/ikhksxtx.html