struts2工作原理

发布网友 发布时间:2022-04-24 23:57

我来回答

3个回答

热心网友 时间:2023-10-15 14:44

Struts2*原理:当请求到达Struts2时,Struts2查找配置文件,并根据配置实例化相对的*对象,串成一个列表,最后一个一个调用列表中的*。Struts2*栈将*按一定的顺序联结成一条链。在访问被拦截的方法或字段时,按其之前定义顺序被调用。

Struts2*是动态拦截Action调用的对象。它提供了一种机制可以使开发者可以定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行。同时也是提供了一种可以提取action中可重用的部分的方式。

扩展资料:

*的自定义:

1、自定义一个实现Interceptor接口(或者继承自AbstractInterceptor)的类。

2、在struts.xml中注册Interceptor接口中定义的*。

3、在需要使用的Action中引用struts.xml定义的*,为了方便也可将*定义为默认的*,这样在不加特殊声明的情况下所有的Action都被这个*拦截。

4、开发者自定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行,同时也提供了一种可以提取action中可重用部分的方式。

参考资料来源:百度百科-*

参考资料来源:百度百科-Struts 2

热心网友 时间:2023-10-15 14:45

就是你的服务请求request 要穿过struts2的*,满足条件的就通过,不然就被拦截

1、客户端发送请求 (客户端初始化一个指向Servlet容器(如Tomcat)的请求)
2、请求经过一系列过滤器(如ActionContextCleanUp、SiteMesh等),ActionContextCleanUp-->FilterDispatcher
3、FilterDispatcher通过ActionMapper来决定这个Request需要调用哪个Action
4、如果ActionMapper决定调用某个Action,FilterDispatcher把请求的处理交给ActionProxy,
5、ActionProxy通过ConfigurationManager询问Struts配置文件(Struts.xml),找到需要调用的Action类。
6、ActionProxy创建一个ActionInvocation的实例
7、ActionInvocation调用真正的Action,当然这涉及到相关*的调用(interceptor)
8、Action执行完毕,ActionInvocation创建Result并返回,返回结果前要做些动作也是可以的

热心网友 时间:2023-10-15 14:45

Struts2的*的实现原理和过滤器的实现差不多,对你真正想执行的 execute()方法进行拦截,然后插入一些自己的逻辑。如果没有*,这些要插入的逻辑就得写在你自己的 Action实现中,而且每个 Action实现都要写这些功能逻辑,这样的实现非常繁琐。而 Struts2的设计者们把这些共有的逻辑出来,实现成一个个*,既体现了软件复用的思想,又方便程序员使用。 Struts2中提供了大量的*,多个*可以组成一个*栈,系统为我们配置了一个默认的*栈 defaultStack,具体包括那些*以及他们的顺序可以在 Struts2的开发包的 struts-default.xml中找到。在每次对你的 Action的 execute()方法请求时,系统会生成一个 ActionInvocation对象,这个对象保存了 action和你所配置的所有的*以及一些状态信息。比如你的应用使用的是 defaultStack,系统将会以*栈配置的顺序将每个*包装成一个个 InterceptorMapping(包含*名字和对应的*对象 )组成一个 Iterator保存在 ActionInvocation中。在执行 ActionInvocation的 invoke()方法时会对这个 Iterator进行迭代,每次取出一个 InterceptorMapping,然后执行对应 Interceptor的 intercept(ActionInVocation inv)方法,而 intercept(ActionInInvocation inv)方法又包含当前的 ActionInInvcation对象作为参数,而在每个*中又会调用 inv的 invoke()方法,这样就会进入下一个*执行了,这样直到最后一个*执行完,然后执行 Action的 execute()方法 (假设你没有配置访问方法,默认执行 Action的 execute()方法 )。在执行完 execute()方法取得了 result后又以相反的顺序走出*栈,这时可以做些清理工作。最后系统得到了一个 result,然后根据 result的类型做进一步操作。Struts2的*的实现原理和过滤器的实现差不多,对你真正想执行的 execute()方法进行拦截,然后插入一些自己的逻辑。如果没有*,这些要插入的逻辑就得写在你自己的 Action实现中,而且每个 Action实现都要写这些功能逻辑,这样的实现非常繁琐。而 Struts2的设计者们把这些共有的逻辑出来,实现成一个个*,既体现了软件复用的思想,又方便程序员使用。 Struts2中提供了大量的*,多个*可以组成一个*栈,系统为我们配置了一个默认的*栈 defaultStack,具体包括那些*以及他们的顺序可以在 Struts2的开发包的 struts-default.xml中找到。在每次对你的 Action的 execute()方法请求时,系统会生成一个 ActionInvocation对象,这个对象保存了 action和你所配置的所有的*以及一些状态信息。比如你的应用使用的是 defaultStack,系统将会以*栈配置的顺序将每个*包装成一个个 InterceptorMapping(包含*名字和对应的*对象 )组成一个 Iterator保存在 ActionInvocation中。在执行 ActionInvocation的 invoke()方法时会对这个 Iterator进行迭代,每次取出一个 InterceptorMapping,然后执行对应 Interceptor的 intercept(ActionInVocation inv)方法,而 intercept(ActionInInvocation inv)方法又包含当前的 ActionInInvcation对象作为参数,而在每个*中又会调用 inv的 invoke()方法,这样就会进入下一个*执行了,这样直到最后一个*执行完,然后执行 Action的 execute()方法 (假设你没有配置访问方法,默认执行 Action的 execute()方法 )。在执行完 execute()方法取得了 result后又以相反的顺序走出*栈,这时可以做些清理工作。最后系统得到了一个 result,然后根据 result的类型做进一步操作。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com