SpingMVC:結果跳轉方式與數據處理

来源:https://www.cnblogs.com/SuperAx/archive/2022/04/09/16123761.html
-Advertisement-
Play Games

###一:SpingMVC:結果跳轉方式 SpringMVC: 通過SpringMVC來實現轉發和重定向-無需視圖解析器 測試前需要將視圖解析器註掉: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springfram ...


一:SpingMVC:結果跳轉方式

SpringMVC:
通過SpringMVC來實現轉發和重定向-無需視圖解析器

測試前需要將視圖解析器註掉:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
         http://www.springframework.org/schema/beans//spring-beans.xsd
         http://www.springframework.org/schema/context
         http://www.springframework.org/schema/context/spring-context.xsd
         http://www.springframework.org/schema/mvc
         http://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <!--自動掃描包,讓指定包下的註解生效,由IOC容器統一管理-->
    <context:component-scan base-package="com.kuang.controller"/>
    <!--預設的資源過濾:像.css .js .html .mp3 .mp4這樣的資源預設讓他們不經過視圖解析器-->
    <!--<mvc:default-servlet-handler/>
    &lt;!&ndash;
    支持mvc註解驅動
        在spring中一般採用@RequestMapping註解來完成映射關係
        要想使@RequestMapping註解生效
        必須要向上下文中註冊DefaultAnnotationHandlerMapping和一個AnnotationMethodHandlerAdapter實例
        以後直接就使用annotation-driven配置來幫助我們自動完成上述兩個實例的註入
    &ndash;&gt;
    <mvc:annotation-driven/>-->
    <!--&lt;!&ndash;視圖解析器&ndash;&gt;
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver">
        &lt;!&ndash;首碼&ndash;&gt;
        <property name="prefix" value="/WEB-INF/jsp/"/>
        &lt;!&ndash;尾碼&ndash;&gt;
        <property name="suffix" value=".jsp"/>
    </bean>-->

   <!-- <bean name="/t1" class="com.kuang.controller.ControllerTest"/>-->

</beans>

測試:

@Controller
public class MoodelTest {
    @RequestMapping("/m1/t1")
    public String test1(Model model){
      model.addAttribute("msg","MoldelTest");
      //轉發一
      return "/WEB-INF/jsp/hello.jsp";
    }

    @RequestMapping("/m1/t2")
    public String test(Model model){
        model.addAttribute("msg","MoldelTest");
        //轉發二
        return "forward:/WEB-INF/jsp/hello.jsp";
    }
  
    @RequestMapping("/m1/t3")
    public String test1(Model model){
        model.addAttribute("msg","ModelTest");
        //重定向,url地址會發生改變
        return "redirect:/index.jsp";
    }
}

通過SpringMVC來實現轉發和重定向-有視圖解析器

重定向,不需要視圖解析器,本質就是重新請求一個新地方,所以要註意路徑問題

@Controller
public class MoodelTest {
    @RequestMapping("/m1/t1")
    public String test1(Model model){
      model.addAttribute("msg","MoldelTest");
      //轉發
      return "test";
    }

    @RequestMapping("/m1/t2")
    public String test1(Model model){
        model.addAttribute("msg","ModelTest");
        //重定向,url地址會發生改變
        return "redirect:/index.jsp";
      //return "redirect:hello.do";   //hello.do為另一個請求
    }
}

二:SpringMVC數據處理

處理提交的數據:
1:提交的功能變數名稱名稱和處理方法的參數名一致

提交數據:http://localhost:8080/hello?name=kuangshen

處理方法

package com.kuang.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/user")
public class UserController {
    //localhost:8080/user/t1 ? name = xxx
    @GetMapping("/t1")
    public String test(String name, Model model){
        //1:接收前端參數
        System.out.println("接收到的前端參數為:"+name);
        //2:將返回的結果傳遞給前段,使用Model
        model.addAttribute("msg","UserController");
        //3:視圖跳轉
        return "hello";
    }
}

後臺輸出:

2:提交的功能變數名稱名稱和處理方法的參數名不一致:

提交數據:http://localhost:8080/hello?username=kuangshen

處理辦法:

@GetMapping("/t1")
    public String test(@RequestParam("username") String name, Model model){
        //1:接收前端參數
        System.out.println("接收到的前端參數為:"+name);
        //2:將返回的結果傳遞給前端,使用Model
        model.addAttribute("msg","UserController");
        //3:視圖跳轉
        return "hello";
    }

後臺輸出kuangshen

3:提交的是一個對象

要求提交的表單功能變數名稱和對象的屬性名一致,參數使用對象即可

(1):實體類

package com.kuang.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    private int id;
    private String name;
    private int age;
}

(2):提交數據:http://localhost:8080/user/t2?name=kuangshen&age=12&id=3

(3):處理方法:

