內容簡介
《輕鬆掌握Struts 2》對企業級JavaEE開發框架Struts2進行瞭係統講解。Struts2是一個設計精巧的框架,在企業開發領域已經得到廣泛應用。為使讀者更方便理解框架,《輕鬆掌握Struts 2》先通過一個簡單的示例對框架進行介紹,使瀆者有一個整體的感性認識,然後按照自下而上的方式分彆對Action組件、攔截器、標記庫、結果視圖類型、類型轉換、輸入校驗、異常處理、國際化、Ajax支持和與Spring、Hibernate集成等10個專題對框架進行深入介紹,使讀者對框架的各個功能特性都有深入的理解。在各個專題的講解中,對框架底層的實現機製進行瞭深入剖析,加深讀者對框架的理解,同時對實際應用中的開發技巧和方法通過具體示例進行詳盡演練,務必達到使讀者不僅能夠在實際開發中靈活運用Struts2框架,而且對Struts2框架的設計思想和設計模式有透徹領會,從而切實提高自身能力水平。
《輕鬆掌握Struts 2》適用於對JavaEE編程有一定瞭解,希望盡快掌握Struts2編程技術的開發人員,也適閤希望提高JavaEE應用係統架構設計水平的中高級開發人員參考。《輕鬆掌握Struts 2》也可作為Struts2編程技術的培訓教材。
內頁插圖
目錄
第1章 認識一下Struts2
1.1 什麼是Web應用
1.2 開發Web應用為什麼需要框架
1.2.1 企業應用開發的特點
1.2.2 Web應用模型的先天不足
1.2.3 JavaEE身後的空白
1.3 什麼是框架
1.4 認識一下Strots2框架
1.4.1 Struts2的前世今生
1.4.2 Struts2框架的基本思想
1.4.3 Struts2框架的MVC實現
1.5 Struts2學習路綫
第2章 第一個SStruts2應用
2.1 創建Web應用HelloStruts2
2.2 為Web應用添加Struts2支持
2.2.1 將Struts2框架類庫添加到項目路徑
2.2.2 修改Web應用配置文件Web.xmi
2.3 開發Struts2組件
2.3.1 定義視圖組件
2.3.2 定義模型組件
2.4 配置Struts2框架
2.5 測試運行
2.6 透視Struts2框架下的Web應用
2.7 配置”的StrutsWeb應用
2.7.1 添加Convention插件
2.7.2 定義模型組件
2.7.3 定義視圖組件
2.7.4 深入探索
2.8 利用Annotation配置Struts2框架
總結
第3章 Action組件
3.1 如何開發Action
3.2 Action做瞭些什麼
3.3 在Action中訪問資源
3.3.1 自動獲取Web請求參數
3.3.2 通過ActionContext獲取
3.3.3 通過ServletActionContext
3.3.4 Struts2框架注入
3.3.5 傳遞靜態參數
3.4 讓Action處理多個請求
3.4.1 動態方法調用
3.4.2 定義邏輯Action
3.4.3 在配置文件中使用通配符
3.5 Action的處理結果
3.6 Action的組織
總結
第4章 攔截器
4.1 為什麼要使用攔截器
4.2 什麼是攔截器
4.3 如何使用攔截器
4.4 攔截器的工作原理
4.5 Struts2框架中的攔截器
4.6 開發自己的攔截器
4.6.1 創建Struts2組件
4.6.2 創建攔截器
4.6.3 配置攔截器
4.6.4 演示分析
4.7 攔截器與結果視圖
4.8 監聽攔截器結果
4.9 攔截器執行順序和參數傳遞
總結
第5章 標記庫
5.1 標記庫概述
5.2 站在ValueStack上
5.3 標記的語言——OGNL
5.3.1 訪問ObiectStack中的元素
5.3.2 訪問StackContext中的信息
5.3.3 訪問靜態屬性和方法
5.3.4 訪問集閤元素
5.4 使用標記庫
5.5 控製標記
5.5.1 分支控製
5.5.2 迭代控製
5.5.3 集閤操作
5.6 數據標記
5.6.1 action標記
5.6.2 property標記
5.6.3 debug標記
5.6.4 bean標記
5.6.5 set標記
5.6.6 push標記
5.6.7 include標記
5.6.8 param標記
5.6.9 url標記
5.6.1 0date標記
5.7 ui標記
5.8 關於標記屬性的說明
總結
第6章 結果視圖類型
6.1 結果類型
6.2 利用結果類型實現Action協作
6.3 利用stream結果類型實現文件
總結
第7章 類型轉換
7.1 框架內置的類型轉換支持
7.2 框架內置類型轉換示例
7.3 類型轉換實現機製
7.4.JavaBean對象的類型轉換
7.5 自定義對象的類型轉換
7.6 集閤對象的類型轉換
7.7 類型轉換流程
總結
第8章 輸入校驗
8.1 Struts2校驗機製
8.2 利用Struts2框架實現校驗
8.3 內置校驗器
8.4 校驗器配置
8.5.校驗器的執行與短路
8.6 復雜對象屬性校驗
8.7 校驗錯誤信息的處理
8.8 自定義校驗器
8.9 客戶端驗證
8.10 手動校驗
總結
第9章 異常處理
9.1 異常處理機製
9.2 異常處理的聲明
9.3 異常處理示例
總結
第10章 國際化
10.1 在Java應用中實現國際化
10.1.1 三個類
10.1.2 資源文件
10.1.3 一個示例
10.2 Struts2對國際化的支持
10.3 Struts2下的國際化應用
10.4 區域屬性的手動選擇
10.5 顯示本地化信息的方法
10.6 國際化資源的定義
10.7 資源屬性文件的定位查找
10.8 顯示本地化異常信息
10.9 資源文件參數化
總結
第11章 Ajax
11.1 什麼是AjaX
11.2 一個簡單的Aja應用示例
11.2.1 AiaX框架JavaScript腳本
11.2.2 特定應用腳本
11.2.3 處理Aiax請求的服務器組件
11.2.4 輔助JavaBean
11.2.5 交互頁麵
11.2.6 運行測試
11.2.7 思考
11.3 Struts2支持Ajax應用的實現原理
11.4 使用AjaX標記
11.5 實現自動完成功能
11.6 實現Aiax校驗
11.7 Struts2框架下的Aia)應用
總結
第12章 與SPing和Hbernate集成
12.1 為什麼要集成Spring和Hibemate
12.1.1 集成Spting
12.1.2 集成Hibernate
12.2 集成方案
12.3 實施步驟
12.3.1 添加相應的Jar
12.3.2 配置Web應用
12.3.3 在Spring框架中集成Hibernate
12.3.4 利用Spring AOP實現事務支持
12.3.5 Spring與Struts2的集成
12.3.6 實體對象與數據庫的映射
12.3.7 用hibernate操作數據庫
12.4 程序運行
12.5 總結
參考文獻
精彩書摘
企業級Web應用在軟件開發管理上具有以下特點。
(1)時間緊,任務重。有過軟件開發企業工作經曆的讀者都會親身感受過,一旦接手一個企業應用開發項目,所麵臨的最大睏難就是復雜的功能要求和緊迫的開發周期。這就要求企業充分利用已有的開發工作積纍(包括可重用的開發框架,開發組件)來盡可能的提高開發工作效率。
(2)規模化開發。企業應用開發一般采用多人參與、分工協作的開發模式。這就要求應用開發在架構上適應目前的規模化開發模式,以確保較高的工作效率和工程化的管理模式。
1.2.2 Web應用模型的先天不足
1.2.1節講瞭企業級Web應用開發的高標準嚴要求,但迴過頭來看一下Web應用模型,卻存在著技術體製上的“先天不足”。在1.1節講過,不管是靜態Web應用還是動態Web應用,它們采用一緻的工作模式:應用由服務器端和客戶端兩部分組成,服務器端和客戶端通過HTTP協議采用“請求一應答”模式進行通信。
從上麵的描述可以看齣HTTP協議在Web應用模型中的重要地位。作為一種簡單的通信協議,HTTP協議在促進Web應用得到快速普及上功不可沒。但“成也蕭何,敗也蕭何”,由於HTTP協議最初是針對靜態Web應用而設計的,隨著開發復雜的動態Web應用的不斷深入,HTTP協議漸漸錶現得力不從心。主要原因有以下兩點。
1.HTTP協議是一種無狀態的協議
HTTP協議是一種非連接的通信協議,它采用“請求一應答”模式的通信方式。瀏覽器作為客戶端嚮服務器發起請求,服務器根據客戶端的請求,返迴一個靜態頁麵或者動態生成的頁麵作為應答,此時瀏覽器與客戶機之間的一次通信過程結束,二者之間的連接將中斷,服務器對客戶端的狀態信息將不做任何保留。如果客戶端瀏覽器需要發起新的資源請求,則對不起,一切重頭再來,需要客戶端按照前麵的步驟重新啓動新一輪的“請求一應答”通信過程。
前言/序言
隨著網絡的日益普及以及社會信息化程度的提高,越來越多的軟件開發人員需要開發Web應用程序。Struts2作為目前最受歡迎的企業級Java EE Web應用程序開發框架越來越受到歡迎,並且取得瞭許多成功的案例,已經成為Java EE開發人員必須掌握的技能之一。本書起源
在寫作本書之前筆者也曾猶豫再三,原因有三。一是Java EE編程技術日新月異,Struts2框架的發展更是如此,就在寫作本書的過程中,Struts2框架的版本就經曆瞭不小的變化。針對一門迅速發展的技術寫作就好比對疾馳的火車拍照,難以反映齣Strut2框架的現狀和全貌。二是Struts2是一個設計精巧的開發框架,它的各個部分之間是緊密聯係的,因此如何對Struts2框架展開描述,以便讀者能夠循序漸進地學習Strus2框架一直是睏擾筆者的一個問題,提筆時總有一種“老虎吃天,無從下口”的感覺。三是感覺自身水平有限,難免存在疏漏,貽誤讀者,心中總是惶惶然。
但迴顧自己學習Struts2框架過程中走過的曆程,經曆瞭被種種錯誤資料誤導的痛苦,被Google搜索齣的浩如煙海的數據淹沒的窒息,對某個具體問題經過嘗試實驗解開後的喜悅,所以也想把這些感受拿齣與你分享。
本書寫作的目的在於,通過對Struts2框架較為係統地介紹,使讀者能夠全麵認識Struts2框架,不但掌握運用Struts2框架的技巧,更能領會Struts2框架設計思想的精妙,從而提高Java EE應用的架構設計水平。
本書不是一本手冊書或操作指南,它不會麵麵俱到講述Struts2框架的各個知識點,而是始終以較高的視點帶領讀者俯覽整個框架,從繁復紛雜中描齣框架的主綫,理解框架的設計,品味框架的精妙。
《Web開發新篇章:深入理解Servlet、JSP與Spring MVC》 內容簡介 在當今快速發展的互聯網時代,Web應用程序的開發技術日新月異。從最初簡單的靜態網頁,到如今功能強大、交互豐富的動態應用,Web開發經曆瞭深刻的變革。本書旨在為讀者提供一個全麵而深入的Web開發技術棧視角,重點剖析支撐現代Java Web應用核心的三大基石:Servlet、JSP以及Spring MVC框架。我們不局限於某一特定框架的淺嘗輒止,而是力求讓讀者深刻理解其背後的原理,掌握構建健壯、高效Web應用的必備技能。 第一部分:Servlet——Java Web的基石 Servlet是Java Web開發中最基礎、最核心的技術。它扮演著服務器端“控製器”的角色,負責接收客戶端的HTTP請求,處理業務邏輯,並生成HTTP響應。本書將從Servlet的誕生背景、生命周期、請求與響應處理機製等方麵,為讀者構建紮實的Servlet基礎。 Servlet的起源與核心概念:我們將追溯Servlet的演進曆程,理解它如何成為Java處理Web請求的標準。深入剖析Servlet接口、GenericServlet以及HttpServlet的結構,理解它們各自的職責與優勢。 Servlet的生命周期詳解:通過詳細的圖解和代碼示例,我們將深入解析Servlet的三個關鍵生命周期方法:`init()`、`service()`和`destroy()`。理解它們在Servlet容器中的調用時機和作用,以及如何通過這些方法實現Servlet的初始化、請求處理和資源釋放。 請求與響應的奧秘:詳細講解`HttpServletRequest`和`HttpServletResponse`對象的使用。我們將探索如何從請求中獲取各種參數(包括URL參數、錶單數據、Cookie、Header等),如何設置響應的狀態碼、Header信息、Cookie,以及如何輸齣各種類型的內容(HTML、JSON、XML等)。 Servlet的綫程安全與並發處理:在多用戶並發訪問的Web環境中,綫程安全是至關重要的問題。本書將深入探討Servlet的綫程模型,分析可能齣現的並發問題,並介紹有效的解決方案,如使用`synchronized`關鍵字、`ServletContext`的共享資源管理、以及Servlet 3.0引入的異步處理機製。 Servlet與Web應用的集成:我們將講解`web.xml`(或Servlet 3.0+的注解配置)的作用,包括Servlet的注冊、URL映射、初始化參數配置、安全約束等。理解Servlet如何與Web應用的其他組件(如Listener、Filter)協同工作,構建完整的Web應用架構。 過濾器(Filter)與監聽器(Listener):Filter和Listener是Servlet API中非常重要的兩個組件,它們為Web應用提供瞭強大的擴展能力。我們將詳細介紹Filter的鏈式處理機製,以及如何利用Filter實現如日誌記錄、身份認證、字符編碼處理、性能監控等功能。Listener則用於監聽Web應用的生命周期事件,如應用啓動、銷毀、請求的創建與銷毀等,我們將展示如何利用Listener進行資源初始化、上下文管理等。 第二部分:JSP——動態Web內容的呈現 JavaServer Pages (JSP)技術允許開發者將Java代碼嵌入到HTML頁麵中,從而實現動態內容的生成。JSP是一種更側重於“視圖”的技術,它使得前端開發人員和後端開發人員能夠更清晰地分工。本書將帶領讀者深入JSP的世界,理解其工作原理和高級特性。 JSP的本質:Servlet的轉換:我們將揭示JSP頁麵的背後秘密——它會被JSP容器編譯成一個Servlet。通過對比JSP頁麵和生成的Servlet代碼,讀者將深刻理解JSP的工作機製,以及為何JSP能夠執行Java代碼。 JSP的基本語法與指令:詳細介紹JSP中常用的語法元素,包括錶達式(`<%= %>`)、腳本片段(`<% %>`)、聲明(`<%! %>`)以及JSP特有的動作標簽(如``、``、``等)。同時,我們將深入講解JSP的三大指令:`page`、`include`和`taglib`,理解它們如何控製JSP頁麵的行為和導入外部資源。 JSP內置對象:JSP提供瞭九個內置對象,極大地簡化瞭Web開發。本書將逐一講解這些內置對象,包括`request`、`response`、`session`、`application`、`out`、`pageContext`、`config`、`page`以及`exception`。理解它們的用途和作用域,以及如何在JSP頁麵中靈活運用它們。 JSP與JavaBean的結閤: JavaBean是JSP中常用的組件,用於封裝業務數據。我們將演示如何創建、使用JavaBean,並通過JSP動作標簽(如``、``、``)將其與JSP頁麵集成,實現數據驅動的頁麵展示。 JSP的MVC模式應用:雖然JSP本身更側重於視圖層,但我們可以將其與Servlet結閤,構建簡單的MVC(Model-View-Controller)模式。我們將講解如何利用Servlet作為Controller,處理請求並將數據傳遞給JSP(View)進行展示。 JSP的四大作用域:深入理解JSP的四大作用域:`page`、`request`、`session`和`application`。分析它們各自的生命周期和數據共享範圍,以及如何在不同場景下選擇閤適的作用域來管理數據。 JSP的錯誤處理與異常機製:學習如何利用JSP的`isErrorPage`屬性和`exception`內置對象來處理頁麵運行時發生的異常,以及如何配置自定義的錯誤頁麵,提升用戶體驗。 JSP標簽庫(Tag Libraries):介紹JSP標簽庫的概念,包括標準標簽庫(JSTL)和自定義標簽庫。重點講解JSTL在簡化JSP開發中的強大作用,如條件判斷、循環、變量操作、XML處理等,幫助讀者擺脫在JSP中大量編寫Java代碼的睏擾。 第三部分:Spring MVC——企業級Java Web開發的現代化選擇 隨著Web應用的復雜度不斷提升,傳統的Servlet/JSP開發模式在大型項目中顯得力不從心。Spring MVC框架作為Spring框架的一部分,為Java Web開發提供瞭一種更加靈活、高效、模塊化的解決方案,並且已經成為企業級Java Web開發的標準。 Spring MVC的核心理念與架構:深入理解MVC設計模式在Spring MVC中的具體實現。剖析`DispatcherServlet`作為前端控製器的核心作用,以及`HandlerMapping`、`Controller`、`ModelAndView`、`ViewResolver`等關鍵組件的協同工作流程。 請求的生命周期在Spring MVC中的映射:我們將詳細跟蹤一個HTTP請求從進入`DispatcherServlet`到最終生成響應的完整流程。理解每個組件在其中扮演的角色,以及數據如何在這些組件之間傳遞。 Controller的編寫與請求映射:學習如何定義Spring MVC的Controller,包括使用`@Controller`、`@RequestMapping`等注解進行類和方法的映射。掌握如何處理不同的HTTP方法(GET、POST、PUT、DELETE等),以及如何使用URL路徑變量、請求參數、請求頭等來精細化地控製請求的映射。 模型(Model)與視圖(View)的處理:深入講解如何在Controller中構建模型數據,以及如何將模型數據傳遞給視圖進行渲染。學習使用`ModelAndView`對象、`Model`接口、`RedirectAttributes`等方式來管理模型數據。同時,我們將介紹各種視圖技術(如JSP、Thymeleaf、FreeMarker等)的配置和使用,以及`ViewResolver`的作用。 數據綁定與錶單處理:Spring MVC提供瞭強大的數據綁定機製,能夠自動將HTTP請求中的數據映射到Java對象的屬性上。我們將詳細講解如何利用`@ModelAttribute`、`@RequestBody`、`@RequestParam`等注解進行數據綁定,以及如何處理錶單提交、文件上傳等常見場景。 數據校驗(Validation):在Web應用開發中,數據校驗是保證數據質量的關鍵環節。本書將介紹Spring MVC與JSR 303(Bean Validation)規範的集成,學習如何使用注解進行字段校驗,以及如何在Controller中捕獲校驗錯誤並嚮用戶反饋。 RESTful Web Services的支持:現代Web應用越來越傾嚮於構建RESTful服務。我們將重點講解Spring MVC如何支持RESTful風格的開發,包括使用`@RestController`、`@ResponseBody`、`produces`和`consumes`等屬性,以及如何處理JSON、XML等數據格式的請求和響應。 攔截器(Interceptor)與全局異常處理:Spring MVC提供瞭攔截器機製,可以對Controller的執行進行攔截和增強,類似於Servlet的Filter,但更加靈活。我們將演示如何編寫和配置攔截器,實現如登錄驗證、權限控製、日誌記錄等功能。同時,學習如何利用`@ControllerAdvice`和`@ExceptionHandler`實現全局異常處理,統一管理應用程序的異常。 Spring MVC與其他Spring組件的集成:Spring MVC是Spring生態係統的一部分,它能夠與Spring的IoC容器、AOP、事務管理等其他核心功能無縫集成。我們將展示如何利用Spring的依賴注入來簡化Controller的開發,以及如何利用Spring的事務管理來保證數據的一緻性。 單元測試與集成測試:為保證Web應用程序的質量,測試是必不可少的。本書將介紹如何為Spring MVC的Controller編寫單元測試和集成測試,包括使用`MockMvc`進行模擬請求測試,以及如何驗證Controller的輸齣和行為。 本書特色 深度與廣度並存:本書不僅講解瞭Servlet和JSP作為Java Web開發基礎的原理,更深入地介紹瞭現代化的Spring MVC框架,為讀者提供瞭從入門到精通的全方位指導。 原理與實踐相結閤:每一章節都力求在講解原理的同時,提供大量貼閤實際的Java代碼示例,幫助讀者理解概念並能快速應用於開發實踐。 循序漸進的難度設計:從基礎的Servlet API講解,到JSP的動態頁麵生成,再到Spring MVC的架構設計,內容難度循序漸進,適閤不同階段的開發者閱讀。 貼閤企業級開發需求:本書重點關注Spring MVC在企業級Java Web開發中的應用,涵蓋瞭RESTful服務、數據校驗、異常處理、測試等關鍵技術點,是開發者邁嚮專業Web開發的重要參考。 強調底層理解:通過深入剖析Servlet和JSP的工作原理,本書幫助讀者建立起對Java Web開發底層機製的深刻理解,從而在麵對復雜問題時,能夠觸類旁通,找到根本的解決方案。 目標讀者 希望係統學習Java Web開發技術的初學者。 已經掌握Servlet/JSP基礎,但希望進一步深入理解其原理和掌握現代化開發框架的開發者。 正在進行Java Web項目開發,希望提升開發效率和代碼質量的工程師。 對構建健壯、可維護、高性能Web應用程序感興趣的技術愛好者。 通過閱讀本書,您將不僅掌握構建動態Web應用的各項技術,更能理解其背後設計的哲學和最佳實踐,為您的Web開發之旅注入強大的動力。