最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring MVC 響應處理頁面、數(shù)據(jù)與狀態(tài)配置的方法

 更新時間:2025年11月07日 11:46:47   作者:?喜歡做夢  
本文給大家介紹Spring MVC 響應處理頁面、數(shù)據(jù)與狀態(tài)配置的相關知識,本文結合實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧

響應

定義

響應(Response)是接收方(服務器、服務或設備)針對發(fā)送方(客戶端)發(fā)起的“請求”所返回的反饋信息。

返回靜態(tài)頁面

html代碼:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>我是index頁面</h1>
</body>
</html>

代碼:

@RestController
@RequestMapping("response")
public class ResponseController {
    @RequestMapping("/1")
    public String method1(){
        return "/index.html";
    }
}

結果:咦?這結果怎么不是我們想要的頁面?為什么會這樣?那要怎么修改?

這個代碼的問題在于@RestController會將返回值直接作為響應體。這里我們需要用到@Controller。

為什么呢?

@Controller:@Controller是承接http請求,完成視圖解析,方法返回的字符串會被視圖解析器處理,找到對應的頁面文件,響應給前端。

@RestController:是@ResponseBody+@Controller的組合注解,核心是直接返回數(shù)據(jù),而不是視圖,不會做視圖解析流程。

那這樣就可以了嗎

正確代碼如下:

@Controller
@RequestMapping("response")
public class ResponseController {
    @RequestMapping("/1")
    public String method1(){
        return "/index.html";
    }
}

返回數(shù)據(jù):@ResponseBody

@ResponseBody:他主要用于將方法的返回值直接寫入http響應體中,而不是將其解析為視圖名稱去進行視圖跳轉。簡單來說,就是把你要返回的東西直接原樣發(fā)給前端,不會當成路徑頁面瞎找。

    @RequestMapping("/2")
    @ResponseBody
    public String method2(){
        return "返回數(shù)據(jù)";
    }

如果沒有加@ResponseBody,結果如下,有人可能會疑問,那為什么我返回靜態(tài)頁面第一個錯誤的代碼,也可以返回數(shù)據(jù)。因為第一個錯誤代碼里面使用的是@RestController注解,核心是直接返回數(shù)據(jù)。

那@ResponseBody和@RestController又有什么區(qū)別?

?? @ResponseBody和@RestController的區(qū)別

對比@RestController@ResponseBody
作用范圍只能用在類上只能用在方法上
功能本質(zhì)相當于@ResponseBody+@Controller的組合,標記一個類,表明該類是一個控制器單獨的注解,僅控制方法返回作為響應
使用場景整個類都需要返回數(shù)據(jù),一次注解,全類方法生效類用@Controller時,個別方法需要返回數(shù)據(jù),逐個方法標記
視圖解析不會走視圖解析,直接返回數(shù)據(jù)不會走視圖解析,直接返回數(shù)據(jù)

@RestController就像老師在班群里面通知消息,而@ResponseBody相當于老師個別針對幾個同學私信通知消息。

返回HTML片段代碼

 @RequestMapping("/4")
    @ResponseBody
    public String method4(){
        return "<h1>我是一級標題<h1>";
    }

看一下結果

不是說好的,@ResponseBody是原樣返回字符串嗎,為什么這次不是!??!

這里解釋一下:是因為瀏覽器會自動解析html,造成一種“不是原樣”返回的錯覺。

瀏覽器收到響應后,發(fā)現(xiàn)響應頭里的Content-type是text/html(Spring自動推斷的),就會按照html的規(guī)則進行渲染。

如果想讓瀏覽器不解析,直接顯示原樣,應該怎么寫?

這里需要設置Content-type

可以強制讓響應方法變?yōu)榧兾谋?,給方法加produces=“text/plain”

代碼:

 @RequestMapping(value = "/5",produces = "text/plain")
    @ResponseBody
    public String method5(){
        return "<h1>我是一級標題<h1>";
    }

結果:

返回JSON

UserInfo

