小弟最近在学习struts2,想改变一下struts.xml的路径,就把其中的struts2中的struts.xml放在web-inf下,也在web.xml中加入加载struts.xml的一句话。可启动老是报错。web.xml内容如下:
<display-name>Struts2 Hello World!</display-name>
 <filter>
   <filter-name>struts2</filter-name>
     <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
    <init-param>
            <param-name>config</param-name>
          
            <param-value>/WEB-INF/struts.xml</param-value>
        </init-param>
  
  </filter>
  
 <filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

解决方案 »

  1.   

    <init-param> 
                <param-name>config </param-name> 
              
                <param-value>/WEB-INF/struts.xml </param-value> 
            </init-param> 
     去掉...
      

  2.   

    <param-value>classpath:WEB-INF/struts.xml </param-value> 
      

  3.   

    查看一下报错信息,确定已经将五个jar包放到服务器下了吗?
    还有。。
    Struts2好像不支持Tomcat5.0但是启动时却不会报出错信息,只是找不到jsp页面
      

  4.   

    默认放哪,就放哪,你把牛放猪圈里牛当然不愿意了 ,struts 默认访问的路径 你把它拿走了 启动服务器的时候找不到,当然报错了
      

  5.   

    这个当然可以了。
    想想就可以,像spring,struts1都可以,怎么会struts不行呢。
    ---------------------
    楼主的配置基本是对的,但参数少了两项内容。具体如下配置即可:
    <init-param> 
        <param-name>config</param-name>       
        <param-value>
           struts-default.xml,
           struts-plugin.xml,
           /WEB-INF/struts.xml
        </param-value> 
    </init-param> 
    -----------------------
    相信大家一看就明白了,因为struts-default.xml中定义了struts-default这个包
    另外,为什么参数的名字叫config,而且三个配置文件名之间可以用“,”号来分隔呢,总不能瞎猜吧。
    是这样的,FilterDispatcher这个Filter的init()方法中,需要初始化一个叫做Dispacher的类,源码如下:
        /**
         * Initializes the filter by creating a default dispatcher
         * and setting the default packages for static resources.
         *
         * @param filterConfig The filter configuration
         */

        public void init(FilterConfig filterConfig) throws ServletException {
            try {
                this.filterConfig = filterConfig;            initLogging();            dispatcher = createDispatcher(filterConfig);
                dispatcher.init();
                dispatcher.getContainer().inject(this);            staticResourceLoader.setHostConfig(new FilterHostConfig(filterConfig));
            } finally {
                ActionContext.setContext(null);
            }
        }
    画红线的部分表明这个方法的主要作用就是初始化一个Dispacher类。
    好,现在进入这个类看看。其中有这么个常量:
     private static final String DEFAULT_CONFIGURATION_PATHS "struts-default.xml,struts-plugin.xml,struts.xml";
    再看该类里边的这个方法:
    private void init_TraditionalXmlConfigurations() {
            String configPaths = initParams.get("config");
            if (configPaths == null) {
                configPaths = DEFAULT_CONFIGURATION_PATHS;
            }
            String[] files = configPaths.split("\\s*[,]\\s*");
            for (String file : files) {
                if (file.endsWith(".xml")) {
                    if ("xwork.xml".equals(file)) {
                        configurationManager.addConfigurationProvider(new XmlConfigurationProvider(file, false));
                    } else {
                        configurationManager.addConfigurationProvider(new StrutsXmlConfigurationProvider(file, false, servletContext));
                    }
                } else {
                    throw new IllegalArgumentException("Invalid configuration file name");
                }
            }
        }
    大家只看我用特殊颜色标识出来的内容就全都明白了吧。
      

  6.   


    对,这个是对的,我也是看了struts2中FilterDIspatcher源码才发现的。