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
相关产品推荐
相关产品推荐

