`
WAMING5
  • 浏览: 10894 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

修改Struts2(2.16+)配置文件的位置

阅读更多
最早学习Struts1时,它的配置文件是放在WEB-INF下的。过渡到Struts2,把配置文件放到src总感觉别扭。于是为了让自己习惯,我就把Struts2(2.16以上的版本)的配置文件也放到了WEB-INF下。

       于是在web.xml里我我依旧这么配置:
  	<filter>
		<filter-name>struts2</filter-name>
		<filter-class>	
          		org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
                 </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>
  


    启动服务器OK,没出错。可是无论我怎么发送请求,都报没有找到相应的Action。这是这么回事呢?

    于是找到Struts2的源码下个断点启动服务器:

    Dispatcher dispatcher = init.initDispatcher(config);看到了它,看看里面怎么回事:

    /**
     * Creates and initializes the dispatcher
     */
    public Dispatcher initDispatcher( HostConfig filterConfig ) {
        Dispatcher dispatcher = createDispatcher(filterConfig);
        dispatcher.init();
        return dispatcher;
    }

继续看dispatcher.init();
    /**
     * Load configurations, including both XML and zero-configuration strategies,
     * and update optional settings, including whether to reload configurations and resource files.
     */
    public void init() {

    	if (configurationManager == null) {
    		configurationManager = new ConfigurationManager(BeanSelectionProvider.DEFAULT_BEAN_NAME);
    	}

        try {
            init_DefaultProperties(); // [1]
            init_TraditionalXmlConfigurations(); // [2]
            init_LegacyStrutsProperties(); // [3]
            init_CustomConfigurationProviders(); // [5]
            init_FilterInitParameters() ; // [6]
            init_AliasStandardObjects() ; // [7]

            Container container = init_PreloadConfiguration();
            container.inject(this);
            init_CheckConfigurationReloading(container);
            init_CheckWebLogicWorkaround(container);

            if (!dispatcherListeners.isEmpty()) {
                for (DispatcherListener l : dispatcherListeners) {
                    l.dispatcherInitialized(this);
                }
            }
        } catch (Exception ex) {
            if (LOG.isErrorEnabled())
                LOG.error("Dispatcher initialization failed", ex);
            throw new StrutsException(ex);
        }
    }


看看init_TraditionalXmlConfigurations(); // [2]
    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");
            }
        }
    }

原来在这:我发现开始在没有改变路径并配置的情况下 ,它加载的是
    private static final String DEFAULT_CONFIGURATION_PATHS = "struts-default.xml,struts-plugin.xml,struts.xml";

看看Tomcat里路径(被我改后的位置)它在:
\Tomcat6.0\webapps\struct2\WEB-INF

之前它在
C:\Tomcat6.0\webapps\struct2\WEB-INF\classes

默认回去这里面找,
所以再用原来的位置是加载不上这个文件的,于是我改正了:
		<init-param>
			<param-name>config</param-name>
			<param-value>struts-default.xml,struts-plugin.xml,../struts.xml</param-value>
		</init-param>

Ok 启动下服务器;重新请求下Action,成功了。可以还有点小麻烦,我在提交请求时老报
警告:2010-8-19 23:06:42 com.opensymphony.xwork2.util.logging.jdk.JdkLogger warn
警告: No configuration found for the specified action: 'user/user' in namespace: ''. Form action defaulting to 'action' attribute's literal value.
2010-8-19 23:06:43 com.opensymphony.xwork2.util.logging.jdk.JdkLogger warn
警告: No configuration found for the specified action: 'user/user' in namespace: ''. Form action defaulting to 'action' attribute's literal value.

竟然没有出错,可是看着警告很不爽,看看.......原来是标签用错了我在package加了命名空间/user可是在<s:form>中action="user/user!login",他似乎还有个属性namespace,于是加上namespace="/user" ,action="user!login",重新试试,OK很顺利.......
刚开始学习Struts2.可能说的不对,请大家多多指教。

我在整合S2SH时,同样把所有的配置文件放到了WEB-INF里,同样我也遇到了更过麻烦,运行配置文件没读取.......
最典型的是我在mian方法中读取Spring中的bean怎么初始化不了我定义的bean
具体是这样的:
//加载spring配置文件,初始化IoC容器
ApplicationContext context = null;   
context=new ClassPathXmlApplicationContext("/WEB-INF/applicationContext.xml");
		UsersDAO item=(UsersDAO)context.getBean("UsersDAO");
		System.out.println(item.getClass());

  
怎么都是徒劳,后来想起来在mian方法中是没有所谓的容器的。于是改成:
//加载spring配置文件,初始化IoC容器
ApplicationContext context = null;   
context= new  FileSystemXmlApplicationContext("/WebRoot/WEB-INF/applicationContext.xml");
		UsersDAO item=(UsersDAO)context.getBean("UsersDAO");
		System.out.println(item.getClass());

正在学习中。希望大家多多指教下。
1
1
分享到:
评论
4 楼 WAMING5 2012-08-30  
rancococ 写道
配置xml路径的时候不能有"/WebRoot"吧,你部署的时候咋办?特别是部署到weblogic上时就有很多问题,最显著的就是weblogic认不到/WEB-INF/下的配置文件。

你说的应该是打包部署吧。现在工程还在eclipse里面没有编译打包。
3 楼 WAMING5 2010-08-20  
不过部署到其他服务器就没试过了.....
2 楼 WAMING5 2010-08-20  
rancococ 写道
配置xml路径的时候不能有"/WebRoot"吧,你部署的时候咋办?特别是部署到weblogic上时就有很多问题,最显著的就是weblogic认不到/WEB-INF/下的配置文件。

奥,这个是在控制台用的,mian方法中读取的,和部署没关系。这样并不影响。
1 楼 rancococ 2010-08-20  
配置xml路径的时候不能有"/WebRoot"吧,你部署的时候咋办?特别是部署到weblogic上时就有很多问题,最显著的就是weblogic认不到/WEB-INF/下的配置文件。

相关推荐

    struts2+spring+hibernate 配置文件

    struts2+spring+hibernate 配置文件struts2+spring+hibernate 配置文件

    struts2.16+ognl2.61+xwork2.1源码.rar

    Struts2.16、OGNL2.61和XWork2.1是Apache Struts框架的特定版本,这些源代码文件提供了深入了解该框架工作原理的机会。Struts2是一个广泛使用的Java Web应用程序开发框架,它基于Model-View-Controller(MVC)设计...

    struts2.16+spring2.5+hibernate3.0工程所需jar文件

    综上所述,搭建一个基于Struts2.16、Spring2.5和Hibernate3.0的项目,需要理解每个框架的核心理念和用法,同时掌握它们之间的整合技巧,以及如何配置和管理项目中的库文件。这不仅能帮助开发者构建出结构清晰、易于...

    论坛系统项目(Struts 2+Hibernate+Spring实现)

    论坛系统项目(Struts 2+Hibernate+Spring实现)论坛系统项目(Struts 2+Hibernate+Spring实现)论坛系统项目(Struts 2+Hibernate+Spring实现)论坛系统项目(Struts 2+Hibernate+Spring实现)论坛系统项目(Struts...

    简单struts+spring+hibernate搭建,配置

    简单struts+spring+hibernate搭建,配置,适合初学者

    struts2+spring+mybatis+easyui的实现

    在Struts2中,Action类是业务逻辑的载体,配置在struts.xml文件中,通过拦截器链来处理请求和响应。Struts2还提供了丰富的结果类型,如dispatcher(转发)和stream(流式下载),以及强大的OGNL表达式语言,用于在...

    struts+spring+hibernate实现图书修改和删除

    SSH整合的关键在于配置文件,包括Struts 2的struts.xml、Spring的applicationContext.xml和Hibernate的hibernate.cfg.xml。这些文件定义了各组件之间的关系和行为。例如,struts.xml中配置Action类及其结果视图,...

    struts2+spring+Ibatis框架包

    使用SSi框架包进行开发时,开发者首先需要配置struts2的配置文件(struts.xml),定义Action和结果类型。接着,配置Spring的上下文配置文件(如applicationContext.xml),声明Bean及其依赖关系。最后,配置iBatis的...

    Struts+Spring+Mybatis+EasyUI(jQuery)注解案例

    Struts+Spring+Mybatis+EasyUI(jQuery)注解案例。采用注解的方式跟踪代码依赖性,实现替代配置文件功能。里面包含了平时用的增删改查及分页,分页查询时用的是存储过程,提高了数据库的性能。代码简单、易懂。

    spring+struts2+hibernate+mybatis

    一个简单的spring+struts2+hibernate+mybatis整合(数据库脚本放在项目资源文件的sql目录下) 因为没想好mvc用springmvc好,还是struts2好 所以没有整合进去

    Java Web整合开发完全自学手册:Struts+Hibernate+Spring+Eclipse源码

    以国内使用最广泛的Struts为例,其新版本Struts2与前一版Struts1.x已经有了天壤之别。Hibernate也从2.0升级为3.X,近期Spring也最新推出了2.5版。读者如果再参考以前的版本书籍学习,无异于南辕北辙,而《JavaWeb...

    struts2+hibernate+freemarker项目实例

    Struts2、Hibernate和FreeMarker是Java开发领域中常见的三个开源框架,它们分别在MVC(Model-View-Controller)架构的不同层面发挥着关键作用。这个"struts2+hibernate+freemarker"项目实例是将这三个框架集成到一起...

    struts2配置文件改变位置问题

    总结一下,当遇到Struts2配置文件位置更改问题时,应遵循以下步骤: 1. 确保新的`struts.xml`文件路径是相对于`WEB-INF/classes`目录的。 2. 更新`web.xml`中的`StrutsPrepareAndExecuteFilter`过滤器配置,通过`...

    Struts+Spring+Ibatis环境配置(一) - zwjxf的专栏 - 博

    Struts+Spring+Ibatis环境配置(一) - zwjxf的专栏 - 博

    Struts2+maven+spring+mybatis整合实现注册功能实例

    3. 配置Struts2:设置struts.xml配置文件,定义Action类和结果页面。 4. 配置Spring:创建Spring的配置文件(如applicationContext.xml),声明bean,包括Action、Service、DAO以及数据源等。 5. 配置MyBatis:设置...

    整合Struts+Hibernate+Spring应用开发详解

    本光盘是《整合Struts+Hibernate+Spring应用开发详解》一书的配书光盘,书中的代码按章存放, 即第二章所使用的代码放在codes文件夹的02文件夹下,... (2) springlib文件夹下放的是编译和运行Spring项目的类库文件。

    ssh(struts+spring+hibernate)教务管理信息系统(全部代码) 可以直接运行

    2. **webapp**:Web应用目录,有WEB-INF子目录,里面包含web.xml、struts-config.xml等配置文件,以及JSP页面。 3. **lib**:原本应包含项目依赖的JAR文件,如Struts、Spring、Hibernate的库,但由于大小原因被移除...

    整合Struts+Hibernate+Spring应用开发详解2

    本光盘是《整合Struts+Hibernate+Spring应用开发详解》一书的配书光盘,书中的代码按章存放, 即第二章所使用的代码放在codes文件夹的02文件夹下,... (2) springlib文件夹下放的是编译和运行Spring项目的类库文件。

    struts2_2.16的XML配置文件

    struts2_2.16的XML配置文件,自己项目内的配置文件,上传做个备份,怕以后自己忘记了。

    struts+spring+hibernate(mysql)用户登录及文件上传

    Struts配置文件(struts.xml)定义了各个Action和结果页面的映射,使得系统能够根据用户操作跳转到相应的视图。 其次,Spring框架作为整个应用的“胶水”,提供了依赖注入(DI)和面向切面编程(AOP)等功能。在本...

Global site tag (gtag.js) - Google Analytics