You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Struts1:如何从Java类取常量并在struts-config.xml的action path中引用?

Struts1中在struts-config.xml的action path属性引用Java常量的方案

由于Struts1原生不支持在XML配置中直接引用Java类的常量,要实现避免路径重复配置的需求,可采用以下几种可行方案:

方案一:扩展Struts配置加载器,动态替换占位符

  1. 先在Java类中定义全局路径常量:
    public class PathConstants {
        // 需要复用的权限限制路径
        public static final String VIEWER_RESTRICTED_PATH = "/path";
    }
    
  2. 修改struts-config.xml的action配置,用占位符代替硬编码路径:
    <action  path="${PATH_CONSTANTS.VIEWER_RESTRICTED_PATH}"
            type="com.webapp.actions.Action"
            name="form"
            scope="session"
            input="/input.jsp" >
    </action>
    
  3. 自定义配置加载类,继承Struts的XmlActionConfigProvider,重写解析逻辑:
    • 在解析action节点的path属性时,识别占位符,通过反射读取PathConstants类中的常量值,替换占位符。
  4. 在web.xml中配置ActionServlet时,指定使用自定义的配置加载器,确保初始化时完成路径替换。

方案二:用构建工具(Ant/Maven)做资源过滤

这种方式是在项目构建阶段完成路径替换,适合不需要动态变更路径的场景:

  1. 定义路径常量:可以在Java类中定义,或者直接写在properties文件中(比如app.properties):
    restricted.path=/path
    
  2. struts-config.xml中使用占位符:
    <action  path="${restricted.path}"
            type="com.webapp.actions.Action"
            name="form"
            scope="session"
            input="/input.jsp" >
    </action>
    
  3. 配置构建工具开启资源过滤:
    • 以Maven为例,在pom.xml中设置资源目录的过滤属性,将struts-config.xml所在目录标记为需要过滤的资源,构建时自动将占位符替换为实际路径值。
    • 如果要直接引用Java类的常量,可借助Maven的properties-maven-plugin插件,读取类中的常量值并注入到构建环境中。

方案三:统一用properties管理路径,Java与XML共用

把路径常量集中放在properties文件中,Java类和XML配置都基于这个文件获取值:

  1. 创建app.properties文件:
    restricted.path=/path
    
  2. Java类中读取该常量:
    public class PathConstants {
        public static final String VIEWER_RESTRICTED_PATH;
        static {
            Properties props = new Properties();
            try {
                props.load(PathConstants.class.getClassLoader().getResourceAsStream("app.properties"));
                VIEWER_RESTRICTED_PATH = props.getProperty("restricted.path");
            } catch (IOException e) {
                throw new RuntimeException("加载路径配置失败", e);
            }
        }
    }
    
  3. 结合方案一或方案二,让struts-config.xml中的path属性读取properties文件中的值,实现路径统一管理。

注意事项

  • 自定义配置加载器需要注意Struts的初始化顺序,确保常量类在配置加载前已被加载。
  • 构建工具过滤的方式更简单,但要保证开发、测试、生产环境的配置文件一致,避免构建后路径出错。

内容的提问来源于stack exchange,提问作者Ashutosh Dubey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.01 20:02:26