一、學習的基本路徑spring
首先創建好開發環境很是重要,工欲善其事,必先利其器。作任何開發,首先就是要把這個環境準備好,以後就能夠去作各類嘗試,嘗試過程當中就能逐漸創建信心。初學者每每在環境配置中被各類預想不到的問題弄得很沮喪。數據庫
創建起來環境了,改變世界就靠你的代碼了。學習一門編程語言沒有太多的訣竅,你可能能夠去找一本比較好的經典的入門書籍,如今網絡上也有很是多的資料,圖文或者視頻均可以,根據我的喜愛選擇。最重要的練習,熟能生巧,在不斷的練習中去加深本身對程序語言的理解。編程
接下來你須要瞭解這三個術語,叫SDK、API跟Lib,分別表示軟件開發套件,應用編程接口和庫。這三者之間其實有必定的聯繫,或者是交叉。整體來講,它們都是給咱們提供的一些封裝了底層功能的基礎設施。作Java開發的話,這些東西一般體現爲咱們所常常說的「框架」。事實上要成爲一個資深的Java開發者,對各類API和框架的學習,多是花時間最多的一個地方。設計模式
固然你也不可能把全部API或者SDK種的全部內容徹底弄懂。在軟件開發中也有二八原則,少數的API可以勝任開發中的大部分場景。因此你只須要掌握這些關鍵部分,當在新場景下遇到不能解決的新問題時,再去查看幫助文檔。因此幫助文檔的閱讀也是技術學習的一個關鍵因素。瞭解了基礎原理以後通常就能上手開發了,幫助文檔能夠幫助你在實踐中學習。瀏覽器
二、三個神器緩存
三個神器,對於軟件開發者來講很是重要。安全
- 第一個Google,雖然由於各類緣由的話有時候咱們訪問不了,可是這基本上是能夠去尋找技術資料最好的方式。
- 第二個是Github,以前提到過庫的概念,Github就是一個能夠找到大量第三方庫的地方,那是別人給咱們封裝好的能夠複用的代碼。比方說造一輛汽車的話,咱們常常不要本身造輪子,而Github上能夠找到不少優質的輪子,這些輪子仍是免費(代碼都是開源的),咱們應該儘可能利用它們來拼裝本身的汽車。
- 第三個是StackOverflow網站,在這個問答網站上你遇到的幾乎任何開發問題都能快速找到答案。
三、Java Web全棧開發的推薦學習內容服務器
簡單總結一下,大概包括下面這些內容。每一部分均可以細化成不少知識點,這只是一個粗略的羅列。把它當作技術地圖就行了。
- 開發環境的創建與項目管理:Eclipse、Maven和Git
- Java編程基礎:基本語法、面向對象特性、Java8新特性、更高級庫(好比Guava)的使用等
- 前端開發技術:HTML、CSS、Bootstrap和JavaScript基礎
- Spring基礎:依賴注入IoC、面向切面編程AOP、SpringBoot
- MVC框架:Spring MVC、Struts等,包括URL路由、模板、表單、Session、攔截器等知識
- 數據訪問:關係型數據庫、JDBC、Spring JDBC、事務、ORM框架(MyBatis,Hibernate、JPA)
- 成熟應用的關鍵功能實現:郵件發送、異步任務、緩存、日誌等
- 應用的測試和部署
下面對每部分的內容詳細介紹一下。
四、JSP/Servlet的相關內容
雖然如今各類成熟的MVC框架已經讓Java Web開發基本不多使用JSP和Servlet的原生功能了,基本都作了一層封裝。可是這部分基礎知識建議初學者仍是要認真學習。
- C/S模型,瀏覽器訪問網站過程
- URL基礎知識
- HTTP消息——請求和響應
- 處理HTTP請求的應用程序
- Servlet/JSP簡介
- Servlet容器,Servlet處理機制,Servlet生命週期
- 部署Servlet
- ServletContext, ServletConfig
- Filter, Event Listener
- 表達式,scriptlet, declaration
- 在JSP中訪問Java類
- JSP內置對象
- HTTP方法——GET v.s. POST
- 讀取表單數據
- Servlets/JSP存在的問題
- MVC設計模式
- 使用RequestDispatcher
- 在Servlets和JSP中傳遞數據,EL表達式
- JSP Tag Lib
- Core Tag(if, loop)
- Function Tag(string, fmt, utils)
- Session&&Cookie基本概念
- 經過Cookie記錄用戶狀態(相似購物車的例子)
- 使用Session跟蹤用戶(登陸)
五、數據庫相關的內容
掌握了Servlet/JSP技術,咱們已經能夠建立動態的Web應用了。除了動態的Web界面,一個有價值的Web應用必然須要進行數據存儲,開發上咱們通常稱之爲數據持久化(Data Persistence)。
從業務功能的角度出發,簡單的應用能夠認爲就是數據的增刪改查。好比一個產品級的博客應用,最核心的功能就是對博客內容的建立、修改、刪除和查詢,而這些功能都離不開Web服務器背後的數據庫系統。
- 實體、關係(表)、記錄(行)、列(屬性)
- 主鍵、外鍵等
- 數據庫表設計的基本原則
- MySQL基本使用
- SQL中的DDL——create,drop,alter,創建主鍵外鍵等約束
- SQL中的DML——insert, select, delete, update,join
- 數據庫鏈接,鏈接池
- 使用JDBC API訪問數據庫
- 分頁查詢
- 事務的基本概念
- JDBC代碼的封裝與數據訪問的三層架構
六、Spring相關的內容
Spring最重要的兩個核心功能是依賴注入(DI,Dependency Injection)和麪向切面編程(AOP,Aspect Oriented Programming)。其中DI用於管理Java對象之間的依賴關係,AOP用於解耦業務代碼和公共服務代碼(如日誌,安全,事務等)。DI和AOP可以讓代碼更加簡單,具備良好的鬆耦合特性和可測試性,極大地簡化開發。理解這二者是使用Spring框架的基礎。
- 依賴注入
- 面向切面編程(AOP)
- 基於POJO的編程模型
- 預置的模板代碼(如Spring JDBC)
- 依賴注入的優勢
- 依賴注入如何實現
- 基於XML的裝配方式
- 基於Java Configuration的裝配方式
- 自動裝配
- 多種裝配方式的混用
- 處理裝配的歧義
- 如何注入屬性值
- Singleton
- Prototype
- Request
- Session
- Global
- 切面、目標對象、切點、通知、織入等基本概念
- 如何定義切點:定義切點的aspectJ語法
- 定義通知
- 前置通知(Before)
- 後置通知(AfterReturning)
- 異常通知(AfterThrowing)
- 最終通知(After)
- 環繞通知(Around)
- 如何給切面傳參
七、Spring MVC相關內容
Spring做爲Java系的全棧(full-stack)開發框架,固然也對Web開發有着很是好的支持。Spring的Web MVC框架可以使開發者很是容易的開發Web應用,同時可以無縫享受到Spring自己的諸多好處——IoC容器、AOP編程等等。
- DispatcherServlet
- WebApplicationContext
- 處理HTTP請求過程
- @Controller, @RequestMapping註解
- URL模板模式,@PathVariable
- 獲取HTTP請求參數,@RequestParam
- @RequestMapping方法支持的參數
- @RequestMapping方法支持的返回值
- 處理靜態資源
- 配置JSP
- 配置其它模板引擎
- 重定向、Flash Attribute
- 表單數據綁定
- Spring表單標籤
- 表單驗證
- 文件上傳
- Flash Attribute
- Spring MVC請求處理流程
- HandlerInterceptor接口
- 配置Interceptor
- 配置錯誤頁面
- 使用HTTP狀態碼
- @ExceptionHandler
- ControllerAdvice全局異常處理
- @ResponseBody和@RequestBody
- 處理PUT和DELETE請求
八、MyBatis相關內容
MyBatis 是支持定製化 SQL、存儲過程以及高級映射的優秀的持久層框架。MyBatis 避免了幾乎全部的 JDBC 代碼和手動設置參數以及獲取結果集。MyBatis 能夠對配置和原生Map使用簡單的 XML 或標註,將接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java對象)映射成數據庫中的記錄
- ORM的概念
- 如何定義Mapper接口
- 如何定義XML Mapper映射
- 如何使用Mapper
- SqlSessionFactory
- SqlSessionFactoryBuilder
- SqlSession
- 基於Spring如何配置和使用Mapper
- SqlSessionFactoryBean的配置
- MyBatis Spring Boot Starter的使用
- 熟悉Mapper配置文件
- select元素
- select的resultType屬性
- insert元素
- update元素
- delete元素
- resultMap元素
- association元素
- 嵌套結果與嵌套查詢
- collection元素
- discriminator元素
- 動態SQL
- 分頁查詢(分頁插件)
九、JPA
ORM框架的出現使得咱們可以以面向對象的方式來操做關係數據庫,可是長久以來實現應用系統中的數據訪問層依然是一件很是繁瑣的事情,簡單的查詢也每每涉及大量重複代碼。Spring Data JPA在則基於JPA進一步簡化了數據訪問層的實現,它提供了一種相似於聲明式編程的方式,開發者只須要編寫數據訪問接口(稱爲Repository),Spring Data JPA就能基於接口中的方法命名自動地生成實現。
JPA(Java Persistence API,Java持久化API),定義了對象關係映射(Object Relation Mapping,ORM)以及實體對象持久化的標準接口。 JPA是一套接口規範,JPA的實現主要包括 JBoss 的 Hibernate EntityManager、Oracle 捐獻給 Eclipse 社區的 EclipseLink和Apache 的 OpenJPA 等。
- Repository
- 使用Repository的步驟
- 自定義的Repository接口
- Repository接口層次及其方法
- 自動生成數據庫Schema
- @Entity和@Table
- @Id和@GeneratedValue
- @Basic
- @Column
- @Transient
- @Temporal
- @Lob
- @OneToOn
- @JoinColumn
- unique屬性
- 雙向@OneToOne關聯
- 雙向關聯與cascade
- 自動映射的命名規則
- @ManyToOne
- @OneToMany
- @ManyToMany
- JoinTable
- 用@ManyToOne實現多對多
- 如何經過方法名建立查詢
- 分頁與排序
- @Query標註
- 事務
十、Java Web應用的部署
- War包規範和結構
- 在IDE中調試和部署
- 使用IDE導出War包
- 將War包部署到服務器
- 基於Spring Boot的部署
十一、其它主題
緩存:EhCache、Spring Cache Manager、數據層緩存、服務層緩存、頁面緩存
安全:Spring Security(HTTP基本驗證,角色驗證,權限驗證)
任務調度:Spring任務執行器(Executor)
郵件發送:SMTP協議、spring-boot-starter-mail
Web Socket:@SubscribeMapping, WebSocketConfig
日誌:SLF4J與Logback、 Spring Boot Logging、 ConsoleAppender/RollingFileAppender 、Sentry、ELK
十二、設計模式
參考Java寫一套漂亮的代碼,哪些設計模式比較經常使用? - David 的回答 - 知乎
1三、更進一步
分佈式、深刻Java虛擬機、針對不一樣場景的Java技術框架,到這個階段已經不只僅是Java的學習了,而是大型應用場景的技術積累、架構設計的精進了。