国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

前后端分離開發(fā)

這篇具有很好參考價值的文章主要介紹了前后端分離開發(fā)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

什么是前后端分離開發(fā)?

前后端分離開發(fā),就是在項(xiàng)目開發(fā)過程中,對于前端的代碼專門由前端的開發(fā)人員開發(fā),后端代碼由后端人員負(fù)責(zé),這樣可以做到分工明確、各司其職,進(jìn)而提高開發(fā)效率,前后端代碼并行開發(fā),加快項(xiàng)目的開發(fā)進(jìn)度。目前前后端分離被各大公司使用,成為項(xiàng)目開發(fā)的主流開發(fā)方式。
前后端分離開發(fā)后,工程結(jié)構(gòu)也會發(fā)生變化,即前后端代碼不會混在同一個maven工程中,而是分為前端工程和后端工程。

  • 后端:負(fù)責(zé)處理、存儲數(shù)據(jù)。
  • 前端:負(fù)責(zé)顯示數(shù)據(jù)。
  • 后端工程——>打包部署到tomcat。
  • 前端工程——>打包部署到nginx。
    前端和后端開發(fā)人員通過 接口 進(jìn)行數(shù)據(jù)的交換。
    前后端分離開發(fā)

開發(fā)流程

前后端分離開發(fā)時面臨一個問題,就是前端人員和后端人員如何進(jìn)行配合(請求路徑、參數(shù)傳遞、請求方式、后端如何響應(yīng)等)來共同完成一個任務(wù)呢?
接口(API接口):就是一個http的請求地址,主要就是去定義:請求路徑、請求方式、請求參數(shù)、響應(yīng)數(shù)據(jù)等內(nèi)容。

  • 后端編寫和維護(hù)接口文檔,在 API 變化時更新接口文檔
  • 后端根據(jù)接口文檔進(jìn)行接口開發(fā)
  • 前端根據(jù)接口文檔進(jìn)行開發(fā) + Mock平臺
  • 開發(fā)完成后聯(lián)調(diào)和提交測試

推薦幾個接口規(guī)范工具:postman、eolinker

前后端僅僅通過異步接口(AJAX/JSONP)來編程,前后端都各自有自己的開發(fā)流程,構(gòu)建工具,測試集合,關(guān)注點(diǎn)分離,前后端變得相對獨(dú)立并解耦合。
前后端分離開發(fā)

Swagger

Swagger是什么?

Swagger 是一個規(guī)范和完整的框架,用于生成、描述、調(diào)用和可視化 RESTful 風(fēng)格的 Web 服務(wù)的接口文檔。

目前的項(xiàng)目基本都是前后端分離,后端為前端提供接口的同時,還需同時提供接口的說明文檔。但我們的代碼總是會根據(jù)實(shí)際情況來實(shí)時更新,這個時候有可能會忘記更新接口的說明文檔,造成一些不必要的問題。

用人話說,swagger就是幫你寫接口說明文檔的。更具體地,可以看下面的圖片,swagger官方建議使用下面的紅字部分,這篇博客主要是記錄如何,使用swagger自動生成Api文檔的,所以只介紹swagger-ui,其他的…以后我用到會再整理。

基本使用

knife4j是java mvc框架集成swagger生成api文檔的增強(qiáng)解決方案。文章來源地址http://www.zghlxwxcb.cn/news/detail-456053.html

  • 導(dǎo)入坐標(biāo)
<dependency>
    <groupId>com.github.xiaoymin</groupId>
    <artifactId>knife4j-spring-boot-starter</artifactId>
    <version>3.0.3</version>
</dependency>
  • 配置WebMvcConfig類
public class WebMvcConfig extends WebMvcConfigurationSupport {
  /**
   * 設(shè)置靜態(tài)資源映射。
   *
   * @param registry
   */
  @Override
  protected void addResourceHandlers(ResourceHandlerRegistry registry) {
    log.info("開始進(jìn)行靜態(tài)資源映射...");
    // addResourceHandler("/backend/**"):攔截請求信息,addResourceLocations("classpath:/backend/"):文件真實(shí)地址。
    registry.addResourceHandler("doc.html").addResourceLocations("classpath:/META-INF/resources/");
    registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
    registry.addResourceHandler("/backend/**").addResourceLocations("classpath:/backend/");
    registry.addResourceHandler("/front/**").addResourceLocations("classpath:/front/");
  }

