基于MVC的软件开发—S2SH架构

1.    概述

  1. 1   MVC设计模式

  2. 2   常用表现层技术

    基于MVC的软件开发—S2SH架构_第1张图片 

基于MVC的软件开发—S2SH架构_第2张图片

2.    Struts2部分

  1. 1   基本流程介绍

Struts2struts的最新版本,是由struts1webworks框架发展起来的最新web框架,struts2的主要作用是可以简化web的开发,对底层Servlet起到了很好的封装。使得我们处理Servlet像处理普通的java对象一样(POJO),另外,也大大简化的UT测试难度,因为普通java对象比Servlet更容易测试。如下为Struts的体系结构:

基于MVC的软件开发—S2SH架构_第3张图片

相比,第一代struts框架,第二代更加简洁高效,他主要以webworks为核心创建,例如,struts2不需要定义Form类,不强制继承Struts的类库,只是为了便于开发,提供了ActionSupport类,简化开发流程。Struts2中大量使用拦截器(interceptor)来处理用户的请求,从而允许用户的业务逻辑控制器与Servlet API分离。

Struts2框架的流程如下:

1)            web请求到来(比如用户登录),web容器(Tomcat)初始化web.xml,发现定义了struts2过滤器(StrutsPrepareAndExecuteFilter),直接把请求(URI)转给Struts2处理;

2)            Struts2初始化配置文件(struts.xmlstruts.properties);

3)            Struts2实例化配置文件中的Action接收Request中的参数;

4)            启用拦截器,比如验证等;

5)            业务处理,通过回调Actionexecute方法;

6)            返回处理结果(字符串)到过滤器;

7)            根据配置文件查找结果对于的响应,并返回给客户;

  1. 2   Struts配置文件介绍

1) 创建并配置strut.xml(相当于在web.xml中注册servlet,不过能丰富,可以充分利用struts2的高效性),一般放在classpath的根路径下(src目录下就可以),结构如下,重点关注action元素及其属性和子元素,name属性的值对应于请求的URIclass为处理类;result为根据处理结果进行定位,默认为请求转发(Dispatchor.forword(request, response))方式,name为返回的字符串,值为定位的页面。详细配置信息参加DTD定义。

基于MVC的软件开发—S2SH架构_第4张图片

2) 创建struts.properties文件(可以不需要)

 

  1. 3   Struts2开发流程简介:以用户登录为例

1) 创建web项目;

2) 加入struts2所需要的类库,高亮的为必须的:

基于MVC的软件开发—S2SH架构_第5张图片

3) web.xml中配置struts2过滤器,对所有的URL进行过滤;

基于MVC的软件开发—S2SH架构_第6张图片

4) 建立一个login.jsp页面;

 

5) 定义Action类,继承ActionSupport类,覆盖execute函数,如果需要验证覆盖validate函数;在action类中定义变量,和表单字段的name一一对应,并为之生成gettersetter方法。

6) 配置struts.xml文件,如下,登录成功转到main.jsp,失败转到login.jsp

基于MVC的软件开发—S2SH架构_第7张图片

7)  

  1. 4   表单验证(推荐用javascript在客户端验证)

  2. 5   异常处理

  3. 6   拦截器介绍

  4. 7   文件上传下载

  5. 8   图表显示

  6. 9   整合JSon

  7. 10   整合Ajax

 

3.    Spring部分

  1. 1   基本流程介绍

  2. 2   配置文件介绍

  3. 3   IOC/DI/DIP介绍

依赖倒置原则:强制系统的高层组件不应该依赖于底层组件,并且不论是高层组件还是底层组件都应该依赖于抽象(接口)。于是,按照DIP说的,我们把底层组件抽象为接口与实现类,高层组件依赖此接口。看起来,大家都是依赖抽象了,不过,我们应该在何处、如何取得具体的底层组件实例?

  1. 通过底层组件工厂(纯虚构),将"new"操作"集中起来管理"。于是高层组件对底层组件的依赖转变为了对"纯虚构"出来的工厂的依赖(这就是IoC的一种实现手段)。新的问题来了,其实工厂也是不小的麻烦。(地点:高层组件内部;方式:通过底层组件工厂)

  2. 高层组件咆哮到:底层组件和工厂都TM伤不起!动不动就变!!有木有!!我不管了啊!要调用我的组件们,我给你们开放注入具体实现的接口(构造函数注入,setter/getter注入),你们自己看着办啊 !!!”——于是,依赖注入(DI)的基础建立了起来,同时,对依赖关系的管理任务也交给了上层(这就是IoC的一种实现手段)。(地点:高层组件的使用者内部;方式:设法取得具体实现,并传递给高层组件)

  3. 高层组件的高层组件无语了,但是它很淡定地如法炮制,将这个麻烦交给了它的高层组件,and so on...最终,最高处的那个组件(一般它叫应用),表示鸭梨非常大:你们把所有的依赖都转给我了?!?!这不是坑爹吗?

  4. 此时,"工厂"的角色和范畴扩大,它接纳了管理整个应用的所有实现类对象的任务。它通过某种方式(比如SpringXML配置方式、注解方式;Guice的编程方式)向应用提供了管理组件之间依赖关系的接口,于是,应用所要考虑的所有依赖关系都可以委托给这样的"工厂"了,"工厂"成为了应用唯一依赖 —— 整个应用的控制权全都由具体实现(包括底层组件具体实现、甚至底层组件工厂等)反转至了"工厂"的依赖接口中,“IoC容器是它响亮的新名字!(地点:IoC容器;方式:通过IoC容器的API

  5. .IoC容器的引入,让整个应用变得十分灵活,组件之间可以热插拔。这也正是DIP的初衷。通过IoC容器,我们在使用一个组件时,需要指定它的依赖,以及它的依赖的依赖...and so on,这形成了一个对象图的概念。

依赖:如果组件A1)持有B的应用;2)调用B的方法;3)创建B,则表示AB的依赖。

控制:A依赖B,则B拥有控制权,因为B的某种变化会影响A的变化。

控制反转:就是让控制方“往高处/上层”转移,控制反转是实现依赖倒置的一种方法。

依赖注入:组件通过构造函数或者setter方法,将其依赖暴露给上层;上层要设法取得组件的依赖,并将其传递给组件,依赖注入是实现控制反转的一种手段。

  1. 4   AOP介绍

  2. 5   Struts2整合

  3. 4.    Hibernate部分

  4. 1   基本流程概述

  5. 2   ORM介绍

  6. 3   配置文件介绍

  7. 4   Spring的整合

 

5.    JQuery部分

  1. 1   Javascript介绍

  2. 2   JQuery介绍

  3. 3   AJAX介绍

  4. 4   表单验证

  5. 5   基于AJAX的文件上传

  6. 6   日期控件

  7. 7   菜单级联

  8. 8   自动完成

  9. 9   悬浮窗口

  10. 10   Tab控件

  11. 6.    综合示例:用户管理系统

  12. 1   用户注册模块

  13. 2   用户登录模块

  14. 3   用户信息修改

  15. 4   用户查询

  16. 5   用户删除

  17. 6   用户数据导出

  18. 7   分页实现


你可能感兴趣的:(基于MVC的软件开发—S2SH架构)