以前用struts1的时候,了解到,jsp都是用request传值的,在struts2里没有看到,他们有什么关系啊?或则,struts2里用什么传值?怎么通过servlet实现跳转的?
在struts2.0中,可以通过ServletActionContext.getRequest()获取request对象。
在action的方法中return一个字符串,该字符串对应struts.xml中的result标签的name相同,result标签中包含的就是跳转页面,
其原理,我的理解是这样的:
一.客户端提起一个(HttpServletRequest)请求,如上文在浏览器中输入”http://localhost:8080/TestMvc/add.action”
二.请求被提交到一系列(主要是三层)的过滤器(Filter),如ActionContextCleanUp,FilterDispatcher等
三.FilterDispatcher是控制器的核心,FilterDispatcher进行初始化并启用核心doFilter
四.FilterDispatcher询问ActionMapper是否需要调用某个Action来处理这个(request)请求,如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy
五、ActionProxy通过(struts.xml)询问框架的配置文件,找到需要调用的Action类.
六、ActionProxy创建一个ActionInvocation的实例,同时ActionInvocation通过代理模式调用Action。但在调用之前ActionInvocation会根据配置加载Action相关的所有Interceptor(拦截器)
ActionInvocation工作原理:
1. ActionInvocation初始化时,根据配置,加载Action相关的所有Interceptor。
2. 通过ActionInvocation.invoke方法调用Action实现时,执行Interceptor。
3. 旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果
Struts2是webwork的具体实现,很多像日志记录都用的是AOP的方法.
传值时只要你的get,set方法和jsp页面中的parameter是一样的,就可以直接获得,我
没有去研究过源码.但是可以知道里面已经封装了从request获得parameter的值的方
方法,我们要做的就是去处理好我们的业务方法,更少的去写这方面的重复代码