//interceptor-config.xml
<?xml version="1.0" encoding="UTF-8"?><interceptor-config> 
    <interceptor  name ="displayInterceptor"  type ="com.accp.filter.InterceptorQx" />    
    <action  type ="/jobwant"> 
          <interceptor  name ="displayInterceptor" /> 
    </action> 
  
//stuts-config.xml
   <!-- 招聘-发布职位 -->
    <action
      attribute="JobWantForm"
      name="JobWantForm"
      path="/jobwant"
      scope="request"
      parameter="method"
      type="com.accp.struts.action.JobWantAction">
      <set-property property="cancellable" value="true" />
    </action>
  </action-mappings>
    
  <controller processorClass="org.springframework.web.struts.DelegatingRequestProcessor"></controller>
  <message-resources parameter="com.accp.struts.ApplicationResources" />
  <plug-in  className ="net.sf.struts.saif.SAIFSpringPlugin" > 
      <set-property  property ="interceptor-config"  value ="/WEB-INF/interceptor-config.xml"/> 
   </plug-in>
</struts-config>
 

解决方案 »

  1.   

    //拦截器
    package com.accp.filter;import java.io.IOException;import javax.servlet.ServletException;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;import org.apache.struts.action.Action;
    import org.apache.struts.action.ActionForm;
    import org.apache.struts.action.ActionForward;
    import org.apache.struts.action.ActionMapping;
    import net.sf.struts.saif.ActionHaveForwardInterceptor;public class InterceptorQx implements ActionHaveForwardInterceptor{ public ActionForward afterAction(Action action, ActionMapping mapping,
    ActionForm actionForm, HttpServletRequest res, HttpServletResponse req)
    throws IOException, ServletException {
    System.out.println("!!!!!!!!!!!!!!!!!!!!!!");
    return null;
    } public ActionForward beforeAction(Action action, ActionMapping mapping,
    ActionForm actionForm, HttpServletRequest res, HttpServletResponse req)
    throws IOException, ServletException {
    System.out.println("!!!!!!!!!!!!!!!!!!!!!!");
    return null;
    }
    }//异常
    javax.servlet.ServletException: javax.servlet.ServletException: Specified RequestProcessor not compatible with saif.
    at net.sf.struts.saif.SAIFSpringPlugin.initRequestProcessorClass(SAIFSpringPlugin.java:99)
    at net.sf.struts.saif.SAIFSpringPlugin.init(SAIFSpringPlugin.java:40)
    at org.apache.struts.action.ActionServlet.initModulePlugIns(ActionServlet.java:869)
    at org.apache.struts.action.ActionServlet.init(ActionServlet.java:336)
    at javax.servlet.GenericServlet.init(GenericServlet.java:212)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1173)
    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:993)
    at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4187)
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4496)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:546)
    at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1041)
    at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:964)
    at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:502)
    at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1277)
    at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:321)
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
    at org.apache.catalina.core.StandardHost.start(StandardHost.java:785)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
    at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
    at org.apache.catalina.core.StandardService.start(StandardService.java:519)
    at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:581)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
    Caused by: javax.servlet.ServletException: Specified RequestProcessor not compatible with saif.
    at net.sf.struts.saif.SAIFSpringPlugin.initRequestProcessorClass(SAIFSpringPlugin.java:94)
    ... 30 more
      

  2.   

    我的处理方式如下
    我把SAIFSpringPlugin反编译,将saif-sping.jar中的那个class删除了
    然后自己在src下面建个相同的包,下面建个同名的java类。
    这样,在struts1.3.10 + spring3.1.0环境下也没问题了。package net.sf.struts.saif;import javax.servlet.ServletException;import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    import org.apache.struts.action.ActionServlet;
    import org.apache.struts.config.ControllerConfig;
    import org.apache.struts.config.ModuleConfig;/**
     * 
     * <pre>
     * Title:SAIFSpringPlugin,替代saif-spring.jar中的SAIFSpringPlugin
     * Description: Title:SAIFSpringPlugin,
     * 增加对DelegatingRequestProcessor和DelegatingTilesRequestProcessor的支持 
     * </pre>
     * @author [email protected]
     * @version 1.00.00
     * <pre>
     * 修改记录
     *    修改后版本:     修改人:  修改日期:     修改内容: 
     * </pre>
     */
    public class SAIFSpringPlugin implements
    org.apache.struts.action.PlugIn { private static final Log log;

    private static final String DelegatingRequestProcessor = "org.springframework.web.struts.DelegatingRequestProcessor";

    private static final String DelegatingTilesRequestProcessor = "org.springframework.web.struts.DelegatingTilesRequestProcessor";    public SAIFSpringPlugin()
        {
        }    public void init(ActionServlet servlet, ModuleConfig config)
            throws ServletException
        {
            initRequestProcessorClass(servlet, config);
        }    public void destroy()
        {
        }    protected void initRequestProcessorClass(ActionServlet servlet, ModuleConfig config)
            throws ServletException
        {
            String saifProcessorClassname = net.sf.struts.saif.SAIFSpringRequestProcessor.class.getName();
            String saifTilesProcessorClassname = net.sf.struts.saif.SAIFTilesSpringRequestProcessor.class.getName();
            ControllerConfig ctrlConfig = config.getControllerConfig();
            String configProcessorClassname = ctrlConfig.getProcessorClass();
            if(configProcessorClassname.equals(org.apache.struts.action.RequestProcessor.class.getName()) || configProcessorClassname.endsWith(saifProcessorClassname) || configProcessorClassname.equals(DelegatingRequestProcessor))
            {
                ctrlConfig.setProcessorClass(saifProcessorClassname);
                if(log.isInfoEnabled())
                {
                    log.info("Loading the saif request processor without Tiles support");
                }
                return;
            }
            if(configProcessorClassname.equals(org.apache.struts.tiles.TilesRequestProcessor.class.getName()) || configProcessorClassname.endsWith(saifTilesProcessorClassname) || configProcessorClassname.equals(DelegatingTilesRequestProcessor))
            {
                ctrlConfig.setProcessorClass(saifTilesProcessorClassname);
                if(log.isInfoEnabled())
                {
                    log.info("Loading the saif request processor with Tiles support");
                }
                return;
            }
            try
            {
                Class saifProcessorClass = net.sf.struts.saif.SAIFSpringRequestProcessor.class;
                Class saifTilesProcessorClass = net.sf.struts.saif.SAIFTilesSpringRequestProcessor.class;
                Class configProcessorClass = Class.forName(configProcessorClassname);
                if(!saifProcessorClass.isAssignableFrom(configProcessorClass) && !saifTilesProcessorClass.isAssignableFrom(configProcessorClass))
                {
                    String msg = "Specified RequestProcessor not compatible with saif.";
                    throw new ServletException(msg);
                }
            }
            catch(Exception ex)
            {
                throw new ServletException(ex);
            }
            if(log.isDebugEnabled())
            {
                log.debug("saif plugin class successfully registered");
            }
        }    static 
        {
            log = LogFactory.getLog(net.sf.struts.saif.SAIFSpringPlugin.class);
        }}