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

Spring MVC的參數(shù)綁定和返回值問題

 更新時(shí)間:2021年02月08日 10:27:26   作者:超大充電寶  
這篇文章主要介紹了Spring MVC的參數(shù)綁定和返回值問題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

一:參數(shù)綁定

參數(shù)綁定過程

在springMVC中,從前端(頁面:jsp…)發(fā)送請(qǐng)求到后端(controller…),會(huì)包含一些數(shù)據(jù),數(shù)據(jù)是如何到達(dá)Controller,這個(gè)過程就是參數(shù)綁定過程

在這里插入圖片描述

1、默認(rèn)支持的類型

SpringMVC有支持的默認(rèn)的參數(shù)類型,在方法上給出默認(rèn)的參數(shù)類型的聲明就可以直接使用

  • HttpServletRequest request:通過request對(duì)象來獲取請(qǐng)求的信息
  • HttpServletResponse response:通過response來處理響應(yīng)信息
  • HttpSession session:通過session對(duì)象來存放緩存信息
  • Model model:Model是一個(gè)接口,modelMap是一個(gè)接口實(shí)現(xiàn),將model信息填充到request中
 public String index(HttpServletRequest request, HttpServletResponse response, HttpSession session, Model model) {
  //返回的modelAndView
  //指定返回的頁面 

2、基本數(shù)據(jù)類型

基本的數(shù)據(jù)類型也支持綁定,基礎(chǔ)的數(shù)據(jù)類型包括byte、short、int、long 、float、double、char、boolean

JSP頁面:

<html>
<head>
 <title>測(cè)試基本數(shù)據(jù)類型</title>
</head>
<body>
<!-- 測(cè)試基本的數(shù)據(jù)類型綁定:form表單向后端提交數(shù)據(jù) -->
<form action="/index/basedataType" method="post">
 <input type="text" name="username">
 <input type="submit" value="提交">
</form>
</body>
</html>

controller層:

 @RequestMapping("/basedataType")
public void baseDataType(int username) {
 System.out.println("基本數(shù)據(jù)類型:"+username);
}
  • 注意:表單上Input中的name值和controller的參數(shù)的變量名保持一致,則能完成數(shù)據(jù)綁定,如果不一致呢?
  • 需要@RequestParam注解來完成,JSP頁面不用改變

在這里插入圖片描述

使用@RequestParam注解就可以解決頁面Input的name值和controller方法形參名不一致的問題

注意:基本的數(shù)據(jù)類型和包裝類型(Integer,Long…)以及String類型參數(shù)綁定都是適用于以上基本類型參數(shù)綁定,基本類型和包裝類型的區(qū)別:基本類型傳遞參數(shù)不能為null或者“”,否則會(huì)出現(xiàn)數(shù)據(jù)轉(zhuǎn)化的異常,包裝類型不會(huì)出現(xiàn)這種問題,建議使用時(shí)使用包裝。

在這里插入圖片描述

3、自定義類型

自定義類型的類(User)

public class User {
 private Long id;
 private String name;
 private String address;
}
//getter setter toString

JSP頁面

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
 <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 <html>
 <head>
 <title>自定義類型數(shù)據(jù)提交</title>
 </head>
 <body>
 <form action="/user/adduser" method="post">
 用戶id:<input type="text" name="id"><br/>
 用戶名:<input type="text" name="name"><br/>
 地址:<input type="text" name="address"><br/>
 <input type="submit" value="提交">
 </form>
 </body>
 </html>

controller層

@Controller
@RequestMapping("/user")
public class UserController {
 @RequestMapping("/index")
 public String index() {
  return "user";
 }
 @RequestMapping("/adduser")
 //接收自定義類型的數(shù)據(jù)
 public String addUser(User user){
  System.out.println("用戶信息:"+user);
  return "success";
 }
}

在這里插入圖片描述

注意:頁面輸入框的name屬性值和自定義的pojo實(shí)例的屬性名保持一致即可映射成功
如果類型存在 不一致時(shí)需要自定義一個(gè)類型轉(zhuǎn)化器,需要給定一個(gè)自定義的類,實(shí)現(xiàn)Converter接口,該接口需要執(zhí)行轉(zhuǎn)化的類型,例如將前端的String的數(shù)據(jù)轉(zhuǎn)化為日期類型,即Converter<String,Date>

4、集合類型

集合類型:數(shù)組,List、Map等常用的集合類型都會(huì)支持
以List集合為例進(jìn)行介紹

JSP頁面

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
 <title>用戶列表</title>
</head>
<body>
<table align="center" border="1">
 <thead>
 <tr>
  <td>用戶id</td>
  <td>用戶名</td>
  <td>地址</td>
 </tr>
 </thead>
 <tbody>
 <c:forEach items="${users}" var="user">
  <tr>
   <td>${user.id}</td>
   <td>${user.name}</td>
   <td>${user.address}</td>
  </tr>
 </c:forEach>
 </tbody>
</table>
</body>
</html>

controller層

@RequestMapping("/userlist")
//集合類型數(shù)據(jù)的傳遞
public ModelAndView userList() {


 ModelAndView modelAndView = new ModelAndView();
 //指定邏輯視圖名
 modelAndView.setViewName("userlist");

 //偽數(shù)據(jù)集合
 ArrayList<User> users = new ArrayList <>();
 User user1 = new User();
 user1.setId(1L);
 user1.setName("張三");
 user1.setAddress("陜西西安");
 users.add(user1);

 User user2 = new User();
 user2.setId(2L);
 user2.setName("李四");
 user2.setAddress("陜西西安");
 users.add(user2);

 User user3 = new User();
 user3.setId(3L);
 user3.setName("王五");
 user3.setAddress("陜西西安");
 users.add(user3);

 //填充數(shù)據(jù)
 modelAndView.addObject("users", users);

 return modelAndView;
}

在這里插入圖片描述

二:返回值

1、返回ModelAndView類型

返回結(jié)構(gòu)定位ModelAndView時(shí),將model和View分別進(jìn)行設(shè)置

 @RequestMapping("/userlist")
  //集合類型數(shù)據(jù)的傳遞
  public ModelAndView userList() {


    //偽數(shù)據(jù)集合
    ArrayList <User> users = new ArrayList <>();

    ModelAndView modelAndView = new ModelAndView();
    //指定邏輯視圖名
    modelAndView.setViewName("userlist");
    //返回?cái)?shù)據(jù)
    modelAndView.addObject("users", users);
    modelAndView.addObject("class", "超大充電寶");

    return modelAndView;
  }

在這里插入圖片描述

在這里插入圖片描述

2、返回String類型 (1)返回邏輯視圖名

返回String,可以表示是邏輯視圖名

在這里插入圖片描述

真正視圖(jsp路徑)=“前綴”+邏輯視圖名+“后綴”
前綴和后綴可以在spring-mvc中設(shè)置視圖解析器組件時(shí)指定

在這里插入圖片描述 

(2)redirect重定向

redirect特點(diǎn):

  • 瀏覽器上地址URL會(huì)發(fā)生改變,
  • 修改后的request的數(shù)據(jù)無法傳遞到重定向的頁面,即重定向時(shí)request數(shù)據(jù)無法共享

在這里插入圖片描述

點(diǎn)擊提交之后,頁面跳轉(zhuǎn)到redirect指定的頁面,URL會(huì)發(fā)生改變

在這里插入圖片描述 

(3)forward頁面轉(zhuǎn)發(fā)

forward特點(diǎn):

  • 瀏覽器的地址URL不變的
  • request是可以共享的

在這里插入圖片描述

點(diǎn)擊提交之后,頁面跳轉(zhuǎn)到forward指定的頁面,URL不會(huì)發(fā)生改變

在這里插入圖片描述

問題:forward和redirect的區(qū)別?

Forward和Redirect代表了兩種請(qǐng)求轉(zhuǎn)發(fā)方式:直接轉(zhuǎn)發(fā)和間接轉(zhuǎn)發(fā)。

  • 直接轉(zhuǎn)發(fā)方式(Forward),客戶端和瀏覽器只發(fā)出一次請(qǐng)求,Servlet、HTML、JSP或其它信息資源,由第二個(gè)信息資源響應(yīng)該請(qǐng)求,在請(qǐng)求對(duì)象request中,保存的對(duì)象對(duì)于每個(gè)信息資源是共享的。
  • 間接轉(zhuǎn)發(fā)方式(Redirect)實(shí)際是兩次HTTP請(qǐng)求,服務(wù)器端在響應(yīng)第一次請(qǐng)求的時(shí)候,讓瀏覽器再向另外一個(gè)URL發(fā)出請(qǐng)求,從而達(dá)到轉(zhuǎn)發(fā)的目的。

舉個(gè)通俗的例子:

  • 直接轉(zhuǎn)發(fā)就相當(dāng)于:“A找B借錢,B說沒有,B去找C借,借到借不到都會(huì)把消息傳遞給A”
  • 間接轉(zhuǎn)發(fā)就相當(dāng)于:“A找B借錢,B說沒有,讓A去找C借”

二者區(qū)別:
redirect 重定向:

1、重定向會(huì)改變?yōu)g覽器地址欄地址 。

