1. 程式人生 > >springmvc 路徑對映規則、資料繫結

springmvc 路徑對映規則、資料繫結

一、路徑對映

1. 一個action配置多個URL對映

@RequestMapping(value={“/index”, “/hello”}, method = {RequestMethod.GET})

2. URL請求引數對映

@RequestMapping(value="/detail/{id}", method = {RequestMethod.GET})

public ModelAndView getDetail(@PathVariable(value="id") Integer id){  
    ModelAndView modelAndView = new ModelAndView();    
    modelAndView.addObject("id"
, id); modelAndView.setViewName("detail"); return modelAndView; }
3. URL萬用字元對映“?”表示1個字元,“*”表示匹配多個字元,“**”表示匹配0個或多個路徑 SpringMVC會按照最長匹配優先原則(即對映配置中哪個匹配的最多)來匹配。 4. URL正則表示式對映 Spring MVC還支援正則表示式方式的對映配置
@RequestMapping(value="/reg/{name:\\w+}-{age:\\d+}", method = {RequestMethod.GET})  
public
ModelAndView regUrlTest(@PathVariable(value="name") String name, @PathVariable(value="age") Integer age){ ModelAndView modelAndView = new ModelAndView(); modelAndView.addObject("name", name); modelAndView.addObject("age", age); modelAndView.setViewName("regurltest"); return
modelAndView; }

二、資料繫結

1.@RequestParam,繫結單個請求資料,可以是URL中的資料,表單提交的資料或上傳的檔案;

2.@PathVariable,繫結URL模板變數值;

3.@CookieValue,繫結Cookie資料;

4.@RequestHeader,繫結請求頭資料;

5.@ModelAttribute,繫結資料到Model;

6.@SessionAttributes,繫結資料到Session;

7.@RequestBody,用來處理Content-Type不是application/x-www-form-urlencoded編碼的內容,例如application/json, application/xml等;

8.@RequestPart,繫結“multipart/data”資料,並可以根據資料型別進項物件轉換;

@RequestParam 示例步驟驗證檔案繫結
     1.新增commons-fileupload-1.3.1.jar和commons-io-2.2.jar
     2.配置spring-servlet.xml檔案支援檔案上傳
<!-- 支援上傳檔案 -->    
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">    
    <!-- 設定上傳檔案的最大尺寸為1MB -->    
    <property name="maxUploadSize">    
        <value>1048576</value>    
    </property>  
    <property name="defaultEncoding">   
        <value>UTF-8</value>   
    </property>  
</bean> 
3.controller file
@Controller  
@RequestMapping(value = "/databind")  
public class DataBindController {  

    @RequestMapping(value="/parambind", method = {RequestMethod.GET})  
    public ModelAndView paramBind(){  

        ModelAndView modelAndView = new ModelAndView();    
        modelAndView.setViewName("parambind");    
        return modelAndView;  
    }  

    @RequestMapping(value="/parambind", method = {RequestMethod.POST})  
    public ModelAndView paramBind(HttpServletRequest request, @RequestParam("urlParam") String urlParam, @RequestParam("formParam") String formParam, @RequestParam("formFile") MultipartFile formFile){  

        //如果不用註解自動繫結,我們還可以像下面一樣手動獲取資料  
        String urlParam1 = ServletRequestUtils.getStringParameter(request, "urlParam", null);  
        String formParam1 = ServletRequestUtils.getStringParameter(request, "formParam", null);  
        MultipartFile formFile1 = ((MultipartHttpServletRequest) request).getFile("formFile");   

        ModelAndView modelAndView = new ModelAndView();    
        modelAndView.addObject("urlParam", urlParam);    
        modelAndView.addObject("formParam", formParam);    
        modelAndView.addObject("formFileName", formFile.getOriginalFilename());    

        modelAndView.addObject("urlParam1", urlParam1);    
        modelAndView.addObject("formParam1", formParam1);    
        modelAndView.addObject("formFileName1", formFile1.getOriginalFilename());    
        modelAndView.setViewName("parambindresult");    
        return modelAndView;  
    }  
}  


<%@ page language="java" contentType="text/html; charset=UTF-8"  
    pageEncoding="UTF-8"%>  
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
<html>  
<head>  
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
<title>Insert title here</title>  
</head>  
<body>  
    <form action="parambind?urlParam=AAA" method="post" enctype="multipart/form-data">   
        <input type="text" name="formParam" /><br/>   
        <input type="file" name="formFile" /><br/>  
        <input type="submit" value="Submit" />  
    </form>    
</body>  
</html>  