  /**
   * 擴(kuò)展mvc框架的消息轉(zhuǎn)換器。
   *
   * @param converters
   */
  @Override
  protected void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
    log.info("加入全局消息轉(zhuǎn)換器...");
    // 創(chuàng)建消息轉(zhuǎn)換器對象,
    MappingJackson2HttpMessageConverter messageConverter=new MappingJackson2HttpMessageConverter();
    // 設(shè)置對象轉(zhuǎn)換器,底層使用Jackson將java對象轉(zhuǎn)為json。
    messageConverter.setObjectMapper(new JacksonObjectMapper());
    // 將上面的消息轉(zhuǎn)換器添加到mvc框架的轉(zhuǎn)換器集合中。放在集合的第一位,會先使用我們加入的全局消息轉(zhuǎn)換器
    converters.add( 0,messageConverter);
  }
  @Bean
  public Docket createRestApi() {
    // 文檔類型
    return new Docket(DocumentationType.SWAGGER_2)
            .apiInfo(apiInfo())
            .select()
            .apis(RequestHandlerSelectors.basePackage("com.jie.reggie.controller"))
            .paths(PathSelectors.any())
            .build();
  }

  private ApiInfo apiInfo() {
    return new ApiInfoBuilder()
            .title("瑞吉外賣")
            .version("1.0")
            .description("瑞吉外賣接口文檔")
            .build();
  }
}
  • 配置LoginCheckFilter類
/**
 * @author 小杰 檢查用戶是否已經(jīng)登錄的過濾器。
 */
@Slf4j
@WebFilter(filterName = "loginCheckFilter", urlPatterns = "/*")
public class LoginCheckFilter implements Filter {
    // 專門用來進(jìn)行路徑比較的。路徑匹配器,支持通配符。
    public static final AntPathMatcher PATH_MATCHER = new AntPathMatcher();

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws ServletException, IOException {
        HttpServletRequest httpServletRequest = (HttpServletRequest) request;
        HttpServletResponse httpServletResponse = (HttpServletResponse) response;
        //    1.獲取本次請求的uri
        String requestURI = httpServletRequest.getRequestURI();
        log.info("獲取到的uri:{}", requestURI);
        // 定義所有不處理的請求路徑。
        String[] urls =
                new String[]{
                        "/backend/**",
                        "/front/**",
                        "/employee/login",
                        "/employee/logout",
                        "/common/**",
                        "/user/login",
                        "/user/sendMsg",
                        "/doc.html",
                        "/webjars/**",
                        "/swagger-resources",
                        "/v2/api-docs"
                };

        //    2、判斷本次請求是否需要處理,
        boolean check = check(urls, requestURI);
        //    - 如果不需要處理,就直接放行,
        if (check) {
            log.info("請求不需要處理:{}", requestURI);
            chain.doFilter(httpServletRequest, httpServletResponse);
            return;
        }
        //    3.判斷登錄狀態(tài),
        //    后臺員工登錄- 如果已登錄,就直接放行
        if (httpServletRequest.getSession().getAttribute("employee") != null) {
            log.info("用戶已登錄,登錄的id為: {}", httpServletRequest.getSession().getAttribute("employee"));
            // 把id保存到當(dāng)前ThreadLocal線程中。
            Long empId = (Long) httpServletRequest.getSession().getAttribute("employee");
            BaseContext.setCurrentId(empId);
            // 放行。
            chain.doFilter(httpServletRequest, httpServletResponse);
            return;
        }
        //    用戶登錄- 如果已登錄,就直接放行
        if (httpServletRequest.getSession().getAttribute("user") != null) {
            log.info("用戶已登錄,登錄的id為: {}", httpServletRequest.getSession().getAttribute("user"));
            // 把id保存到當(dāng)前ThreadLocal線程中。
            Long userId = (Long) httpServletRequest.getSession().getAttribute("user");
            BaseContext.setCurrentId(userId);
            // 放行。
            chain.doFilter(httpServletRequest, httpServletResponse);
            return;
        }
        // 如果未登錄,則返回未登錄結(jié)果.通過輸出流方式向客戶端響應(yīng)數(shù)據(jù)。
        httpServletResponse.getWriter().write(JSON.toJSONString(R.error("NOTLOGIN")));
        log.info("用戶未登錄。。。");
        return;
    }

