当前位置: 代码迷 >> Web前端 >> struts 配备
  详细解决方案

struts 配备

热度:209   发布时间:2012-09-20 09:36:50.0
struts 配置
通常,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,崩溃。。。
但是在struts2.16中 改为
<filter>
<filter-name>struts</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>

<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
此时actionPackages 都不要配置,好象会自动搜索 action,actions,struts,struts2等目录。SSH3时代。
  相关解决方案