一、攔截器
Spring MVC的攔截器(Interceptor)?類似于Java Servlet的過濾器(Filter)。前面學習Java Web學過一點過濾器。
攔截器的作用 是攔截用戶的請求,并做相應(yīng)的處理 。例如在JSP提交表單數(shù)據(jù)給Controller,先是提交給攔截器的類。比如權(quán)限驗證,是否登錄,然后再交給Controller處理。
作法:需要配置攔截器類。Interceptor類。
接著需要在Springmvc.xml文件里面 注冊攔截器類。并配置攔截器作用的路徑。
攔截器 的類用的不多,在springmvc里面,對登錄權(quán)限進行判斷,一般都是使用的數(shù)據(jù)驗證類。
二、數(shù)據(jù)驗證(需要記憶)
數(shù)據(jù)驗證,在企業(yè)應(yīng)用里面用的比較多,但一般都是結(jié)合 統(tǒng)一異常處理 的方式進行處理。現(xiàn)只講一下數(shù)據(jù)驗證的方式。
它的作用是,使得輸入的數(shù)據(jù)符合 預期,否則 就提示輸入數(shù)據(jù)的格式問題。
這里我們學習Spring框架自帶的驗證組件。Spring驗證器:
Validator接口:(自帶的)
? ? ? 存在兩個方法(自帶的):boolean supports(Class<?> klass)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?void validate(Object object,Errors errors)
? ? ? 存入錯誤消息的方法是reject 或者rejectValue
應(yīng)用實訓:編寫一個添加商品的表單。
要求:1.商品名和商品詳情不能為空。
2.商品價格在0到100之間
3.創(chuàng)建日期不能在系統(tǒng)日期之后。
代碼分析:
第一步:導入依賴? (和前面的依賴是一樣的。Spring自帶的驗證器不需要額外導入包)
第二步:配置web.xml文件,和之前一樣
第2.5步:配置Validator類(驗證器類)和錯誤消息的屬性文件(例如error.properties,這個文件需要在springmvc里面注冊噢。)
這個類自定義,但繼承Validator類。并且重寫它的兩個方法。最后根據(jù)POJO的屬性,對每一個屬性進行一次判定(數(shù)據(jù)驗證。符合上述的要求即可)
第三步:配置POJO、Service層、Contoller層 。方法和之前的差不多。
注意不同的是Controller層可以使用第2.5層定義的Validator(驗證器類)。????????
第四步:配置View頁面。創(chuàng)建數(shù)據(jù)輸入頁面addGoods,jsp。 (使用和前面學過的 數(shù)據(jù)綁定 去綁定POJO類型。)
需要注意一下JSP 和Controller 是可以相互轉(zhuǎn)換的,也就是說,JSP的創(chuàng)建可以放在創(chuàng)建Controller之前。
第五步:配置Spring.mvc。和前面一樣。
不過,多了 配置消息屬性文件(就是第2.5步創(chuàng)建的Validator類),以及注冊格式轉(zhuǎn)換器。
代碼分析優(yōu)化:
像上面那樣分為步驟來編寫,很容易 因為Validate類出現(xiàn)問題而導致整個 項目出現(xiàn)問題。建議,先按 數(shù)據(jù)綁定的方式對代碼進行編寫。如果數(shù)據(jù)綁定通過了,并且最后能查看商品的詳細頁面。再接著去 修改代碼,添加數(shù)據(jù)驗證的方式。
數(shù)據(jù)綁定的方式步驟 的一點感悟:(建議多加練習這個方式,獲得最后的數(shù)據(jù)綁定總結(jié))
一開始,盲寫數(shù)據(jù)綁定。遇到的一個問題是,先編寫JSP頁面進行數(shù)據(jù)綁定到POJO類,還是先編寫Controller類。
在編寫代碼步驟的 建議:
POJO類是首先編寫的。
再編寫Service類(業(yè)務(wù)邏輯層,它的方法一般是一個判斷類型(判斷是否添加成功),一個集合類型(偽裝數(shù)據(jù)庫集合,將POJO的數(shù)據(jù)集合在一起。))。這個Service層的編寫 需要重點注意一下,它需要很強的抽象邏輯。分為一個接口和一個實現(xiàn)類。你要思考,在Controller需要得到什么數(shù)據(jù),那么就把得到的數(shù)據(jù),用抽象方法在Service層表示
再編寫Controller類(要用到service的注入,以及service的方法。比如:判斷條件,然后選擇返回一個頁面,在比如:使用model.Attribude,將service層得到的數(shù)據(jù) 封裝在model類型里面。)。最后編寫JSP頁面。
再加一點感悟:
這是控制Controller類的,它使用goods表示是一個Goods的類型(POJO類),它實際是傳給了JSP類里面。
?
小結(jié):
所以獲取Controller類里面的model.Addribute(" name",service層的方法?)
有兩種方式:第一種,最常用的是EL表達式:${name}?
第二種,就是在表單元素里面的modelAttribute="name"? ?。
總結(jié):數(shù)據(jù)驗證,需要額外創(chuàng)建 Spring的驗證器類 以及對它的類進行配置注冊。
三、統(tǒng)一異常處理(重點部分)
請結(jié)合數(shù)據(jù)驗證 的方式,判斷異常處理 的過程有何不同。
異常處理方式比數(shù)據(jù)驗證方式用的多,而且異常處理方式有的時候也可以代替數(shù)據(jù)驗證。所以統(tǒng)一異常處理這個知識點需要掌握。?
主要介紹 自定義異常類。因為無論是dao、service、Controller層。都是可以throws Exception。所以,異常類的實現(xiàn) 單獨用一個exception包來存放,對這些層里面拋出的異常,這里我們主要介紹兩種方式來實習,這兩種方式都用的比較多。
第一種:HandlerExceptionResolver接口實現(xiàn)。
這個是系統(tǒng)自帶的類,我們定義好了異常類,需要繼承implements它,它存在一個方法,然后你重寫方法就行。
不過,這種系統(tǒng)自帶的異常類。使用的時候,需要去springmvc.xml文件里面,注冊配置。
一般都是一句:<bean class=" exception.自定義的類"/>
第二種:通過注解實現(xiàn)聲明異常類。@ExceptionHandler (不過實踐運用中,這個省略關(guān)系不大)? ?(最常用這種方式)
這種異常類都是自定義,并且沒有繼承關(guān)系。
但是,需要在控制層里面,對需要進行異常處理的Controller類 進行繼承自定義的這個類,例如:
@Controller
public class TestExceptionController extends BaseController? ?{? }
暫時沒有例子。
四、SSM框架整合(本此JavaEE學習的最終目標,非常重要)
本次學習的最終目標,就是能夠?qū)崿F(xiàn)SSM框架的整合。
在前面第一部分的學習,我們提到了Spring和MyBatis的整合,第二部分學習SpingMVC的框架?,F(xiàn)在結(jié)合這三個框架一起使用。SSM其實就是(Spring、Spring MVC、MyBatis)這三個大框架的整合。
以應(yīng)用項目為實例,進行這部分的學習:
項目:根據(jù)用戶名 模糊查詢用戶信息。
問題分析:
第一個問題:
Caused by: java.lang.UnsupportedClassVersionError: org/mybatis/spring/SqlSessionFactoryBean has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 52.0 (鏃犳硶杞藉叆鐨?.綾? [org.mybatis.spring.SqlSessionFactoryBean])
?? ??? ?
原因:org.mybatis.spring.SqlSessionFactoryBean
?類是由一個比當前 Java 運行時更新的版本編譯的(類文件版本為 61.0),而當前 Java 運行時只能識別最高到 52.0 版本的類文件。
糾錯:在pom.xml文件里面,改變mybatis的版本。將mybatis的版本降低一些,或者mysql的版本提高一些。
第二個問題:
第三個問題:(多加練習。)
測試是否獲取dao的數(shù)據(jù)。(沒有進行測試,結(jié)果導致,是否獲取到了數(shù)據(jù)都不知道。所以以后做SSM的框架,從數(shù)據(jù)庫提取的數(shù)據(jù)都進行測試一下。)
測試作法:
在Controller編寫TestController 類方法 和Test 類測試。
TestController 類方法:編寫測試用到的數(shù)據(jù)。(調(diào)用的是Dao類的方法)
Test類:就是調(diào)用applicationContext.xml文件的類方法,進行調(diào)用上一個的test方法。
將第二個問題解決之后,發(fā)現(xiàn),代碼可以運行的通了,而且符合預期?。?!訣絕子
請多加練習SSM框架,建議組合式練習,先練習spring+mybatis的框架整合,在添加spingmvc的框架。
一定要理解springmvc是怎么綁定POJO的,因為在mybatis的框架里面,我們發(fā)現(xiàn),它連接數(shù)據(jù)庫之后對數(shù)據(jù)獲取進行測試,是對POJO類型 ,就是設(shè)置了setName="某個字符串",就是加了這樣的設(shè)置,才能進行測試。
但在springmvc框架里面不需要進行這樣的設(shè)定。(這個地方一定要多加練習,了解它們是怎么就綁定了POJO類的)
練習:使用工廠模式的思維進行練習文章來源:http://www.zghlxwxcb.cn/news/detail-528579.html
實現(xiàn)登錄,注冊,查詢?nèi)齻€功能。文章來源地址http://www.zghlxwxcb.cn/news/detail-528579.html
到了這里,關(guān)于JavaEE學習的第三部分(重點在第四個知識點,SSM框架整合)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!