struts是一种MVC架构的web层处理框架,struts1和struts2有些差别,不过根本原理是一样的。都是通过struts的核心类来处理web页面的请求,将请求分发到不同的action进行处理,并将结果返回给web客户端。

1、Struts1的核心是一个servlet,ActionServlet,接收web页面传来的所有请求,然后根据struts的配置文件来分发这些请求到不同的Action,在Action中进行请求的处理,并与model进行交互;然后将结果向上返回到ActionServlet,渲染jsp页面,给web客户端。

Struts2的核心是一个filter,FilterDispatcher,原理与struts1相似。

如图(struts1):


    2、ActionServlet把请求交给action处理之前,struts1采用formbean的形式对于请求传递来的参数进行封装。并且这个formbean也要配置到struts的配置文件中。

    对于参数的处理,struts2也进行了改进,可以直接采用action中的get/set方法来获取和设置参数的值,并且参数的值一直保留,直到action的生命周期结束。当然,struts2也可以处理将参数封装到一个vo里,这样,就避免了action中因为参数个数多造成的get、set方法过多的情况。这个vo既可以是程序员自定义的一个“formbean”(不必配置到配置文件中),也可以直接使用用程序中现有的vo,减少代码量。

    3、Action处理完成返回的结果显示视图封装到ActionForward中,ActionForward通过struts的配置中的配置关联到某个jsp页面,或者另外一个请求(也就是重定向),struts1的重定向是不能够加入参数的。

    Struts2中的返回值是一个字符串,当然,这个字符串是通过struts的配置文件相关联的,可以关联到一个jsp页面,也可以关联到一个重定向请求。这个重定向请求不同于struts1,是可以包括参数的,可以直接赋值,也可以从action中动态赋值。