前后端分离前后端交互问题(包含跨域问题解决)

        Hello,大家好,今天给小伙伴们写一篇有关于前后端分离开发交互的问题。很多初学者可能刚接触前后端分离开发是会有一点疑惑,究竟什么才是前后端分离开发。

1、前后端分离开发的基本概念

        1.1传统单体工程

                传统的Java Web开发会将HTML静态页面重新改写成JSP,后端采用 Spring+            SpringMVC+持久层 框架形式,应用会部署到一个包当中,最后统一部署到Tomcat容器                    中。

        2.2前后端分离

                 前后端分离的"前"特指浏览器端(或客户端),直接呈现给用户的;后端是服务器端 ,处                   理业务逻辑和数据,不呈现给用户。

                Java服务器端初学者最容易引起误解的一个概念就是:JSP是前端技术。

                JSP一定一定一定要知道全称:Java Server Page。是运行在服务器端JVM之上Servlet                  容器里的只是执行的结果是HTML,响应给浏览器。

               Java EE先有的Servlet,那时候已经有了ASP(同样要知道是Active Server Page的意                        思)。

               由于要在Servlet里面拼大量的HTML代码,所以Java规范学习了ASP,提出JSP。                           Servlet是Java代码里混入HTML,JSP是HTML代码里混入Java。

               浏览器根本不关心服务器端是JSP、ASP、PHP,或者还是原始的Servlet,或是静态服                   务器上的HTML,只要返回的是合法的HTML就可以。

              所以,把JSP中静态的HTML部分拿出来,变成简单的HTML文件,放在HTTP服务器上,                浏览器只要获取到这些HTML就可以了。动态的数据部分用HTML里的JS通过AJAX的方                  式从服务器端获取,然后动态操作Dom,完成动态内容的展示。这样前后端就分离了。

2、前后端分离开发的优点

2.1塑造出一支优质团队


        如果实现前后端分离,那么前后端工程师做事不会畏首畏尾,只需要关注于自身领域的开发工作即可,这样可以培养前端工程师独特的技术特性,打造出一支全栈式的研发团队。


2.2分工明确,效率提升


前后端分离可以让前、后端的工程师分工更加明确,两者开发可以同时进行,从而提高工作效率,页面的增加和路由的修改也不必再去麻烦后端,开发起来可以灵活操控。


.3局部性能得到提升


通过前端路由的配置,可以轻松实现页面的按需加载,服务器不用解析前端页面,因此,在页面交互及用户体验上也会得到提升。


4、代码的可维护性得到增强


前后端分离后,应用的代码不再是前后端混合,只有在运行期才会调用依赖关系,并且分层明确,应用代码变得整洁清晰。

3、具体操作

       前后端分离开发不得不提到跨域问题跨域问题指是不同站点之间,使用 ajax 无法相互调用的问题。跨域问题本质是浏览器的一种保护机制,它的初衷是为了保证用户的安全,防止恶意网站窃取数据。 但这个保护机制也带来了新的问题,它的问题是给不同站点之间的正常调用,也带来的阻碍,那怎么解决这个问题呢?

SpringBoot解决方案:

自定义一个配置类并使用@Configuration进行标识,让该类继承WebMvcConfigurer,重写addCorsMappings方法从而解决跨域问题。

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
    /**
     * 解决跨域问题
     * @param registry
     */
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedOriginPatterns("*")
                .allowedMethods("*")
                .allowCredentials(true)
                .maxAge(3600)
                .allowedHeaders("*");
    }
}

至此跨域问题已经解决。接下来就可以进行正常的前后端分离请求了。

注:本案例前端使用axios进行请求,后端使用SpringBoot

       本案例只是演示如何进行前后端交互,不涉及具体的业务逻辑

前端操作:

      步骤:

             1、引入axios.js文件

             2、定义axios请求

            3、调用axios请求

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
	</head>
	<body>
		
		<button type="button" onclick="sub()">提交</button>
		
	</body>
	<script src="./js/axios.js"></script>
	<script>
		function sub(){
			axios({
				url:"http://localhost:8080/api/test/hello",
				method:"GET",
			}).then(res=>{
				console.log(res.data)
			})
		}
	</script>
	
</html>

后端操作:

          1、创建工程,解决跨域问题

          2、编写接口

@RestController
@RequestMapping("/api/test")
public class HelloController {
    @GetMapping("/hello")
    public String hello(){
        return "hello,前后端分离";
    }
}

运行工程,然后前端就可以发送请求

效果如下:

 至此就完成前后端分离项目的编写了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值