![]() ![]() |
Spring MVC開(kāi)發(fā)技術(shù)指南 ![]()
本書(shū)以大量的實(shí)例介紹了Spring MVC子框架應(yīng)用的方法和技術(shù), 同時(shí)以大量的工程實(shí)踐環(huán)節(jié)鞏固這些方法和技術(shù), 力圖使學(xué)生達(dá)到“做中學(xué), 學(xué)中做”的狀態(tài)。全書(shū)論述了Spring MVC子框架概述、開(kāi)發(fā)環(huán)境構(gòu)建、基本流程、基本配置以及開(kāi)發(fā)步驟、控制器、數(shù)據(jù)綁定和表單標(biāo)簽、類(lèi)型轉(zhuǎn)換和格式化、文件上傳和下載、國(guó)際化、輸入校驗(yàn)、EL與JSTL以及名片管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)等內(nèi)容。
1.本書(shū)從Spring MVC基礎(chǔ)開(kāi)始講解,逐步深入到Spring MVC開(kāi)發(fā)技術(shù),內(nèi)容由易到難,講解由淺入深。
2.包含大量實(shí)例,包括簡(jiǎn)單的代碼演示,較大應(yīng)用程序的實(shí)現(xiàn)步驟,方便閱讀和實(shí)現(xiàn)。 3.每章包含實(shí)踐環(huán)節(jié)與課后習(xí)題,幫助讀者鞏固所學(xué)知識(shí),提高編程能力。 4. 可作為高等院校相關(guān)專(zhuān)業(yè)的教材,也可作為教輔資料,還可作為技術(shù)開(kāi)發(fā)人員的參考書(shū)。 5.本書(shū)提供配套電子課件、源代碼以及實(shí)踐環(huán)節(jié)與課后習(xí)題的參考答案,讀者可登錄清華大學(xué)出版社網(wǎng)站下載,也可加入教材交流QQ群(46696527)下載。
目前,盡管市面上有許多與Spring框架有關(guān)的書(shū)籍,但單獨(dú)介紹Spring MVC子框架的書(shū)籍還寥寥無(wú)幾。而且相關(guān)書(shū)籍非常注重知識(shí)的系統(tǒng)性,使得知識(shí)體系結(jié)構(gòu)過(guò)于全面、龐大。這種知識(shí)體系過(guò)于龐大的書(shū)籍不太適合作為高校計(jì)算機(jī)相關(guān)專(zhuān)業(yè)的教材。同時(shí),許多教師在教學(xué)過(guò)程中,非常希望教材本身能引導(dǎo)學(xué)生盡可能地參與到教學(xué)活動(dòng)中,因此本書(shū)的重點(diǎn)不是簡(jiǎn)單地介紹Spring MVC子框架的基礎(chǔ)知識(shí),而是大量的實(shí)例與實(shí)踐環(huán)節(jié)。讀者通過(guò)本書(shū)可以快速地掌握Spring MVC子框架,提高Java Web應(yīng)用的開(kāi)發(fā)能力。全書(shū)共10章,各章的具體內(nèi)容如下:
第1章重點(diǎn)講解MVC的設(shè)計(jì)思想以及Spring MVC開(kāi)發(fā)環(huán)境的構(gòu)建。 第2章詳細(xì)講解基于注解的控制器、Controller接收請(qǐng)求參數(shù)的方式以及如何編寫(xiě)請(qǐng)求處理方法,是本書(shū)的重點(diǎn)內(nèi)容之一。 第3章介紹類(lèi)型轉(zhuǎn)換器和格式化轉(zhuǎn)換器,包括內(nèi)置的類(lèi)型轉(zhuǎn)換器和格式化轉(zhuǎn)換器以及自定義類(lèi)型轉(zhuǎn)換器和格式化轉(zhuǎn)換器。 第4章講解數(shù)據(jù)綁定和表單標(biāo)簽庫(kù),是本書(shū)的重點(diǎn)內(nèi)容之一。 第5章詳細(xì)講解Spring MVC框架的輸入驗(yàn)證體系,包括Spring驗(yàn)證和JSR303驗(yàn)證,是本書(shū)的重點(diǎn)內(nèi)容之一。 第6章介紹Spring MVC國(guó)際化的實(shí)現(xiàn)方法。 第7章講解如何使用Spring MVC框架進(jìn)行文件的上傳與下載。 第8章詳細(xì)講解如何使用Spring MVC框架進(jìn)行異常的統(tǒng)一處理,是本書(shū)的重點(diǎn)內(nèi)容之一。 第9章介紹EL與JSTL的基本用法。 第10章是本書(shū)的重點(diǎn)內(nèi)容之一,它將前面章節(jié)的知識(shí)進(jìn)行綜合,詳細(xì)地講解了如何使用Spring MVC框架來(lái)開(kāi)發(fā)一個(gè)Web應(yīng)用(名片管理系統(tǒng))。 本書(shū)特別注重引導(dǎo)學(xué)生參與課堂教學(xué)活動(dòng),適合作為大學(xué)計(jì)算機(jī)及相關(guān)專(zhuān)業(yè)的教材或教學(xué)參考書(shū),也適合作為Spring MVC應(yīng)用開(kāi)發(fā)人員的參考用書(shū)。 為便于教學(xué),本書(shū)配有教學(xué)課件、源代碼以及實(shí)踐環(huán)節(jié)與課后習(xí)題參考答案,讀者可從清華大學(xué)出版社網(wǎng)站免費(fèi)下載,也可加入教材交流QQ群(46696527)下載。 由于編者水平有限,書(shū)中難免會(huì)有不足之處,敬請(qǐng)廣大讀者批評(píng)指正。 編 者 2017年2月
第1章?Spring MVC入門(mén) 1
1.1 MVC模式與Spring MVC工作原理 1 1.1.1 MVC模式 1 1.1.2 Spring MVC工作原理 2 1.1.3 Spring MVC接口 3 1.2 Spring MVC的開(kāi)發(fā)環(huán)境 3 1.2.1 Spring的下載與安裝 6 1.2.2 使用Eclipse開(kāi)發(fā)Spring MVC應(yīng)用 6 1.3 第一個(gè)Spring MVC應(yīng)用 12 1.3.1 應(yīng)用首頁(yè) 12 1.3.2 實(shí)現(xiàn)Controller 13 1.3.3 配置Controller 14 1.3.4 應(yīng)用的其他頁(yè)面 14 1.3.5 發(fā)布并運(yùn)行Spring MVC應(yīng)用 14 1.3.6 實(shí)踐環(huán)節(jié) 15 1.4 視圖解析器 15 1.5 本章小結(jié) 16 習(xí)題1 16 第2章?Controller 17 2.1 基于注解的控制器 17 2.1.1 Controller注解類(lèi)型 18 2.1.2 RequestMapping注解類(lèi)型 19 2.1.3 編寫(xiě)請(qǐng)求處理方法 20 2.2 Controller接收請(qǐng)求參數(shù)的常見(jiàn)方式 21 2.2.1 通過(guò)實(shí)體bean接收請(qǐng)求參數(shù) 21 2.2.2 通過(guò)處理方法的形參接收請(qǐng)求參數(shù) 28 2.2.3 通過(guò)HttpServletRequest接收請(qǐng)求參數(shù) 29 2.2.4 通過(guò)@PathVariable接收URL中的請(qǐng)求參數(shù) 29 2.2.5 通過(guò)@RequestParam接收請(qǐng)求參數(shù) 30 2.2.6 通過(guò)@ModelAttribute接收請(qǐng)求參數(shù) 31 2.2.7 實(shí)踐環(huán)節(jié) 32 2.3 重定向與轉(zhuǎn)發(fā) 32 2.4 應(yīng)用@Autowired和@Service進(jìn)行依賴(lài)注入 33 2.5 @ModelAttribute 36 2.6 本章小結(jié) 37 習(xí)題2 38 第3章?類(lèi)型轉(zhuǎn)換和格式化 39 3.1 類(lèi)型轉(zhuǎn)換的意義 39 3.2 Converter 41 3.2.1 內(nèi)置的類(lèi)型轉(zhuǎn)換器 41 3.2.2 自定義類(lèi)型轉(zhuǎn)換器 43 3.2.3 實(shí)踐環(huán)節(jié) 47 3.3 Formatter 47 3.3.1 內(nèi)置的格式化轉(zhuǎn)換器 48 3.3.2 自定義格式化轉(zhuǎn)換器 48 3.3.3 實(shí)踐環(huán)節(jié) 53 3.4 本章小結(jié) 53 習(xí)題3 53 第4章?數(shù)據(jù)綁定和表單標(biāo)簽庫(kù) 54 4.1 數(shù)據(jù)綁定 54 4.2 表單標(biāo)簽庫(kù) 54 4.2.1 表單標(biāo)簽 55 4.2.2 input標(biāo)簽 56 4.2.3 password標(biāo)簽 56 4.2.4 hidden標(biāo)簽 56 4.2.5 textarea標(biāo)簽 57 4.2.6 checkbox標(biāo)簽 57 4.2.7 checkboxes標(biāo)簽 57 4.2.8 radiobutton標(biāo)簽 58 4.2.9 radiobuttons標(biāo)簽 58 4.2.10 select標(biāo)簽 58 4.2.11 options標(biāo)簽 58 4.2.12 errors標(biāo)簽 59 4.3 數(shù)據(jù)綁定應(yīng)用 59 4.3.1 應(yīng)用的相關(guān)配置 59 4.3.2 領(lǐng)域模型 61 4.3.3 Service層 62 4.3.4 Controller層 63 4.3.5 View層 64 4.3.6 測(cè)試應(yīng)用 67 4.4 實(shí)踐環(huán)節(jié) 68 4.5 本章小結(jié) 69 習(xí)題4 69 第5章?數(shù)據(jù)驗(yàn)證 70 5.1 數(shù)據(jù)驗(yàn)證概述 70 5.1.1 客戶(hù)端驗(yàn)證 70 5.1.2 服務(wù)器端驗(yàn)證 71 5.2 Spring驗(yàn)證器 71 5.2.1 Validator接口 71 5.2.2 ValidationUtils類(lèi) 71 5.2.3 驗(yàn)證示例 72 5.2.4 實(shí)踐環(huán)節(jié) 80 5.3 JSR 303驗(yàn)證 81 5.3.1 JSR 303驗(yàn)證配置 81 5.3.2 標(biāo)注類(lèi)型 82 5.3.3 驗(yàn)證示例 83 5.3.4 實(shí)踐環(huán)節(jié) 87 5.4 本章小結(jié) 88 習(xí)題5 88 第6章?國(guó)際化 89 6.1 程序國(guó)際化概述 89 6.1.1 Java國(guó)際化的思想 89 6.1.2 Java支持的語(yǔ)言和國(guó)家 90 6.1.3 Java程序國(guó)際化 91 6.1.4 帶占位符的國(guó)際化信息 92 6.1.5 實(shí)踐環(huán)節(jié) 93 6.2 Spring MVC的國(guó)際化 93 6.2.1 Spring MVC加載資源屬性文件 94 6.2.2 語(yǔ)言區(qū)域的選擇 94 6.2.3 使用message標(biāo)簽顯示國(guó)際化信息 95 6.3 用戶(hù)自定義切換語(yǔ)言示例 96 6.4 本章小結(jié) 101 習(xí)題6 101 第7章?文件的上傳與下載 102 7.1 文件上傳 102 7.1.1 commons-fileupload組件 102 7.1.2 基于表單的文件上傳 103 7.1.3 MultipartFile接口 103 7.1.4 單文件上傳 104 7.1.5 多文件上傳 109 7.1.6 實(shí)踐環(huán)節(jié) 111 7.2 文件下載 111 7.2.1 文件下載的實(shí)現(xiàn)方法 111 7.2.2 文件下載過(guò)程 112 7.3 本章小結(jié) 115 習(xí)題7 115 第8章?統(tǒng)一異常處理 117 8.1 示例介紹 117 8.2 SimpleMappingExceptionResolver類(lèi) 124 8.3 HandlerExceptionResolver接口 126 8.4 @ExceptionHandler注解 127 8.5 本章小結(jié) 129 習(xí)題8 129 第9章?EL與JSTL 130 9.1 表達(dá)式語(yǔ)言EL 130 9.1.1 基本語(yǔ)法 130 9.1.2 EL隱含對(duì)象 133 9.1.3 實(shí)踐環(huán)節(jié) 136 9.2 JSP標(biāo)準(zhǔn)標(biāo)簽庫(kù)JSTL 136 9.2.1 配置JSTL 136 9.2.2 核心標(biāo)簽庫(kù)之通用標(biāo)簽 137 9.2.3 核心標(biāo)簽庫(kù)之流程控制標(biāo)簽 138 9.2.4 核心標(biāo)簽庫(kù)之迭代標(biāo)簽 140 9.2.5 函數(shù)標(biāo)簽庫(kù) 142 9.2.6 實(shí)踐環(huán)節(jié) 146 9.3 本章小結(jié) 146 習(xí)題9 146 第10章?名片管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn) 148 10.1 系統(tǒng)設(shè)計(jì) 148 10.1.1 系統(tǒng)功能需求 148 10.1.2 系統(tǒng)模塊劃分 148 10.2 數(shù)據(jù)庫(kù)設(shè)計(jì) 149 10.2.1 數(shù)據(jù)庫(kù)概念結(jié)構(gòu)設(shè)計(jì) 149 10.2.2 數(shù)據(jù)庫(kù)邏輯結(jié)構(gòu)設(shè)計(jì) 150 10.3 系統(tǒng)管理 150 10.3.1 導(dǎo)入相關(guān)的jar包 150 10.3.2 JSP頁(yè)面管理 151 10.3.3 包管理 156 10.3.4 配置文件管理 157 10.4 組件設(shè)計(jì) 160 10.4.1 工具類(lèi) 160 10.4.2 統(tǒng)一異常處理 161 10.4.3 登錄權(quán)限控制器 162 10.4.4 數(shù)據(jù)庫(kù)統(tǒng)一操作 162 10.5 名片管理 164 10.5.1 Controller實(shí)現(xiàn) 164 10.5.2 Service實(shí)現(xiàn) 168 10.5.3 Dao實(shí)現(xiàn) 170 10.5.4 添加名片 172 10.5.5 查詢(xún)名片 174 10.5.6 修改名片 178 10.5.7 刪除名片 183 10.6 用戶(hù)相關(guān) 187 10.6.1 Controller實(shí)現(xiàn) 187 10.6.2 Service實(shí)現(xiàn) 189 10.6.3 Dao實(shí)現(xiàn) 190 10.6.4 注冊(cè) 192 10.6.5 登錄 195 10.6.6 修改密碼 197 10.6.7 基本信息 199 10.7 安全退出 201 10.8 本章小結(jié) 201 參考文獻(xiàn) 202
第3章
類(lèi)型轉(zhuǎn)換和格式化 學(xué)習(xí)目的與要求 本章主要學(xué)習(xí)類(lèi)型轉(zhuǎn)換器和格式化轉(zhuǎn)換器。通過(guò)本章的學(xué)習(xí),應(yīng)該理解類(lèi)型轉(zhuǎn)換器和格式化轉(zhuǎn)換器的原理,掌握類(lèi)型轉(zhuǎn)換器和格式化轉(zhuǎn)換器的用法。 本章主要內(nèi)容 * Converter * Formatter 在Spring MVC框架中,需要收集用戶(hù)請(qǐng)求參數(shù),并將請(qǐng)求參數(shù)傳遞給應(yīng)用的控制器組件。此時(shí)存在一個(gè)問(wèn)題,所有的請(qǐng)求參數(shù)類(lèi)型只能是字符串?dāng)?shù)據(jù)類(lèi)型,但Java是強(qiáng)類(lèi)型語(yǔ)言,所以Spring MVC框架必須將這些字符串請(qǐng)求參數(shù)轉(zhuǎn)換成相應(yīng)的數(shù)據(jù)類(lèi)型。 Spring MVC框架不僅提供了強(qiáng)大的類(lèi)型轉(zhuǎn)換和格式化機(jī)制,而且開(kāi)發(fā)者還可以方便地開(kāi)發(fā)出自己的類(lèi)型轉(zhuǎn)換器和格式化轉(zhuǎn)換器,完成字符串和各種數(shù)據(jù)類(lèi)型之間的轉(zhuǎn)換。這正是學(xué)習(xí)本章的目的所在。 3.1 類(lèi)型轉(zhuǎn)換的意義 本節(jié)通過(guò)一個(gè)簡(jiǎn)單應(yīng)用(JSP + Servlet)為示例來(lái)介紹類(lèi)型轉(zhuǎn)換的意義。如圖3.1所示地添加商品頁(yè)面,該頁(yè)面用于收集用戶(hù)輸入的商品信息。商品信息包括:商品名稱(chēng)(字符串類(lèi)型String)、商品價(jià)格(雙精度浮點(diǎn)類(lèi)型double)、商品數(shù)量(整數(shù)類(lèi)型int)。 圖3.1 添加商品信息的收集頁(yè)面 addGoods.jsp頁(yè)面的代碼如下: 商品名稱(chēng): 商品價(jià)格: 商品數(shù)量: 希望頁(yè)面收集到的數(shù)據(jù)提交到addGoods的Servlet(AddGoodsServlet類(lèi)),該Servlet將這些請(qǐng)求信息封裝成一個(gè)Goods類(lèi)的值對(duì)象。 Goods類(lèi)的代碼如下: package domain; public class Goods { private String goodsname; private double goodsprice; private int goodsnumber; //無(wú)參數(shù)的構(gòu)造方法 public Goods(){} //有參數(shù)的構(gòu)造方法 public Goods(String goodsname, double goodsprice, int goodsnumber) { super(); this.goodsname = goodsname; this.goodsprice = goodsprice; this.goodsnumber = goodsnumber; } //此處省略了setter和getter方法 … } AddGoodsServlet類(lèi)的代碼如下: package servlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import domain.Goods; public class AddGoodsServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); //設(shè)置編碼,防止亂碼 request.setCharacterEncoding("utf-8"); //獲取參數(shù)值 String goodsname = request.getParameter("goodsname"); String goodsprice = request.getParameter("goodsprice"); String goodsnumber = request.getParameter("goodsnumber"); //下面進(jìn)行類(lèi)型轉(zhuǎn)換 double newgoodsprice = Double.parseDouble(goodsprice); int newgoodsnumber = Integer.parseInt(goodsnumber); //將轉(zhuǎn)換后的數(shù)據(jù)封裝成goods值對(duì)象 Goods goods = new Goods(goodsname, newgoodsprice, newgoodsnumber); //將goods值對(duì)象傳遞給數(shù)據(jù)訪(fǎng)問(wèn)層,進(jìn)行添加操作,代碼省略 … } } 對(duì)于上面這個(gè)應(yīng)用而言,開(kāi)發(fā)者需要自己在Servlet中進(jìn)行類(lèi)型轉(zhuǎn)換,并將其封裝成值對(duì)象。這些類(lèi)型轉(zhuǎn)換操作全部手工完成,非常煩瑣。 對(duì)于Spring MVC框架而言,它必須將請(qǐng)求參數(shù)轉(zhuǎn)換成值對(duì)象類(lèi)里各屬性對(duì)應(yīng)的數(shù)據(jù)類(lèi)型——這就是類(lèi)型轉(zhuǎn)換的意義。 3.2 Converter Spring MVC框架的Converter是一個(gè)可以將一種數(shù)據(jù)類(lèi)型轉(zhuǎn)換成另一種數(shù)據(jù)類(lèi)型的接口,這里S表示源類(lèi)型,T表示目標(biāo)類(lèi)型。開(kāi)發(fā)者在實(shí)際應(yīng)用中,使用框架內(nèi)置的類(lèi)型轉(zhuǎn)換器基本就夠了,但有時(shí)需要編寫(xiě)具有特定功能的類(lèi)型轉(zhuǎn)換器。 3.2.1 內(nèi)置的類(lèi)型轉(zhuǎn)換器 在Spring MVC框架中,對(duì)于常用的數(shù)據(jù)類(lèi)型,開(kāi)發(fā)者無(wú)須創(chuàng)建自己的類(lèi)型轉(zhuǎn)換器,因?yàn)镾pring MVC框架有許多內(nèi)置的類(lèi)型轉(zhuǎn)換器完成常用的類(lèi)型轉(zhuǎn)換。Spring MVC框架提供的內(nèi)置類(lèi)型轉(zhuǎn)換包括如下幾種類(lèi)型。 * 標(biāo)量轉(zhuǎn)換器 StringToBooleanConverter:String到boolean類(lèi)型轉(zhuǎn)換。 ObjectToStringConverter:Object到String轉(zhuǎn)換,調(diào)用toString方法轉(zhuǎn)換。 StringToNumberConverterFactory:String到數(shù)字轉(zhuǎn)換(如Integer、Long等)。 NumberToNumberConverterFactory:數(shù)字子類(lèi)型(基本類(lèi)型)到數(shù)字類(lèi)型(包裝類(lèi)型)轉(zhuǎn)換。 StringToCharacterConverter:String到Character轉(zhuǎn)換,取字符串第一個(gè)字符。 NumberToCharacterConverter:數(shù)字子類(lèi)型到Character轉(zhuǎn)換。 CharacterToNumberFactory:Character到數(shù)字子類(lèi)型轉(zhuǎn)換。 StringToEnumConverterFactory:String到枚舉類(lèi)型轉(zhuǎn)換,通過(guò)Enum.valueOf將字符串轉(zhuǎn)換為需要的枚舉類(lèi)型。 EnumToStringConverter:枚舉類(lèi)型到String轉(zhuǎn)換,返回枚舉對(duì)象的name()值。 StringToLocaleConverter:String到j(luò)ava.util.Locale轉(zhuǎn)換。 PropertiesToStringConverter:java.util.Properties到String轉(zhuǎn)換,默認(rèn)通過(guò)ISO-8859-1解碼。 StringToPropertiesConverter:String到j(luò)ava.util.Properties轉(zhuǎn)換,默認(rèn)使用ISO-8859-1編碼。 * 集合、數(shù)組相關(guān)轉(zhuǎn)換器 ArrayToCollectionConverter:任意數(shù)組到任意集合(List、Set)轉(zhuǎn)換。 CollectionToArrayConverter:任意集合到任意數(shù)組轉(zhuǎn)換。 ArrayToArrayConverter:任意數(shù)組到任意數(shù)組轉(zhuǎn)換。 CollectionToCollectionConverter:集合之間的類(lèi)型轉(zhuǎn)換。 MapToMapConverter:Map之間的類(lèi)型轉(zhuǎn)換。 ArrayToStringConverter:任意數(shù)組到String轉(zhuǎn)換。 StringToArrayConverter:字符串到數(shù)組的轉(zhuǎn)換,默認(rèn)通過(guò)“,”分隔,且去除字符串的兩邊空格(trim)。 ArrayToObjectConverter:任意數(shù)組到Object的轉(zhuǎn)換,如果目標(biāo)類(lèi)型和源類(lèi)型兼容,直接返回源對(duì)象;否則返回?cái)?shù)組的第一個(gè)元素并進(jìn)行類(lèi)型轉(zhuǎn)換。 ObjectToArrayConverter:Object到單元素?cái)?shù)組轉(zhuǎn)換。 CollectionToStringConverter:任意集合(List、Set)到String轉(zhuǎn)換。 StringToCollectionConverter:String到集合(List、Set)轉(zhuǎn)換,默認(rèn)通過(guò)“,”分隔,且去除字符串的兩邊空格(trim)。 CollectionToObjectConverter:任意集合到任意Object的轉(zhuǎn)換,如果目標(biāo)類(lèi)型和源類(lèi)型兼容,直接返回源對(duì)象;否則返回集合的第一個(gè)元素并進(jìn)行類(lèi)型轉(zhuǎn)換。 ……
你還可能感興趣
我要評(píng)論
|