2019年2月27日 星期三

Java RWD Web 企業網站開發指南:使用Spring MVC與Bootstrap (已出版)

書名(暫定,依實際出版為主) :

Java RWD Web 企業網站開發指南 

                 :使用Spring MVC與Bootstrap

--------------------------------------------------------------------------------------------------




自序:

隔了兩年多,繼「Java SE7/8 OCAJP專業認證指南:擬真試題實戰」、「Java SE7/8 OCPJP進階認證指南:擬真試題實戰」兩書後,本書「Java RWD Web企業網站開發指南:使用Spring MVCBootstrap」終於完成了!

撰寫本書的過程中,除了持續在公司開發系統之外,也藉由勞動力發展署主持的「產業人才投資計畫」不間斷推展教學工作。在與同事及學員互動時,我經常思考什麼樣的Java書籍才是大家需要的?我嘗試把教學心得和開發經驗結合成本書,希望可以協助具備Java SE基礎,為準備進入Java企業網站開發領域的朋友們提供一個完整管道。

書中附有大量且完整的程式碼範例,以Eclipse匯入專案後調整設定即可執行,部分專案使用資料庫為DerbyHSQL,定位為常備的工具書籍。

要開發企業級網站並不容易,需要具備的知識與技術很多;近年來因為RWD(響應式網頁設計)興起,也要考慮在行動裝置上呈現的樣貌,因此更需要一些開放原始碼(open source)的協助,即便在使用者體驗(user experience)方面。本書共分4個部分,分別是:

Part 1:前端網頁應用程式。包含HTMLCSSJavaScriptJQueryBootstrap,本書著重點不在美編設計或是前端程式設計,而是在如何運用已知的元件和函式庫。