2、重定向不止可以訪問服務(wù)器內(nèi)的資源,還可以訪問外部連接 。

3、重定向因?yàn)槭莾纱握?qǐng)求,所以重定向不能使用request來訪問資源和共享數(shù)據(jù),因?yàn)閞equest的作用域是一次請(qǐng)求內(nèi)。

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

1、不會(huì)改變?yōu)g覽器地址欄信息 。

2、只能訪問服務(wù)器內(nèi)部資源 。

3、是一次請(qǐng)求.所以可以使用request共享數(shù)據(jù)。

2、返回void類型

 @RequestMapping("/void")
  //接收自定義類型的數(shù)據(jù)
  public void result(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    //添加用戶成功跳轉(zhuǎn)到用戶列表
    request.getRequestDispatcher("/user/userlist").forward(request,response);
    response.sendRedirect("/user/userlist");

    response.getWriter().write("hello...");
  }

(1)使用request頁面轉(zhuǎn)向

 request.getRequestDispatcher("/user/userlist").forward(request,response);

(2)通過response頁面重定向

response.sendRedirect("/user/userlist");

(3)通過response指定響應(yīng)結(jié)果

response.getWriter().write("hello...");

到此這篇關(guān)于Spring MVC的參數(shù)綁定和返回值的文章就介紹到這了,更多相關(guān)Spring MVC參數(shù)綁定和返回值內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot項(xiàng)目Maven下載依賴速度慢問題的解決方法

    SpringBoot項(xiàng)目Maven下載依賴速度慢問題的解決方法

    在使用Maven構(gòu)建項(xiàng)目時(shí),有時(shí)會(huì)遇到下載依賴包速度慢的問題,為了提高下載速度,我們可以將默認(rèn)的倉庫地址替換為國內(nèi)鏡像源,所以本文介紹了SpringBoot項(xiàng)目Maven下載依賴速度慢問題的解決方法,需要的朋友可以參考下
    2024-08-08
  • Java持久層框架Mybatis入門詳細(xì)教程

    Java持久層框架Mybatis入門詳細(xì)教程

    Mybatis持久層框架支持自定義SQL、存儲(chǔ)過程以及高級(jí)映射,可以通過XML或注解來配置和映射原始類型、接口和Java POJOs為數(shù)據(jù)庫中的記錄,接下來通過本文給大家介紹Java持久層框架Mybatis入門詳細(xì)教程,一起學(xué)習(xí)下吧
    2021-06-06
  • Spring注解驅(qū)動(dòng)開發(fā)實(shí)現(xiàn)屬性賦值

    Spring注解驅(qū)動(dòng)開發(fā)實(shí)現(xiàn)屬性賦值

    這篇文章主要介紹了Spring注解驅(qū)動(dòng)開發(fā)實(shí)現(xiàn)屬性賦值,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • IDEA搭建SpringBoot離線工程的方法

    IDEA搭建SpringBoot離線工程的方法

    這篇文章主要介紹了IDEA搭建SpringBoot離線工程的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • springboot的jar能獨(dú)立運(yùn)行的原因解析

    springboot的jar能獨(dú)立運(yùn)行的原因解析

    這篇文章主要介紹了springboot的jar能獨(dú)立運(yùn)行的原因解析,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • Java利用StampedLock實(shí)現(xiàn)讀寫鎖的方法詳解

    Java利用StampedLock實(shí)現(xiàn)讀寫鎖的方法詳解

    在jdk8以后,java提供了一個(gè)性能更優(yōu)越的讀寫鎖并發(fā)類StampedLock,該類的設(shè)計(jì)初衷是作為一個(gè)內(nèi)部工具類,用于輔助開發(fā)其它線程安全組件。本文就來和大家一起學(xué)習(xí)下StampedLock的功能和使用
    2022-10-10
  • Java利用位運(yùn)算實(shí)現(xiàn)比較兩個(gè)數(shù)的大小

    Java利用位運(yùn)算實(shí)現(xiàn)比較兩個(gè)數(shù)的大小

    這篇文章主要為大家介紹了,在Java中如何不用任何比較判斷符(>,==,<),返回兩個(gè)數(shù)( 32 位整數(shù))中較大的數(shù),感興趣的可以了解一下
    2022-08-08
  • springboot @RequestBody 接收字符串實(shí)例

    springboot @RequestBody 接收字符串實(shí)例

    這篇文章主要介紹了springboot @RequestBody 接收字符串實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Java線程池的拒絕策略實(shí)現(xiàn)詳解

    Java線程池的拒絕策略實(shí)現(xiàn)詳解

    這篇文章主要介紹了Java線程池的拒絕策略實(shí)現(xiàn)詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • Java使用Cipher類實(shí)現(xiàn)加密的過程詳解

    Java使用Cipher類實(shí)現(xiàn)加密的過程詳解

    這篇文章主要介紹了Java使用Cipher類實(shí)現(xiàn)加密的過程詳解,Cipher類提供了加密和解密的功能,創(chuàng)建密匙主要使用SecretKeySpec、KeyGenerator和KeyPairGenerator三個(gè)類來創(chuàng)建密匙。感興趣可以了解一下
    2020-07-07

最新評(píng)論

丰镇市| 彭山县| 漳浦县| 惠来县| 漾濞| 二手房| 昭平县| 乌鲁木齐市| 砀山县| 石棉县| 贵阳市| 合水县| 淳安县| 越西县| 筠连县| 乡城县| 深圳市| 岳西县| 开原市| 牟定县| 高唐县| 平利县| 清镇市| 体育| 平顶山市| 东乌珠穆沁旗| 双城市| 吉隆县| 衡山县| 张家川| 桂阳县| 汽车| 铜梁县| 阜康市| 宁晋县| 信丰县| 郸城县| 织金县| 北安市| 鲁山县| 大冶市|