Struts2源码分析--请求处理
?
??? ??顺着流程我们看Disptcher的init方法。init方法里就是初始读取一些配置文件等,先看init_DefaultProperties,主要是读取properties配置文件。??? ?再来看init_TraditionalXmlConfigurations方法,这个是读取struts-default.xml和Struts.xml的方法。?? ??好了,action执行完了,还要根据ResultConfig返回到view,也就是在invoke方法中调用executeResult方法。?? ? 最后补充一下,Struts2的查找值和设置值都是使用Ognl来实现的。关于Ognl的介绍可以到其官方网站查看http://www.ognl.org/,我在网上也找到另外一篇http://www.javaeye.com/topic/254684和http://www.javaeye.com/topic/223612。完了来看下面这段小测试程序(其它的Ognl的测试可以自己添加)。public class TestOgnl { private User user; private Map context; @Before public void setUp() throws Exception { } @Test public void ognlGetValue() throws Exception { reset(); Assert.assertEquals("myyate", Ognl.getValue("name", user)); Assert.assertEquals("cares", Ognl.getValue("dept.name", user)); Assert.assertEquals("myyate", Ognl.getValue("name", context, user)); Assert.assertEquals("contextmap", Ognl.getValue("#name", context, user)); Assert.assertEquals("parker", Ognl.getValue("#pen", context, user)); } @Test public void ognlSetValue() throws Exception { reset(); Ognl.setValue("name", user, "myyateC"); Assert.assertEquals("myyateC", Ognl.getValue("name", user)); Ognl.setValue("dept.name", user, "caresC"); Assert.assertEquals("caresC", Ognl.getValue("dept.name", user)); Assert.assertEquals("contextmap", Ognl.getValue("#name", context, user)); Ognl.setValue("#name", context, user, "contextmapC"); Assert.assertEquals("contextmapC", Ognl.getValue("#name", context, user)); Assert.assertEquals("parker", Ognl.getValue("#pen", context, user)); Ognl.setValue("#name", context, user, "parkerC"); Assert.assertEquals("parkerC", Ognl.getValue("#name", context, user)); } public static void main(String[] args) throws Exception { JUnitCore.runClasses(TestOgnl.class); } private void reset() { user = new User("myyate", new Dept("cares")); context = new OgnlContext(); context.put("pen", "parker"); context.put("name", "contextmap"); }}class User { public User(String name, Dept dept) { this.name = name; this.dept = dept; } String name; private Dept dept; public Dept getDept() { return dept; } public String getName() { return name; } public void setDept(Dept dept) { this.dept = dept; } public void setName(String name) { this.name = name; }}class Dept { public Dept(String name) { this.name = name; } private String name; public String getName() { return name; } public void setName(String name) { this.name = name; }}?? ??这样,一个Struts2的请求流程基本上就结束了。其实我觉得做项目把Struts2参考文档看两遍就可以了,呵呵!(写博客比看代码还累)