日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

SpringMVC基础配置及使用

發布時間:2025/3/21 javascript 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SpringMVC基础配置及使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

SpringMVC基礎配置及使用

SpringMVC:
1.SpringMVC和Spring的關系:
?? ?軟件開發的三層架構: web層【表示層、表現層】---->Service層---->Dao[DataBase Access Object]---->數據庫!
?? ?SpringMVC實際上是Spring的一個子模塊,我們用SpringMVC來代替這個JavaWEB部分!
?? ?MVC:也是一種設計模式:M:Model【模型】-->V[View]--->C[Controller]!
?? ??? ???? Model用來封裝數據的,View:用來顯示數據? Controller:用于接收前端頁面發送的請求,然后調用Service層處理,拿到處理結果,將該結果返回給前端頁面!
?? ??? ??? ??? ??? ??? ? ?
?? ?SpringMVC:相當于MVC架構中的C以及V!
?? ?
2.SpringMVC有什么優勢?
?? ?Spring 為展現層提供的基于 MVC 設計理念的優秀的Web 框架,是目前最主流的 MVC 框架之一。
?? ?
?? ?Spring3.0 后全面超越 Struts2,成為最優秀的 MVC 框架。
?? ?
?? ?Spring MVC 通過一套 MVC 注解,讓 POJO 成為處理請求的控制器,而無須實現任何接口。
?? ?
?? ?支持 REST 風格的 URL 請求(包含以下操作)。
?? ??? ?GET POST PUT DELTE
?? ?
?? ?采用了松散耦合可插拔組件結構,比其他 MVC 框架更具擴展性和靈活性.
?? ?
?? ?目前主流的開發軟件,說白了,大家都在用!
?? ?
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】??

<!-- The front controller of this Spring Web application, responsible for handling all application requests --><!--向服務器注冊前端控制器! --><servlet><servlet-name>springDispatcherServlet</servlet-name><!--DispatcherServlet指的是SpringMVC的前端控制器!,給服務器使用,創建servlet對象! --><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!-- 初始化參數contextConfigLocation用于指定SpringMVC配置文件的路徑以及名稱 --><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:springmvc.xml</param-value></init-param><!-- 數字0或者大于0的數字表示的是:在服務器啟動的時候創建Servlet對象,而不是第一次訪問的時候創建小于0的數字指的是:在第一次訪問的時候創建Servlet對象.在數字大于O的情況下,數字越小,優先級越高!--><load-on-startup>1</load-on-startup></servlet><!-- Map all requests to the DispatcherServlet for handling --><!-- 用 servlet-mapping指定請求映射的路徑--><servlet-mapping><servlet-name>springDispatcherServlet</servlet-name><!-- 用url-pattern指定攔截 的請求路徑! --><url-pattern>/</url-pattern></servlet-mapping>web.xml配置 web.xml配置

?3).創建SpringMVC的配置文件并添加要掃描的包
?? ??? ?注意:1.創建SpringMVC配置文件的名字要和上面在web.xml文件中指定的名字一致!
?? ??? ????? 2.我們創建SpringMVC配置文件的時候使用的是Spring Bean Configuration File創建的,不是XML!
?? ??? ??? ??
?? ??? ?<!-- 配置SpingMVC容器要掃描的包! -->??

<context:component-scan base-package="com.neuedu.controller"></context:component-scan>

? 4).在springMVC掃描的包下創建控制器類[Controller/Handler],注意要加入@Controller注解? ??

/*** 我們通過@RequestMapping做請求URL的映射!* @return*/@RequestMapping("/sayHello")public String sayHello(){return "/WEB-INF/views/success.jsp";}

? 注意:在類的方法上我們使用的是@RequestMapping,然后在括號里指定請求url的請求路徑!
?????
?? ?5).創建頁面!
?注意:1.當我們不用init-param指定springMVC配置文件的路徑好位置的時候,SpringMVC默認會去
?? ??? ??? ?/WEB-INF/<servlet-name>-servlet.xml
?? ??? ??
?? ??? ??? 2.配置視圖解析器(在springmvc.xml 中)??

