🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
在应用成熟的框架以前,我们规整下思路,那就是:我们到底需要什么?通过对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> ```