Part 2SevletJSP與網站伺服器。了解Java在網站容器裡的運行方式,有助於解決一些底層問題。
Part 3Java網站框架。架構企業網站如同興建大型建築,細節、效率、安全性、成本等都要考量,使用框架可以達到這些需求。
Part 4:綜合實作。結合前述3個部分的網站開發基礎,使用Bootstrap模板建構現代化Java企業網站。
限於篇幅,書中涉及Java SE的主題將請讀者參閱「Java SE7/8 OCPJP進階認證指南:擬真試題實戰」一書的指定篇章。
這本書的出版,受到了很多親朋好友、公司同事、讀者與Java技術與認證交流平台(https://www.facebook.com/groups/748837991920629/?ref=bookmarks)版友的鼓勵與督促,再次感謝各位。

--------------------------------------------------------------------------------------------------

內容(暫定,依實際出版為主) :

Part 1:前端網頁應用程式

第1章 HTML 

1.1 HTML基本標籤介紹 
1.2 HTML架構性元素
1.3 HTML語意性元素
1.4 HTML內容群組元素 
1.5 HTML文字層級元素 
1.6 HTML嵌入內容元素 
1.7 HTML表格元素 
1.8 HTML表單元素 


第2章 CSS

2.1 CSS簡介與使用方式
2.1.1 CSS簡介
2.1.2 使用CSS的方法
2.2 CSS樣式規則與選擇器
2.2.1 CSS樣式規則
2.2.2 CSS選擇器
2.3 CSS Box Model
2.3.1 內容(content)
2.3.2 留白(padding)
2.3.3 框線(border)
2.3.4 邊界(margin)
2.4 CSS常用樣式
2.4.1 字體(font)
2.4.2 清單(list)
2.4.3 文字

第3章 JavaScript

3.1 JavaScript介紹
3.1.1 簡介
3.1.2 基本語法
3.1.3 使用方式
3.2 JavaScript變數與函式
3.2.1 資料型態與變數宣告
3.2.2 變數宣告
3.2.3 函式宣告
3.2.4 變數作用域(Variable Scope)
3.2.5 函式表達式(Function Expression)
3.3 JavaScript流程控制
3.3.2 選擇結構
3.3.3 重複結構
3.4 JavaScript物件
3.4.1 建立物件、屬性與方法
3.4.2 內建物件
3.5 JavaScript BOM
3.5.1 timer物件
3.5.2 window物件
3.5.3 location與history物件
3.6 JavaScript DOM
3.6.1 選取HTML元素
3.6.2 利用被選取物件的屬性
3.6.3 利用被選取物件的方法
3.6.4 綁定HTML元素事件(Event)
3.7 JSON
3.7.1 JSON簡介
3.7.2 JSON資料格式
3.7.3 JSON處理函式


第4章 jQuery

4.1 jQuery介紹
4.1.1 jQuery簡介
4.1.2 jQuery使用方式
4.2 jQuery選取元素
4.2.1 jQuery選擇器
4.2.2 jQuery選擇器返回的型態
4.3 jQuery DOM操作
4.3.1 attr()、removeAttr()
4.3.2 addClass()、removeClass()
4.3.3 val()
4.3.4 css()
4.3.5 html()、text()、append()、prepend()、before()、after()
4.3.6 empty()、remove()
4.3.7 clone()
4.4 jQuery事件處理
4.4.1 事件處理函式
4.4.2 Event Object
4.4.3 jQuery自定義的事件綁定處理函式
4.4.4 $(document).ready()與$(window).load()
4.5 jQuery特效
4.5.1 於指定時限完成顯示或隱藏元素
4.5.2 切換顯示和隱藏狀態
4.5.3 以滑動特效顯示或隱藏元素
4.5.4 以淡入或淡出特效顯示或隱藏元素
4.5.5 動態逐漸調整元素透明度
4.5.6 自行定義複合特效

第5章 Bootstrap

5.1 Bootstrap介紹
5.1.1 Bootstrap簡介
5.1.2 Bootstrap使用方式
5.2 Bootstrap網格系統(Gird System)
5.3 Bootstrap CSS樣式
5.3.1 文字與段落
5.3.2 響應式圖片
5.3.3 表格與響應式表格
5.3.4 表單
5.3.5 表單控制項
5.4 Bootstrap元件
5.4.1 字型圖示(glyphicon)
5.4.2 警示元件(alert)
5.4.3 縮圖(thumbnail)
5.4.4 面板(panel)
5.4.5 按鈕群組(button group)
5.4.6 麵包屑(breadcrumb)

Part 2:Sevlet、JSP與網站伺服器

第6章 Java Servlet

6.1 網際網路名詞介紹
6.2 網站和網站應用程式介紹 
6.3 使用Java技術和Servlet
6.3.1 Servlet簡介
6.3.2 Web容器
6.3.3 建立Servlet


第7章 Java Server Pages

7.1 JSP簡介 
7.1.1 使用JSP修正Servlet的缺點
7.1.2 使用JSP的缺點
7.2 MVC建構介紹 


第8章 實做MVC架構 

8.1 MVC架構說明
8.2 MVC實做示範
8.3 設計的疑問?


第9章 Servlet執行環境

9.1 HTTP機制再檢視
9.1.1 HTTP方法說明
9.1.2 使用Chrome瀏覽器檢視request/response資訊
9.2 方法GET與POST的差別
9.2.1 實作POST方法提交表單
9.2.2 使用Java類別編碼/解碼
9.3 容器與瀏覽器的互動
9.3.1 容器處理請求的流程 
9.3.2 HttpServlet API
9.3.3 HttpServletRequest API
9.3.4 HttpServletResponse API
9.3.5 代理(Proxy)
9.3.6 處理Servlet進行中發生的錯誤
9.4 容器與瀏覽器的對話(session)
9.4.1 HTTP is stateless
9.4.2 容器記錄瀏覽器對話內容的方式
9.4.3 容器辨識瀏覽器的方式
9.4.4 容器使用Cookie辨識瀏覽器
9.4.5 容器使用URL-Rewriting辨識瀏覽器
9.4.6 避免使用HttpSession的方式

第10章 容器支援Servlet和JSP的設備

10.1 Web應用程式的部署與結構
10.1.1 打包Web應用程式
10.1.2 WAR檔案結構
10.1.3 Context Root
10.1.4 部署WAR至Tomcat
10.2 Web應用程式的部署設定
10.2.1 部署描述檔(Deployment Descriptor)的變革
10.2.2 部署資訊的效力優先順序
10.2.3 Servlet對照關係(Mapping)
10.2.4 初始參數供Servlet使用
10.2.5 web.xml其他設定資訊


第11章 再談View的機制 

11.1 Web提供資料存取的4個範圍
11.2 EL進階介紹
11.2.1 EL的存取範圍
11.2.2 EL的資料存取運算子與錯誤處理
11.2.3 EL的隱含物件
11.2.4 EL的其他運算子
11.2.5 EL的參數設定
11.3 JSTL基礎介紹
11.3.1 JSTL簡介
11.3.2 使用JSTL的<c:if>標籤
11.3.3 使用JSTL的<c:forEach>標籤


第12章 JSP程式設計 

12.1容器處理JSP的流程
12.1.1 Servlet與JSP的比較
12.1.2 JSP的生命週期
12.1.3 找出JSP被轉譯及編譯後的檔案
12.1.4 JSP的隱含變數(Implicit Variables)
12.2 使用JSP的腳本(scripting)語言
12.2.1 註解(Comment)標籤
12.2.2 指示(Directive)標籤
12.2.3 宣告(Declaration)標籤
12.2.4 小程式(Scriplet)標籤
12.2.5 表示式(Expression)標籤
12.3使用JSP標準標籤
12.3.1 標籤<jsp:useBean>
12.3.2 標籤<jsp:setProperty>
12.3.3 標籤<jsp:getProperty>
12.3.4 標籤<jsp:include>、<jsp:forward>、<jsp:param>
12.3.5 標籤<jsp:plugin>、<jsp:params>、<jsp:fallback>


第13章 使用課製化標籤開發JSP程式 

13.1 課製化標籤函式庫
13.1.1 簡介課製化標籤函式庫
13.1.2 使用課製化標籤函式庫
13.2 使用JSTL的核心標籤函式庫
13.2.1 使用<c:set>標籤
13.2.2 使用<c:url>標籤
13.2.3 使用<c:out>標籤
13.2.4 使用其他核心標籤函式庫標籤
13.3 使用JSTL的其他標籤函式庫
13.3.1 使用格式化標籤函式庫
13.3.2 使用XML處理標籤函式庫
13.3.3 使用資料庫存取標籤函式庫
13.3.4 使用功能函式標籤函式庫


第14章 深入Controller

14.1 Servlet生命週期
14.1.1 載入類別
14.1.2 建立Servlet實例
14.1.3 呼叫init(ServletConfig)方法
14.1.4 呼叫service()方法
14.1.5 呼叫destroy()方法
14.2 使用Annotation標註生命週期
14.3 Servlet與執行緒安全
14.4 使用過濾器
14.4.1 對請求的request與response套用過濾器
14.4.2 對分派的request與response套用過濾器
14.4.3 過濾器觸發時機
14.4.4 使用web.xml宣告過濾器
14.4.5 過濾器執行順序
14.5 使用Multipart的表單上傳檔案


第15章 深入Model

15.1 再談MVC架構裡的Model概念
15.2 資料庫和外部資源存取
15.2.1 Data Access Object (DAO)
15.2.2 使用Apache的dbcp套件建立Connection Pool
15.2.3 使用JNDI取得Connection Pool
15.3 Object Relational Mapping (ORM)的軟體架構與JPA
15.3.1 Object Relational Mapping (ORM)簡介
15.3.2 ORM、JPA、EJB
15.3.3 Java Persistence API (JPA)的實體類別
15.3.4 實體類別的生命週期和操作特性

第16章 非同步的Servlets和AJAX

16.1 非同步Servlet
16.1.1 容器建立thread處理request的限制
16.1.2 使用非同步Servlet
16.2 非同步JavaScript and XML (AJAX)
16.2.1 建立AJAX的伺服器端Servlet程式
16.2.2 建立AJAX的瀏覽器端JavaScript程式
16.3 使用JQuery套件處理AJAX
16.3.1 JQuery AJAX 函式
16.3.2 JQuery AJAX 事件

第17章 網站安全性實作 

17.1 網站應用程式的安全性考量
17.2 常見的網站攻擊模式 
17.2.1 程式碼(code)和資料(data)的混淆
17.2.2 SQL Injection (SQL注入)
17.2.3 Cross-Site Scripting (跨站腳本攻擊)
17.3 使用者的身分驗證(Authentication)和授權(Authorization)
17.3.1 安全性考量的介入
17.3.2 Java EE的安全性架構
17.3.3 使用者驗證的方式
17.3.4 使用者驗證的流程
17.3.5 使用者授權的方式
17.3.6 使用者授權的方式-宣告式
17.3.7 使用者授權的方式-編程式
17.3.8 參考的角色(Role References)
17.4 網路資料傳輸的加密(Encryption)
17.4.1 設定憑證
17.4.2 啟用HTTPS

Part 3:Java網站框架

第18章 Spring框架導論

18.1 Spring的目的與策略
18.1.1 Spring簡介
18.1.2 Spring的目的與簡化開發的策略
18.1.3 Spring使用POJO原件
18.2 Spring開發手法DI介紹
18.2.1 DI簡介
18.2.2 使用Spring的關連注入(DI)
18.3 Spring開發手法AOP介紹
18.3.1 AOP簡介
18.3.2 未使用AOP時的程式碼亂象
18.3.3 導入AOP的概念
18.3.4 使用Spring以XML設定檔為基礎的AOP
18.3.5 使用Spring以Java設定類別為基礎的AOP
18.3.6 其他的Spring AOP應用領域
18.4 Spring開發手法Template介紹
18.4.1 Template簡介
18.4.2 使用JDBCTemplate
18.5 Spring的架構
18.5.1 Spring容器的分類
18.5.2 Spring元件的生命週期
18.6 Spring的模組與商品組合
18.6.1 Spring 4.X基本模組分類
18.6.2 Spring產品組合(Portfolio)

第19章 Spring DI

19.1 了解Spring DI的數種使用方式
19.2 使用搜尋和縫合技術進行自動化DI
19.2.1 自動化DI的原理與核心標註類別
19.2.2 自動化DI以Java設定類別進行
19.2.3 自動化DI以XML設定檔進行
19.2.4 自動化DI的核心標註類別使用說明
19.2.5 自動化DI無法使用的情境
19.3 使用Java設定類別指定元件進行DI
19.3.1 使用@Bean標註類別指定DI元件
19.4 使用XML設定檔指定元件進行DI
19.4.1 使用XML設定檔指定DI元件
19.4.2 以建構子注入物件關聯
19.4.3 以建構子注入字面常量
19.4.4 以建構子注入集合物件關聯
19.4.5 以屬性欄位注入物件關聯
19.4.6 以屬性欄位注入集合物件關聯
19.4.7 使用util名稱空間的<util:list>標籤
19.5 使用混合方式進行DI
19.5.1 以Java設定類別為主,整合其他Java設定類別
19.5.2 以Java設定類別為主,整合其他XML設定檔
19.5.3 以XML設定檔為主,整合其他XML設定檔和Java設定類別

第20章 Spring AOP

20.1 代理人設計模式
20.1.1 代理人設計模式簡介
20.1.2 代理人設計模式示範
20.2 AOP (Aspect-Oriented Programming)介紹
20.2.1 AOP簡介
20.2.2 AOP專用術語
20.2.3 Spring框架對AOP的支援
20.2.4 Spring AOP的Advice作用在執行時期
20.3 使用PointCut表示式篩選Joint Points
20.4 使用標註類別定義Aspect物件
20.4.1 使用標註類別定義AOP元件
20.4.2 使用@Pointcut避免表示式重複定義
20.4.3 使用@Around建立Around Advice
20.4.4 使用標註類別攔截方法參數
20.4.5 使用標註類別定義Introduction元件
20.5 使用XML設定檔定義Aspect物件
20.5.1 使用標籤定義AOP元件
20.5.2 使用<aop:pointcut>標籤避免表示式重複定義
20.5.3 使用<aop:around>標籤建立Around Advice
20.5.4 使用標籤攔截方法參數
20.5.5 使用標籤定義Introduction元件

第21章 Spring JDBCTemplate 

21.1 樣板方法設計模式介紹
21.1.1 樣板方法設計模式簡介
21.1.2 樣板方法設計模式示範
21.1.3 好萊塢法則
21.2 了解Spring框架資料處理邏輯
21.2.1 Spring使用DAO設計模式
21.2.2 Spring資料處理的Exception架構
21.2.3 Spring資料處理的流程
21.2.4 Spring資料處理的樣版選項
21.3 設定Spring資料來源
21.3.1 使用JNDI Lookup
21.3.2 使用Connection Pool
21.3.3 使用JDBC Driver
21.4 使用JDBC樣板類別
21.4.1 JDBC樣板類別的優點與種類
21.4.2 關聯注入資料來源
21.4.3 比較樣板類別新增資料的方式
21.4.4 比較樣板類別查詢資料的方式
21.5 使用交易
21.5.1 Spring控管交易的核心類別
21.5.2 使用XML設定檔示範交易
21.5.3 使用Java設定類別示範交易


第22章 Spring MVC

22.1 Spring MVC架構
22.1.1 Spring MVC處理請求和回應的流程
22.1.2 使用XML設定檔啟用Spring MVC
22.1.3 使用Java設定類別啟用Spring MVC
22.2 建立Controller
22.2.1 建立方法層級的Controller
22.2.2 建立類別層級的Controller
22.2.3 建立View並單元測試
22.2.4 MVC的架構
22.2.5 常見的4種Controller實做風格
22.2.6 對請求未夾帶參數的controller方法進行單元測試
22.3 取得請求夾帶的輸入參數
22.3.1 查詢參數(Query Parameters)
22.3.2 路徑變數(Path Variables)
22.3.3 表單參數(Form Parameters)
22.4 表單處理流程與資料驗證
22.4.1 請求表單
22.4.2 提交表單
22.4.3 重導表單處理後的結果頁面
22.4.4 伺服器端驗證表單資料

第23章 Spring MVC View

23.1 深入View的解析過程
23.1.1 回顧View的處理流程
23.1.2 View Resolver
23.1.3 設定InternalResourceViewResolver屬性
23.2 使用Spring標籤函式庫
23.2.1 使用表單綁定標籤函式庫
23.2.2 表單驗證失敗標籤<sf:errors>的多種呈現風格
23.2.3 表單驗證失敗的客製化訊息
23.2.4 使用基礎設施標籤函式庫
23.2.5 基礎設施標籤<s:message>呈現多國語系

第24章 SiteMesh框架

24.1 使用SiteMesh設計網站版型
24.1.1 SiteMesh原理
24.1.2 SiteMesh架構
24.1.3 SiteMesh使用步驟
24.2 SiteMesh結合JAAS實作專案
24.2.1 容器安全性機制的設定
24.2.2 web.xml安全性機制的設定
24.2.3 驗證JAAS機制
24.2.4 驗證套用SiteMesh的URL

Part 4:綜合實作

第25章 打造企業級Java RWD Web

25.1 使用Bootstrap範本建立HTML動態網站應用程式
25.1.1 RWD網站相對於手機APP的優勢
25.1.2 下載企業級Bootstrap靜態網站範本
25.2 轉置為Java Web專案
25.3 轉換HTML靜態網站為JSP網站應用程式
25.4 套用SiteMesh框架
25.4.1 分析blank.jsp
25.4.2 分析tables.jsp
25.4.3 分析flot.jsp
25.4.4 分析morris.jsp
25.4.5 分析login.jsp
25.4.6 導入SiteMesh框架
25.4.7 建立頁面裝飾者layout.jsp
25.4.8 建立被裝飾者頁面
25.4 套用Spring MVC
25.4.1 準備JAR函式庫和Configuration類別
25.4.2 依MVC架構建立範本相關類別
25.5 新增基本表單功能實作
25.5.1 建立Spring MVC設定類別
25.5.2 建立menuTree.jsp
25.5.3 建立商業邏輯類別
25.5.4 建立商業邏輯JSP
25.5.5 Exception處理