struts2 简介

来源:互联网 发布:编辑录音的软件 编辑:程序博客网 时间:2024/05/22 06:13
一.简介

    Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架。
其全新的Struts 2的体系结构与Struts 1的体系结构差别巨大。
Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开,
所以Struts 2可以理解为WebWork的更新产品。虽然从Struts 1到Struts 2有着太大的变化,但是相对于WebWork,Struts 2的变化很小。

二.与struts1的区别:
    对于Struts1框架而言,由于与JSP/Servlet耦合非常紧密,因而导致了一些严重的问题。
首先,Struts1支持的表现层技术单一。由于Struts1出现的年代比较早,那个时候没有FreeMarker、Velocity等技术,因此它不可能与这些视图层的模版技术进行整合。
其次,Struts1与Servlet API的严重耦合,使应用难于测试。
最后,Struts1代码严重依赖于Struts1 API,属于侵入性框架。

三.与webwork的关系
    Struts和Webwork同为服务于Web的一种MVC框架,从某种程度上看,Struts2是从WebWork2上升级得到的。
甚至Apache的官方文档也讲:WebWork2到Struts2是平滑的过渡。我们甚至也可以说Struts2就是WebWork2.3而已。
在很多方面Struts仅仅是改变了WebWork下的名称。Struts2对应的有自己的标签,并且功能强大。Webwork也有自己的标签。
在2005年12月,WebWork与Struts Ti决定合并, 再此同时, Struts Ti 改名为 Struts Action Framework 2.0,成为Struts真正的下一代。

四.redirect和redirectAction chain的区别
    struts2中关于result的返回类型一般我们是转发到一个jsp页面或者是html页面等,
但是struts2中的result的返回类型还有redirect,redirectAction,chain。对于这三种返回类型之间肯定是有区别的,
下面我们来看看关于redirect redirectAction chain这三种struts2的返回类型之间的区别。
当使用type=“redirectAction” 或type=“redirect”提交到一个action并且需要传递一个参数时。这里是有区别的:
使用type=“redirectAction”时,结果就只能写Action的配置名,不能带有后缀:“.action”
使用type=“redirect”时,结果应是action配置名+后缀名
redirect:action处理完后重定向到一个视图资源(如:jsp页面),请求参数全部丢失,action处理结果也全部丢失。
redirect-action:action处理完后重定向到一个action,请求参数全部丢失,action处理结果也全部丢失。
chain:action处理完后转发到一个action,请求参数全部丢失,action处理结果不会丢失。

五.出现漏洞

曝出高危安全漏洞
    Struts2曝出2个高危安全漏洞,一个是使用缩写的导航参数前缀时的远程代码执行漏洞,
另一个是使用缩写的重定向参数前缀时的开放式重定向漏洞。这些漏洞可使黑客取得网站服务器的“最高权限”,
从而使企业服务器变成黑客手中的“肉鸡”。本次曝出的2个漏洞是由于缩写的导航和重定向前缀“action:”、 “redirect:”、 “redirectAction:”造成的。
由于这些参数前缀的内容没有被正确过滤,导致黑客可以通过漏洞执行命令,获取目标服务器的信息,并进一步取得服务器最高控制权。
届时,被攻击网站的数据库将面临全面泄密的威胁,同时黑客还可以通过重定向漏洞的手段,对其他网民进行钓鱼攻击或挂马攻击。

解决措施
    Apache Struts团队已发布的Struts 2.3.15.1及以后的版本,修复了上述漏洞,建议采用Struts 2.0至Struts 2.3的网站开发者尽快升级至最新版。

六.阐述struts2的执行流程。 
    Struts 2框架本身大致可以分为3个部分:核心控制器FilterDispatcher、业务控制器Action和用户实现的企业业务逻辑组件。
核心控制器FilterDispatcher是Struts 2框架的基础,包含了框架内部的控制流程和处理机制。业务控制器Action和业务逻辑组件是需要用户来自己实现的。
用户在开发Action和业务逻辑组件的同时,还需要编写相关的配置文件,供核心控制器FilterDispatcher来使用。 
Struts 2的工作流程相对于Struts 1要简单,与WebWork框架基本相同,所以说Struts 2是WebWork的升级版本。
    基本简要流程如下:
      1、客户端浏览器发出HTTP请求。
      2、根据web.xml配置,该请求被FilterDispatcher接收。
      3、根据struts.xml配置,找到需要调用的Action类和方法, 并通过IoC方式,将值注入给Aciton。
      4、Action调用业务逻辑组件处理业务逻辑,这一步包含表单验证。
      5、Action执行完毕,根据struts.xml中的配置找到对应的返回结果result,并跳转到相应页面。
      6、返回HTTP响应到客户端浏览器。

七.工作原理
    在Struts2框架中的处理大概分为以下几个步骤 
    1 客户端初始化一个指向Servlet容器(例如Tomcat)的请求 
    2 这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,
    例如:SiteMesh Plugin) 
    3 接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请是否需要调用某个Action 
    4 如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy 
    5 ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action类 
    6 ActionProxy创建一个ActionInvocation的实例。 
    7 ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。 
    8 一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。
    返回结果通常是(但不总是,也可 能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。
    在表示的过程中可以使用Struts2 框架中继承的标签。在这个过程中需要涉及到ActionMapper

0 0