<!--InternalResourceViewResolvers 是視圖解析器 ,它會將邏輯視圖轉換成實際的物理視圖,做一個轉發操作!也就是說具體步驟:prefix + 方法的返回值 + suffix--><!--return "/WEB-INF/views/success.jsp";將變為 return "success";--><!--此處為復制其全類Ctrl+Shift+T查找InternalResourceViewResolver--><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/views/"></property><property name="suffix" value=".jsp"></property></bean> View Code

3.請求一個SpringMVC的流程!
?? ??? ?
5.使用 @RequestMapping 映射請求
?? ?Spring MVC 使用 @RequestMapping 注解為控制器指定可以處理哪些 URL 請求
?? ?在控制器的類定義及方法定義處都可標注
?? ?
?? ?@RequestMapping
?? ?–?? ?類定義處:提供初步的請求映射信息。相當于當前 WEB 應用的根目錄
?? ?–?? ?方法處:提供進一步的細分映射信息。相對于類定義處的 URL。
?? ??? ??? ??? ?若 類定義處未標注 @RequestMapping,則方法處標記的 URL 相當于當前 WEB 應用的根目錄
?? ??? ??? ??? ?若 類定義處標注 @RequestMapping,則方法處標記的 URL 相對于類定義處的@RequestMapping而言的!
?? ??? ??? ??? ????? ??? ?????
?? ?DispatcherServlet 截獲請求后,就通過控制器上@RequestMapping 提供的映射信息確定請求所對應的處理方法。
?? ?
?? ?映射請求參數、請求方法或請求頭
?? ??? ?@RequestMapping 除了可以使用請求 URL 映射請求外,還可以使用請求方法、請求參數及請求頭映射請求
?? ??? ?@RequestMapping 的 value、method、params 及 heads 分別表示請求URL、請求方法、請求參數及請求頭的映射條件,他們之間是與的關系,聯合使用多個條件可讓請求映射更加精確化。
?? ??? ?
?? ??? ?params 和 headers支持簡單的表達式:
?? ??? ?–?? ?param1: 表示請求必須包含名為 param1 的請求參數
?? ??? ?–?? ?!param1: 表示請求不能包含名為 param1 的請求參數
?? ??? ?–?? ?param1 != value1: 表示請求包含名為 param1 的請求參數,但其值不能為 value1
?? ??? ?–{“param1=value1”, “param2”}: 請求必須包含名為 param1 和param2 的兩個請求參數,且 param1 參數的值必須為 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 目標挺進發展過程中具有里程碑的意義
?? ??? ?通過 @PathVariable 可以將 URL 中占位符參數綁定到控制器處理方法的入參中:URL 中的 {xxx} 占位符可以通過
?? ??? ?? @PathVariable("xxx") 綁定到操作方法的入參中,需要注意的是:該注解的value屬性值要與占位符保持一致。? ?

例:@RequestMapping(value="/testAnt/{id}") 2 public String testAnt(@PathVariable(value="id") Integer id) { 3 return "success"; 4 }

?若無(value="id"),則占位符{id}與后面的Integer id中id的類型保持一致,即應為Integer。
?? ?@PathVariable(value="id") Integer id//此處涉及一個強制類型轉換,value中為string型
?? ?
6.REST:即 Representational State Transfer。(資源)表現層狀態轉化。是目前最流行的一種互聯網軟件架構。
?? ??? ?它結構清晰、符合標準、易于理解、擴展方便, 所以正得到越來越多網站的采用.
?? ??? ?他較為簡潔優雅,盡量不使用后綴如配置時不使用*.action,而直接用/
?? ??? ? HTTP 協議里面,四個表示操作方式的動詞:GET、POST、PUT、DELETE。
?? ??? ? 它們分別對應四種基本操作:
?? ??? ??? ? GET 用來獲取資源,(使用時方法默認為GET)
?? ??? ??? ? POST 用來新建資源,(GET、POST使用較多)
?? ??? ??? ? PUT 用來更新資源,
?? ??? ??? ? DELETE 用來刪除資源。
?? ??? ??? ??
?? ??? ?示例:(唯有GET方法可用超鏈接,其他方法需用POST方法轉化)(寫在路徑中)
?? ??? ??? ?–/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? 添加了一個過濾器,可以將這些請求轉換 為標準的 http 方法,使得支持 GET、POST、PUT 與 DELETE 請求。?

