真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

SpringMVC【返回?cái)?shù)據(jù)與請(qǐng)求轉(zhuǎn)發(fā)和重定向】-創(chuàng)新互聯(lián)

Spring MVC【返回?cái)?shù)據(jù)與請(qǐng)求轉(zhuǎn)發(fā)和重定向】
  • 🍎一. 返回?cái)?shù)據(jù)
    • 🍒1.1 返回靜態(tài)頁面
    • 🍒1.2 返回一個(gè)非靜態(tài)頁面
    • 🍒1.3 返回text/html類型頁面
    • 🍒1.4 返回JSON對(duì)象
    • 🍒1.5 實(shí)現(xiàn)計(jì)算器功能
    • 🍒1.6 使用ajax方式實(shí)現(xiàn)登陸功能
  • 🍎二.請(qǐng)求轉(zhuǎn)發(fā)與請(qǐng)求重定向
    • 🍒2.1 請(qǐng)求轉(zhuǎn)發(fā)(forward)
    • 🍒2.2 請(qǐng)求重定向(redirect)
  • 🍎三.請(qǐng)求轉(zhuǎn)發(fā)和請(qǐng)求重定向有什么區(qū)別
    • 🍒3.1 定義不同
    • 🍒3.2 跳轉(zhuǎn)方不同
    • 🍒3.3 數(shù)據(jù)共享不同
    • 🍒3.4 最終 URL 地址不同
    • 🍒3.5 代碼實(shí)現(xiàn)不同
    • 🍒3.6 轉(zhuǎn)發(fā)和重定向的選擇

我們知道,默認(rèn)請(qǐng)求下?論是 Spring MVC 或者是 Spring Boot 都是由控制器(Controller)返回的是視圖(View)(xxx.html),?現(xiàn)在都是前后端分離的,后端只需要返給給前端數(shù)據(jù)即可,這個(gè)時(shí)候我們就需要使?@ResponseBody注解了

在精河等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都網(wǎng)站制作、網(wǎng)站建設(shè) 網(wǎng)站設(shè)計(jì)制作按需求定制制作,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站設(shè)計(jì),成都營銷網(wǎng)站建設(shè),外貿(mào)網(wǎng)站制作,精河網(wǎng)站建設(shè)費(fèi)用合理。🍎一. 返回?cái)?shù)據(jù) 🍒1.1 返回靜態(tài)頁面

我們先創(chuàng)建一個(gè)前端輸出的文字的頁面,最后來通過Controller來進(jìn)行訪問

hello,spring mvcHello,Spring MVC.
//訪問靜態(tài)頁面
    @RequestMapping("/sayhi")
    public String sayHi(){
        return  "/hello.html";
    }

在這里插入圖片描述

🍒1.2 返回一個(gè)非靜態(tài)頁面

@ResponseBody是修飾類或方法的注解,作用是返回當(dāng)前類中或方法中的非靜態(tài)頁面

//訪問非靜態(tài)頁面
    @ResponseBody
    @RequestMapping("/sayhi")
    public String sayHi(){
        return  "/hello.html";
    }

在這里插入圖片描述

🍒1.3 返回text/html類型頁面

這個(gè)和返回靜態(tài)頁面的區(qū)別就是,需要用@ResponseBody,并且需要使用

前端標(biāo)題符

@RequestMapping("/m7")
    @ResponseBody
    public String method_7() {
        return "Hello,HTML~";
    }

在這里插入圖片描述

🍒1.4 返回JSON對(duì)象
@RequestMapping("/m8")
    @ResponseBody
    public HashMapmethod_8() {
        HashMapmap = new HashMap<>();
        map.put("Java", "Java Value");
        map.put("MySQL", "MySQL Value");
        map.put("Redis", "Redis Value");
        return map;
    }

在這里插入圖片描述

🍒1.5 實(shí)現(xiàn)計(jì)算器功能

可使? postman 傳遞參數(shù),或使? form 表單的?式提交參數(shù)

前端??:

計(jì)算器示例
計(jì)算器 數(shù)字1:
數(shù)字2:

后端頁面:

@RestController
public class CalcController {

    @RequestMapping("/calc")
    public String calc(Integer num1,Integer num2){
        if (num1 == null || num2==null) {
            if (num1 == null || num2 == null) return "參數(shù)錯(cuò)誤!返回";

        }
        return "結(jié)果:" + (num1+num2) +"";
    }
}

在這里插入圖片描述
在這里插入圖片描述

🍒1.6 使用ajax方式實(shí)現(xiàn)登陸功能

前端代碼:

Document登錄
    用戶:
密碼:

后端代碼:

