在應用成熟的框架以前,我們規整下思路,那就是:我們到底需要什么?通過對TP的學習,相信我們不難總結出以下幾點:
* 我們需要一個單入口模式,將所有的請求,都發送到這個單入口地址上。
* 這個單入口地址,可以根據我們的URL和請求數據,為我們自動的調用相關類的相關方法(action)。
* 由于在此進行了數據轉發,所以我們也會把這個功能稱為:路由。
* 每一個action都可以接收到相關的請求信息,并按請求信息做出動作。
* 在action中,可以將數據傳給V層,然后對V層進行渲染,并取回渲染后的數據。最終返回給用戶。
總之:我們現在需要的是類似于tp的一些基礎的功能。
## 多入口與單入口
在jsp開發中,我們的jsp文件充當了入口,并結合servlet與javabean來實現了對后臺服務及數據的請求與處理。由于多個jsp文件都是可以直接并訪問到了,所以我們又稱之為多入口。
基本的訪問流程如下:

而單入口大多是這個樣子。

# Struts
在JAVA EE的世界里,SSH(Spring Struts Hibernate)一統天下。有人說第一個S是spring,也有人說第一個S是struts。從權重的角度上來講,spring的確是要大于struts的,但從學習順序上來講,無疑struts應該放在首位。
通過學習thinkphp,我們知道,thinkphp的兩個比較核心的類為`think\Controller`和`think\Model`。其中,`think\Controller`可以實現獲取數據請求(`$this->resquest()`), 向V層傳值(`$this->assign()`), 渲染V層(`$this->fetch()`)等目的。`think\Model`主要實現與數據庫中的數據表進行對接,對數據表進行CURD操作及處理數據表間的關系(`1:1, 1:n, m:n`)等。

JAVAEE中,我們現在可以這樣理解,thinkphp = struts + hibernate。`struts`實現了`think\Controller`的功能,而hibernate實現了`think\Model`的功能。其中struts負責與V層,M層對接,hibernate負責與C層及數據表對接。

當然了,除了`think\Controller`和`think\Model`兩在核心類文件外,TP還有一套默認的路由(MCA)來實現數據轉發,此外,還可以手動的來定義路由。在javaee中,該項工作也是由struts來負責的。
那大名鼎鼎的spring呢?
spring更多的是在負責解耦,有了spring后,各個類之間的關系變的沒有那么緊密了。我們在進行程序開發的時候,可以使用spring來更好的達到像堆積木一樣來寫程序的目的。如果我們并不在意代碼的復用性,那么大可以不使用spring來降低前期我們對JAVAEE學習的難度。事實上,本教程也正是這么做的。
下一節中,讓我們來共同學習Struts是如何進行配置最終實現單入口的。
# 上節作業
```
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>welcome.html</welcome-file>
</welcome-file-list>
```
- README
- 第一章:準備
- 第二章:Hello World!
- 第一節:查看工程文件
- 第二節:JDK、JRE與環境變量
- 第三節:index.jsp
- 第三章:Hello Struts
- 第一節:Web.xml
- 第二節:單入口
- 第三節:Hello Struts
- 第四節:觸發C層
- 第四章:建立數據表
- 第一節:建立實體類
- 第二節:測試一
- 第三節:測試二
- 第四節:引入Hibernate
- 第五節:配置Hibernate
- 第六節:建立連接
- 第七節:實體類映射數據表
- 第八節:完善數據表
- 第五章:教師管理
- 第一節:增加數據--add
- 第二節:增加數據--save
- 1 獲取傳入數據數據
- 2 數據寫入測試
- 3 對接C層
- 第三節:數據列表
- 1 獲取數據
- 2 重構代碼
- 3 C層對接--初始化
- 4 C層添加數據
- 5 V層顯示數據
- 6 獲取數據庫中數據
- 7 顯示性別
- 8 分頁
- 9 條件查詢
- 第四節:修改數據
- 1 edit
- 2 update
- 第五節:刪除數據
- 第六節:總結
- 第六章:重構C層
- 第一節:繼承ActionSupport類
- 第二節:數據驗證
- 第七章:前臺分離(前臺)
- 第一節:環境搭建
- 第二節:運行環境
- 第三節:共享開發環境
- 第四節:生產環境
- 第八章:前臺開發(前臺)
- 第一節:本地化
- 第二節:教師列表
- 1 引入M層
- 2 模擬后臺返回數據
- 3 C與M對接
- 4 C與V對接
- 第九章:前后臺對接(前后臺)
- 第一節:后臺輸出json(后臺)
- 第二節:對接前臺(全棧)
- 第二節:對接API(前臺)
- 第二節:跨域請求(后臺)
- 第三節:重構代碼(前臺)
- 第十章:重構后臺M層
- 第一節:數據訪問DAO層
- 第二節:項目整體重構
- 第十一章:用戶登陸(前后臺)
- 第一節:制定規范
- 第二節:定制測試用例
- 第三節:后臺輸入測試代碼(后臺)
- 第四節:postman(后臺)
- 第五節:新建用戶登陸模塊(前臺)
- 第六節:代碼重構(前臺)
- 第十二章:班級管理(前后臺)
- 第一節:班級列表
- 1 原型開發
- 2 制定規范
- 3 后臺對接開發
- 4 前臺對接開發
- 第二節:Add
- 1 原型開發
- 2 制定規范
- 3 后臺對接開發
- 4 前臺對接開發
- 第三節:Save
- 1 制定規范
- 2 后臺對接開發
- 3 前臺對接開發
- 第四節:Edit
- 1 原型開發
- 2 制定規范
- 3 后臺對接開發
- 4 前臺對接開發
- 第五節:Update
- 1 制定規范
- 2 后臺對接開發
- 3 前臺對接開發
- 第六節:Delete
- 1 制定規范
- 2 后臺對接開發
- 3 前臺對接開發
- 第七節:小結
- 第十三章:班級管理(API)
- 第一節:ER圖
- 第二節:create
- 1 實體層
- 2 dao層
- 3 service(server)層
- 4 action層
- 第三節:ManyToOne
- 第四節:Read
- 1 service(server)層
- 2 action層
- 第五節:update
- 1 service(server)層
- 2 action層
- 第六節:update
- 第十四章:重構服務層