struts2配置文件的位置
struts2配置文件的位置
在struts2中struts.xml配置文件的默认放在"/WEB-INF/classes"目录下,在项目中是src下面。如下图:
通常我们项目开发中,配置文件会放到指定目录下。如何才能让struts.xml配置文件随意的放在指定目录下呢?
其实struts2中支持struts.xml文件放到其它位置的,
我们来看一下,struts2的过滤器
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
下面是一部分源代码:
public class StrutsPrepareAndExecuteFilter implements StrutsStatics, Filter {
private PrepareOperations prepare;
private ExecuteOperations execute;
public void init(FilterConfig filterConfig) throws ServletException { }
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { }
public void destroy() { }
}
在struts2的filter中有三个方法,这里我们只关心init()方法,init(FilterConfig filterConfig)有一个入参,这是我们猜一下,在web.xml中容器配置filter后,服务开启后j2ee容器首先会调用filter类的init方法将其。
到这里我能猜出init(FilterConfig filterConfig)方法中的filterConfig参数一定是struts2的filter的初始化参数,struts2的filter默认会加载"/WEB-INF/classes"目录下的struts.xml文件。
那么只要在j2ee容器加载struts2的filter是将struts.xml的路径付给init()方法即可。
左图为我的项目的strus.xml要存放的位置。
在web.xml中配置:
<!-- struts2 过滤器 star -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
<init-param>
<param-name>filterConfig</param-name>
<param-value>/WEB-INF/config-common/struts.xml</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
这样就可以了。