关与作者更多博客请访问云里云外开源社区

文章目录

  • 一、闲谈
  • 二、json字符串的接受和发送
    • json的发送
    • json的接收
  • 三、内网穿透或服务上云服务器
  • 四、跨域
    • 背景(为什么)
    • 如何跨域
  • 五、对接出错后的纠错机制
    • Tomcat的接口日志
    • 控制台输出提示信息
    • 前后端互动查错
  • 六、THE EHD

联合篇:前端靳紫澜的关于对接–前端

一、闲谈

从刚开始接到项目心中就一直惦记着该如何对接,究竟什么是对接。功夫不负有心人,前段时间与前端小姐姐对接成功了,在后端servlet编写中上网找了很多对接案例,对接方法。但大部分都很难,不易入手,也不易理解!所以在这里总结一下我的完整方式,前端的详细介绍请点击这位小姐姐的博客。

前后端分离大大解放了程序猿(媛)的生产力,原来后台程序猿又写逻辑又写页面的时代一去不复返了(大佬例外)

但也同时产生了很多问题,例如沟通、接口文档、跨域等一系列问题。但这次疫情期间我们也不得以云对接了,前后端分离的开发模式也受到了很大的影响。在本篇博客中只谈后端的部分操作。

先说后台要解决的几个问题

  • json字符串的接受和发送
  • 跨域问题的解决
  • 对接出错后的纠错机制

二、json字符串的接受和发送

这里采用阿里巴巴的fastjson包,网上推荐原因是速度较快,但我觉得就冲国产也该支持一下。

这里不具体说明具体的json字符串和java对象的转化,主要说明json字符串在post方式下前后端的交互。(建议最好都用post方式,get方式请求不论是安全性还是数据限制上都有要求,难度也更高,不好统一)

json的发送

协议约定POST 提交的数据必须放在消息主体(entity-body)中(前端的json数据的名称设置为data,详情参考前端同学博客),但协议并没有规定数据必须使用什么编码方式(不是指字符编码),由开发者自行决定。服务端通常是根据请求头(headers)中的 Content-Type 字段来获知请求中的消息主体是用何种方式编码,再对主体进行解析。

因此POST 提交数据方案,包含了 Content-Type 和消息主体编码方式两部分。主要有四种方式:application/x-www-form-urlencoded、multipart/form-data、raw。

其中raw包含了application/json、text/xml。可以上传任意格式的文本,可以上传text、json、xml、html等

使用application/json 这个 Content-Type 作为响应头,用来告诉服务端消息主体是序列化后的 JSON 字符串。这种方案,可以方便的提交复杂的结构化数据。

raw方式使用的是纯字符串的数据上传方式,所以在来POST之前,可能需要手工的把一些JSON格式的数据转换成字符串的(加两自单引号)。在Postman利用post方式进行json测试https://www.yunliyunwai.cn/blog/detail/1a2387a41a0acd6cdb5ea37bb656011d,其他的在后端代码中并没有改动

json的接收

原来的是request.getParameter();这种事接收Params形式的数据,接收json已经力不从心了。而post是将内容放入请求体中,并另外专门开启了一个数据传输通道,其实是一个字节传输流 , 在Servlet 中 通过request.getInputStream(); 就可以获得这个字节流。(这只是其中的一种方式,还有很多方式等待我们去发现,就目前来说还是比较适用的)

BufferedReader reader = new BufferedReader(new InputStreamReader(request.getInputStream(),"utf-8"));//判断前端是否传过来json数据String body = IOUtils.read(reader);

IOUtils需要用到dubbo-2.5.3.jar,链接:百度网盘链接 提取码: ehyw

注意: 前期我们可能会下载很多版本的json转化包,而很多转化语句都是一样的,注意导入的jar包区别。

三、内网穿透或服务上云服务器

要想成功远程对接,就必须进行上述两种操作之一,让其他人可以访问你的网络地址。
先介绍NATAPP
什么是内网穿透?
内网穿透简单来说就是将内网外网通过natapp隧道打通,让内网的数据让外网可以获取。比如常用的办公室软件等,一般在办公室或家里,通过拨号上网,这样办公软件只有在本地的局域网之内才能访问,那么问题来了,如果是手机上,或者公司外地的办公人员,如何访问到办公软件呢?这就需要natapp内网穿透工具了。运行natapp隧道之后,natapp会分配一个专属域名/端口,办公软件就已经在公网上了,在外地的办公人员可以在任何地方愉快的访问办公软件了

