通常,MVC框架都需要Web应用加载核心控制器,而对于Struts2来说,需要加载的就是struts2的核心控制器"FilterDispatcher"。只要Web应用加载了FilterDispatcher,FilterDispatcher将会加载应用的Struts2框架。
        加载FilterDispatcher即在web.xml中配置FilterDispatcher,代码如下
<filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
        <init-param>
                   <param-name>actionPackages</param-name>
                   <param-value>test.action</param-value>
       </init-param>
</filter>
<filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
</filter-mapping>
 
        在通常的Struts2 FilterDispatcher配置中,可能没有代码中的蓝色部分——actionPackages参数的配置。actionPackages参数的设置就是为Struts2的所谓"零配置"服务的,param-value中的值代表一个包空间,如果有多个包,则以逗号隔开。
         Struts2框架将会扫描这些包下面的Action类,来支持与Action匹配的逻辑名找到对应的Action。如一个action的实体类名为TestAction,那么Test.action, Test(这种写法有点像servlet), test.action都可以找到TestAction(并不需要在struts.xml中配置)。
          既然我们不在struts.xml中配置action,那么action的result又怎么指定呢,Struts2同样有自己的方法——在Action类中直接加上result注解(写在Action类的上方):
 @Results({  
    @Result(name="test1", type=NullResult.class, value = "/test1.jsp", params = {}),  
    @Result(name="test2", type=NullResult.class, value = "/test2.jsp", params = {})  
})
 
         那么,如果我们同时配置了struts.xml,结果将会如何呢,逻辑名到底是使用"零配置"和注解result,还是使用struts.xml的配置呢。
         同样是上面的例子,如果我们在struts.xml同时配合了逻辑名Test,那么使用Test.action,将会使用struts.xml中的配置。看起来xml的配置可以覆盖"零配置",这样很方便不是吗?但是这小瞧了Struts2"无敌的"匹配功能,当我们使用小写test配置struts.xml时,test.action将会使用"零配置"而不是struts.xml,崩溃。。。
 
 
         这个故事告诉我们,规范的事情很重要。通常情况下我都是自己配置struts.xml,因为写的应用也没那么夸张,一般就几十个action吧,再说耦合度也低,配置拦截器和异常处理也方便(这两个东西和"零配置"是怎么融合的,我还没试过),不知道大伙儿平常开发是咋样的。