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

SSM前后端分離技術(shù)

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


前言

本篇記錄一下使用前后端分離來開發(fā)SSM項目。


一、前后端分離技術(shù)和跨域

目前,前后端分離項目早已占據(jù)市場的主流開發(fā)方式。因為它能把web端的代碼和java業(yè)務實現(xiàn)的代碼完全分離開來,使得協(xié)同開發(fā)變得更加便捷。即,前端工程師和后端工程師只需要預先規(guī)定好統(tǒng)一的API,就可以同步開發(fā),大大降低項目的開發(fā)周期。
實現(xiàn)前后端分離需要解決的文體就是跨域傳輸。

我們都知道,在SSM項目中我們使用JSP來訪問Servlet接口,實現(xiàn)前后端的交互,歸根結(jié)底還是在同一個域進行傳輸,即端口號是相同的。但是在使用前后端分離開發(fā)的時候,我們需要在不同的域中間進行數(shù)據(jù)傳輸。最直觀的就是,后端我們一般使用8080端口,前端可能會使用5500端口,這就意味著,前端和后端處在不同的域內(nèi)。

跨域傳輸?shù)母驹蚴菫g覽器端的一種保護程序的機制。當前端域向后端域發(fā)送了請求,一般情況下,會有正常的響應數(shù)據(jù)。但是由于瀏覽器的保護機制,使得我們無法使用這些響應數(shù)據(jù)。瀏覽器需要的是后端必須返回給它一個允許跨域的請求頭,否則,返回的數(shù)據(jù)就無法呈現(xiàn)在前端。那么怎么讓后端返回的數(shù)據(jù)攜帶正確的請求頭就是我們需要解決的問題。

二、兩種不同的實現(xiàn)方案

1.使用注解實現(xiàn)簡單請求的跨域傳輸

代碼如下:

@Controller
@RequestMapping( "/login")
@CrossOrigin("*")
public class LoginController {
    //自動注入業(yè)務層
    @Autowired
    private LoginService service;

    @RequestMapping(value = "loginVerify",method = RequestMethod.POST)
    @ResponseBody
    public ResultLayUi<User> login(String username, String password, HttpServletRequest request){
            createLoginSession(username,request);
        return service.verifyLogin(username,password);
    }
}

我們可以使用@CrossOrigin注解來實現(xiàn)一個臨時的跨域傳輸訪問。注解后邊的括號可以填寫允許跨域訪問的域,例如@CrossOrigin(" * ")表示,允許所有的域訪問。@CrossOrigin(“http://127.0.0.1:5500/login.html”)允許該IP訪問。但是這種解決方案只適合簡單請求。不適合復雜請求。

2.通過設置請求頭和參數(shù)實現(xiàn)復雜請求的跨域傳輸

通過注解,我們只能實現(xiàn)簡單的跨域請求,但無法實現(xiàn)復雜的跨域請求。但是我們可以通過在controller中設置請求頭和請求參數(shù)來實現(xiàn)復雜請求的跨域傳輸。代碼如下:

@Controller
@RequestMapping( "/login")
//@CrossOrigin("*")
public class LoginController {
    //自動注入業(yè)務層
    @Autowired
    private LoginService service;

    @RequestMapping(value = "loginVerify",method = RequestMethod.POST)
    @ResponseBody
    public ResultLayUi<User> login(String username, String password, HttpServletRequest request){

 String origin = request.getHeader("Origin");
        // 允許的跨域
        response.setHeader("Access-Control-Allow-Origin",origin);
        // 允許攜帶Cookie
        response.setHeader("Access-Control-Allow-Credentials","true");
        // 允許的請求頭  預檢請求需要這個設置
        response.setHeader("Access-Control-Allow-Headers", "Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers,Authorization,Access-Token,token");
        response.setHeader("Access-Control-Expose-Headers", "*");//響應客戶端的頭部 允許攜帶Token 等等
        response.setHeader("Access-Control-Max-Age", "3600");   // 預檢請求的結(jié)果緩存時間
        if (request.getMethod().equals("OPTIONS")){
            return false;
        }
            
        return service.verifyLogin(username,password);
    }
}

通過這種方式,我們可以實現(xiàn)跨域請求。但是我們需要在每一個Controller方法中都設置這些代碼。

3.將跨域解決方案的代碼寫進攔截器,或者過濾器實現(xiàn)跨域。

上邊說到,我們需要在每一個controller中都配置如上代碼,造成大量的代碼冗余。我們可以把這些代碼放進攔截器或者過濾器來實現(xiàn)一個封裝的效果。

攔截器

package com.glls.java2212.interceptor;

import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * @date 2022/10/10
 * @desc  攔截器   一個臨時的  跨域解決方案
 */
public class MyInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

        String origin = request.getHeader("Origin");
        // 允許的跨域
        response.setHeader("Access-Control-Allow-Origin",origin);
        // 允許攜帶Cookie
        response.setHeader("Access-Control-Allow-Credentials","true");
        // 允許的請求頭  預檢請求需要這個設置
        response.setHeader("Access-Control-Allow-Headers", "Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers,Authorization,Access-Token,token");
        response.setHeader("Access-Control-Expose-Headers", "*");//響應客戶端的頭部 允許攜帶Token 等等
        response.setHeader("Access-Control-Max-Age", "3600");   // 預檢請求的結(jié)果緩存時間
        if (request.getMethod().equals("OPTIONS")){
            return false;
        }
        return true;

    }
}

