在应用成熟的框架以前,我们规整下思路,那就是:我们到底需要什么?通过对TP的学习,相信我们不难总结出以下几点:
* 我们需要一个单入口模式,将所有的请求,都发送到这个单入口地址上。
* 这个单入口地址,可以根据我们的URL和请求数据,为我们自动的调用相关类的相关方法(action)。
* 由于在此进行了数据转发,所以我们也会把这个功能称为:路由。
* 每一个action都可以接收到相关的请求信息,并按请求信息做出动作。
* 在action中,可以将数据传给V层,然后对V层进行渲染,并取回渲染后的数据。最终返回给用户。
总之:我们现在需要的是类似于tp的一些基础的功能。
## 多入口与单入口
在jsp开发中,我们的jsp文件充当了入口,并结合servlet与javabean来实现了对后台服务及数据的请求与处理。由于多个jsp文件都是可以直接并访问到了,所以我们又称之为多入口。
基本的访问流程如下:
![](https://box.kancloud.cn/514eacaa9da5297ca42bdd8e029258ea_472x223.png)
而单入口大多是这个样子。
![](https://box.kancloud.cn/2fd8ec80a3a22fbcfc8392256299eda4_805x342.png)
# 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`)等。
![https://box.kancloud.cn/5bf4e9e392635a7ba27d8852156d80d9_1418x772.png](https://box.kancloud.cn/5bf4e9e392635a7ba27d8852156d80d9_1418x772.png)
JAVAEE中,我们现在可以这样理解,thinkphp = struts + hibernate。`struts`实现了`think\Controller`的功能,而hibernate实现了`think\Model`的功能。其中struts负责与V层,M层对接,hibernate负责与C层及数据表对接。
![https://box.kancloud.cn/2a2523b5542cc4424c7a02d22636f73a_1784x732.png](https://box.kancloud.cn/2a2523b5542cc4424c7a02d22636f73a_1784x732.png)
当然了,除了`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
- 第十四章:重构服务层