当前位置: 首页 > news >正文

struts2中改变struts.xml默认路径

struts2.X配置文件默认存放路径在/WEB-INF/classes目录下,即将struts.xml放在src的目录下。

但是为了方便管理,开发人员把struts.xml放到其他位置,处理方法如下。

首先要明白struts2加载配置文件都是从自己的jar包和/WEB-INF/classes两个默认的位置加载的。

若修改struts2.x配置文件的存放位置,在web.xml配置过虑器时,具体配置如下:
 

1 <filter>
2     <filter-name>struts2</filter-name>
3     <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
4     <init-param
5         <param-name>config</param-name
6         <param-value>struts-default.xml,struts-plugin.xml,struts/struts.xml</param-value>
7     </init-param>
8 </filter>

 

注意点1

若设置了<param-name>config</param-name>参数,那struts-default.xml等原来struts2默认加载的文件也要手动指定,否则不会自动加载。

 

注意点2

struts-plugin.xml也需要指定。因为在struts2使用2.1.6版本时:

若需要和spring集成的话,struts2-spring-plugin-2.1.6.jar中有struts-plugin.xml这个文件。

若struts2要支持json的话, json-plugin-0.34.jar中也有一个叫struts-plugin.xm的文件。

因此这个文件也是要加载的。

 

注意点3

采用相对/WEB-INF/classes的相对路径。本例放在了/WEB-INF/classes/struts目录下。当然也可以写成classpath:struts/struts.xml

 

注意点4

若不在这里配置struts-default.xml,struts-plugin.xml,也可以在struts.xml文件中添加include标签将两个文件包括进去。

<include file="struts-default.xml" />和<include file="struts-plugin.xml" />

 

注意点5

使用<include file="..." />标签添加其他子配置文件时,file属性也要是一个相对/WEB-INF/classes的路径。

若子配置文件路径是/WEB-INF/classes/configs/struts/student/struts-config.xml的话,

file属性值应该写configs/struts/student/struts-config.xml。

若有多个子配置文件可以采用扫描的方式<include file="configs/struts/*/*.xml" />


可能遇到的问题:

警告: Could not find action or result
      There is no Action mapped for namespace / and action name hello. - [unknown location]

为什么指定了自己的struts.xml文件路径依然访问不到呢?

原因依然在struts加载配置文件的方式,struts并不是获取的配置文件相对应用(项目)的路径,而是相对src,对于web是相对/WEB-INF/classes文件夹的路径,现在知道了最终的解决方案了?

对了,就是把web.xml中的[/WEB-INF/struts.xml]改成 [../struts.xml],即使用相对/WEB-INF/classes文件夹的路径!




相关文章:

  • 集成spring3、hibernate4、junit
  • 解决android开发中eclipse不能自动提示
  • 关于Eclipse出现failed to create the java virtual machine错误的解决办法
  • java.lang.NoClassDefFoundError: org/jaxen/JaxenException at spring.SpringTest.readXML
  • MySQL导出数据库结构出现Cannot load from mysql.proc错误的解决方法
  • mysql Error 1040 too many connection解决办法
  • No suitable driver found for jdbc_我的解决方法
  • Failed to install DroidIPCam.apk on device 'emulator-5554': timeout
  • android开发中logcat没信息输出
  • mysql 数据表中查找重复记录
  • LinearLayout添加滚动条
  • Android中ScrollView嵌套ListView只显示一行的解决方案
  • does not specify a android.test.InstrumentationTestRunner instrumentation or does not declare
  • java.lang.SecurityException: Permission Denial: opening provider
  • MySQL中GROUP_CONCAT函数长度限制处理/实现行转列的功能
  • Angular数据绑定机制
  • crontab执行失败的多种原因
  • Effective Java 笔记(一)
  • iBatis和MyBatis在使用ResultMap对应关系时的区别
  • iOS筛选菜单、分段选择器、导航栏、悬浮窗、转场动画、启动视频等源码
  • k8s如何管理Pod
  • scrapy学习之路4(itemloder的使用)
  • 闭包--闭包作用之保存(一)
  • 搭建gitbook 和 访问权限认证
  • 干货 | 以太坊Mist负责人教你建立无服务器应用
  • 七牛云 DV OV EV SSL 证书上线,限时折扣低至 6.75 折!
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • 微信如何实现自动跳转到用其他浏览器打开指定页面下载APP
  • 微信小程序--------语音识别(前端自己也能玩)
  • 优秀架构师必须掌握的架构思维
  • 国内唯一,阿里云入选全球区块链云服务报告,领先AWS、Google ...
  • #if #elif #endif
  • #pragma multi_compile #pragma shader_feature
  • #pragma预处理命令
  • #我与Java虚拟机的故事#连载16:打开Java世界大门的钥匙
  • (2)(2.10) LTM telemetry
  • (20050108)又读《平凡的世界》
  • (22)C#传智:复习,多态虚方法抽象类接口,静态类,String与StringBuilder,集合泛型List与Dictionary,文件类,结构与类的区别
  • (23)Linux的软硬连接
  • (3)选择元素——(14)接触DOM元素(Accessing DOM elements)
  • (C语言)输入自定义个数的整数,打印出最大值和最小值
  • (solr系列:一)使用tomcat部署solr服务
  • (翻译)Quartz官方教程——第一课:Quartz入门
  • (非本人原创)史记·柴静列传(r4笔记第65天)
  • (分布式缓存)Redis哨兵
  • (更新)A股上市公司华证ESG评级得分稳健性校验ESG得分年均值中位数(2009-2023年.12)
  • (论文阅读22/100)Learning a Deep Compact Image Representation for Visual Tracking
  • (十五)Flask覆写wsgi_app函数实现自定义中间件
  • (顺序)容器的好伴侣 --- 容器适配器
  • (未解决)macOS matplotlib 中文是方框
  • (转)EOS中账户、钱包和密钥的关系
  • (转)IIS6 ASP 0251超过响应缓冲区限制错误的解决方法
  • **CI中自动类加载的用法总结
  • .net 设置默认首页
  • .NET 同步与异步 之 原子操作和自旋锁(Interlocked、SpinLock)(九)