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以資料繫結方式做HTML、SQL防注入
首先先定義個一個類整合 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 語法(雙大括號)