前后端项目交互&异步请求&JSON数据类型&后端标准响应数据格式

java同步请求

当网页与后端交互时,前端不能再进行其他操作

服务器响应回来的内容,会把整个浏览器中的内容覆盖

这种请求方式在前后端交互时不太友好

现在的前后端交互请求都使用异步请求

异步请求(不同步)

通过在前端中使用js中提供的XMLHttpRequest对象实现发送异步请求和接收服务器响应

function checkAccount(account){
				var httpobj = new XMLHttpRequest();
				httpobj.open("get","http://192.168.124.26:8888/dormServer/reg?account="+account,true);
				httpobj.send();
				httpobj.onreadystatechange = function(){
					document.getElementById("msgid").innerHTML = httpobj.responseText;
				}
			}
			
		<form action="" method="post">
			账号:<input type="text" name="account" value="" onblur="checkAccount(this.value)"/>
			<span id ="msgid"> </span>
			<br />
			密码:<input type="password" name="password" value=""/><br />
			<input type="submit" value="登录"/>
		</form>
			
			

异步请求时,会出现跨域访问问题:浏览器默认不允许js对象接受来自其他服务器响应的内容

跨域

不同服务之间进行访问

跨域是指从一个域名的网页去请求另一个域名的资源,比如从www.baidu.com页面去请求www.google.com的资源,但是一般情况下不能这么做,它是由浏览器的同源资源策略造成的,是浏览器对JavaScript施加的安全限制,跨域的严格一点定义是,只要吃协议,域名,端口有任何一个的不同,就当做是跨域

只要请求协议,域名,端口其中一项不同,就属于跨域访问

所谓同源是指,域名,协议,端口均相同,只要有一个不同,就是跨域

在这里插入图片描述

为什么浏览器限制跨域访问

原因就是解决安全问题,如果一个网页可以随意访问另一个网站资源,就有可能会出现安全问题

为什么要跨域

有时公司内部有多个不同的子域,需要互相访问,所以就会进行跨域

如何解决跨域问题

前端解决

后端解决

后端可以配置一个过滤器,用于处理跨域问题

public class CorsFilter implements Filter {
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
            throws IOException, ServletException {
        HttpServletResponse httpResponse = (HttpServletResponse) servletResponse;
        HttpServletRequest httpRequest = (HttpServletRequest) servletRequest;
        //允许携带Cookie时不能设置为* 否则前端报错
        httpResponse.setHeader("Access-Control-Allow-Origin", httpRequest.getHeader("origin"));//允许所有请求跨域
        httpResponse.setHeader("Access-Control-Allow-Methods", "*");//允许跨域的请求方法GET, POST, HEAD 等
        httpResponse.setHeader("Access-Control-Allow-Headers", "*");//允许跨域的请求头
        httpResponse.setHeader("Access-Control-Allow-Credentials", "true");//是否携带cookie

        filterChain.doFilter(servletRequest, servletResponse);
    }
}

JSON

JSON:JavaScript object Notation

全称为JavaScript对象表示法,

json就是一种公认的js识别的对象表示方式.对于java而言就是一种特定的字符串

json就是一种固定格式的字符串,前端可以直接使用

对象:{键:值,键:值}

集合:[{键:值,键:值},{键:值,键:值}]

在使用Json格式之前可以在java中导入相应的jar包

 <!--jackson-->
	<dependency>
		<groupId>com.fasterxml.jackson.core</groupId>
		<artifactId>jackson-databind</artifactId>
		<version>2.14.2</version>
	</dependency>

导入jar包后就可以使用已经写好的方法很方便的把对象转化为json格式的字符串

ObjectMapper objectMapper = new ObjectMapper();
        String jsonstr = objectMapper.writeValueAsString(students);
        writer.print(jsonstr);

转化为json格式的字符串后就可以更方便的传给前端js

后端标准响应数据格式

首先创建一个Result类,在其中定义code,message,result三种数据

public class Result {
    private  int code;
    private  String message;
    private  Object result;

    public Result(int code, String message, Object result) {
        this.code = code;
        this.message = message;
        this.result = result;
    }

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public Object getResult() {
        return result;
    }

    public void setResult(Object result) {
        this.result = result;
    }
}

之后在需要使用的servlet中创建result对象

通过在不同的情境定义不同的内容进行分类

 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        PrintWriter writer = resp.getWriter();
        Result result = null;
        try {
            String name = req.getParameter("name");

            Student student = new Student();
            student.setAge(20);
            student.setGender("男");
            student.setName(name);
            student.setNumber(1);
            result = new Result(200, "查询成功",student);
        }catch (Exception e){
            result = new Result(500,"查询失败", null);
        }
        writer.print(new ObjectMapper().writeValueAsString(result));
    }

此后向前端传递的只有三个内容,code,message,result

只需要将result中的内容再次取出就可以在前端对象化调用
在这里插入图片描述

  • 12
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
前后端数据交互是指前端页面与后端服务器之间的数据传输和交流过程。在一个典型的应用中,前端负责展示数据和与用户交互,而后端则处理数据的存储、处理和逻辑运算。 以下是一种常见的前后端数据交互方式: 1. 客户端发送请求:前端通过发送HTTP请求向后端服务器请求数据或提交用户的操作。 2. 服务器处理请求:后端服务器接收到请求后,根据请求的类型和参数进行相应的处理。这可能包括查询数据库、计算、验证和其他业务逻辑。 3. 数据传输:后端服务器将处理结果封装成合适的数据格式(如JSON、XML等),通过HTTP响应返回给前端。 4. 客户端处理响应:前端接收到后端返回的数据后,进行解析和处理。可以根据需要更新页面内容、展示提示信息或执行其他操作。 在实际开发中,可以使用一些工具和技术来简化前后端数据交互的过程,例如: - 使用AJAX或Fetch API等技术实现异步请求,使页面能够在不刷新的情况下与后端交互。 - 前端框架(如React、Vue.js)和后端框架(如Spring Boot、Django)提供了一些便捷的函数和方法来处理数据交互。 - RESTful API设计规范可以约定前后端的接口规范,使双方能够更好地协作。 总之,前后端数据交互是实现一个完整应用的重要部分,通过合理的设计和技术选择,可以使前后端之间的数据传输更加高效和可靠。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值