struts2的工作原理是什么?为什么jsp可以取到action中的属性

sturts2 是不是不会用request ,reponse,session这些对象?哪位达人可以详细解析这个原理

一个请求在Struts2框架中的处理分为以下几个步骤:

1.客户端发出一个指向servlet容器的请求(tomcat);

2.这个请求会经过图中的几个过滤器,最后会到达FilterDispatcher过滤器。

3.过滤器FilterDispatcher是struts2框架的心脏,在处理用户请求时,它和请求一起相互配合访问struts2

  çš„底层框架结构。在web容器启动时,struts2框架会自动加载配置文件里相关参数,并转换成相应的类。

  å¦‚:ConfigurationManager、ActionMapper和ObjectFactory。ConfigurationManager å­˜æœ‰é…ç½®æ–‡ä»¶çš„一

  äº›åŸºæœ¬ä¿¡æ¯ï¼ŒActionMapper存有action的配置信息。在请求过程中所有的对象(Action,Results,

  Interceptors,等)都是通过ObjectFactory来创建的。过滤器会通过询问ActionMapper类来查找请求中

  éœ€è¦ç”¨åˆ°çš„Action。

4.如果找到需要调用的Action,过滤器会把请求的处理交给ActionProxy。ActionProxy为Action的代理对象

  ã€‚ActionProxy通过ConfigurationManager询问框架的配置文件,找到需要调用的Action类。

5.ActionProxy创建一个ActionInvocation的实例。ActionInvocation在ActionProxy层之下,它表示了

  Action的执行状态,或者说它控制的Action的执行步骤。它持有Action实例和所有的Interceptor。 

6.ActionInvocation实例使用命名模式来调用,1. ActionInvocation初始化时,根据配置,加载Action相

  å…³çš„所有Interceptor。2. é€šè¿‡ActionInvocation.invoke方法调用Action实现时,执行Interceptor。在

  è°ƒç”¨Action的过程前后,涉及到相关拦截器(intercepetor)的调用。

7. ä¸€æ—¦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果

  é€šå¸¸æ˜¯ï¼ˆä½†ä¸æ€»æ˜¯ï¼Œä¹Ÿå¯èƒ½æ˜¯å¦å¤–的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。在表示的过程中可以使用Struts2 æ¡†æž¶ä¸­ç»§æ‰¿çš„标签。

jsp中如果是发送请求,属性的值会被封装到httprequest中。可以用相应的api获取。
你的action如果是使用的struts框架。他自己会把值放到action中对应的变量,直接用就行了。

温馨提示:内容为网友见解,仅供参考
第1个回答  2012-02-09
客户端发出一个请求,服务器端 StrutsPreparedAndExceuteFilter接收请求,如果该请求是一个以 .action 结尾请求,则Struts2将请求转发至相应的Action,进行数据类型转换,如果数据类型转换出错,则返回到 input 指定的结果页面,如果数据类型转换没有出错,则调用setXX 方法进行设值,如果使用了validate()验证方法(或者是使用了验证框架),则进行相应的验证,如果验证出错,回到 input 指定的结果页面,如果没有使用验证,或者验证没有出错,则执行 execute() 方法,返回到相应的页面
第2个回答  2012-02-24
用户发送的请求经过一系列的过滤器到达 ActionMapper ,由FileterDispatcher询问ActionMapper是否要调用某个Action
(确定调用后) 将用户发送的请求交给ActionProxy 处理,
ActionProxy 通过Configration Manager 查找框架中的配置文件,找到需要调用的Action类。再由ActionProxy创建ActionInvocation实例。
紧接着经过一系列的拦截器找到Action类,根据Action类返回的结果
找到相应的物理逻辑视图,再经过拦截器将结果返回给用户。
第3个回答  2012-02-09
struts2只是把request ,reponse,session这些对象封装了。。。如果没有这些对象,还是web吗???
第4个回答  推荐于2017-11-24
一,struts2工作原理:
1) 所有的请求发给前端控制器
2) 前端控制器维护一个配置文件
(配置文件中指明了不同的请求和某个
Action的对应关系)
3) 前端控制器可以根据请求的不同调用
不同的Action
4) Action调用Model(模型层:实体或数据访问),实现业务功能,
数据放在request中
5) 请求转发给View层(JSP)
6) JSP显示数据
二,举例:
class FooAction {
所有的属性会“带”到页面
提交的信息可以赋值给属性
一般的Action有几种属性?
1种,用来接收用户的提交 input属性
2种,用来把数据带给视图(JSP)output属性
public String execute() {
根据输入算输出,然后决定转到哪个视图
}
jsp可以取到action中的属性这就是struts2的机制,你知道原理和怎么用就ok 了。
希望你能懂点。本回答被网友采纳

各位java前辈:1.在struts2中,在jsp页面是如何获取Action中值的?需要...
struts是采用ognl模型,就是对象关系模型,想要得到action中的值,首先的一点这个值要有set和get方法,在你请求action的时候,会重新生成一个action对象--》调用set方法给这个属性赋值,在jsp上展示用的是get方法,例如你有一个属性name需要展示,set、get方法写好后,在你请求的action中给name赋值,页面就...

strus2 的action类中定义同名变量,为啥能自动获取jsp的参数
struts2框架就是对servlet进行了一些封装,我们在servlet中获取页面参数的时候是调request.getParameter(“XXX”)来获取参数值,其实struts2也是这样的,只是struts2对你隐藏了这一步,你看不到而已。你在web.xml中可以看到我们配置了struts2的filter,在你访问一个页面的时候(比如manage\/userAdd.action)...

struts2中如何在jsp页面中用js取得action中传过来的值?是用js得到...
actionNum就是action传过来的变量名

简述Struts2的运行原理
1 客户端初始化一个指向Servlet容器(例如Tomcat)的请求 2 请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin)3 接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请是否...