<%@ page language="java" contentType="text/html; charset=UTF-8"  
    pageEncoding="UTF-8"%>  
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
<html>  
<head>  
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
<title>Insert title here</title>  
</head>  
<body>  
    自動繫結資料:<br/><br/>  
    ${urlParam}<br/>  
    ${formParam}<br/>  
    ${formFileName}<br/><br/><br/><br/>  
    手動獲取資料:<br/><br/>  
    ${urlParam1}<br/>  
    ${formParam1}<br/>  
    ${formFileName1}<br/>  
</body>  
</html>

上面如何把資料繫結到單個變數,但在實際應用中我們通常需要獲取的是model物件,
不需要把資料繫結到一個個變數然後在對model賦值,只需要把model加入相應的action引數(這裡不需要指定繫結資料的註解)
SpringMVC會自動進行資料轉換並繫結到model物件上。

1. Account類
public class AccountModel {  

    private String username;  
    private String password;  
 

... setter getter

}

2. controller

@RequestMapping(value="/modelautobind", method = {RequestMethod.GET})

public String modelAutoBind(HttpServletRequest request, Model model){  

    model.addAttribute("accountmodel", new AccountModel());  
    return "modelautobind";  
}  

@RequestMapping(value="/modelautobind", method = {RequestMethod.POST})  
public String modelAutoBind(HttpServletRequest request, Model model, AccountModel accountModel){  

    model.addAttribute("accountmodel", accountModel);  
    return "modelautobindresult";  
}  

3.modelautobind.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"  
    pageEncoding="UTF-8"%>  
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  

<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>  

<html>  
<head>  
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
<title>Insert title here</title>  
</head>  
<body>  
    <form:form modelAttribute="accountmodel" method="post">       
        使用者名稱:<form:input path="username"/><br/>  
        密 碼:<form:password path="password"/><br/>  
        <input type="submit" value="Submit" />  
    </form:form>    
</body>  
</html>  
 

4. modelautobindresult.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"  
    pageEncoding="UTF-8"%>  
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
<html>  
<head>  
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
<title>Insert title here</title>  
</head>  
<body>  
    使用者名稱:${accountmodel.username}<br/>  
    密 碼:${accountmodel.password}  
</body>  
</html> 

5.summary

@RequestParam的完整寫法

@RequestParam(value=”username”, required=true, defaultValue=”AAA”)

value表示要繫結請求中引數的名字;

required表示請求中是否必須有這個引數,預設為true這是如果請求中沒有要繫結的引數則返回404;

defaultValue表示如果請求中指定的引數值為空時的預設值;

要繫結的引數如果是值型別必須要有值否則拋異常,如果是引用型別則預設為null(Boolean除外,預設為false);

在剛才新增的2個action中可以看到返回型別和以前的不一樣了由ModelAndView變成了String,

這是由於Spring MVC 提供Model、ModelMap、Map讓我們可以直接新增渲染檢視需要的模型資料,在返回時直接指定對應檢視名稱就可以了。

同時Map是繼承於ModelMap的,而Model和ModelMap是繼承於ExtendedModelMap的。


相關推薦

springmvc 路徑對映規則資料