@RequestMapping("/login3")
    public HashMaplogin2(String username, String password){
        HashMapresult = new HashMap<>();
        int state = 200; //狀態(tài)碼
        int data = -1;   //等于1,登陸成功,否則登陸失敗
        String msg = "未知錯(cuò)誤";
        //使用Spring提供的方法tringUtils.hasLength方法就可以同時(shí)判斷username是否是"空"和null了
        if (StringUtils.hasLength(username) && StringUtils.hasLength(password) && username.equals("admin") && password.equals("admin") ){
           if ( username.equals("admin") && password.equals("admin")) {
               data = 1;
               msg = "";
           }else {
               msg = "用戶名或密碼錯(cuò)誤";
           }

        }else {
            // 參數(shù)為空
            msg = "非法參數(shù)";

        }
        result.put("state",state);
        result.put("data",data);
        result.put("msg",msg);
        return result;
    }

在這里插入圖片描述

🍎二.請(qǐng)求轉(zhuǎn)發(fā)與請(qǐng)求重定向

return 不但可以返回?個(gè)視圖,還可以實(shí)現(xiàn)跳轉(zhuǎn),跳轉(zhuǎn)的?式有兩種:
forward是請(qǐng)求轉(zhuǎn)發(fā)

redirect:請(qǐng)求重定向

forward(請(qǐng)求轉(zhuǎn)發(fā))和 redirect(請(qǐng)求重定向)的區(qū)別,舉例來說,例如:
你告訴你媽媽,你想吃辣條,如果你媽媽,說好,我?guī)湍闳ベI,這就是 forward 請(qǐng)求轉(zhuǎn)發(fā);
如果你媽媽讓你??去買,那么就是請(qǐng)求 redirect 重定向

🍒2.1 請(qǐng)求轉(zhuǎn)發(fā)(forward)

代碼示例:

// [請(qǐng)求轉(zhuǎn)發(fā)]
    // 實(shí)現(xiàn)方法(1)
    @RequestMapping("/fw")
    public String myForward(){
        return "forward:/hello.html";
    }
    // 實(shí)現(xiàn)方法(2)
    @RequestMapping("/fw2")
    public void myFoward2(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.getRequestDispatcher("/hello.html").forward(request,response);
    }

在這里插入圖片描述

我們可以使用fiddler來進(jìn)行抓包驗(yàn)證,我們可以發(fā)現(xiàn)請(qǐng)求轉(zhuǎn)發(fā)客戶端只是訪問了一次,而轉(zhuǎn)發(fā)的過程中是由服務(wù)器內(nèi)部進(jìn)行訪問靜態(tài)頁面后返回?cái)?shù)據(jù)給服務(wù)端的
在這里插入圖片描述
在這里插入圖片描述

🍒2.2 請(qǐng)求重定向(redirect)

代碼示例:

// [請(qǐng)求重定向]
    // 實(shí)現(xiàn)方法(1)
    @RequestMapping("/rd")
    public String myRedirect(){

        return "redirect:/hello.html";
    }

    // 實(shí)現(xiàn)方法(2)
    @RequestMapping("/rd2")
    public void myRedirect(HttpServletResponse response) throws IOException {
        response.sendRedirect("/hello.html");
    }

在這里插入圖片描述

我們可以使用fiddler來進(jìn)行抓包驗(yàn)證,我們可以發(fā)現(xiàn)請(qǐng)求1轉(zhuǎn)發(fā)客戶端是先訪問服務(wù)器,而服務(wù)器內(nèi)部會(huì)響應(yīng)客戶端的請(qǐng)求1,之后客戶端會(huì)進(jìn)行請(qǐng)求2,服務(wù)器進(jìn)行進(jìn)行訪問靜態(tài)頁面后返回?cái)?shù)據(jù)給客戶端的,我們看到頁面就了解了,重定向會(huì)將頁面地址最后跳轉(zhuǎn)到我們需要訪問的靜態(tài)頁面地址
在這里插入圖片描述

在這里插入圖片描述

🍎三.請(qǐng)求轉(zhuǎn)發(fā)和請(qǐng)求重定向有什么區(qū)別

請(qǐng)求轉(zhuǎn)發(fā)和請(qǐng)求重定向主要區(qū)別,包含以下 5 點(diǎn):
● 定義不同
● 跳轉(zhuǎn)方不同
● 數(shù)據(jù)共享不同
● 最終 URL 地址不同
● 代碼實(shí)現(xiàn)不同

🍒3.1 定義不同

請(qǐng)求轉(zhuǎn)發(fā)(Forward):發(fā)生在服務(wù)端程序內(nèi)部,當(dāng)服務(wù)器端收到一個(gè)客戶端的請(qǐng)求之后,會(huì)先將請(qǐng)求,轉(zhuǎn)發(fā)給目標(biāo)地址,再將目標(biāo)地址返回的結(jié)果轉(zhuǎn)發(fā)給客戶端