public class UserInfo {
    private String name;
    private int age;
    public UserInfo(){
    }
    public UserInfo(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    @Override
    public String toString() {
        return "UserInfo{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

返回json對象代碼:

 @RequestMapping("/6")
    @ResponseBody
    public UserInfo method6(){
        UserInfo userInfo=new UserInfo("lisi",13);
        return userInfo;
    }

結果:

狀態(tài)碼

狀態(tài)碼的定義

狀態(tài)碼是http協(xié)議中,服務器響應請求時返回的三位數(shù)數(shù)字,用來快速告知客服端“請求處理結果”,就是請求結果的快捷反饋

分類:

  • 1xx:服務器已收到請求,需繼續(xù)處理(如100Continue讓客戶端繼續(xù)發(fā)數(shù)據(jù))
  • 2xx:請求成功(200 OK表示請求完成,201 Created表示資源創(chuàng)建成功)
  • 3xx:需客戶端進一步操作(301永久重定向,302臨時重定向)
  • 4xx:客戶端請求有誤(400請求語法錯誤、401需登入、403沒權限、404資源找不到)
  • 5xx:服務器處理出錯(500服務器內(nèi)部故障、503服務器忙/維護中)

設置狀態(tài)碼

代碼:

 @RequestMapping("/7")
    @ResponseBody
    public String method7(HttpServletResponse response){
        response.setStatus(401);
        return "設置狀態(tài)碼成功";
    }

結果:

設置header

代碼:

@RequestMapping("/8")
    @ResponseBody
    public String method8(HttpServletResponse response){
        response.setHeader("headerkey","headervalue");
        return "設置header成功";
    }

結果

綜合性練習

練習1:

加法計算器

前端代碼:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
     <form action="calc/sum" method="post">
        <h1>計算器</h1>
        數(shù)字1:<input name="num1" type="text">
        數(shù)字2:<input name="num2" type="text">
        <input type="submit" value=" 點擊相加 ">
    </form>
</body>
</html>

前后端交互接口

服務器代碼:

@RestController
@RequestMapping("/calc")
public class CalcController {
    @RequestMapping("/sum")
    public String method8(Integer num1,Integer num2){
        //如果有其中一個沒有參數(shù),直接返回
        if(num1 == null || num2 ==null){
            return "參數(shù)不合法";
        }
        Integer sum=num1+num2;
        return "<h1>計算機結果:" + sum + "<h1>";
    }
}

練習2:

用戶登入

我們需要一個前端的輸入信息登入界面,然后向后端發(fā)送請求進行校驗,查詢當前賬號是否正確。隨后在有一個登入狀態(tài),展示當前登入的用戶名。

1.前端登入頁

功能:提供輸入框頁面,以及通過點擊按鈕像后端發(fā)送請求,進行前后端的交互

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>登錄頁面</title>
</head>
<body>
<!--頁面-->
  <h1>用戶登錄</h1>
  用戶名:<input name="userName" type="text" id="userName">
  密碼:<input name="password" type="password" id="password">
  <input type="button" value="登錄" onclick="login()">
  <script src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.7.1.min.js"></script>
         <script>
<!--前后端進行交互-->
            function login(){
           //獲取前端數(shù)據(jù)發(fā)送給后端,到時候后端進行校驗
             //1.請求方式
             //2.后端地址
             //3.前端數(shù)據(jù)
                //使用jQuery的ajax方法發(fā)送請求
                $.ajax({
                    //請求類型
                    type: "post",
                    //請求后端接口地址
                    url: "/user/login",
                    //要發(fā)送到后端的數(shù)據(jù)
                    data: {
                        //獲取輸入框的值
                        userName: $("#userName").val(),
                        password: $("#password").val()
                    },
           //返回后端校驗后的結果
             //成功跳轉頁面
             //失敗,進行錯誤提示
                    //http請求成功的回調(diào)函數(shù)
                    //success:是ajax專門為成功響應設計的回調(diào),會自動接收后端返回的正常結果
                    success: function(result){
                        //判斷后端返回的結果
                        if(result){
                            //如果登入成功,跳轉頁面
                            location.href="index2.html" rel="external nofollow" ;
                        }else{
                            //否則,返回錯誤提示
                        alert("密碼錯誤");
                    }
                }
            })
        }
  </script>
</body>
</html>

2.后端控制器

功能:提供兩個接口,進行接口的校驗,查詢當前的登入狀態(tài)。

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RequestMapping("/user")
@RestController
public class UserController {
       @RequestMapping("/login")
       //校驗,記錄登入狀態(tài)
    public Boolean login(String userName, String password, HttpSession session){
           //參數(shù)校驗:校驗用戶名和密碼是否為空或者不是空字符串
           //寫法一:
//           if(userName == null || userName == "" || password == null || password == "" ){
//                 return false;
//           }
           //寫法二:
           //StringUtils.hasLength():校驗用戶名和密碼是否為空或者不是空字符串
           if(!StringUtils.hasLength(userName)  || !StringUtils.hasLength(password)){
               return false;
           }
           //校驗用戶名和密碼是否正確
           //這里是硬編碼,固定用戶名為admin和密碼為123456,實際數(shù)據(jù)要從數(shù)據(jù)庫中查詢驗證
           if("admin".equals(userName) &&  "123456".equals(password)){
               //如果校驗成功,將用戶名存儲到會話中
               session.setAttribute("userName",userName);
               return true;
           }
           return false;
       }
       //查詢當前登入狀態(tài)
       @RequestMapping("/getLoginUser")
    public String getLoginUser(HttpSession session){
           //獲取會話中存儲的值
           //如果用戶未登入,返回null
           //如果用戶已登入,返回用戶名
           String userName=(String) session.getAttribute("userName");
           return userName;
       }
}

前端首頁

功能:查詢登入狀態(tài),展示用戶的登入名

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
        content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>用戶登錄首頁</title>
</head>
<body>
    登錄人: <span id="loginUser"></span>
    <script src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.7.1.min.js"></script>
    <script>
        $.ajax({
            url: "/user/getLoginUser",
            type: "get",
            //請求成功后的回調(diào)函數(shù)
            success: function(userName){
                //將結果填充到頁面
                $("#loginUser").text(userName);
            }
        });
    </script>
</body>
</html>

到此這篇關于Spring MVC 響應處理頁面、數(shù)據(jù)與狀態(tài)配置的方法的文章就介紹到這了,更多相關Spring MVC 數(shù)據(jù)和頁面響應內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

最新評論

陇西县| 达州市| 定襄县| 社旗县| 都江堰市| 建湖县| 故城县| 翼城县| 思茅市| 凌云县| 永新县| 天全县| 伽师县| 安庆市| 银川市| 惠东县| 万全县| 开平市| 同仁县| 枞阳县| 武城县| 山阳县| 侯马市| 金川县| 连平县| 高要市| 雷波县| 南木林县| 南丹县| 乡城县| 莱州市| 镇平县| 什邡市| 田林县| 汉沽区| 沙田区| 布拖县| 海城市| 容城县| 屏东市| 长宁县|