過濾器

package com.glls.java2212.filter;

import org.springframework.stereotype.Component;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * @date 2022/10/10
 * @desc
 */
@Component
@WebFilter(urlPatterns = "/*", filterName = "CorsFilter")
public class CorsFilter implements Filter {
    @Override
    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) req;
        HttpServletResponse response = (HttpServletResponse) resp;

        String origin = request.getHeader("Origin");

        // 允許的跨域
        response.setHeader("Access-Control-Allow-Origin",origin);
        // 允許攜帶Cookie
        response.setHeader("Access-Control-Allow-Credentials","true");
        //
        response.setHeader("Access-Control-Allow-Headers", "Content-Type,content-type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers,Authorization,Access-Token,token");
        response.setHeader("Access-Control-Expose-Headers", "*");//響應客戶端的頭部 允許攜帶Token 等等
        response.setHeader("Access-Control-Max-Age", "3600");   // 預檢請求的結(jié)果緩存時間
        //
        if (!request.getMethod().equals("OPTIONS")){
            //非 預檢請求 放行 ,預檢請求  不放行  預檢請求 直接響應允許跨域的信息即可 無需訪問到后臺接口
            filterChain.doFilter(request, response);
        }
    }
}


總結(jié)

跨域請求的方案有很多,此處只是簡單的介紹了兩種。分別對應簡單的請求跨域和復雜的請求跨域。文章來源地址http://www.zghlxwxcb.cn/news/detail-457643.html

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

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

領(lǐng)支付寶紅包贊助服務器費用

