struts2中StrutsPrepareAndExecuteFilter参数配置

提供了三个参数的配置

1、config:指定要加载的配置文件,逗号分开。

2、actionPackages:指定Action类所在的包空间,逗号分开。

3、configProviders:自定义配置文件的加载类,需实现ConfigurationProvider类,逗号分开。
       大项目开发采用了struts2有能有多struts2配置文件虽struts2提供通配符和action自动加载我们般还难所有配置文件采用单action配置文件来解决因此产生了多action配置文件我们所有配置文件存放配置文件样项目间协同开发和测试会出现混乱而好开发模式每模块都有自己action配置文件而系统会自动搜索所有配置文件采用自动加载方式来完成struts2初始化。
       虽struts2提供web.xml文件配置config参数说有需要加载配置文件路径写其逗号分隔样对于大项目来说还难实施好办法还采用自动扫描方法我们扩struts2ConfigurationProvider接口web.xml配置自定义加载类即样解决了struts2配置文件自动加载问题。

具体代码实现:(可以参考Struts2源代码,XmlConfigurationProvider的子类org.apache.struts2.config.StrutsXmlConfigurationProvider,有很好的实现。)

package com.xuzengqiang.project;

import java.util.Collections;
import java.util.HashMap;
import java.util.Map;

import com.opensymphony.xwork2.config.Configuration;
import com.opensymphony.xwork2.config.ConfigurationException;
import com.opensymphony.xwork2.config.ConfigurationProvider;
import com.opensymphony.xwork2.inject.ContainerBuilder;
import com.opensymphony.xwork2.util.location.LocatableProperties;

@SuppressWarnings("all")
public class PluginConfigurationProvider implements ConfigurationProvider
{
	// 配置文件名称
	private String configFileName;
	// 文件丢失是否报错
	private boolean errorIfMissing;

	// 文档结构集合
	private Map dtdMappings;

	public void setDtdMappings(Map mappings)
	{
		this.dtdMappings = Collections.unmodifiableMap(mappings);
	}

	public Map getDtdMappings()
	{
		return this.dtdMappings;
	}

	public PluginConfigurationProvider(Boolean errorIfMissing)
	{

	}

	public PluginConfigurationProvider(String configFileName, Boolean errorIfMissing)
	{
		this.configFileName = configFileName;
		this.errorIfMissing = errorIfMissing;

		Map mappings = new HashMap();
		mappings.put("-//OpenSymphony Group//XWork 2.1.3//EN", "xwork-2.1.3.dtd");
		mappings.put("-//OpenSymphony Group//XWork 2.1//EN", "xwork-2.1.dtd");
		mappings.put("-//OpenSymphony Group//XWork 2.0//EN", "xwork-2.0.dtd");
		mappings.put("-//OpenSymphony Group//XWork 1.1.1//EN", "xwork-1.1.1.dtd");
		mappings.put("-//OpenSymphony Group//XWork 1.1//EN", "xwork-1.1.dtd");
		mappings.put("-//OpenSymphony Group//XWork 1.0//EN", "xwork-1.0.dtd");
		mappings.put("-//Apache Software Foundation//DTD Struts Configuration 2.0//EN", "struts-2.0.dtd");
		mappings.put("-//Apache Software Foundation//DTD Struts Configuration 2.1//EN", "struts-2.1.dtd");
		mappings.put("-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN", "struts-2.1.7.dtd");
		setDtdMappings(mappings);
	}

	@Override
	public void init(Configuration config) throws ConfigurationException
	{

	}

	@Override
	public boolean needsReload()
	{
		return false;
	}

	@Override
	public void register(ContainerBuilder containerBuider, LocatableProperties properties) throws ConfigurationException
	{

	}

	@Override
	public void loadPackages() throws ConfigurationException
	{

	}

	@Override
	public void destroy()
	{

	}

	// 其它方法的扩展
}

StrutsXMLConfigurationProvider是框架的插件配置器,负责识别各插件的配置,原型来则XmlConfigurationProvider
XmlConfigurationProvider实现了ConfigurationProvider接口。而XmlConfigurationProvider负责配置文件的解析和读取。

首先通过init()中的loadDocuments(configFileName);利用DomHelper中的public static Document parse(InputSource inputSource,
Map dtdMappings将configFileName配置文件通过SAX解析方式按照DtdMappings解析成Document对象.然后通过Provider的register()
方法加载"bean"和"constant"属性,再通过loadPackages()加载package及package中的属性.
addAction()方法负责读取标签,并将数据保存在ActionConfig中
addResultTypes()方法负责将标签转化为ResultTypeConfig对象;
loadInterceptors()方法负责将标签转化为InterceptorConfi对象;
loadInterceptorStack()方法负责将标签转化为InterceptorStackConfig对象;
loadInterceptorStacks()方法负责将标签转化成InterceptorStackConfig对象。

而上面的方法最终会被addPackage()方法调用。addPackage()方法又会被Provider中的loadPackage()方法调用。最终将所有的数据汇集到PackageConfig对象中去。

web.xml配置文件



  StrutsPath
  
  	strutsPrepareAndExecuteFilter
  	org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
  	
  		configProviders
  		com.xuzengqiang.project.PluginConfigurationProvider
  	
  
  
  	strutsPrepareAndExecuteFilter
  	/*
  
  
  
    index.jsp
  



你可能感兴趣的:(Java,SSH)