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

Struts 1.x迁移至Struts 2.5.16:Action读取web.xml初始化参数方法

在Struts 2.5.16中读取web.xml里Filter的初始化参数

你从Struts 1迁移到2.5.16,并且需要在继承ActionSupport的MyAction中读取StrutsPrepareAndExecuteFilter的初始化参数,这里有两种可靠的实现方式:


方法1:通过ServletActionContext直接获取FilterConfig

Struts2提供了ServletActionContext工具类,可以直接拿到当前Struts核心Filter的FilterConfig对象,从而读取其初始化参数。代码示例如下:

import org.apache.struts2.ServletActionContext;
import javax.servlet.FilterConfig;
import org.apache.struts2.action.ActionSupport;
import java.util.Enumeration;

public class MyAction extends ActionSupport {
    public String execute() throws Exception {
        // 获取Struts核心Filter的FilterConfig实例
        FilterConfig filterConfig = ServletActionContext.getFilterConfig();
        
        // 读取单个初始化参数
        String configParam = filterConfig.getInitParameter("config");
        String someParam = filterConfig.getInitParameter("some-param");
        String pathParam = filterConfig.getInitParameter("pathParam");
        
        // 遍历读取所有初始化参数
        Enumeration<String> paramNames = filterConfig.getInitParameterNames();
        while (paramNames.hasMoreElements()) {
            String paramName = paramNames.nextElement();
            String paramValue = filterConfig.getInitParameter(paramName);
            // 这里可以添加你的参数处理逻辑,比如打印、存储等
            System.out.println(String.format("参数[%s]的值为:%s", paramName, paramValue));
        }
        
        // 你的业务逻辑代码
        return SUCCESS;
    }
}

这种方式直接高效,不需要额外配置,适合快速获取Filter的初始化参数。


方法2:通过依赖注入获取FilterConfig(推荐,更符合Struts2的IoC思想)

如果想更贴合Struts2的控制反转设计理念,可以通过依赖注入的方式将FilterConfig注入到Action中。只需要让你的Action实现org.apache.struts2.dispatcher.FilterConfigAware接口即可:

import javax.servlet.FilterConfig;
import org.apache.struts2.action.ActionSupport;
import org.apache.struts2.dispatcher.FilterConfigAware;
import java.util.Enumeration;

public class MyAction extends ActionSupport implements FilterConfigAware {
    private FilterConfig filterConfig;

    // 实现接口的set方法,Struts2会自动注入FilterConfig实例
    @Override
    public void setFilterConfig(FilterConfig filterConfig) {
        this.filterConfig = filterConfig;
    }

    public String execute() throws Exception {
        // 读取单个参数
        String configValue = filterConfig.getInitParameter("config");
        String someValue = filterConfig.getInitParameter("some-param");
        
        // 遍历所有参数
        Enumeration<String> paramNames = filterConfig.getInitParameterNames();
        while (paramNames.hasMoreElements()) {
            String name = paramNames.nextElement();
            String value = filterConfig.getInitParameter(name);
            // 参数处理逻辑
        }
        
        return SUCCESS;
    }
}

这种方式避免了直接依赖ServletActionContext,代码的可测试性和扩展性更强,更符合Struts2的设计模式。


注意事项

  • 确保web.xml中配置的Filter初始化参数名称和Action中读取的名称完全一致(区分大小写);
  • 如果需要读取的是ServletContext全局初始化参数(而非Filter专属参数),可以使用ServletActionContext.getServletContext().getInitParameter("paramName")来获取,但你的需求是Filter的初始化参数,上述两种方法更适配。

内容的提问来源于stack exchange,提问作者learning knowledge

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:51:33