相關(guān)文章

  • SSM(Vue3+ElementPlus+Axios+SSM前后端分離)--具體功能實現(xiàn)【三】

    SSM(Vue3+ElementPlus+Axios+SSM前后端分離)--具體功能實現(xiàn)【三】

    需求分析/圖解 思路分析 完成后臺代碼從dao - serivce - controller , 并對每層代碼進行測試, 到controller 這一層,使用Postman 發(fā)送http post 請求完成測試 完成前端代碼, 使用axios 發(fā)送ajax(json 數(shù)據(jù))給后臺, 實現(xiàn)添加家居信息 代碼實現(xiàn) 創(chuàng)建srcmainjavacomnlcfurnsserviceFurnService.java 和src

    2024年02月14日
    瀏覽(29)
  • 前后端分離------后端創(chuàng)建筆記(11)用戶刪除

    前后端分離------后端創(chuàng)建筆記(11)用戶刪除

    ?1.1 首先做一個刪除的功能接口,第一步先來到后端,做一個刪除的接口? 3.1這里給他調(diào)一下刪除方法,用下面這個 3.2 接口準備好了,但是這里存在了一個問題,它真的會把數(shù)據(jù)給改掉 9.1 10.1 ? 12.1 ? 15.1 ?18.1 在main.js中定義出來 ? 25.1 把代碼拿過來 27.1 刪除成功了

    2024年02月12日
    瀏覽(23)
  • 前后端分離------后端創(chuàng)建筆記(07)表單驗證

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

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

    2024年02月13日
    瀏覽(26)
  • SSM(Vue3+ElementPlus+Axios+SSM前后端分離)--搭建Vue 前端工程[二]

    SSM(Vue3+ElementPlus+Axios+SSM前后端分離)--搭建Vue 前端工程[二]

    需求分析 效果圖 思路分析 使用Vue3+ElementPlus 完成。 代碼實現(xiàn) 修改ssm_vuesrcApp.vue 成如下形式, 會刪除部分用不上的代碼,增加 修改ssm_vuesrcviewsHomeView.vue , 刪除ssm_vuesrccomponentsHelloWorld.vue 創(chuàng)建ssm_vuesrccomponentsHeader.vue 修改ssm_vuesrcApp.vue , 引入Header 組件 創(chuàng)建全局的global

    2024年02月13日
    瀏覽(49)
  • ssm+vue的論文管理系統(tǒng)(有報告)。Javaee項目,ssm vue前后端分離項目。

    ssm+vue的論文管理系統(tǒng)(有報告)。Javaee項目,ssm vue前后端分離項目。

    ssm+vue的論文管理系統(tǒng)(有報告)。Javaee項目,ssm vue前后端分離項目。 前些天發(fā)現(xiàn)了一個巨牛的人工智能學習網(wǎng)站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉(zhuǎn)到網(wǎng)站。 采用M(model)V(view)C(controller)三層體系結(jié)構(gòu),通過 Spring + SpringMvc+ Mybatis+Vue+Maven 來實現(xiàn)。

    2024年02月05日
    瀏覽(19)
  • SSM+Shiro安全框架整合(完成安全認證--登錄+權(quán)限授權(quán))+ssm整合shiro前后端分離

    SSM+Shiro安全框架整合(完成安全認證--登錄+權(quán)限授權(quán))+ssm整合shiro前后端分離

    目錄 1.搭建SSM框架 ?1.1.引入相關(guān)的依賴 1.2.?spring配置文件 1.3. web.xml配置文件 1.4.配置Tomcat并啟動 2.ssm整合shiro---認證功能 ?(1).引入依賴 (2).修改spring配置文件 (3).修改web.xml文件 (4).新建login.jsp(登錄頁面) (5).新建success.jsp(登錄成功后跳轉(zhuǎn)到此) (6).創(chuàng)建User實體類 (7).創(chuàng)建LoginVo

    2024年02月15日
    瀏覽(26)
  • SSM項目前后端分離+IDEA運行環(huán)境(含前端源碼)(個人博客系統(tǒng))

    SSM項目前后端分離+IDEA運行環(huán)境(含前端源碼)(個人博客系統(tǒng))

    目錄 ?后端項目環(huán)境配置 1、創(chuàng)建一個SpringBoot項目,添加MyBatis框架和數(shù)據(jù)庫MySQL驅(qū)動依賴 2、配置項目文件:application.yml 3、創(chuàng)建數(shù)據(jù)庫表 4、創(chuàng)建分層結(jié)構(gòu)目錄 返回統(tǒng)一數(shù)據(jù)格式? 創(chuàng)建統(tǒng)一數(shù)據(jù)格式返回類:AjaxResult 創(chuàng)建實現(xiàn)統(tǒng)一數(shù)據(jù)返回的保底類:ResponseAdvice 統(tǒng)一處理 登錄

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

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

    前言:后端使用SpringBoot框架,前端使用Vue框架,做一個前后端分離的小項目,需求:實現(xiàn)一個表格,具備新增、刪除、修改的功能。 目錄 一、數(shù)據(jù)庫表的設計 二、后端實現(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)最簡單但實用的前后端分離項目實戰(zhàn)筆記 - 前端_大菜007的博客-CSDN博客 僅用于學習和討論,如有侵權(quán)請聯(lián)系 源碼:https://gitee.com/green_vegetables/x-admin-project.git 素材:https://pan.baidu.com/s/1ZZ8c-kRPUxY6FWzsoOOjtA 提取碼:up4c 項目概述筆記:https://blog.c

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

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

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

    2024年02月12日
    瀏覽(27)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包