javascript
SpringMVC基础配置及使用
SpringMVC基礎配置及使用
SpringMVC:
1.SpringMVC和Spring的關系:
?? ?軟件開發(fā)的三層架構: web層【表示層、表現(xiàn)層】---->Service層---->Dao[DataBase Access Object]---->數(shù)據(jù)庫!
?? ?SpringMVC實際上是Spring的一個子模塊,我們用SpringMVC來代替這個JavaWEB部分!
?? ?MVC:也是一種設計模式:M:Model【模型】-->V[View]--->C[Controller]!
?? ??? ???? Model用來封裝數(shù)據(jù)的,View:用來顯示數(shù)據(jù)? Controller:用于接收前端頁面發(fā)送的請求,然后調(diào)用Service層處理,拿到處理結(jié)果,將該結(jié)果返回給前端頁面!
?? ??? ??? ??? ??? ??? ? ?
?? ?SpringMVC:相當于MVC架構中的C以及V!
?? ?
2.SpringMVC有什么優(yōu)勢?
?? ?Spring 為展現(xiàn)層提供的基于 MVC 設計理念的優(yōu)秀的Web 框架,是目前最主流的 MVC 框架之一。
?? ?
?? ?Spring3.0 后全面超越 Struts2,成為最優(yōu)秀的 MVC 框架。
?? ?
?? ?Spring MVC 通過一套 MVC 注解,讓 POJO 成為處理請求的控制器,而無須實現(xiàn)任何接口。
?? ?
?? ?支持 REST 風格的 URL 請求(包含以下操作)。
?? ??? ?GET POST PUT DELTE
?? ?
?? ?采用了松散耦合可插拔組件結(jié)構,比其他 MVC 框架更具擴展性和靈活性.
?? ?
?? ?目前主流的開發(fā)軟件,說白了,大家都在用!
?? ?
3.SpingMVC是基于SpingMVC4.x
4.SpringMVC的HelloWorld快速入門!(SpringMVC的使用配置:步驟如下)
?? ?1).加入JAR包:
?? ??? ??? ?–commons-logging-1.1.3.jar
?? ??? ??? ?–spring-aop-4.0.0.RELEASE.jar
?? ??? ??? ?–spring-beans-4.0.0.RELEASE.jar
?? ??? ??? ?–spring-context-4.0.0.RELEASE.jar
?? ??? ??? ?–spring-core-4.0.0.RELEASE.jar
?? ??? ??? ?–spring-expression-4.0.0.RELEASE.jar
?? ??? ??? ?–spring-web-4.0.0.RELEASE.jar
?? ??? ??? ?–spring-webmvc-4.0.0.RELEASE.jar
?? ??? ??? ?
?? ?2).配置前端控制器【DispatcherServlet】??
?3).創(chuàng)建SpringMVC的配置文件并添加要掃描的包
?? ??? ?注意:1.創(chuàng)建SpringMVC配置文件的名字要和上面在web.xml文件中指定的名字一致!
?? ??? ????? 2.我們創(chuàng)建SpringMVC配置文件的時候使用的是Spring Bean Configuration File創(chuàng)建的,不是XML!
?? ??? ??? ??
?? ??? ?<!-- 配置SpingMVC容器要掃描的包! -->??
? 4).在springMVC掃描的包下創(chuàng)建控制器類[Controller/Handler],注意要加入@Controller注解? ??
/*** 我們通過@RequestMapping做請求URL的映射!* @return*/@RequestMapping("/sayHello")public String sayHello(){return "/WEB-INF/views/success.jsp";}? 注意:在類的方法上我們使用的是@RequestMapping,然后在括號里指定請求url的請求路徑!
?????
?? ?5).創(chuàng)建頁面!
?注意:1.當我們不用init-param指定springMVC配置文件的路徑好位置的時候,SpringMVC默認會去
?? ??? ??? ?/WEB-INF/<servlet-name>-servlet.xml
?? ??? ??
?? ??? ??? 2.配置視圖解析器(在springmvc.xml 中)??
3.請求一個SpringMVC的流程!
?? ??? ?
5.使用 @RequestMapping 映射請求
?? ?Spring MVC 使用 @RequestMapping 注解為控制器指定可以處理哪些 URL 請求
?? ?在控制器的類定義及方法定義處都可標注
?? ?
?? ?@RequestMapping
?? ?–?? ?類定義處:提供初步的請求映射信息。相當于當前 WEB 應用的根目錄
?? ?–?? ?方法處:提供進一步的細分映射信息。相對于類定義處的 URL。
?? ??? ??? ??? ?若 類定義處未標注 @RequestMapping,則方法處標記的 URL 相當于當前 WEB 應用的根目錄
?? ??? ??? ??? ?若 類定義處標注 @RequestMapping,則方法處標記的 URL 相對于類定義處的@RequestMapping而言的!
?? ??? ??? ??? ????? ??? ?????
?? ?DispatcherServlet 截獲請求后,就通過控制器上@RequestMapping 提供的映射信息確定請求所對應的處理方法。
?? ?
?? ?映射請求參數(shù)、請求方法或請求頭
?? ??? ?@RequestMapping 除了可以使用請求 URL 映射請求外,還可以使用請求方法、請求參數(shù)及請求頭映射請求
?? ??? ?@RequestMapping 的 value、method、params 及 heads 分別表示請求URL、請求方法、請求參數(shù)及請求頭的映射條件,他們之間是與的關系,聯(lián)合使用多個條件可讓請求映射更加精確化。
?? ??? ?
?? ??? ?params 和 headers支持簡單的表達式:
?? ??? ?–?? ?param1: 表示請求必須包含名為 param1 的請求參數(shù)
?? ??? ?–?? ?!param1: 表示請求不能包含名為 param1 的請求參數(shù)
?? ??? ?–?? ?param1 != value1: 表示請求包含名為 param1 的請求參數(shù),但其值不能為 value1
?? ??? ?–{“param1=value1”, “param2”}: 請求必須包含名為 param1 和param2 的兩個請求參數(shù),且 param1 參數(shù)的值必須為 value1!
?? ??? ?
?? ??? Method:GET / POST /PUT /DELETE
?? ?? ?
?? ??? 使用 @RequestMapping 支持Ant風格的請求URL!
?? ??? ??? ?Ant 風格資源地址支持 3 種匹配符:
?? ??? ?–?? ??:匹配文件名中的一個字符
?? ??? ?–?? ?*:匹配文件名中的任意多個任意字符[0個字符除外!]
?? ??? ?–?? ?**:** 匹配多層路徑
?? ?
?? ??? ?@RequestMapping 還支持 Ant 風格的 URL:(如:@RequestMapping(value="/*/testAnt"))
?? ??? ?–/user/*/createUser: 匹配
?? ??? ?/user/aaa/createUser、/user/bbb/createUser 等 URL
?? ??? ?–/user/**/createUser: 匹配
?? ??? ?/user/createUser、/user/aaa/bbb/createUser 等 URL
?? ??? ?–/user/createUser??: 匹配
?? ??? ?/user/createUseraa、/user/createUserbb 等 URL
?? ???????? ?????
?? ?@PathVariable?? ?映射 URL 綁定的占位符
?? ??? ?帶占位符的 URL 是 Spring3.0 新增的功能,該功能在 SpringMVC 向 REST 目標挺進發(fā)展過程中具有里程碑的意義
?? ??? ?通過 @PathVariable 可以將 URL 中占位符參數(shù)綁定到控制器處理方法的入?yún)⒅?#xff1a;URL 中的 {xxx} 占位符可以通過
?? ??? ?? @PathVariable("xxx") 綁定到操作方法的入?yún)⒅?需要注意的是:該注解的value屬性值要與占位符保持一致。? ?
?若無(value="id"),則占位符{id}與后面的Integer id中id的類型保持一致,即應為Integer。
?? ?@PathVariable(value="id") Integer id//此處涉及一個強制類型轉(zhuǎn)換,value中為string型
?? ?
6.REST:即 Representational State Transfer。(資源)表現(xiàn)層狀態(tài)轉(zhuǎn)化。是目前最流行的一種互聯(lián)網(wǎng)軟件架構。
?? ??? ?它結(jié)構清晰、符合標準、易于理解、擴展方便, 所以正得到越來越多網(wǎng)站的采用.
?? ??? ?他較為簡潔優(yōu)雅,盡量不使用后綴如配置時不使用*.action,而直接用/
?? ??? ? HTTP 協(xié)議里面,四個表示操作方式的動詞:GET、POST、PUT、DELETE。
?? ??? ? 它們分別對應四種基本操作:
?? ??? ??? ? GET 用來獲取資源,(使用時方法默認為GET)
?? ??? ??? ? POST 用來新建資源,(GET、POST使用較多)
?? ??? ??? ? PUT 用來更新資源,
?? ??? ??? ? DELETE 用來刪除資源。
?? ??? ??? ??
?? ??? ?示例:(唯有GET方法可用超鏈接,其他方法需用POST方法轉(zhuǎn)化)(寫在路徑中)
?? ??? ??? ?–/order/1?? ?HTTP GET :得到 id = 1 的 order
?? ??? ??? ?–/order/1?? ?HTTP DELETE:刪除 id = 1的 order
?? ??? ??? ?–/order/1?? ?HTTP PUT:更新id = 1的 order
?? ??? ??? ?
?? ??? ??? ?–/order?? ?HTTP POST:新增 order(實際使用時基本不攜帶Id,添加時后臺自動添加id)
?? ??? ??? ?
?? ??? ???? HiddenHttpMethodFilter:瀏覽器 form 表單只支持 GET 與 POST 請求,而DELETE、PUT 等 method 并不支 持,Spring3.0? 添加了一個過濾器,可以將這些請求轉(zhuǎn)換 為標準的 http 方法,使得支持 GET、POST、PUT 與 DELETE 請求。?
?POST請求如何轉(zhuǎn)化為put請求和delele請求?
?? ??? ? 1.在web.xml文件中配置:? ??
?2.在表單域中需要攜帶一個name值為_method,value值為put或者delete的參數(shù),如下所示:
<a href="${pageContext.request.contextPath}/order/1">測試GET方法 !</a><form action="${pageContext.request.contextPath}/order/1" method="post"><input type="submit" value="Submit"></form><form action="${pageContext.request.contextPath }/order/1" method="post"><input type="hidden" name="_method" value="put"/><%@方法轉(zhuǎn)換name="_method" value="put"%><input type="submit" value="Submit"/></form><form action="${pageContext.request.contextPath }/order/1" method="post"><input type="hidden" name="_method" value="delete"/><input type="submit" value="Submit"/></form>?3.方法示例如下:? ?
private static final String SCUESS="scuess";@RequestMapping(value="/order/{id}",method=RequestMethod.GET)public String getOrderById(@PathVariable(value="id") Integer id) {println("========="+id);return SCUESS;}@RequestMapping(value="/order/{id}",method=RequestMethod.POST)public String getOrderById1(@PathVariable(value="id") Integer id) {println("========="+id);return SCUESS;}@RequestMapping(value="/order/{id}",method=RequestMethod.PUT)public String getOrderById2(@PathVariable(value="id") Integer id) {println("***********"+id);return SCUESS;}@RequestMapping(value="/order/{id}",method=RequestMethod.DELETE)public String getOrderById4(@PathVariable(value="id") Integer id) {println("***********========"+id);return SCUESS;}7.@RequestParam可以接收請求的參數(shù),相當于Servlet的getParameter()方法!
?? ?注意:要把@RequestParam和@PathVariable區(qū)分開:?? ?
?? ?@RequestParam將請求參數(shù)中的值傳給請求方法
?? ?@PathVariable將請求路徑中的值傳給請求方法
?? ?三個默認屬性:(屬性間,隔開)
?? ? value:這個字段要與請求參數(shù)的name屬性值一致!
?? ? required:布爾值,默認是true,表示請求參數(shù)中必須包含對應 的參數(shù),若不存在,將拋出異常當指定為false的時候,說明這個參數(shù)不是必須的,可以不帶!
?? ? defaultValue:在我們不傳值的時候,默認使用defaultValue的值,傳遞參數(shù)的時候,使用我們傳遞的參數(shù)值!?
8.@RequestHeader:獲取請求頭信息,服務器可據(jù)此獲知客戶端的信 息,默認屬性:
?? ??? ?value:這個字段要與請求參數(shù)的name屬性值一致!
?? ???? required:布爾值,默認是true,當指定為false的時候,說明這個參數(shù)不是必須的,可以不帶!
?? ???? defaultValue:在我們不傳值的時候,默認使用defaultValue的值,傳遞參數(shù)的時候,使用我們傳遞的參數(shù)值!
9.針對POST請求亂碼的處理:
在web.xml文件中加上CharacterEncodingFilter<filter><filter-name>CharacterEncodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>utf-8</param-value></init-param></filter><filter-mapping><filter-name>CharacterEncodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping> 亂碼處理 亂碼處理使用時放上面代碼放在web.xml前端控制器配置文件后面即可。
10、MVC 的 Handler 方法可以接受哪些 ServletAPI 類型的參數(shù)
?? ??? ?HttpServletRequest
?? ??? ?HttpServletResponse
?? ??? ?HttpSession
如何從controller(類)中獲取原生的servletAPI?
??? 1、?? ?HttpServletRequest request;
?? ?可用request獲取參數(shù)request.getParameter("username");
?? ? 要使用表單springMVC的@RequestMapping(value="/page")注解中要添加方法設置(value="/page",method=RequestMethod.POST)?
?3、HttpSession session
//多次會話、多次請求之間的共享數(shù)據(jù),可放入session中,如用戶數(shù)據(jù)(避免重復登陸驗證)
11、使用 @CookieValue 綁定請求中的 Cookie 值
??? @CookieValue 可讓處理方法入?yún)⒔壎硞€ Cookie 值
12.@ModelAttribute[使用場景]
??? 在方法定義上使用 @ModelAttribute 注解:Spring MVC在調(diào)用目標處理方法前,會先逐個調(diào)用在方法級上標注了@ModelAttribute 的方法。
??? 在方法的入?yún)⑶笆褂?@ModelAttribute 注解:
?? ??? ?–?? ?可以從隱含對象中獲取隱含的模型數(shù)據(jù)中獲取對象,再將請求參數(shù)綁定到對象中,再傳入入?yún)?br />?? ??? ?–?? ?將方法入?yún)ο筇砑拥侥P椭?/p>
(即方法入?yún)俗⒃撟⒔夂? 入?yún)⒌膶ο?就會放到數(shù)據(jù)模型中)
起因:更新如學生信息,想只更新一部分,但更新時出現(xiàn)僅更新了表單傳入的參數(shù)內(nèi)容,其余部分都變?yōu)榱俗畛踉O置的默認值,如null,信息丟失。方案:使用@ModelAttribute解決,利用注解將要修改的內(nèi)容記錄放入request域中(借助Map)request域中有內(nèi)容,修改內(nèi)容,然后顯示修改后內(nèi)容(表單中有哪些內(nèi)容便修改哪些內(nèi)容,其他原本數(shù)據(jù)不做修改);若無則會自動生成一空串,修改空串內(nèi)容,然后顯示出來(表單中有哪些內(nèi)容便修改哪些內(nèi)容,其他原本數(shù)據(jù)變?yōu)樽畛跄J值)。 @ModelAttribute public void getStudent(Map<String, Object> map) {Student stu = new Student("lisi","lisi@163.com",1);map.put("student",stu);//也可用request.setAtrribut("student",stu); }@RequestMapping(value="/updateStudent",method=RequestMethod.POST)public String updateStudent(Student stu) { System.out.println(stu);return "success";}//方法的()內(nèi)默認有@ModelAttribute("類名的首字母小寫")如@ModelAttribute("student") @ModelAttribute被本類所有方法公用@ModelAttribute使用示例13.@SessionAttributes
若希望在多個請求之間共用某個模型屬性數(shù)據(jù),則可以在控制器類上標注一個 @SessionAttributes, SpringMVC將在模型中對應的屬性暫存到 HttpSession 中。
@SessionAttributes 既可以通過屬性名指定需要放到會話中的屬性外, 還可以通過模型屬性的對象類型指定哪些 模型屬性需要放到會話中
方法一:通過鍵來找:其value值與request域中的鍵值相同,則將request域中的內(nèi)容放入Session域中一份(@SessionAttributes(value={"student"}))
?? ?????? 方法二:通過值的類的自解碼來查找,若相同則將request域中的內(nèi)容放入Session域中一份(@SessionAttributes(types={Student.class}))
?? ?? 不過,這種較復雜,容易出問題,可采用原生servletAPI的方法來操作(HttpSession session)(session.setAtrribut("student",stu);)
???
?? ?–@SessionAttributes(types=User.class) 會將隱含模型中所有類型為 User.class 的屬性添加到會話中。
?? ?–@SessionAttributes(value={“user1”, “user2”})
?? ?–@SessionAttributes(types={User.class, Dept.class})
?? ?–@SessionAttributes(value={“user1”, “user2”}, types={Dept.class})
14.使用 POJO 對象綁定請求參數(shù)值
??? Spring MVC 會按請求參數(shù)名和 POJO 屬性名進行自動匹 配,自動為該對象填充屬性值。支持級聯(lián)屬性。 如:dept.deptId、dept.address.tel 等
SpringMVC確定目標方法POJO類型入?yún)⒌倪^程:
?? ? 1.確定一個key:
?? ??? ? 1).若目標方法的POJO類型的參數(shù)木有使用@ModelAttribute作為修飾,則key為POJO類名第一個字母的小寫。
?? ??? ?2).若使用@ModelAttribute修飾,則key為@ModelAttribute注解的value屬性值.
?? ??? ?
?? ? 2.在implicitModel中查找key對應的對象,若存在,則作為入?yún)魅搿?br />?? ???? 1).若在@ModelAttribute標記的方法中在Map保存過,且key和1確定的key一致,則會獲取到!
?? ? 3.在implicitModel中不存在key對應的對象,則檢查當前的Handler是否使用@SessionAttribute注解修飾,若使用了該主機,且@SessionAttributes注解的value屬性值中包含了key,則會從HttpSession中來獲取key所對應的value值,若存在則直接傳入到目標方法的入?yún)⒅?#xff0c;若不存在則將拋出異常。
?? ? 4.若Handler沒有標識@SessionAttributes注解或者@SessionAttributes注解的value值中不包含key,則會通過反射來創(chuàng)建POJO類型的參數(shù),傳入為目標方法的參數(shù)。
?? ?
?? ?5.SpringMVC會把key和POJO對象保存到implicitModel中,進而會保存到request域中!
注意:1.@ModelAttribute標記的方法,會在每個目標方法執(zhí)行之前被SpringMVC調(diào)用!
????? 2.@ModelAttribute注解可以來修飾目標方法POJO類型的入?yún)?#xff0c;其value屬性值有如下作用:
?? ???? 1).SpringMVC會使用value屬性值在implicitModel中查找對應的對象,若存在則會直接傳入到目標方法的入?yún)⒅?br />?? ??? ? 2)SpringMVC會以value為key,POJO類型的對象為value,存入到request域中。
15.處理模型數(shù)據(jù)
?? ?Spring MVC 提供了以下幾種途徑輸出模型數(shù)據(jù):
?? ?–ModelAndView: 處理方法返回值類型為 ModelAndView時, 方法體即可通過該對象添加模型數(shù)據(jù)(一般添加到域?qū)ο笾?#xff08;request、session等))
?? ?–Map 及 Model、ModelMap: 入?yún)?org.springframework.ui.Model、org.springframework.ui. ModelMap 或 java.uti.Map 時,處理
?? ??? ?方法返回時,Map 中的數(shù)據(jù)會自動添加到模型中。
?? –ModelAndView常作為返回值使用,Map、Model、ModelMap常作為參數(shù)使用
?? ?無論我們的返回值是String類型還是ModelAndView類型,SpringMVC框架執(zhí)行目標Handler方法之后都會將返回值解析為ModelAndView;
(返回值類型一般不是String類型便是ModelAndView類型)
?? ?我們放入到Map或者Model、ModelMap中的數(shù)據(jù)都會放入ModelAndView對象中,作為MOdel使用!
?? ?Map或者Model、ModelMap對象的鍵值對結(jié)構,均放在request域中
16、ModelAndView
?? ?控制器處理方法的返回值如果為 ModelAndView, 則其既 包含視圖信息,也包含模型數(shù)據(jù)信息。
?? ???? 添加模型數(shù)據(jù):
?? ??? ?–MoelAndView addObject(String attributeName, Object attributeValue)
?? ??? ?–ModelAndView addAllObject(Map<String, ?> modelMap)
?? ???? 設置視圖:
?? ??? ?–void setView(View view)
?? ??? ?–void setViewName(String viewName)
類似方法:
1、@RequestMapping(value="/testModelAndView")
public String testModelAndView(HttpServletRequest request) {
request.setAttribute("user", "zhangsan");
return "success";//通過String方法將邏輯視圖轉(zhuǎn)換為物理視圖
}
2、@RequestMapping(value="/testModelAndView")
public String testModelAndView(Map<String, Object> map) {
map.put("user", new Student("張三","163.com",1));
return "success";
}
ModelAndView其它相似用法
17.Model AND? MAP
??? Spring MVC 在內(nèi)部使用了一個 org.springframework.ui.Model 接口存 儲模型數(shù)據(jù)
?? ???? 具體步驟
?? ?–?? ?Spring MVC 在調(diào)用方法前會創(chuàng)建一個隱 含的模型對象作為模型數(shù)據(jù)的存儲容器。
?? ?–?? ?如果方法的入?yún)?Map 或 Model 類 型,Spring MVC 會將隱含模型的引用傳 遞給這些入?yún)ⅰT诜椒w內(nèi),開發(fā)
?? ??? ?者可以通過這個入?yún)ο笤L問到模型中的所有數(shù) 據(jù),也可以向模型中添加新的屬性數(shù)據(jù)???
18.關于重定向
?? ?一般情況下,控制器方法返回字符串類型的值會被當成邏輯視圖名處理
?? ?如果返回的字符串中帶 forward: 或 redirect: 前綴 時,SpringMVC 會對他們進行特殊處理:將 forward: 和 redirect: 當成指示符,其后的字符串作為 URL 來處理
?? ??? ?–redirect:/success.jsp:會完成一個到 success.jsp 的重定向的操作
?? ??? ?–forward:/success.jsp:會完成一個到 success.jsp 的轉(zhuǎn)發(fā)操作? ? ?
?可以在spingmvc配置文件中配置 ??? <mvc:view-controller path="/hello" view-name="hello"/>標簽,就可以讓我們的請求不經(jīng)過Controller,直接進入另一個目標頁面(不能用數(shù)字開頭)!
?? ??? ?<!-- 但是此時原來訪問正常的@RequestMapping URL現(xiàn)在卻不能正常訪問了,如果想正常訪問,需要加入<mvc:annotation-driven>該標簽-->
?? ??? ?<mvc:annotation-driven></mvc:annotation-driven>
19..EmployeeCRUD:
?? SpringMVC處理靜態(tài)資源【導入js文件】:
???? 1.為什么出現(xiàn)這樣的問題:
?? ? 優(yōu)雅的REST風格的資源URL不希望帶.html或.do等后綴,若將DispatcherServlet請求映射配置為/,
?? ? 則SpringMVC將捕獲WEB容器的所有請求,包括靜態(tài)資源的請求,SpringMVC會將他們當成一個普通請求處理,因此找不到對應處理器將導致錯誤。?
?? ? 2.解決:在SpringMVC的配置文件中配置<mvc:default-servlet-handler>
?? ? ???
20.使用 Spring 的表單標簽
?? ?通過 SpringMVC 的表單標簽可以實現(xiàn)將模型數(shù)據(jù) 中的屬性和 HTML 表單元素相綁定,以實現(xiàn)表單數(shù)據(jù)更便捷編輯和表單值的回顯。
?? ?
?? ?一般情況下,通過 GET 請求獲取表單頁面,而通過 POST 請求提交表單頁面,因此獲取表單頁面和提交表單 頁面的 URL 是相同的。只要滿足該最佳條件的契 約,<form:form> 標簽就無需通過 action 屬性指定表單提交的 URL
?? ?可以通過 modelAttribute 屬性指定綁定的模型屬性,若沒有指定該屬性,則默認從 request 域?qū)ο笾凶x取 command 的表單 bean,如果該屬性值也不存在,則會發(fā)生錯誤
?? ?????
?? ?SpringMVC 提供了多個表單組件標簽,如<form:input/>、<form:select/> 等,用以綁定表單字段的屬性值,它們的共有屬性如下:
?? ??? ?– path:表單字段,對應 html 元素的 name 屬性,支持級聯(lián)屬性
??? form:input、form:password、form:hidden、form:textarea:對應 HTML 表單的 text、password、hidden、textarea標簽
??? form:radiobutton:單選框組件標簽,當表單 bean 對應的 屬性值和 value 值相等時,單選框被選中
??? form:radiobuttons:單選框組標簽,用于構造多個單選框
?? ??? ?–items:可以是一個 List、String[] 或 Map
?? ??? ?–itemValue:指定 radio 的 value 值。可以是集合中 bean 的一個 屬性值
?? ??? ?–itemLabel:指定 radio 的 label 值
?? ??? ?–delimiter:多個單選框可以通過 delimiter 指定分隔符
?? ??? ?
?? ?表單標簽
?? ???????? form:checkbox:復選框組件。用于構造單個復選框
?? ??? ???? form:checkboxs:用于構造多個復選框。使用方式同 form:radiobuttons 標簽
?? ??? ???? form:select:用于構造下拉框組件。使用方式同 form:radiobuttons 標簽
?? ??? ???? form:option:下拉框選項組件標簽。使用方式同 form:radiobuttons 標簽
?? ??? ???? form:errors:顯示表單組件或數(shù)據(jù)校驗所對應的錯誤
?? ??? ?–?? ?<form:errors path= “ *” /> :顯示表單所有的錯誤
?? ??? ?–<form:errors path= “ user*” /> :顯示所有以 user 為前綴的屬性對應的錯誤
?? ??? ?–<form:errors path= “ username” /> :顯示特定表單對象屬性的錯誤?? ?
?? ??? ??? ?????
?? ?當需要表單回顯或者使用下拉列表的時候,就使用form表單標簽,而如果使用遍歷的標簽就使用JSTL標簽【導包】!
?? ????
21.視圖和視圖解析器【參見Springmvc如何解析視圖流程圖片】
??? 請求處理方法執(zhí)行完成后,最終返回一個 ModelAndView 對象。對于那些返回 String,View 或 ModeMap 等類型的處理方法,SpringMVC 也會在內(nèi)部將它們裝配成一個 ModelAndView 對象,它包含了邏輯名和模型對象的視圖
??? SpringMVC 借助視圖解析器(ViewResolver)得到最終 的視圖對象(View),最終的視圖可以是 JSP ,也可能是 Excel、JFreeChart等各種表現(xiàn)形式的視圖
?? ?
?? ?視圖
?? ??? ???? 視圖的作用是渲染模型數(shù)據(jù),將模型里的數(shù)據(jù)以某種形式呈現(xiàn)給客戶。
?? ??? ???? 為了實現(xiàn)視圖模型和具體實現(xiàn)技術的解耦,Spring 在 org.springframework.web.servlet 包中定義了一個高度抽象的 View
?? ??? ??? 視圖對象由視圖解析器負責實例化。由于視圖是無狀態(tài)的,所以他們不會有線程安全的問題。?? ??? ?
?? ?
自定義視圖:
?? ?1.自定義視圖,實現(xiàn)view接口或者繼承AbstractView抽象類,并加入到IOC容器中。
?2.在springmvc配置文件中配置BeanNameViewResolver視圖解析器。? ??
<!-- 通過BeanNameViewResolver視圖解析器:使用視圖的名字來解析視圖 --> 2 <bean class="org.springframework.web.servlet.view.BeanNameViewResolver"> 3 <property name="order" value="100"></property> 4 </bean>?3.注意:每個視圖解析器都實現(xiàn)了 Ordered 接口并開放出一個 order 屬性,可以通過 order 屬性指定解析器的優(yōu)先順序,order越小優(yōu)先級越高。
SpringMVC 會按視圖解析器順序的優(yōu)先順序?qū)壿嬕晥D名進行解析,直到解析成功并返回視圖對象,否則將拋出 ServletException 異常???
?? ?
22.數(shù)據(jù)類型轉(zhuǎn)換以及數(shù)據(jù)格式化標簽:
?? 數(shù)據(jù)類型轉(zhuǎn)換【了解】
?? ?? 1. 自定義類型轉(zhuǎn)換器實現(xiàn)Converter<S,T>接口并加入到SpringMVC的IOC容器中,
? 2.配置自定義轉(zhuǎn)換器到FormattingConversionServiceFactoryBean工廠中!? ? ??
<!-- 將ConversionService再作為annotation-driven的一個屬性存在! --><mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven><!-- 配置ConversionService --><bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean"><property name="converters"><set><ref bean="employeeConverter"/></set></property></bean>數(shù)據(jù)類型轉(zhuǎn)換所需配置文件 數(shù)據(jù)類型轉(zhuǎn)換所需配置文件23.文件上傳和文件下載:
?? ?文件上傳? ? ?
? ? ?文件下載:????
@RequestMapping(value="testResponseEntity")public ResponseEntity<byte[]> testResponseEntity(HttpServletRequest request) throws Exception{byte[] body = null;ServletContext servletContext = request.getServletContext();String fileName = "風吹麥浪.mp3";String path = servletContext.getRealPath("/WEB-INF/"+fileName);File file = new File(path);InputStream in = new FileInputStream(file);body = new byte[in.available()];in.read(body);HttpHeaders headers = new HttpHeaders();fileName = new String(fileName.getBytes("gbk"),"iso8859-1");headers.add("Content-Disposition", "attachment;filename="+fileName);HttpStatus statusCode=HttpStatus.OK;ResponseEntity<byte[]> response = new ResponseEntity<byte[]>(body, headers, statusCode);return response;} springmvc文件下載 springmvc文件下載原文出處:http://www.cnblogs.com/kangxingyue-210/p/7406653.html
轉(zhuǎn)載于:https://www.cnblogs.com/oy0411/p/10837199.html
總結(jié)
以上是生活随笔為你收集整理的SpringMVC基础配置及使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 有用的知识点整理
- 下一篇: Laravel中一些要记住 的写法