我是小康小白,一个平平无奇的Java小白。热爱有趣的文字,生活和远方。
小白前几天进行了人生第一次的前后端对接,决定记录一下这个过程。帮助一下曾经和我一样的人。
因为其中每一步的内容都很多所以很多步骤小白都专门写了一篇博客去介绍如何创建,使用。下文只有实现代码,没有写为什么,怎么样去实际写,以及如何实际操作。所以大家记得打开相关链接去看看
小白使用的工具以及其中的方法,以及其中数据的格式
1.内网穿透(NATAPP)
2.前后端传递数据的格式(json)
3.json解析工具(阿里的faskjson)
4.编程工具:IDEA
1.在Servlet中后端首先写好接收前端的数据流的代码,然后调用json解析包将前端传来的json的格式转化。详细内容见我的另一篇博客Java如何处理前端传来的json格式的数据并将它转化为相应的对象,然后进行使用(因为东西比较多所以新写了一篇博文,记得去看看)。
实现代码大致就是下面这段
//向外传值,并将数据转化为json格式保存在一个字符串对象里
JdbcController jdbcController = new JdbcController();
ChangeJson changeJson = new ChangeJson();
//将此字符串对象输出
PrintWriter out=response.getWriter();
//获取前端的请求的方法
String requestMethod = request.getMethod();
System.out.println("前端的请求方法:"+requestMethod);
//读取前端请求流的消息
InputStreamReader insr = new InputStreamReader(request.getInputStream(), StandardCharsets.UTF_8);
System.out.println("已读取数据");
StringBuilder body = new StringBuilder();
int respInt = insr.read();
while(respInt!=-1) { // 读取请求数据
//将读取的字节流中的每一个字节转化为字符,然后添加到StringBuilder类型的对象中
body.append((char) respInt);
respInt = insr.read();
}
System.out.println(body.toString()+"验证");
insr.close();
System.out.println("已转化");
JsonChange jsonChange = new JsonChange();
//将已经转化的字符流(json格式)转化为Java对象
//将StringBuilder类型的对象的对象通过toString方法转化为String类型,然后用fastjson的json包进行转化
IdAndHeadline idAndHeadline = jsonChange.JsonChangeJavaObjectIdAndHeadline(body.toString());
//调用方法匹配对应的字符串
int id = idAndHeadline.getId();
String p_headline = idAndHeadline.getP_headline();
2.然后为了解决前后端对接时的跨域问题,我们需要写过滤器(Filter)。详细内容以及解释见我的另一篇博文如何解决前后端对接时的跨域问题(小白第一次尝试前后端连接,相信这篇博文会对你有所帮助)(里面讲解了具体的操作步骤,因为东西比较多所以新写了一篇博文,大家记得去看看。)。
具体实现实现代码如下
Filter(过滤器)
package YunNotes.util.filter;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebFilter(filterName = "Filter")
public class Filter implements javax.servlet.Filter {
@Override
public void destroy() {
}
@Override
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) resp;
// 不使用*,自动适配跨域域名,避免携带Cookie时失效
String origin = request.getHeader("Origin");
response.setHeader("Access-Control-Allow-Origin", origin);
// 自适应所有自定义头
String headers = request.getHeader("Access-Control-Request-Headers");
response.setHeader("Access-Control-Allow-Headers", headers);
response.setHeader("Access-Control-Expose-Headers", headers);
// 允许跨域的请求方法类型
response.setHeader("Access-Control-Allow-Methods", "*");
// 预检命令(OPTIONS)缓存时间,单位:秒
response.setHeader("Access-Control-Max-Age", "3600");
// 明确许可客户端发送Cookie,不允许删除字段即可
response.setHeader("Access-Control-Allow-Credentials", "true");
//参数 request, response 为web 容器或 Filter 链的上一个 Filter 传递过来的请求和相应对象;参数 chain 代表当前 Filter 链的对象。
//交给下一个过滤器或servlet处理
chain.doFilter(request, response);
//添加一个给后台的反馈
System.out.println("过滤器已执行");
}
@Override
public void init(FilterConfig config) throws ServletException {
}
}
3.然后对前面获得的相应的数据进行使用。因为这里由于大家自己的项目功能不同。这里小白就不粘出自己的代码了。
4.对数据进行完成操作后就应当将自己操作后的数据转化成json格式。这里有一种简单的转化方式,使用编辑器自动重写toString()方法后,对操作后的数据使用toString方法就可以把你的数据转化为json格式了。
小白这里的编辑器是idea。
1)在自己的成员类的空白处右键点击Generate
2)在出现的选项框中选择toStirng()方法
3)选择想要在toString方法中添加的属性。Ctrl+鼠标左键即可多选。然后点击ok即可。
4)效果如下
5.将转化后的json数据返回前端。
方法有:out.write();
out.println();(out.print()方法少了一个换行效果)
两方法的区别见小白的另一篇博客java和jsp中out.print和out.write的方法
一般使用out.println方法
实现代码如下
//将此字符串对象输出
PrintWriter out=response.getWriter();
out.println(str4);
//给后台一个反馈信息
System.out.println(str4);
6.启动项目,运行NATAPP(就是你内网穿透使用的工具),( 内网穿透是什么,用来做什么,为什么。详细内容见小白的另一篇博客教你十步实现内网穿透 )
项目的url地址就是下图中所示的你的网址/你的项目名/Servlet的部署名称。
7.然后前端的兄弟们就可以使用这个来测试了。
转载:https://blog.csdn.net/weixin_45791445/article/details/106160372
查看评论