    /**
     * 進(jìn)行路徑匹配,檢查本次請求是否需要匹配。
     *
     * @param requestURI 待匹配的uri
     * @param urls       所有不處理的請求路徑數(shù)組。。
     * @return 匹配成功返回true,否則返回false。
     */
    public boolean check(String[] urls, String requestURI) {
        for (String url : urls) {
            if (PATH_MATCHER.match(url, requestURI)) {
                return true;
            }
        }
        return false;
    }
}

參考

  • 超詳細(xì)的前后端分離開發(fā)
  • swagger詳解

到了這里,關(guān)于前后端分離開發(fā)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 前后端分離------后端創(chuàng)建筆記(07)表單驗(yàn)證

    前后端分離------后端創(chuàng)建筆記(07)表單驗(yàn)證

    4.1 定義一個方法 ?4.2 這里表單的數(shù)據(jù)在哪里,就是這個 4.3? this.userForm,這里能夠讓數(shù)據(jù)清空 6.1 有兩種常規(guī)的驗(yàn)證,第一種是非空驗(yàn)證,另一種長度驗(yàn)證,這一種非常普遍,因此在ELEMTUI中做了一些封裝,因此我們直接拿過來用就行,還有一種情況,像電子郵件,這種情況就

    2024年02月13日
    瀏覽(26)
  • 后端SpringBoot+前端Vue前后端分離的項(xiàng)目(一)

    后端SpringBoot+前端Vue前后端分離的項(xiàng)目(一)

    前言:后端使用SpringBoot框架,前端使用Vue框架,做一個前后端分離的小項(xiàng)目,需求:實(shí)現(xiàn)一個表格,具備新增、刪除、修改的功能。 目錄 一、數(shù)據(jù)庫表的設(shè)計 二、后端實(shí)現(xiàn) 環(huán)境配置 數(shù)據(jù)處理-增刪改查 model層 mapper層 XML配置 Service層 controller層 單元測試 三、前后端交互 配置

    2024年02月10日
    瀏覽(95)
  • 前后端分離------后端創(chuàng)建筆記(06)新增接口&頁面布局

    前后端分離------后端創(chuàng)建筆記(06)新增接口&頁面布局

    本文章轉(zhuǎn)載于【SpringBoot+Vue】全網(wǎng)最簡單但實(shí)用的前后端分離項(xiàng)目實(shí)戰(zhàn)筆記 - 前端_大菜007的博客-CSDN博客 僅用于學(xué)習(xí)和討論,如有侵權(quán)請聯(lián)系 源碼:https://gitee.com/green_vegetables/x-admin-project.git 素材:https://pan.baidu.com/s/1ZZ8c-kRPUxY6FWzsoOOjtA 提取碼:up4c 項(xiàng)目概述筆記:https://blog.c

    2024年02月13日
    瀏覽(68)
  • 前后端分離 后端獲取不到header解決方案

    前后端分離 后端獲取不到header解決方案

    我這里只是把重要的邏輯放在里面,如果要看所有文件的話就太多了 這個案例不要拿來用,這個是有問題的,我只是講一下問題在哪

    2024年02月12日
    瀏覽(27)
  • 后端SpringBoot+前端Vue前后端分離的項(xiàng)目(二)

    后端SpringBoot+前端Vue前后端分離的項(xiàng)目(二)

    前言:完成一個列表,實(shí)現(xiàn)表頭的切換,字段的篩選,排序,分頁功能。 目錄 一、數(shù)據(jù)庫表的設(shè)計 二、后端實(shí)現(xiàn) 環(huán)境配置 model層 ?mapper層 service層 ?service層單元測試 controller層 三、前端實(shí)現(xiàn) interface接口 接口api層 主要代碼 效果展示 引入mybatis-plus依賴 MerchandiseDetailsService文

    2024年02月09日
    瀏覽(93)
  • 前后端分離------后端創(chuàng)建筆記(05)用戶列表查詢接口(下)

    前后端分離------后端創(chuàng)建筆記(05)用戶列表查詢接口(下)

    本文章轉(zhuǎn)載于【SpringBoot+Vue】全網(wǎng)最簡單但實(shí)用的前后端分離項(xiàng)目實(shí)戰(zhàn)筆記 - 前端_大菜007的博客-CSDN博客 僅用于學(xué)習(xí)和討論,如有侵權(quán)請聯(lián)系 源碼:https://gitee.com/green_vegetables/x-admin-project.git 素材:https://pan.baidu.com/s/1ZZ8c-kRPUxY6FWzsoOOjtA 提取碼:up4c 項(xiàng)目概述筆記:https://blog.c

    2024年02月12日
    瀏覽(25)
  • 前后端分離------后端創(chuàng)建筆記(09)密碼加密網(wǎng)絡(luò)安全

    前后端分離------后端創(chuàng)建筆記(09)密碼加密網(wǎng)絡(luò)安全

    本文章轉(zhuǎn)載于【SpringBoot+Vue】全網(wǎng)最簡單但實(shí)用的前后端分離項(xiàng)目實(shí)戰(zhàn)筆記 - 前端_大菜007的博客-CSDN博客 僅用于學(xué)習(xí)和討論,如有侵權(quán)請聯(lián)系 源碼:https://gitee.com/green_vegetables/x-admin-project.git 素材:https://pan.baidu.com/s/1ZZ8c-kRPUxY6FWzsoOOjtA 提取碼:up4c 項(xiàng)目概述筆記:https://blog.c

    2024年02月12日
    瀏覽(26)
  • 解決前后端分離項(xiàng)目后端設(shè)置響應(yīng)頭前端無法獲取

    解決前后端分離項(xiàng)目后端設(shè)置響應(yīng)頭前端無法獲取

    在開發(fā)前后端分離項(xiàng)目中出現(xiàn)后端設(shè)置響應(yīng)頭,前端一直無法獲取等問題。 后端設(shè)置響應(yīng)頭代碼如下 在瀏覽器中我們是可以看到設(shè)置的響應(yīng)頭 Content-Disposition 屬性,但是在前端接收到的響應(yīng)信息中卻看不到我們設(shè)置的 Content-Disposition 屬性。 原來在前后端分離的項(xiàng)目中除了需

    2024年02月04日
    瀏覽(100)
  • 若依框架(前后端分離) 之IDEA中Maven后端打包

    若依框架(前后端分離) 之IDEA中Maven后端打包

    Maven是一個跨平臺的項(xiàng)目管理工具。作為Apache組織的一個頗為成功的開源項(xiàng)目,其主要服務(wù)于基于Java平臺的項(xiàng)目創(chuàng)建,依賴管理和項(xiàng)目信息管理,是一個自動化構(gòu)建工具。maven是Apache的頂級項(xiàng)目,解釋為“專家,內(nèi)行”,它是一個項(xiàng)目管理的工具,maven自身是純java開發(fā)的(

    2024年02月09日
    瀏覽(20)
  • 【SpringBoot+Vue】全網(wǎng)最簡單但實(shí)用的前后端分離項(xiàng)目實(shí)戰(zhàn)筆記 - 后端

    【SpringBoot+Vue】全網(wǎng)最簡單但實(shí)用的前后端分離項(xiàng)目實(shí)戰(zhàn)筆記 - 后端

    配套視頻地址:https://www.bilibili.com/video/BV1dG4y1T7yp/ 如果您需要原版筆記,請up喝口水,可以上我的淘寶小店 青菜開發(fā)資料 購買,或點(diǎn)擊下方鏈接直接購買: 源碼+PDF版本筆記 源碼+原始MD版本筆記 感謝支持! 創(chuàng)建springboot項(xiàng)目:2.7.8 pom依賴 yml 測試 編寫代碼生成器 啟動類加注

    2024年02月04日
    瀏覽(17)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包