Java Web前后端分离项目—后端servlet实例
关与作者更多博客请访问云里云外开源社区
文章目录
- 一、闲谈
- 二、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会分配一个专属域名/端口,办公软件就已经在公网上了,在外地的办公人员可以在任何地方愉快的访问办公软件了
内网穿透可以做什么?
上文举例的办公软件
放在家里的树莓派,服务器等,需要远程ssh管理,这样打通服务器的22端口即可远程通过ssh操作服务器了.
微信/支付宝等本地开发.现在微信/支付宝等应用,需要服务器接收微信/支付宝发送的回调信息,然而在本地开发程序的话,还得实时上传到服务器,以便支持微信/支付宝的回调信息,如果使用了natapp内网穿透软件,将回调地址设置成natapp提供的地址,回调数据立即传递回本地,,这样很方便的在本地就可以实时调试程序,无须再不断上传服务器等繁琐且无意义的步骤.
一些企业内部数据库,由于安全等原因,不愿意放到云服务器上,可以将数据库放到办公室本地,然后通过natapp的tcp隧道映射,这样既保证安全,又保证公网可以正常访问.
一些开发板做的监控等信息,每台设备运行一条隧道,可以方便的管理监控各个设备的运行情况.
一些本地运行的游戏,想和好基友一起联网玩,一条命令运行natapp即可实现联网游戏.
群辉上运行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端口号)