struts2、hibernate、spring的工作原理,简单点。。。
由于它特殊的设计模式,使得它可以灵活地与其它框架整合,主要是通过配置文件的方式来完成。spring和hibernate整合在实际上替代了hibernate,因为它对hibernate的方法进行了包装。spring和strut2整合不过是为struts2的action类提供容器管理,也就是说,当要实例化一个action类的时候,根据spring配置,spring容器会...

struts2为什么我老是搞不懂action中要创建多个属性,并且还要写一个mode...
这个值会传到action类的id当中,而不是传到student类的id。如果你想传给student,那么jsp页面应该这样写 有时候你可能用到其他的框架譬如ibatis,但是他只能传入一个参数,你就可以用你的model把数据放在一起,把对象当做一个参数使用。同时数据的安全性也得到保障了。我学习框架时间比较短,肤浅的见解,...

struts2.0的工作原理?
如果该请求是一个以 .action 结尾请求,则Struts2将请求转发至相应的Action,进行数据类型转换,如果数据类型转换出错,则返回到 input 指定的结果页面。如果数据类型转换没有出错,则调用setXX 方法进行设值,如果使用了validate()验证方法(或者是使用了验证框架),则进行相应的验证。如果验证出错,回到 ...

关于struts2,hibernate2,spring3,面试时让我说下这三大框架的工作原理...
struts2提供了众多拦截器,页面提交的参数会经过默认的18个拦截器的过滤...最终能把页面提交的参数自动转换成需要的类型.能自定义拦截器,实现aop编程,实现如权限拦截等功能,数据校验,能对指定方法校验,支持xml校验.能实现国际化.支持多种表现层技术,如:JSP、freeMarker、Velocity等 支持ajax,模型驱动,能把...

Struts 2中chain如果是在同一个Action中的不同方法之间跳转
1、原理问题,struts2每个请求到来时都会实例化Action类,所以属性都是单独的,楼主理解错了,要是按你的理解,现在的Struts2根本没法工作了。2、如果你使用的是Spring的MVC,那么因为action类只被实例化一次,所以当第一个方法改变该该Action类的属性的时候,第二个方法也会读到改变后的值,因为根本是...

Struts2注解式开发,怎么让Spring管理action的创建
这个意思就是读取xxx.xxx.xxx.action包里的所有类,只要类里有注解说自己是Action的,都会被自动创建并放到spring里统一管理。PS,现在Controller层一般都直接用你springmvc了,用struts2一般是为了同时用到它的tags来编写jsp网页,不过如果view层用ajax,那就没必要非得从后台用你struts的标签来编写jsp了...

相似回答