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

發佈了34 篇原創文章 · 獲贊 0 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章