<a href="${pageContext.request.contextPath}/sayHello">測試GET方法 !</a>

?POST請求如何轉化為put請求和delele請求?
?? ??? ? 1.在web.xml文件中配置:? ??

<!-- HiddenHttpMethodFilter過濾器可以將POST請求轉化為put請求和delete請求! --><filter><filter-name>hiddenHttpMethodFilter</filter-name><filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class></filter><filter-mapping><filter-name>hiddenHttpMethodFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>

?2.在表單域中需要攜帶一個name值為_method,value值為put或者delete的參數,如下所示:

<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"/><%@方法轉換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可以接收請求的參數,相當于Servlet的getParameter()方法!
?? ?注意:要把@RequestParam和@PathVariable區分開:?? ?
?? ?@RequestParam將請求參數中的值傳給請求方法
?? ?@PathVariable將請求路徑中的值傳給請求方法
?? ?三個默認屬性:(屬性間,隔開)
?? ? value:這個字段要與請求參數的name屬性值一致!
?? ? required:布爾值,默認是true,表示請求參數中必須包含對應 的參數,若不存在,將拋出異常當指定為false的時候,說明這個參數不是必須的,可以不帶!
?? ? defaultValue:在我們不傳值的時候,默認使用defaultValue的值,傳遞參數的時候,使用我們傳遞的參數值!?

例:@RequestMapping(value="/testRequestParam") 2 public String testRequestParam(@RequestParam(value="username",required=true) String name,@RequestParam(value="pwd",required=false,defaultValue="12345") String pwd) { 3 System.out.println("獲取username的值為:"+name); 4 return SCUESS; 5 }

8.@RequestHeader:獲取請求頭信息,服務器可據此獲知客戶端的信 息,默認屬性:
?? ??? ?value:這個字段要與請求參數的name屬性值一致!
?? ???? required:布爾值,默認是true,當指定為false的時候,說明這個參數不是必須的,可以不帶!
?? ???? defaultValue:在我們不傳值的時候,默認使用defaultValue的值,傳遞參數的時候,使用我們傳遞的參數值!

例:@RequestMapping(value="/testRequestParam") 2 public String testRequestParam(@RequestHeader(value="Accept-Encoding") String headers) { 3 System.out.println("獲取username的值為:"+headers); 4 return SCUESS; 5 }//value中值可通過在瀏覽器中查看元素(網絡)查找

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 類型的參數
?? ??? ?HttpServletRequest
?? ??? ?HttpServletResponse
?? ??? ?HttpSession

  如何從controller(類)中獲取原生的servletAPI?
 ??? 1、?? ?HttpServletRequest request;
??   ?可用request獲取參數request.getParameter("username");
?? ?  要使用表單springMVC的@RequestMapping(value="/page")注解中要添加方法設置(value="/page",method=RequestMethod.POST)?  

@RequestMapping(value="/page",method=RequestMethod.POST) 2 public String page(HttpServletRequest request) { 3 String parameter = request.getParameter("username"); 4 System.out.println(parameter); 5 return "success"; 6 }

?3、HttpSession session

  //多次會話、多次請求之間的共享數據,可放入session中,如用戶數據(避免重復登陸驗證)

