您的位置:首页 > 编程语言 > Java开发

浅谈struts2

2015-11-26 18:35 459 查看

浅谈Struts2

一、Struts2的出现

JSP、Servlet、JavaBean技术的出现给我们构建强大的企业应用系统提供了可能。但用这些技术构建的系统非常的繁乱,所以在此之上,我们需要一个规则、一个把这些技术组织起来的规则,这就是框架,Struts便应运而生。

基于Struts开发的应用由3类组件构成:控制器组件、模型组件、

视图组件.

目前流行的基于MVC设计模式的前端框架有struts1,struts2,springMVC等;

在这里简单介绍一下struts2

二、Struts2的工作原理

在struts2的应用中,从用户请求到服务器返回相应响应给用户端的过程中,使用到了许多组件如:Controller、ActionProxy、ActionMapping、 Configuration Manager、ActionInvocation、Inerceptor、Action、Result等。下面我们来具体看看这些组件有什么联系,它们之间是怎样在一起工作的。

在Struts2框架中的处理大概分为以下几个步骤:

1.客户端(Client)向Action发送一个指向Servlet容器(如:tomcat)的请求。

2.这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin)

3.接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请求是否需要调用某个Action

FilterDispatcher是控制器的核心,就是mvc中c控制层的核心。下面粗略的分析一下我理解的FilterDispatcher工作流程和原理:FilterDispatcher进行初始化并启用核心doFilter

4.如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy

5.ActionProxy通过ConfigurationManager询问框架的配置文件,找到需要调用的Action类

6.ActionProxy创建一个ActionInvocation的实例。

7.ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。

8.一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置文件找到对应的返回结果。返回结果通常是(但不总是,也可能是另外的一个Action链)一个需要被表示的JSP或者FreeMarher的模板。在表示的过程中可以使用Struts2框架中集成的标签。在这个过程中需要涉及到ActionMapper.

在Struts2.0到Struts2.1.2版本的核心过滤器是FilterDispatcher

从Struts2.1.3开始就被StrutsPrepareAndExecuteFilter取代了。

取代的原因如下:

StrutsPrepareAndExecuteFilter是StrutsPrepareFilter和StrutsExecuteFilter的组合。这样做有一个好处:

如果我们自己定义过滤器,是要放在Struts2的过滤器之前的,如果放在struts2过滤器之后,那么自定义的过滤器对action的过滤作用就废了。

如果有需求,我们必须使用Action的环境,而又想在执行action之前拿filter做一些事,用FilterDispatcher是做不到的。

此时StrutsPrepareAndExecuteFilter可以拆分成StrutsPrepareFilter和StrutsExecuteFilter,可以在这两个过滤器之间加上我们自己的过滤器。

三、Struts2的工作流程

1.客户端浏览器发出HTTP请求

2.根据web.xml配置,该请求被StrutsPrepareAndExecuteFilter接收

3.根据struts.xml配置,找到需要调用的Action类和方法,并通过IOC方式,将值注入给Action

4.Action调用业务逻辑组件处理业务逻辑,这一步包含表单验证。

5.Action执行完毕,根据struts.xml中的配置找到对应的返回结果result,并跳转到相应页面

6.返回HTTP响应到客户端浏览器。

四、Tomcat做了什么?

当一个HTTP协议指向tomcat容器时,tomcat拿到请求干了什么?

1.浏览器的请求发送到后台,根据端口号,会找到对应的服务,也就是容器tomcat,然后tomcat根据后面的请求地址,将请求分发到具体的工程里面。

2.Struts的和核心功能就是过滤器,这个filter就是struts2的一个默认过滤器。Struts2不再需要用表单去接收页面的数据(不像struts1),而是直接在action中定义属性(符合javabean规范,使用的IOC将值注入给action)就可以获取到页面的表单数据。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: