天天看点

Struts2基础

  模式1:

           WEB项目几乎全由JSP页面组成,JSP页面负责所有的展示与业务逻辑的处理(业务,数据库连接……)。

           缺点:JSP页面兼容了view与controller两种角色,控制逻辑与表现逻辑混杂,导致代码重用性很低,增加了扩展与维护的难度。

  模式2 :

          基于MVC架构的设计模式,将模型,视图,控制器三者分离,模型采用JAVABEAN来充当,视图采用JSP页面来负责展示,采用Servlet作为前端控制器。三者相互协作,体现了松散耦合的思想。

    Servlet控制器主要有2个作用:

         1、从客户端视图JSP等组件中接收数据,控制逻辑与简单数据处理。

         2、调用JAVABEAN处理实际的逻辑,完成后将数据返回给JSP。

看看MVC模式流程图:

Struts2基础

  总结出MVC模式的特点:

1、  多个视图对应一个模型,可以减少代码的复制与维护量,并且一旦模型发生改变,只需修改对应的视图页面即可。

2、  将模型返回的数据与视图相分离,数据可以适用于任何显示技术,不再单单局限在JSP页面。例如:webservice , 导出为excel文档……

3、  应用分隔为3层,降低了层与层之间的耦合度,提高了应用的扩展性。

4、  控制层将不同的模型与不同的视图组合在一起,完成不同的请求,可以说是控制了用户请求权限。

5、  更加符合软件工程化的管理,各层各司其职,但是每一层又都具有相同的特征,便于程序代码。

  随着MVC模式的发展,01年,Struts1问世,Struts1是第一个完全采用MVC设计模式的框架。03年达到顶峰,但是在不断的应用后,软件需求日渐变化,Struts1出现了局限性以及暴露了其不可修正的缺点。06年     Struts1框架与webwork框架合并,从而诞生出Struts2.

   1 Struts设计的第一目标就是使MVC模式应用于web程序设计。

   2 Struts2有两方面的技术优势,一是所有的Struts2应用程序都是基于Client/Server HTTP交换协议,The Java Servlet API揭示了Java Servlet只是Java API的一个很小子集,这样我们可以在业务逻辑部分使用            功能强大的Java语言进行程序设计。

     二是提供了对MVC的一个清晰的实现,这一实现包含了很多参与对所以请求进行处理的关键组件,如:拦截器、OGNL表达式语言、堆栈。

Strust工作原理:

Struts2基础

 Strust请求与响应可以分为以下几个步骤:

(1)  客户端向Action发用一个请求(Request)

(2)  Container通过web.xml映射请求,并获得控制器(Controller)的名字

(3)  容器(Container)调用核心控制器StrutsPrepareAndExecuteFilte或者FilterDispatcher ( Struts2.1.3之前用FilterDispatcher,在Struts2.1.3以后调用StrutsPrepareAndExecuteFilter)

(4)  控制器(Controller)通过ActionMapper获得Action的信息

(5)  控制器(Controller)调用ActionProxy

(6)  ActionProxy读取struts.xml文件获取action和interceptor stack(拦截器堆)的信息。

(7)  ActionProxy把request请求传递给ActionInvocation(Action调度者)

(8)  ActionInvocation依次调用action和interceptor

(9)  根据action的配置信息,产生result

(10) Result信息返回给ActionInvocation

(11) 产生一个HttpServletResponse响应

(12) 产生的响应行为发送给客服端。

Strust2工作流程分析:

Struts2基础

ActionInvocation (Action调度者)。

ActionMapper在WEB服务启动时加载。

Interceptor 一系列拦截器的作用是:将request请求的数据解析给XXXAction(业务控制器)。

1、客户端(不一定就是JPS页面)发起请求, 经过一系统的filter后达到StrutsPrepareAndExecuteFilter/FilterDispatcher(核心控制器)【StrutsPrepareAndExecuteFilte或者FilterDispatcher ( Struts2.1.3之前用FilterDispatcher,在            Struts2.1.3以后调用StrutsPrepareAndExecuteFilter)】。

2、核心控制器读取ActionMapper,问询该Action是否存在,如果不存在则返回错误。 如果存在存在则将该请求转交给ActionProxy。

3、ActionProxy读取配置文件struts.xml,查看是否需要表单验证, 如果需要则调用验证框架的validate()进行表单验证。

4、验证完成后,将请求的数据解析出来通过ActionInvocation交给具体的业务控制器 处理。

5、处理完的结果,通过forward请求JSP或其他视图,解析成response, 并返回StrutsPrepareAndExecuteFilter核心控制器,由核心控制器向客户端进行展示。

下一章创建一个简单的Strust框架!

上一篇: Spring-IOC
下一篇: Spring-IOC注解