請(qǐng)求重定向(Redirect):請(qǐng)求重定向指的是服務(wù)器端接收到客戶端的請(qǐng)求之后,會(huì)給客戶端返回了一個(gè)臨時(shí)響應(yīng)頭,這個(gè)臨時(shí)響應(yīng)頭中記錄了,客戶端需要再次發(fā)送請(qǐng)求(重定向)的 URL 地址,客戶端再收到了地址之后,會(huì)將請(qǐng)求發(fā)送到新的地址上,這就是請(qǐng)求重定向

🍒3.2 跳轉(zhuǎn)方不同

請(qǐng)求轉(zhuǎn)發(fā)是服務(wù)器端的行為,服務(wù)器端代替客戶端發(fā)送請(qǐng)求,并將結(jié)果返回給客戶端;
而請(qǐng)求重定向是客戶端的行為,它們的交互流程
如下圖所示:

在這里插入圖片描述
在這里插入圖片描述

🍒3.3 數(shù)據(jù)共享不同

請(qǐng)求轉(zhuǎn)發(fā)是服務(wù)器端實(shí)現(xiàn)的,所以整個(gè)執(zhí)行流程中,客戶端(瀏覽器端)只需要發(fā)送一次請(qǐng)求,因此整個(gè)交互過程中使用的都是同一個(gè) Request 請(qǐng)求對(duì)象和一個(gè) Response 響應(yīng)對(duì)象,所以整個(gè)請(qǐng)求過程中,請(qǐng)求和返回的數(shù)據(jù)是共享的;而請(qǐng)求重定向客戶端發(fā)送兩次完全不同的請(qǐng)求,所以兩次請(qǐng)求中的數(shù)據(jù)是不同的

🍒3.4 最終 URL 地址不同

請(qǐng)求轉(zhuǎn)發(fā)是服務(wù)器端實(shí)現(xiàn)的,所以整個(gè)執(zhí)行流程中,客戶端(瀏覽器端)只需要發(fā)送一次請(qǐng)求,因此整個(gè)交互過程中使用的都是同一個(gè) Request 請(qǐng)求對(duì)象和一個(gè) Response 響應(yīng)對(duì)象,所以整個(gè)請(qǐng)求過程中,請(qǐng)求和返回的數(shù)據(jù)是共享的;而請(qǐng)求重定向客戶端發(fā)送兩次完全不同的請(qǐng)求,所以兩次請(qǐng)求中的數(shù)據(jù)是不同的

請(qǐng)求轉(zhuǎn)發(fā):
在這里插入圖片描述
請(qǐng)求重定向:
在這里插入圖片描述

🍒3.5 代碼實(shí)現(xiàn)不同
// [請(qǐng)求轉(zhuǎn)發(fā)]
    // 實(shí)現(xiàn)方法(1)
    @RequestMapping("/fw")
    public String myForward(){
        return "forward:/hello.html";
    }
    // 實(shí)現(xiàn)方法(2)
    @RequestMapping("/fw2")
    public void myFoward2(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.getRequestDispatcher("/hello.html").forward(request,response);
    }

    // [請(qǐng)求重定向]
    // 實(shí)現(xiàn)方法(1)
    @RequestMapping("/rd")
    public String myRedirect(){

        return "redirect:/hello.html";
    }

    // 實(shí)現(xiàn)方法(2)
    @RequestMapping("/rd2")
    public void myRedirect(HttpServletResponse response) throws IOException {
        response.sendRedirect("/hello.html");
    }
🍒3.6 轉(zhuǎn)發(fā)和重定向的選擇

1、重定向的速度比轉(zhuǎn)發(fā)慢,因?yàn)闉g覽器還得發(fā)出一個(gè)新的請(qǐng)求,如果在使用轉(zhuǎn)發(fā)和重定向都無所謂的時(shí)候建議使用轉(zhuǎn)發(fā)

2、因?yàn)檗D(zhuǎn)發(fā)只能訪問當(dāng)前web的應(yīng)用程序,所以不同web應(yīng)用程序之間的訪問,特別是要訪問到另外一個(gè)web站點(diǎn)上的資源的情況,這個(gè)時(shí)候就只能使用重定向了

3、另外,重定向還有一個(gè)應(yīng)用場景:避免在用戶重新加載頁面時(shí)兩次調(diào)用相同的動(dòng)作
在這里插入圖片描述

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購,新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧


當(dāng)前標(biāo)題:SpringMVC【返回?cái)?shù)據(jù)與請(qǐng)求轉(zhuǎn)發(fā)和重定向】-創(chuàng)新互聯(lián)
網(wǎng)站URL:http://weahome.cn/article/ghpph.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部