//前端接收的是一個對象:id,name,age
    /*
    * 1:接收前端用戶傳遞的參數,判斷參數的名字,假設名字直接在方法的參數上,則可以直接使用,否則用@RequestParam即可
    * 2:假設傳遞的是一個對象User,匹配User對象中的欄位名;如果名字一致則OK,否則匹配不到!
    *
    * */
    @GetMapping("/t2")
    public String test2(User user, Model model){
        //1:接收前端參數
        System.out.println("從前端接收的參數為"+user);
        //2:將返回結果傳遞給前端,使用Model
        model.addAttribute("msg","UserTest");
        //3:視圖跳轉
        return "hello";
    }

後臺輸出:

說明:如果使用對象的話,前端傳遞的參數名和對象名必須一致,否則就是null

數據顯示到前端

第一種:通過ModelAndView

我們前面一直都是如此。就不過多解釋:

public class ControllerTest implements Controller {
    @Override
    public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
        ModelAndView modelAndView = new ModelAndView();
        //封裝對象
        modelAndView.addObject("msg","ControllerTest");
        // 封裝要跳轉的視圖
        modelAndView.setViewName("test");
        return modelAndView;
    }
}

第二種:通過ModelMap

//ModelMap
    @GetMapping("/t3")
    public String test3(ModelMap modelMap){
        //1:將返回結果傳遞給前端,使用ModelMap
        modelMap.addAttribute("msg","UserTest");
        //2:視圖跳轉
        return "hello";
    }

第三種:通過Model

@GetMapping("/t2")
    public String test2(User user, Model model){
        //1:接收前端參數
        System.out.println("從前端接收的參數為"+user);
        //2:將返回結果傳遞給前端,使用Model
        model.addAttribute("msg","UserTest");
        //3:視圖跳轉
        return "hello";
    }

對比
對於新手而言簡單來說使用區別就是:

Model:只有寥寥幾個方法適用於儲存數據,簡化了新手對Model對象的操作和理解
ModelMap:繼承了 LinkedMap,除了實現自身的一些方法,同樣的繼承了LinkedMap的方法和特性;
ModelAndView:可以在儲存數據的同時,可以進行設置返回的邏輯視圖,進行控制展示層的跳轉。

當然更多的以後開發考慮的更多的是性能和優化,就不能單單僅限於對此的瞭解。

框架的官方文檔永遠是最好的教程。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1. 今天繼續ajax的一個學習,首先明確一個觀念,介面,什麼是介面,當使用ajax請求數據時,被請求的url就叫做數據介面也就是介面,註意每個介面必須有請求方式,這裡有一個介面的測試工具,postman自稱是全球最快的,反正使用起來沒多大毛病,使用這個軟體的時候有一個註意點就是在post請求的時候 ...
  • 進入ajax了,想要進入vue還有一個前提就是要把ajax給熟悉一下,看一看客戶端與伺服器之間是怎麼一個通信的過程,第一天主要是先瞭解了一下ajax的一些介紹,ajax嘛,在進入之前,肯定是要瞭解一下客戶端與伺服器之間的一個通信過程,其實不管是請求還是發送都遵循的一個原則,即請求、處理、響應,如何來 ...
  • 一、前言 雖說上學期為了助眠看了一點 Java 但是散而不精,看而不敲,所以這學期正式學 Java 並沒有想想中那麼容易... 直觀感受:Java有很多和C/C不一樣的地方,Java太嚴謹了,但是相比C/C來說也更安全(不需要領著指針亂跑).... 前三次PTA題目集的小總結 總體來看,前兩次的題目 ...
  • 不斷踩坑並解決問題是每個程式員進階到資深的必要經歷並以此獲得滿足感,而不斷閱讀開源項目源碼和總結思想是每個架構師成長最佳途徑。本篇拉開SpringCloud Alibaba最新版本實戰和原理序幕,以工程實踐的簡單完整實戰示例為主線,步步深入並可為實際項目中帶來啟發 ...
  • 上個月線上生產環境有幾個介面出現異常響應,查看生產日誌後發現,如下錯誤 線上Redis客戶端使用的是SpringBoot預設的Lettuce客戶端,並且沒有指定連接池,connection reset by peer這個錯誤是當前客戶端連接在不知情的情況下被服務端斷開後產生,也就是說當前客戶端Red ...
  • Spring 簡介 spring,英文單詞為春天,表示為軟體行業帶來了春天。 2002年,首次推出了Spring框架的雛形:interface21框架。官網為:www.interface21.io但是現在進去時間略長。 Spring框架是以上面這個框架為基礎重新設計,並不斷對其進行改進豐富其內涵,在 ...
  • 為什麼要使用JWT認證?構成和原理又是什麼?怎麼還有Base64的事?我都寫了
  • * 如果一個類沒有構造方法: * A:成員全部是靜態的(Math,Arrays,Collections) * B:單例設計模式(Runtime) * C:類中有靜態方法返回該類的對象(InetAddress) * class Demo { * private Demo(){} * * public ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...