一、路徑對映 1. 一個action配置多個URL對映 @RequestMapping(value={“/index”, “/hello”}, method = {RequestMethod.GET}) 2. URL請求引數對映 @RequestMapping(value

SpringMVC型別轉換資料詳解[附帶原始碼分析]

目錄 前言 SpringMVC是目前主流的Web MVC框架之一。  public String method(Integer num, Date birth) { ... } Http請求傳遞的資料都是字串String型別的,上面這個方法在Contro

spring5-驗證資料和型別轉換

5.1 介紹 {#toc_1} JSR-303/JSR-349 Bean Validation 在設定支援方面,Spring Framework 4.0支援Bean Validation 1.0(JSR-303)和Bean Validation 1.1(JSR-349),也將其改寫成了Spr

Vue2.x-04Vue插值資料樣式過濾器

文章目錄 概述 Vue 例項啟動入口 App.vue分析 Vue 的基本組成部分 插值 資料繫結 v-for渲染陣列 v-for渲染物件屬性 樣式繫結 過濾器

《Spring 5 官方文件》5. 驗證資料和型別轉換

原文連結 譯者:14shadow43 5 驗證、資料繫結和型別轉換 5.1 介紹 JSR-303/JSR-349 Bean Validation 在設定支援方面,Spring Framework 4.0支援Bean Validation 1.0(JSR-303)和Bean Validation

iOS混合開發庫(GICXMLLayout)六資料原理

各位對於MVVM這種架構應該多多少少有一定的瞭解了,而提到MVVM那麼資料繫結應該是繞不過去的一個話題。資料繫結是MVVM架構中的一個重要組成部分,可以做到View跟ViewModel之間的解耦,真正的做到UI、邏輯的分離。 在iOS上要是實現MVVM,那麼一般使用RAC或者RXSwift來實現資料繫結的功

SpringMVC資料方式做HTMLSQL防注入

首先先定義個一個類整合 PropertyEditorSupport 屬性編輯器public class StringEscapeEditor extends PropertyEditorSupport { private boolean escapeHTML; //定義

springMVC中複雜巢狀物件List等集合型別資料

[一]、概述 繼前面一篇 springMVC 頁面中多個物件的資料繫結 ,本文主要介紹如果實現複雜型別物件的資料繫結,比如前文中的父級物件CourseInfo 中增加:String[] times , List<Student> studentList 這兩個複雜型別屬性,頁面中資料如何才能準

SpringMVC複雜資料——陣列實現批量刪除

前幾天學習SSM開發框架遇到了批量刪除的資料繫結問題,就從網上學習了一下,參考別人的部落格又加了點自己的見解寫了這篇部落格。 繫結陣列 在實際開發時,可能會遇到前端請求需要傳遞到後臺多個input的Name屬性相同的資料的情況(如批量刪除),這個情況用SpringMVC的Controller

SpringMVC_第三章(SpringMVC資料

1. 什麼是引數繫結 引數繫結,簡單來說就是客戶端傳送請求,而請求中包含一些資料,那麼這些資料怎麼到達 Controller ?這在實際專案開發中也是用到的最多的,那麼 SpringMVC 的引數繫結是怎麼實現的呢?下面我們來詳細的講解。 在springMVC之前 首先在使用spring

Vue 框架-03-鍵盤事件健值修飾符雙向資料

Vue 框架-03-鍵盤時間及健值修飾符 一、鍵盤事件,當按鍵盤時,在控制檯輸出提示 html 原始碼: <!DOCTYPE html> <html> <head> <meta charset="utf-8" />

angular,vue,react的基本語法—雙向資料條件渲染列表渲染angular小案例

基本語法: 1、雙向資料繫結 vue 指令:v-model="msg" react constructor(){ this.state{ msg:"雙向資料繫結" } render(){ <input type="text" value={this.state

第六章 註解式控制器詳解——SpringMVC強大的資料(2)

6.6.2、@RequestParam繫結單個請求引數值 @RequestParam用於將請求引數區資料對映到功能處理方法的引數上。 public String requestparam1(@RequestParam String username) 請求中包含username引數(如/

第六章 註解式控制器詳解—SpringMVC強大的資料(1)

     到目前為止,請求已經能交給我們的處理器進行處理了,接下來的事情是要進行收集資料啦,接下來我們看看我們能從請求中收集到哪些資料,如圖6-11:  圖6-11 1、@RequestParam繫結單個請求引數值; 2、@PathVariabl

SpringMvc資料流程

在SpringMvc中會將來自web頁面的請求和響應資料與controller中對應的處理方法的入參進行繫結,即資料繫結。流程如下:      -1.SpringMvc主框架將ServletRequest物件及目標方法的入參例項傳遞給WebDataBinderFacto

Angular 資料響應式程式設計和管道

一.資料繫結 1.資料繫結基本內容 <h1>{{productTitle}}!</h1>使用插值表示式將一個表示式的值顯示在模板上 <img [src]="imgUrl"

Android(或者Java)通過HttpUrlConnection向SpringMVC請求資料資料

問題描述     當我們使用SpringMVC作為服務端的框架時,有時不僅僅要應對web前端(jsp、javascript、Jquery等)的訪問請求,有時還可能需要響應Android和JavaSE(桌面應用)這些客戶端的請求,因此,除了web使用form表單

Angular資料響應式程式設計管道

資料繫結 1.事件繫結 函式呼叫: 屬性賦值: example: 1.1建立專案 –> ng new demo1 1.2生成元件 –> ng g component bind 1.3 bind.component.html <p> bind wo

Angular4--資料響應式程式設計

概念 Angular中的資料繫結指的是同一組件中控制器檔案(.ts)與檢視(.html)之間的資料傳遞。 分類  單向繫結 ts->html <div> <

小程式開發之檢視層WXML資料運算組合及物件

WXML WXML(WeiXin Markup Language)是框架設計的一套標籤語言,結合基礎元件、事件系統,可以構建出頁面的結構。 資料繫結 WXML 中的動態資料均來自對應 Page 的 data。 簡單繫結 資料繫結使用 Mustache 語法(雙大括號)