11、使用 @CookieValue 綁定請求中的 Cookie 值
??? @CookieValue 可讓處理方法入參綁定某個 Cookie 值

@RequestMapping(value="/page",method=RequestMethod.POST) 2 public String page(@CookieValue(value="JESSIONID") String sessionIds) { 3 System.out.println(sessionIds); 4 return "success"; 5 }

12.@ModelAttribute[使用場景]
??? 在方法定義上使用 @ModelAttribute 注解:Spring MVC在調用目標處理方法前,會先逐個調用在方法級上標注了@ModelAttribute 的方法。
??? 在方法的入參前使用 @ModelAttribute 注解:
?? ??? ?–?? ?可以從隱含對象中獲取隱含的模型數據中獲取對象,再將請求參數綁定到對象中,再傳入入參
?? ??? ?–?? ?將方法入參對象添加到模型中

  (即方法入參標注該注解后, 入參的對象 就會放到數據模型中)

起因:更新如學生信息,想只更新一部分,但更新時出現僅更新了表單傳入的參數內容,其余部分都變為了最初設置的默認值,如null,信息丟失。方案:使用@ModelAttribute解決,利用注解將要修改的內容記錄放入request域中(借助Map)request域中有內容,修改內容,然后顯示修改后內容(表單中有哪些內容便修改哪些內容,其他原本數據不做修改);若無則會自動生成一空串,修改空串內容,然后顯示出來(表單中有哪些內容便修改哪些內容,其他原本數據變為最初默認值)。 @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";}//方法的()內默認有@ModelAttribute("類名的首字母小寫")如@ModelAttribute("student") @ModelAttribute被本類所有方法公用@ModelAttribute使用示例

13.@SessionAttributes

若希望在多個請求之間共用某個模型屬性數據,則可以在控制器類上標注一個 @SessionAttributes, SpringMVC將在模型中對應的屬性暫存到 HttpSession 中。 

  @SessionAttributes 既可以通過屬性名指定需要放到會話中的屬性外, 還可以通過模型屬性的對象類型指定哪些 模型屬性需要放到會話中 

   方法一:通過鍵來找:其value值與request域中的鍵值相同,則將request域中的內容放入Session域中一份(@SessionAttributes(value={"student"}))
?? ?????? 方法二:通過值的類的自解碼來查找,若相同則將request域中的內容放入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 對象綁定請求參數值
??? Spring MVC 會按請求參數名和 POJO 屬性名進行自動匹 配,自動為該對象填充屬性值。支持級聯屬性。 如:dept.deptId、dept.address.tel 等  

POJO對象作為入參創建一個Student對象:public class Student {private String name;private String email;private int gender;......}@RequestMapping(value="/page",method=RequestMethod.POST)public String page(Student student) {System.out.println(student);return "success";}<form action="page" method="post">用戶名:<input type="text" name="name"><br><!-- name屬性值與Student對象對應 -->email:<input type="text" name="email"><br>gender:<input type="text" name="gender"><br><input type="submit" value="Submit"></form>使用POJO對象作為入參

SpringMVC確定目標方法POJO類型入參的過程:
?? ?  1.確定一個key:
?? ??? ?  1).若目標方法的POJO類型的參數木有使用@ModelAttribute作為修飾,則key為POJO類名第一個字母的小寫。
?? ???   ?2).若使用@ModelAttribute修飾,則key為@ModelAttribute注解的value屬性值.
?? ??? ?
?? ?  2.在implicitModel中查找key對應的對象,若存在,則作為入參傳入。
?? ????   1).若在@ModelAttribute標記的方法中在Map保存過,且key和1確定的key一致,則會獲取到!
?? ?  3.在implicitModel中不存在key對應的對象,則檢查當前的Handler是否使用@SessionAttribute注解修飾,若使用了該主機,且@SessionAttributes注解的value屬性值中包含了key,則會從HttpSession中來獲取key所對應的value值,若存在則直接傳入到目標方法的入參中,若不存在則將拋出異常。
?? ?  4.若Handler沒有標識@SessionAttributes注解或者@SessionAttributes注解的value值中不包含key,則會通過反射來創建POJO類型的參數,傳入為目標方法的參數。
?? ?
??   ?5.SpringMVC會把key和POJO對象保存到implicitModel中,進而會保存到request域中!

  注意:1.@ModelAttribute標記的方法,會在每個目標方法執行之前被SpringMVC調用!
