struts2调用servletAction的原理

struts2配置的是一个filter,它是怎么调用我们写的Action的
如果在filter里面调用的话,那么tomcat等容器还是要走servlet的流程,这时就没什么可以执行的了
或者struts2只是告诉tomcat等容器执行哪个Action类的哪个函数

另外,只有问题才能提问吗。论坛能提吗,我看论坛里面都是分享一些经验的帖子。

[b][quote]struts2配置的是一个filter,它是怎么调用我们写的Action的 [/quote][/b]

[color=blue][b]根据HTTP请求的URL,结合struts2的配置文件,找到相应的Action[/b][/color]
[quote]
[b]如果在filter里面调用的话,那么tomcat等容器还是要走servlet的流程,这时就没什么可以执行的了
或者struts2只是告诉tomcat等容器执行哪个Action类的哪个函数 [/b][/quote]
[color=blue][b]
Filter会通过反射 调用Action中的方法,得到一个 String的结果。然后根据,这个String结果,查找配置项,找到相应的页面。然后 返回给客户端。

注意:这个返回,就相当与 Serlvet中操纵Response.write.
[/b][/color]

看图

[img]
http://downpour.iteye.com/upload/attachment/68182/ae963ed3-fae7-3710-bfcf-2fc49942ee90.png

[/img]

参考这文章
http://www.iteye.com/wiki/struts2/1379-action-in-struts2

[quote]如果在filter里面调用的话,那么tomcat等容器还是要走servlet的流程,这时就没什么可以执行的了 [/quote]

你的请求被filter拦截了,就不会走后面servlet的流程了,filter调用在前。

请求被拦截后,就进入了struts2的流程,struts2根据你请求的链接并和struts.xml中的配置进行匹配,就找到相应的action了。

另外,论坛是不能随便提问的,随便提问是要扣30分的。 :?

[color=blue][b]
普通的Filter,是通过Filter.doChain() 进行后续的处理:

可能是 转给下一个Filter,可能是转给目标页面(Servelt、JSP或其他)

注意主要是过滤功能。

[/b][/color]

[b][quote]struts2在filter就截止请求了。我的意思是中间的servlet步骤是怎么处理的。[/quote]
[color=blue]
中间的servlet? 从Struts2的Filter、Interceptor中出来,就到了Result了。你的Servlet可以在Result配置呀?

不过一般的Result都是JSP等纯页面,不会是Servlet。因为:

Servlet = Action + Result(页面)

如果你在Result中配置Servlet的话,可行是可行,不过很别扭。[/color][/b]