版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、Spring MVC 與 MyBatisSpring MVC組成部分Spring的MVC框架主要:由DispatcherServlet、處理器映射(HandlerMapping)、處理器(Controller)、視圖解析器(ViewResolver)、視圖(View)組成。1、客戶端請求提交到DispatcherServlet2、由DispatcherServlet控制器查詢一個或多個HandlerMapping,找到處理請求的Controller3、DispatcherServlet將請求提交到Controller4、Controller調(diào)用業(yè)務(wù)邏輯處理后,返回ModelAndView5、D
2、ispatcherServlet查詢一個或多個ViewResoler視圖解析器,找到ModelAndView指定的視圖6、視圖負責(zé)將結(jié)果顯示到客戶端工作原理執(zhí)行過程Dispatcherservlet使用Spring MVC,配置DispatcherServlet是第一步。 DispatcherServlet是一個Servlet,所以可以配置多個DispatcherServlet。 DispatcherServlet是前置控制器,配置在web.xml文件中的。攔截匹配的請求,Servlet攔截匹配規(guī)則要自已定義,把攔截下來的請求,依據(jù)某某規(guī)則分發(fā)到目標Controller(我們寫的Action)
3、來處理。 “某某規(guī)則”:是根據(jù)你使用了哪個HandlerMapping接口的實現(xiàn)類的不同而不同。 DispatcherservletXml代碼 1. 2. 3.example 4.org.springframework.web.servlet.DispatcherServlet 5.1 6. 7. 8.example 9.*.form 10. 11. 控制器Controller ControllerRequestMapping ( /test/variable1 ) public class MyController RequestMapping ( /showView/variable2 )
4、 public ModelAndView showView( PathVariable String variable1, PathVariable ( variable2 ) int variable2) ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName( viewName ); modelAndView.addObject( 需要放到 model 中的屬性名稱 , 對應(yīng)的屬性值,它是一個對象 ); return modelAndView; 控制器Controller 1、使用 RequestPa
5、ram 綁定 HttpServletRequest 請求參數(shù)到控制器方法參數(shù)2、使用 CookieValue 綁定 cookie 的值到 Controller 方法參數(shù)3、使用 RequestHeader 注解綁定 HttpServletRequest 頭信息到 Controller 方法參數(shù)控制器Controller RequestMapping (value= testParams , params= param1=value1 , param2 , !param3 ) public String testParams() System. out .println( test Params
6、. ); return testParams ; RequestMapping (value= testMethod , method=RequestMethod. GET , RequestMethod. DELETE ) public String testMethod() return method ; 支持參數(shù) (1 )HttpServlet 對象,主要包括HttpServletRequest 、HttpServletResponse 和HttpSession 對象 (2 )Spring 自己的WebRequest 對象。 使用該對象可以訪問到存放在HttpServletRequest
7、 和HttpSession 中的屬性值。 (3 )InputStream 、OutputStream 、Reader 和Writer (4 )使用PathVariable 、RequestParam 、CookieValue 和RequestHeader 標記的參數(shù)。 (5 )使用ModelAttribute 標記的參數(shù)。 (6 )java.util.Map 、Spring 封裝的Model 和ModelMap 。 (7 )實體類。 可以用來接收上傳的參數(shù)。 (8 )Spring 封裝的MultipartFile 。 用來接收上傳文件的。 (9 )Spring 封裝的Errors 和Bindi
8、ngResult 對象支持返回類型 (1 )一個包含模型和視圖的ModelAndView 對象。 (2 )一個模型對象,這主要包括Spring 封裝好的Model 和ModelMap ,以及java.util.Map 。 (3 )一個View 對象。這個時候如果在渲染視圖的過程中模型的話就可以給處理器方法定義一個模型參數(shù),然后在方法體里面往模型中添加值。 (4 )一個String 字符串。 (5 )返回值是void 。 (6 )如果處理器方法被注解ResponseBody 標記類型轉(zhuǎn)換器Controller RequestMapping ( /myTest ) public class MyC
9、ontroller InitBinder public void dataBinder(WebDataBinder binder) DateFormat dateFormat = new SimpleDateFormat( yyyyMMdd ); PropertyEditor propertyEditor = new CustomDateEditor(dateFormat, true ); binder.registerCustomEditor(Date. class , propertyEditor); RequestMapping ( dataBinder/date ) public vo
10、id testDate( PathVariable Date date, Writer writer) throws IOException writer.write(String.valueOf (date.getTime(); 數(shù)據(jù)校驗 對于任何一個應(yīng)用而言在客戶端做的數(shù)據(jù)有效性驗證都不是安全有效的,這時候就要求我們在開發(fā)的時候在服務(wù)端也對數(shù)據(jù)的有效性進行驗證。SpringMVC自身對數(shù)據(jù)在服務(wù)端的校驗有一個比較好的支持,它能將我們提交到服務(wù)端的數(shù)據(jù)按照我們事先的約定進行數(shù)據(jù)有效性驗證,對于不合格的數(shù)據(jù)信息SpringMVC會把它保存在錯誤對象中,這些錯誤信息我們也可以通過SpringMV
11、C提供的標簽在前端JSP頁面上進行展示。在SpringMVC中提供了一個Validator接口,我們可以通過該接口來定義我們自己對實體對象的驗證。視圖解析器SpringMVC用于處理視圖最重要的兩個接口是ViewResolver和View。ViewResolver的主要作用是把一個邏輯上的視圖名稱解析為一個真正的視圖,SpringMVC中用于把View對象呈現(xiàn)給客戶端的是View對象本身,而ViewResolver只是把邏輯視圖名稱解析為對象的View對象。View接口的主要作用是用于處理視圖,然后返回給客戶端。攔截器 SpringMVC 中的Interceptor 攔截器也是相當重要和相當有
12、用的,它的主要作用是攔截用戶的請求并進行相應(yīng)的處理。比如通過它來進行權(quán)限驗證,或者是來判斷用戶是否登陸,或者是像12306 那樣子判斷當前時間是否是購票時間。上傳文件CommonsMultipartResolver允許設(shè)置的屬性有: defaultEncoding:表示用來解析request請求的默認編碼格式,當沒有指定的時候根據(jù)Servlet規(guī)范會使用默認值ISO-8859-1。當request自己指明了它的編碼格式的時候就會忽略這里指定的defaultEncoding。 uploadTempDir:設(shè)置上傳文件時的臨時目錄,默認是Servlet容器的臨時目錄。 maxUploadSize:
13、設(shè)置允許上傳的最大文件大小,以字節(jié)為單位計算。當設(shè)為-1時表示無限制,默認是-1。 maxInMemorySize:設(shè)置在文件上傳時允許寫到內(nèi)存中的最大值,以字節(jié)為單位計算,默認是10240。異常處理springMVC提供的異常處理主要有兩種方式:一種是直接實現(xiàn)自己的HandlerExceptionResolver,當然這也包括使用Spring已經(jīng)為我們提供好的SimpleMappingExceptionResolver和DefaultHandlerExceptionResolver。另一種是使用注解的方式實現(xiàn)一個專門用于處理異常的ControllerExceptionHandler。MyBa
14、tis工作原理(1)加載配置并初始化加載配置并初始化(2)接收調(diào)用請求接收調(diào)用請求處理過程:將請求傳遞給下層的請求處理層進行處理。(3)處理操作請求處理操作請求 觸發(fā)條件:觸發(fā)條件:API接口層傳遞請求過來接口層傳遞請求過來處理過程:(A)根據(jù)SQL的ID查找對應(yīng)的MappedStatement對象。(B)根據(jù)傳入?yún)?shù)對象解析MappedStatement對象,得到最終要執(zhí)行的SQL和執(zhí)行傳入?yún)?shù)。(C)獲取數(shù)據(jù)庫連接,根據(jù)得到的最終SQL語句和執(zhí)行傳入?yún)?shù)到數(shù)據(jù)庫執(zhí)行,并得到執(zhí)行結(jié)果。(D)根據(jù)MappedStatement對象中的結(jié)果映射配置對得到的執(zhí)行結(jié)果進行轉(zhuǎn)換處理,并得到最終的處理結(jié)
15、果。(E)釋放連接資源。(4)返回處理結(jié)果將最終的處理結(jié)果返回返回處理結(jié)果將最終的處理結(jié)果返回。功能結(jié)構(gòu)功能結(jié)構(gòu)API接口層:提供給外部使用的接口API,開發(fā)人員通過這些本地API來操縱數(shù)據(jù)庫。接口層一接收到調(diào)用請求就會調(diào)用數(shù)據(jù)處理層來完成具體的數(shù)據(jù)處理。數(shù)據(jù)處理層:負責(zé)具體的SQL查找、SQL解析、SQL執(zhí)行和執(zhí)行結(jié)果映射處理等。它主要的目的是根據(jù)調(diào)用的請求完成一次數(shù)據(jù)庫操作?;A(chǔ)支撐層:負責(zé)最基礎(chǔ)的功能支撐,包括連接管理、事務(wù)管理、配置加載和緩存處理,這些都是共用的東西,將他們抽取出來作為最基礎(chǔ)的組件。為上層的數(shù)據(jù)處理層提供最基礎(chǔ)的支撐??蚣芙Y(jié)構(gòu)sqlMapConfig.xml:(是myb
16、atis的全局配置文件,名稱不固定的)配置了數(shù)據(jù)源、事務(wù)等mybatis運行環(huán)境mapper.xml:配置sql語句SqlSessionFactory:(會話工廠),根據(jù)配置文件創(chuàng)建工廠作用:創(chuàng)建SqlSessionSqlSession(會話),是一個接口,面向用戶(程序員)的接口作用:操作數(shù)據(jù)庫(發(fā)出sql增、刪、改、查)Executor(執(zhí)行器),是一個接口(基本執(zhí)行器、緩存執(zhí)行器)作用:SqlSession內(nèi)部通過執(zhí)行器操作數(shù)據(jù)庫mapped statement(底層封裝對象)作用:對操作數(shù)據(jù)庫存儲封裝,包括 sql語句,輸入?yún)?shù)、輸出結(jié)果類型。動態(tài)SQLifchoose(when,ot
17、herwise)trimwheresetforeach select * from t_blog where id in #key, #value 注意事項示例1: 執(zhí)行SQL:Select*fromempwherename=#employeeName 參數(shù):employeeName=Smith 解析后執(zhí)行的SQL:Select*fromempwherename=?=Select*fromempwherename=Simith 執(zhí)行SQL:Select*fromempwherename=$employeeName 參數(shù):employeeName傳入值為:Smith 解析后執(zhí)行的SQL:Sele
18、ct*fromempwherename=Smith #會生成preparedStatement.預(yù)編譯SQL語句,這樣比較安全,防止SQL注入,而且傳入的值是字符串類型$:相當于直接賦值,不能防止SQL注入和預(yù)編譯模糊查詢1. sql中字符串拼接 SELECT * FROM tableName WHERE name LIKE CONCAT(CONCAT(%, #text), %);2. 使用 $. 代替 #. SELECT * FROM tableName WHERE name LIKE %$text%;3. 程序中拼接 Java / or String searchText = % + text + %; String searchText = new StringBuilder(%).append(text).append(%).toString(); parameterMap.put(text, searchText); SqlMap.xml SELECT * FROM tableName WHERE name L
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二四年度醫(yī)療設(shè)備招標采購合同-包含遠程醫(yī)療服務(wù)支持3篇
- 2025擔保借款合同書樣本
- 結(jié)直腸腺瘤患者臨床特征分析及與NLR、PLR等指標相關(guān)性研究
- 2025試析房屋買賣居間合同中居間人報酬請求權(quán)的保護
- 二零二五年度海洋資源開發(fā)合作成立公司協(xié)議書4篇
- 二零二五年度跨境電商貨物出口合同樣本4篇
- 2025道排工程合同(hy)最終版
- 洗滌塔施工方案
- 二零二五版牧業(yè)供應(yīng)鏈金融合作承包協(xié)議3篇
- 五年級數(shù)學(xué)(小數(shù)四則混合運算)計算題專項練習(xí)及答案匯編
- 2014新PEP小學(xué)英語六年級上冊-Unit5-What-does-he-do復(fù)習(xí)課件
- 9.2溶解度(第1課時飽和溶液不飽和溶液)+教學(xué)設(shè)計-2024-2025學(xué)年九年級化學(xué)人教版(2024)下冊
- 礦山隱蔽致災(zāi)普查治理報告
- 副總經(jīng)理招聘面試題與參考回答(某大型國企)2024年
- PDCA循環(huán)提高護士培訓(xùn)率
- 《獅子王》電影賞析
- 河北省保定市定州市2025屆高二數(shù)學(xué)第一學(xué)期期末監(jiān)測試題含解析
- 中醫(yī)護理人文
- 2024-2030年中國路亞用品市場銷售模式與競爭前景分析報告
- 貨物運輸安全培訓(xùn)課件
- 前端年終述職報告
評論
0/150
提交評論