?????     2.@ModelAttribute注解可以來修飾目標方法POJO類型的入參,其value屬性值有如下作用:
?? ????     1).SpringMVC會使用value屬性值在implicitModel中查找對應的對象,若存在則會直接傳入到目標方法的入參中
?? ??? ?    2)SpringMVC會以value為key,POJO類型的對象為value,存入到request域中。

15.處理模型數據
?? ?Spring MVC 提供了以下幾種途徑輸出模型數據:
?? ?–ModelAndView: 處理方法返回值類型為 ModelAndView時, 方法體即可通過該對象添加模型數據(一般添加到域對象中(request、session等))
?? ?–Map 及 Model、ModelMap: 入參為 org.springframework.ui.Model、org.springframework.ui. ModelMap 或 java.uti.Map 時,處理
?? ??? ?方法返回時,Map 中的數據會自動添加到模型中。
?? –ModelAndView常作為返回值使用,Map、Model、ModelMap常作為參數使用


?? ?無論我們的返回值是String類型還是ModelAndView類型,SpringMVC框架執行目標Handler方法之后都會將返回值解析為ModelAndView;

 (返回值類型一般不是String類型便是ModelAndView類型)
?? ?我們放入到Map或者Model、ModelMap中的數據都會放入ModelAndView對象中,作為MOdel使用!
?? ?Map或者Model、ModelMap對象的鍵值對結構,均放在request域中

16、ModelAndView
?? ?控制器處理方法的返回值如果為 ModelAndView, 則其既 包含視圖信息,也包含模型數據信息。
?? ???? 添加模型數據:
?? ??? ?–MoelAndView addObject(String attributeName, Object attributeValue)
?? ??? ?–ModelAndView addAllObject(Map<String, ?> modelMap)
?? ???? 設置視圖:
?? ??? ?–void setView(View view)
?? ??? ?–void setViewName(String viewName)

