appfuse下webwork无法正常调用spring定义Action原因

我们在appfuse中看到xwork直接可以调用spring配置文件action-servlet.xml中的类,那么他们是通过什么方法实现的呢?为什么同样的配置我们的就不可以,原来一切都是因为一个过滤器。

对于上次所遇到关于userAction无法找到的问题经查证如下:

在默认情况下xwork是无法之际在spring中所声明的action类的,如果需要调用则需要在web.xml中添加一个过滤器,代码如下:

    <filter>
        <filter-name>securityFilter</filter-name>
        <filter-class>net.sf.acegisecurity.util.FilterChainProxy</filter-class>
    </filter>
   <filter-mapping>
        <filter-name>securityFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

但是一定要记得,文件net.sf.acegisecurity.util.FilterChainProxy是在acegi-security-x.x.x.jar包里面的,调用前一定要记得放在应用的WEB-INF/lib/目录下才能正常使用。

当系统启动时会自动加载spring配置文件中所声明的类,在appfuse中这一声明是放在action-servlet.xml中的,因此必须将这个文件同其他的applicationContext.xml一起在web.xml中声明为contextConfigLocation的内容,如下:

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/applicationContext-datasource.xml,/WEB-INF/applicationContext-hibernate.xml,/WEB-INF/applicationContext-service.xml,/WEB-INF/action-servlet.xml</param-value>
    </context-param>

在action-servlet.xml中定义如下(这个文件必须符合spring-beans.dtd的规范):

<beans>   
   
    <bean id="userAction" class="com.mywap.webwork.action.UserAction" singleton="false">
        <property name="userManager"><ref bean="userManager"/></property>
    </bean>
   
    <!-- Add additional actions here -->
</beans>

然后在xwork.xml中可以如下调用(这个文件需要符合xwork-1.0.dtd的标准):

  <action name="loginCheck" class="userAction" method="add">
            <result name="input">/</result>
            <result name="success" type="redirect">/listUser.jsp</result>
  </action>

不过配置完成以后新的问题又出现了:

在启动服务的时候出现如下异常,错误的等级为严重,正在解决中……

[mywap] ERROR [main] [/].log(662) | Exception starting filter securityFilter
javax.servlet.ServletException: Bean context must contain at least one bean of t
ype net.sf.acegisecurity.util.FilterChainProxy
        at net.sf.acegisecurity.util.FilterToBeanProxy.doInit(FilterToBeanProxy.
java:200)
        at net.sf.acegisecurity.util.FilterToBeanProxy.init(FilterToBeanProxy.ja
va:137)
        at org.apache.catalina.core.ApplicationFilterConfig.getFilter(Applicatio
nFilterConfig.java:225)
        at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(Applica
tionFilterConfig.java:308)
        at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFi
lterConfig.java:79)
        at org.apache.catalina.core.StandardContext.filterStart(StandardContext.
java:3502)
        at org.apache.catalina.core.StandardContext.start(StandardContext.java:4
071)
        at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase
.java:755)
        at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:73
9)
        at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:525)

        at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.jav
a:886)
        at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.j
ava:849)
        at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:474
)
        at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1079)
        at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java
:310)
        at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(Lifecycl
eSupport.java:119)
        at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1011)

        at org.apache.catalina.core.StandardHost.start(StandardHost.java:718)
        at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1003)

        at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:437
)
        at org.apache.catalina.core.StandardService.start(StandardService.java:4
50)
        at org.apache.catalina.core.StandardServer.start(StandardServer.java:201
0)
        at org.apache.catalina.startup.Catalina.start(Catalina.java:537)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:585)
        at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:271)
        at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:409)
[mywap] ERROR [main] [/].log(662) | Exception starting filter sitemesh
com.opensymphony.module.sitemesh.factory.FactoryException: Cannot construct Fact
ory : com.opensymphony.module.sitemesh.factory.DefaultFactory: java.lang.reflect
.InvocationTargetException
        at com.opensymphony.module.sitemesh.Factory.report(Factory.java:87)
        at com.opensymphony.module.sitemesh.Factory.getInstance(Factory.java:56)

        at com.opensymphony.module.sitemesh.filter.PageFilter.init(PageFilter.ja
va:86)
        at org.apache.catalina.core.ApplicationFilterConfig.getFilter(Applicatio
nFilterConfig.java:225)
        at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(Applica
tionFilterConfig.java:308)
        at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFi
lterConfig.java:79)
        at org.apache.catalina.core.StandardContext.filterStart(StandardContext.
java:3502)
        at org.apache.catalina.core.StandardContext.start(StandardContext.java:4
071)
        at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase
.java:755)
        at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:73
9)
        at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:525)

        at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.jav
a:886)
        at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.j
ava:849)
        at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:474
)
        at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1079)
        at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java
:310)
        at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(Lifecycl
eSupport.java:119)
        at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1011)

        at org.apache.catalina.core.StandardHost.start(StandardHost.java:718)
        at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1003)

        at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:437
)
        at org.apache.catalina.core.StandardService.start(StandardService.java:4
50)
        at org.apache.catalina.core.StandardServer.start(StandardServer.java:201
0)
        at org.apache.catalina.startup.Catalina.start(Catalina.java:537)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:585)
        at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:271)
        at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:409)

Root cause:
java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)

        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstruct
orAccessorImpl.java:39)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingC
onstructorAccessorImpl.java:27)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:494)
        at com.opensymphony.module.sitemesh.Factory.getInstance(Factory.java:52)

        at com.opensymphony.module.sitemesh.filter.PageFilter.init(PageFilter.ja
va:86)
        at org.apache.catalina.core.ApplicationFilterConfig.getFilter(Applicatio
nFilterConfig.java:225)
        at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(Applica
tionFilterConfig.java:308)
        at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFi
lterConfig.java:79)
        at org.apache.catalina.core.StandardContext.filterStart(StandardContext.
java:3502)
        at org.apache.catalina.core.StandardContext.start(StandardContext.java:4
071)
        at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase
.java:755)
        at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:73
9)
        at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:525)

        at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.jav
a:886)
        at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.j
ava:849)
        at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:474
)
        at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1079)
        at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java
:310)
        at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(Lifecycl
eSupport.java:119)
        at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1011)

        at org.apache.catalina.core.StandardHost.start(StandardHost.java:718)
        at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1003)

        at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:437
)
        at org.apache.catalina.core.StandardService.start(StandardService.java:4
50)
        at org.apache.catalina.core.StandardServer.start(StandardServer.java:201
0)
        at org.apache.catalina.startup.Catalina.start(Catalina.java:537)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:585)
        at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:271)
        at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:409)
Caused by: java.lang.IllegalStateException: Cannot load excludes configuration f
ile from jar
        at com.opensymphony.module.sitemesh.factory.DefaultFactory.loadExcludes(
DefaultFactory.java:192)
        at com.opensymphony.module.sitemesh.factory.DefaultFactory.loadConfig(De
faultFactory.java:121)
        at com.opensymphony.module.sitemesh.factory.DefaultFactory.<init>(Defaul
tFactory.java:57)
        ... 33 more

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值