内网穿透可以做什么?

  1. 上文举例的办公软件
    
  2. 放在家里的树莓派,服务器等,需要远程ssh管理,这样打通服务器的22端口即可远程通过ssh操作服务器了.
    
  3. 微信/支付宝等本地开发.现在微信/支付宝等应用,需要服务器接收微信/支付宝发送的回调信息,然而在本地开发程序的话,还得实时上传到服务器,以便支持微信/支付宝的回调信息,如果使用了natapp内网穿透软件,将回调地址设置成natapp提供的地址,回调数据立即传递回本地,,这样很方便的在本地就可以实时调试程序,无须再不断上传服务器等繁琐且无意义的步骤.
    
  4. 一些企业内部数据库,由于安全等原因,不愿意放到云服务器上,可以将数据库放到办公室本地,然后通过natapp的tcp隧道映射,这样既保证安全,又保证公网可以正常访问.
    
  5. 一些开发板做的监控等信息,每台设备运行一条隧道,可以方便的管理监控各个设备的运行情况.
    
  6. 一些本地运行的游戏,想和好基友一起联网玩,一条命令运行natapp即可实现联网游戏.
    
  7. 群辉上运行natapp之后,随时随地在任何地方可以访问到群辉上应用
    

二、上云(云服务器)
请参考
学生领取阿里云服务器
阿里云配置Tomcat,数据库,java运行环境
孙伟峰同学的java项目上云

四、跨域

先来解决两个为什么

  • 为什么要跨域?
  • 如何做?

背景(为什么)

要了解为什么跨域,先了解来源—同源策略,PDF介绍下载

同源策略是指在Web浏览器中,允许某个网页脚本访问另一个网页的数据,但前提是这两个网页必须有相同的URI、主机名和端口号,一旦两个网站满足上述条件,这两个网站就被认定为具有相同来源。此策略可防止某个网页上的恶意脚本通过该页面的文档对象模型访问另一网页上的敏感数据。

1995年,同源政策由 Netscape 公司引入浏览器。目前,所有浏览器都实行这个政策。

最初,它的含义是指,A网页设置的 Cookie,B网页不能打开,除非这两个网页"同源"。所谓"同源"指的是"三个相同"。

  • 协议相同
  • 域名相同
  • 端口相同

举例来说,"http://www.example.com/dir/page.html"这个网址,协议是http://,域名是www.example.com,端口是xx(默认端口可以省略)。它的同源情况如下。(scheme协议,host域名,port端口号)

URL 结果 原因
http://www.example.com/dir/page2.html 只有路径不同
http://www.example.com/dir2/other.html 只有路径不同
**http://**username:password@www.example.com/dir2/other.html 只有路径不同
http://www.example.com:81/dir/other.html 不同端口(若未标明,http:// 默认端口号为80)
https