<a href="/testModelAndView">測試ModelAndView!</a>@RequestMapping(value="/testModelAndView")public ModelAndView testModelAndView() {ModelAndView mv=new ModelAndView();mv.setViewName("succsee");;//邏輯視圖,設置一個視圖名//將邏輯視圖轉換為物理視圖,ModelAndView拿到視圖名succsee后,通過視圖解析器轉換到物理視圖(success.jsp頁面)mv.addObject("user", "zhangsan");//添加屬性return mv;}ModelAndView使用示例

類似方法:

1、@RequestMapping(value="/testModelAndView")
public String testModelAndView(HttpServletRequest request) {
request.setAttribute("user", "zhangsan");
return "success";//通過String方法將邏輯視圖轉換為物理視圖
}

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 在內部使用了一個 org.springframework.ui.Model 接口存 儲模型數據
?? ???? 具體步驟
?? ?–?? ?Spring MVC 在調用方法前會創建一個隱 含的模型對象作為模型數據的存儲容器。
?? ?–?? ?如果方法的入參為 Map 或 Model 類 型,Spring MVC 會將隱含模型的引用傳 遞給這些入參。在方法體內,開發
?? ??? ?者可以通過這個入參對象訪問到模型中的所有數 據,也可以向模型中添加新的屬性數據???

18.關于重定向
?? ?一般情況下,控制器方法返回字符串類型的值會被當成邏輯視圖名處理
?? ?如果返回的字符串中帶 forward: 或 redirect: 前綴 時,SpringMVC 會對他們進行特殊處理:將 forward: 和 redirect: 當成指示符,其后的字符串作為 URL 來處理
?? ??? ?–redirect:/success.jsp:會完成一個到 success.jsp 的重定向的操作
?? ??? ?–forward:/success.jsp:會完成一個到 success.jsp 的轉發操作? ? ?

@RequestMapping(value="/testRedirect") 2 public String testRedirect() { 3 return "redirect:/1.jsp";//以redirect為前綴直接重定向,后面跟目標頁面或目標接口 4 // return "forward:/page";//以forward為前綴轉發(轉發為get請求) 5 }

?可以在spingmvc配置文件中配置 ??? <mvc:view-controller path="/hello" view-name="hello"/>標簽,就可以讓我們的請求不經過Controller,直接進入另一個目標頁面(不能用數字開頭)!
?? ??? ?<!-- 但是此時原來訪問正常的@RequestMapping URL現在卻不能正常訪問了,如果想正常訪問,需要加入<mvc:annotation-driven>該標簽-->
?? ??? ?<mvc:annotation-driven></mvc:annotation-driven>

<mvc:view-controller path="/hello" view-name="hello"></mvc:view-controller>path="/hello" 就是你訪問的路徑(相當于RequestMapping("/hello"))view-name="hello"是你所要的視圖(如hello.jsp,相當于return "hello")對應如下:@RequestMapping(value="/hello")public String hello(){System.out.println("hello");return "hello";} View Code

19..EmployeeCRUD:
?? SpringMVC處理靜態資源【導入js文件】:
???? 1.為什么出現這樣的問題:
?? ? 優雅的REST風格的資源URL不希望帶.html或.do等后綴,若將DispatcherServlet請求映射配置為/,
?? ? 則SpringMVC將捕獲WEB容器的所有請求,包括靜態資源的請求,SpringMVC會將他們當成一個普通請求處理,因此找不到對應處理器將導致錯誤。?
?? ? 2.解決:在SpringMVC的配置文件中配置<mvc:default-servlet-handler>
?? ? ???
20.使用 Spring 的表單標簽
?? ?通過 SpringMVC 的表單標簽可以實現將模型數據 中的屬性和 HTML 表單元素相綁定,以實現表單數據更便捷編輯和表單值的回顯。
?? ?
?? ?一般情況下,通過 GET 請求獲取表單頁面,而通過 POST 請求提交表單頁面,因此獲取表單頁面和提交表單 頁面的 URL 是相同的。只要滿足該最佳條件的契 約,<form:form> 標簽就無需通過 action 屬性指定表單提交的 URL

?? ?可以通過 modelAttribute 屬性指定綁定的模型屬性,若沒有指定該屬性,則默認從 request 域對象中讀取 command 的表單 bean,如果該屬性值也不存在,則會發生錯誤
?? ?????
?? ?SpringMVC 提供了多個表單組件標簽,如<form:input/>、<form:select/> 等,用以綁定表單字段的屬性值,它們的共有屬性如下:
?? ??? ?– path:表單字段,對應 html 元素的 name 屬性,支持級聯屬性
??? 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:顯示表單組件或數據校驗所對應的錯誤
?? ??? ?–?? ?<form:errors path= “ *” /> :顯示表單所有的錯誤
?? ??? ?–<form:errors path= “ user*” /> :顯示所有以 user 為前綴的屬性對應的錯誤
?? ??? ?–<form:errors path= “ username” /> :顯示特定表單對象屬性的錯誤?? ?
?? ??? ??? ?????
?? ?當需要表單回顯或者使用下拉列表的時候,就使用form表單標簽,而如果使用遍歷的標簽就使用JSTL標簽【導包】!
?? ????
21.視圖和視圖解析器【參見Springmvc如何解析視圖流程圖片】
??? 請求處理方法執行完成后,最終返回一個 ModelAndView 對象。對于那些返回 String,View 或 ModeMap 等類型的處理方法,SpringMVC 也會在內部將它們裝配成一個 ModelAndView 對象,它包含了邏輯名和模型對象的視圖

??? SpringMVC 借助視圖解析器(ViewResolver)得到最終 的視圖對象(View),最終的視圖可以是 JSP ,也可能是 Excel、JFreeChart等各種表現形式的視圖
?? ?
?? ?視圖
?? ??? ???? 視圖的作用是渲染模型數據,將模型里的數據以某種形式呈現給客戶。
?? ??? ???? 為了實現視圖模型和具體實現技術的解耦,Spring 在 org.springframework.web.servlet 包中定義了一個高度抽象的 View
?? ??? ??? 視圖對象由視圖解析器負責實例化。由于視圖是無狀態的,所以他們不會有線程安全的問題。?? ??? ?

?? ?
自定義視圖:
?? ?1.自定義視圖,實現view接口或者繼承AbstractView抽象類,并加入到IOC容器中。

@Componentpublic class AView extends AbstractView{@Overrideprotected void renderMergedOutputModel(Map<String, Object> model,HttpServletRequest request, HttpServletResponse response)throws Exception {// TODO Auto-generated method stub }}自定義視圖,實現接口 自定義視圖,實現接口

?2.在springmvc配置文件中配置BeanNameViewResolver視圖解析器。? ??

<!-- 通過BeanNameViewResolver視圖解析器:使用視圖的名字來解析視圖 --> 2 <bean class="org.springframework.web.servlet.view.BeanNameViewResolver"> 3 <property name="order" value="100"></property> 4 </bean>

?3.注意:每個視圖解析器都實現了 Ordered 接口并開放出一個 order 屬性,可以通過 order 屬性指定解析器的優先順序,order越小優先級越高。

  SpringMVC 會按視圖解析器順序的優先順序對邏輯視圖名進行解析,直到解析成功并返回視圖對象,否則將拋出 ServletException 異常???
?? ?
22.數據類型轉換以及數據格式化標簽:
?? 數據類型轉換【了解】
?? ?? 1. 自定義類型轉換器實現Converter<S,T>接口并加入到SpringMVC的IOC容器中,

@Componentpublic class EmployeeConverter implements Converter<String, Employee>{@Overridepublic Employee convert(String source) { System.out.println(source);if(source != null){String[] vals = source.split("-");if(vals != null && vals.length ==5){String name = vals[0];String email = vals[1];Integer gender = Integer.parseInt(vals[2]);Department department = new Department();department.setId(Integer.parseInt(vals[3])); Employee employee = new Employee(null, name, email, gender, department);return employee;}}return null;}}接口實現 接口實現

? 2.配置自定義轉換器到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>數據類型轉換所需配置文件 數據類型轉換所需配置文件

23.文件上傳和文件下載:
?? ?文件上傳? ? ?

@RequestMapping(value="testUpload",method=RequestMethod.POST)public String testUpload(HttpServletRequest request,@RequestParam(value="desc",required=false) String desc,@RequestParam("photo") CommonsMultipartFile file) throws Exception{ServletContext servletContext = request.getServletContext();String realPath = servletContext.getRealPath("/upload");File file1 = new File(realPath);if(!file1.exists()){file1.mkdir();}OutputStream out;InputStream in;//uuid_name.jpgString prefix = UUID.randomUUID().toString();prefix = prefix.replace("-","");String fileName = prefix+"_"+file.getOriginalFilename();System.out.println(fileName);out = new FileOutputStream(new File(realPath+"\\"+fileName));in = file.getInputStream();IOUtils.copy(in, out);out.close();in.close();return "success";}springmvc文件上傳 springmvc文件上傳

? ? ?文件下載:????

@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

轉載于:https://www.cnblogs.com/oy0411/p/10837199.html

總結

以上是生活随笔為你收集整理的SpringMVC基础配置及使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。