一、SpringMVC基礎入門,建立一個HelloWorld程式
1.首先,導入SpringMVC需要的jar包。
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyROBlLwYTNxczN0QzNxAjMyIjNwUTMwIzLcJjMvwlNwUTMwIzLcRnbl1Wdj9GRvw1clxWaGRWYvxGcV9CXt92YuADMwATMulWbkFmL3d3dvw1LcpDc0RHaiojIsJye.png)
2.添加Web.xml配置檔案中關于SpringMVC的配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | |
3.在src下添加springmvc-servlet.xml配置檔案
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | |
4.在WEB-INF檔案夾下建立名為jsp的檔案夾,用來存放jsp視圖。建立一個hello.jsp,在body中添加“Hello World”。
5.建立包及Controller,如下所示
6.編寫Controller代碼
1 2 3 4 5 6 7 8 9 | |
7.啟動伺服器,鍵入 http://localhost:8080/項目名/mvc/hello
二、配置解析
1.Dispatcherservlet
DispatcherServlet是前置控制器,配置在web.xml檔案中的。攔截比對的請求,Servlet攔截比對規則要自已定義,把攔截下來的請求,依據相應的規則分發到目标Controller來處理,是配置spring MVC的第一步。
2.InternalResourceViewResolver
視圖名稱解析器
3.以上出現的注解
@Controller 負責注冊一個bean 到spring 上下文中
@RequestMapping 注解為控制器指定可以處理哪些 URL 請求
三、SpringMVC常用注解
@Controller
負責注冊一個bean 到spring 上下文中
@RequestMapping
注解為控制器指定可以處理哪些 URL 請求
@RequestBody
該注解用于讀取Request請求的body部分資料,使用系統預設配置的HttpMessageConverter進行解析,然後把相應的資料綁定到要傳回的對象上 ,再把HttpMessageConverter傳回的對象資料綁定到 controller中方法的參數上
@ResponseBody
該注解用于将Controller的方法傳回的對象,通過适當的HttpMessageConverter轉換為指定格式後,寫入到Response對象的body資料區
@ModelAttribute
在方法定義上使用 @ModelAttribute 注解:Spring MVC 在調用目标處理方法前,會先逐個調用在方法級上标注了@ModelAttribute 的方法
在方法的入參前使用 @ModelAttribute 注解:可以從隐含對象中擷取隐含的模型資料中擷取對象,再将請求參數 –綁定到對象中,再傳入入參将方法入參對象添加到模型中
@RequestParam
在處理方法入參處使用 @RequestParam 可以把請求參 數傳遞給請求方法
@PathVariable
綁定 URL 占位符到入參
@ExceptionHandler
注解到方法上,出現異常時會執行該方法
@ControllerAdvice
使一個Contoller成為全局的異常處理類,類中用@ExceptionHandler方法注解的方法可以處理所有Controller發生的異常
四、自動比對參數
1 2 3 4 5 6 | |
五、自動裝箱
1.編寫一個Person實體類
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | |
2.在Controller裡編寫方法
1 2 3 4 5 6 | |
六、使用InitBinder來處理Date類型的參數
1 2 3 4 5 6 7 8 9 10 11 12 13 | |
七、向前台傳遞參數
1 2 3 4 5 6 7 8 9 | |
前台可在Request域中取到"p"
八、使用Ajax調用
1 2 3 4 5 6 7 8 9 | |
前台用下面的Jquery代碼調用
1 2 3 4 5 6 7 | |
九、在Controller中使用redirect方式處理請求
1 2 3 4 5 | |
十、檔案上傳
1.需要導入兩個jar包
2.在SpringMVC配置檔案中加入
1 2 3 4 | |
3.方法代碼
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | |
4.前台form表單
1 2 3 4 | |
十一、使用@RequestParam注解指定參數的name
1 2 3 4 5 6 7 8 9 10 | |
十二、RESTFul風格的SringMVC
1.RestController
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | |
2.form表單發送put和delete請求
在web.xml中配置
1 2 3 4 5 6 7 8 9 | |
在前台可以用以下代碼産生請求
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | |
十三、傳回json格式的字元串
1.導入以下jar包
2.方法代碼
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | |
十四、異常的處理
1.處理局部異常(Controller内)
1 2 3 4 5 6 7 8 9 10 11 12 13 | |
2.處理全局異常(所有Controller)
1 2 3 4 5 6 7 8 9 10 | |
3.另一種處理全局異常的方法
在SpringMVC配置檔案中配置
1 2 3 4 5 6 7 8 | |
error是出錯頁面
十五、設定一個自定義攔截器
1.建立一個MyInterceptor類,并實作HandlerInterceptor接口
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | |
2.在SpringMVC的配置檔案中配置
1 2 3 4 5 6 7 | |
3.攔截器執行順序
十六、表單的驗證(使用Hibernate-validate)及國際化
1.導入Hibernate-validate需要的jar包
(未選中不用導入)
2.編寫實體類User并加上驗證注解
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | |
ps:@Past表示時間必須是一個過去值
3.在jsp中使用SpringMVC的form表單
1 2 3 4 5 6 | |
ps:path對應name
4.Controller中代碼
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | |
ps:
1.因為jsp中使用了modelAttribute屬性,是以必須在request域中有一個"user".
[email protected] 表示按照在實體上标記的注解驗證參數
3.傳回到原頁面錯誤資訊回回顯,表單也會回顯
5.錯誤資訊自定義
在src目錄下添加locale.properties
NotEmpty.user.name=name can't not be empty
Past.user.birth=birth should be a past value
DateTimeFormat.user.birth=the format of input is wrong
typeMismatch.user.birth=the format of input is wrong
typeMismatch.user.id=the format of input is wrong
在SpringMVC配置檔案中配置
1 2 3 4 | |
6.國際化顯示
在src下添加locale_zh_CN.properties
username=賬号
password=密碼
locale.properties中添加
username=user name
password=password
建立一個locale.jsp
1 2 3 4 | |
在SpringMVC中配置
1 2 | |
讓locale.jsp在WEB-INF下也能直接通路
最後,通路locale.jsp,切換浏覽器語言,能看到賬号和密碼的語言也切換了
十七、壓軸大戲--整合SpringIOC和SpringMVC
1.建立一個test.SpringMVC.integrate的包用來示範整合,并建立各類
2.User實體類
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | |
3.UserService類
1 2 3 4 5 6 7 8 9 10 | |
4.UserController
1 2 3 4 5 6 7 8 9 10 11 12 13 | |
5.Spring配置檔案
在src目錄下建立SpringIOC的配置檔案applicationContext.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | |
在Web.xml中添加配置
1 2 3 4 5 6 7 8 | |
6.在SpringMVC中進行一些配置,防止SpringMVC和SpringIOC對同一個對象的管理重合
1 2 3 4 5 6 7 | |
十八、SpringMVC詳細運作流程圖
十九、SpringMVC與struts2的差別
1、springmvc基于方法開發的,struts2基于類開發的。springmvc将url和controller裡的方法映射。映射成功後springmvc生成一個Handler對象,對象中隻包括了一個method。方法執行結束,形參資料銷毀。springmvc的controller開發類似web service開發。
2、springmvc可以進行單例開發,并且建議使用單例開發,struts2通過類的成員變量接收參數,無法使用單例,隻能使用多例。
3、經過實際測試,struts2速度慢,在于使用struts标簽,如果使用struts建議使用jstl。