Java Web前后端分离项目—后端servlet实例相关推荐

  1. tomcat vue 不用 前后端_部署前后端分离项目(后端 tomcat 前端 nginx)

    关键词 spring-boot gradle 腾讯云 tomcat nginx vue 前后端分离 代理 前言 因为种种原因,把后端部署在 tomcat,前端项目部署在 nginx. Tomcat t ...

  2. 前后端分离项目后端向前端返回压缩包的方法实现java版

    最近公司的项目是让前端有让用户下载zip压缩包(里面都是图片,图片是保存在ftp上的)的任务,经过调研,将最终方案复制在下面: //zip文件的下载@GetMapping("/zip/{im ...

  3. 毕业实习大作业(Android-Spring Boot-MySQL 前后端分离项目 快速上手实例)

    <毕业实习大作业--二手铺子(Second Hand Shop)> 软件开发文档 源码连接 Android项目源码链接:https://download.csdn.net/download ...

  4. 阿里服务器部署springboot+vue前后端分离项目

    服务器部署springboot+vue前后端分离项目 最近刚刚在实习熟悉公司的业务,所有尝试着自己将项目部署到服务器上.本次部署的项目是Spring Boot+Vue前后端分离项目,后端使用的技术有M ...

  5. 视频教程-Vue、Spring Boot开发小而完整的Web前后端分离项目实战-Java

    Vue.Spring Boot开发小而完整的Web前后端分离项目实战 3年多.net开发经验:5年的java后端开发经验,熟悉行.net,java流行技术,拥有多个.net,java web企业级应; ...

  6. Java网络商城项目 SpringBoot+SpringCloud+Vue 网络商城(SSM前后端分离项目)二十二(下单和微信支付)

    Java网络商城项目 SpringBoot+SpringCloud+Vue 网络商城(SSM前后端分离项目)二十(下单) 0.学习目标 会调用订单系统接口 实现订单结算功能 实现微信支付功能 1.订单 ...

  7. Java网络商城项目 SpringBoot+SpringCloud+Vue 网络商城(SSM前后端分离项目)十六(商品排序,Thymeleaf快速入门,商品详情页的展示)

    Java网络商城项目 SpringBoot+SpringCloud+Vue 网络商城(SSM前后端分离项目)十六(商品详情页的展示) 一.商品排序 1.完善页面信息 这是用来做排序的,默认按照综合排序 ...

  8. 视频教程-SpringBoot实战教程:SpringBoot入门及前后端分离项目开发-Java

    SpringBoot实战教程:SpringBoot入门及前后端分离项目开发 十三,CSDN达人课课程作者,CSDN 博客作者,现就职于某网络科技公司任职高级 Java 开发工程师,13blog.sit ...

  9. java 同域名下怎么访问同事的项目_喜大普奔,两个开源的前后端分离项目可以在线体验了...

    折腾了一周的域名备案昨天终于搞定了. 松哥第一时间想到赶紧把微人事和V 部落上去,我知道很多小伙伴已经等不及了. 1. 也曾经上过线 其实这两个项目当时刚做好的时候,我就把它们部署到服务器上了,以帮助 ...

最新文章

  1. Activity(3、启动模式)
  2. python爬虫requests-Python爬虫(三)Requests库
  3. jdbc中如何实现模糊查询
  4. git忽略某个文件夹
  5. 解析H.264视频编解码DSP实现与优化
  6. 信奥中的数学:母函数
  7. FreeRTOS任务优先级
  8. 横空出世!IDEA画图神器来了,比Visio快10倍!
  9. 理论基础 —— 二叉树 —— 哈夫曼树与哈夫曼编码
  10. 迪杰斯特拉算法c语言实现
  11. [全网最新最全]2020年国内和国外安卓应用上线上架应用市场渠道集合(关键词:apk,发布,Google Play,Android,详细步骤介绍流程)
  12. 1.嵌入式之80C51单片机
  13. MacOS Ventura 13.0 (22A380) 正式版带 OC 0.8.5 and winPE 双分区原版黑苹果镜像
  14. java中随机点名器的简单程序
  15. 精彩揭秘,一个高大上的机器人自动化工厂需要哪些标配?
  16. WPF实现微信客户端界面布局
  17. 信号与系统20(拉普拉斯变换域分析)
  18. 十年磨一剑 | 《腾讯大数据构建之道》正式出版
  19. Openwrt libubox之 uloop
  20. python循环发送短信验证码_python发送短信验证码

热门文章

  1. 阿里:为了不死 只能求生 淘点点肩负重任
  2. web网页设计—— 指环王:护戒使者(13页) 电影网页设计 在线电影制作 个人设计web前端大作业
  3. 【drawio笔记】向ERD表,列表和UML类添加行
  4. [Vuforia] 详解·高通Vuforia识别追踪3D物体/模型,Unity开发
  5. 搭建电商系统平台需要多少钱?
  6. QMAIL简明安装(转)
  7. 安卓电子书格式_如何将电子书导入kindle App?
  8. c语言中f1是什么意思啊,F1知识科普,这些字母代表什么你知道吗?
  9. 北京中科红旗软件技术有限公司
  10. java语言可以编程无人机么_java可以作为第一门编程语言学习吗