⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dispatcher.java

📁 struts 2 核心包 的源码 有错误是难免的
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
// Decompiled by Jad v1.5.8e2. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://kpdus.tripod.com/jad.html
// Decompiler options: packimports(3) fieldsfirst ansi space 
// Source File Name:   Dispatcher.java

package org.apache.struts2.dispatcher;

import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.ActionProxy;
import com.opensymphony.xwork2.ActionProxyFactory;
import com.opensymphony.xwork2.ObjectFactory;
import com.opensymphony.xwork2.Result;
import com.opensymphony.xwork2.config.Configuration;
import com.opensymphony.xwork2.config.ConfigurationException;
import com.opensymphony.xwork2.config.ConfigurationManager;
import com.opensymphony.xwork2.config.ConfigurationProvider;
import com.opensymphony.xwork2.config.providers.XmlConfigurationProvider;
import com.opensymphony.xwork2.inject.Container;
import com.opensymphony.xwork2.inject.ContainerBuilder;
import com.opensymphony.xwork2.util.FileManager;
import com.opensymphony.xwork2.util.LocalizedTextUtil;
import com.opensymphony.xwork2.util.ObjectTypeDeterminer;
import com.opensymphony.xwork2.util.ObjectTypeDeterminerFactory;
import com.opensymphony.xwork2.util.ValueStack;
import com.opensymphony.xwork2.util.ValueStackFactory;
import com.opensymphony.xwork2.util.location.LocatableProperties;
import com.opensymphony.xwork2.util.location.Location;
import com.opensymphony.xwork2.util.location.LocationUtils;
import com.opensymphony.xwork2.util.profiling.UtilTimerStack;
import freemarker.template.Template;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts2.config.BeanSelectionProvider;
import org.apache.struts2.config.ClasspathConfigurationProvider;
import org.apache.struts2.config.DefaultPropertiesProvider;
import org.apache.struts2.config.LegacyPropertiesConfigurationProvider;
import org.apache.struts2.config.StrutsXmlConfigurationProvider;
import org.apache.struts2.dispatcher.mapper.ActionMapping;
import org.apache.struts2.dispatcher.multipart.MultiPartRequest;
import org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper;
import org.apache.struts2.util.AttributeMap;
import org.apache.struts2.util.ClassLoaderUtils;
import org.apache.struts2.util.ObjectFactoryDestroyable;
import org.apache.struts2.views.freemarker.FreemarkerManager;

// Referenced classes of package org.apache.struts2.dispatcher:
//			DispatcherListener, RequestMap, SessionMap, ApplicationMap, 
//			StrutsRequestWrapper

public class Dispatcher
{
	public class Locator
	{

		final Dispatcher this$0;

		public Location getLocation(Object obj)
		{
			Location loc = LocationUtils.getLocation(obj);
			if (loc == null)
				return Location.UNKNOWN;
			else
				return loc;
		}

		public Locator()
		{
			this$0 = Dispatcher.this;
			super();
		}
	}

	private final class ServletContextPageLocator
		implements org.apache.struts2.config.ClasspathConfigurationProvider.PageLocator
	{

		private final ServletContext context;
		private org.apache.struts2.config.ClasspathConfigurationProvider.ClasspathPageLocator classpathPageLocator;
		final Dispatcher this$0;

		public URL locate(String path)
		{
			URL url = null;
			try
			{
				url = context.getResource(path);
				if (url == null)
					url = classpathPageLocator.locate(path);
			}
			catch (MalformedURLException e)
			{
				if (Dispatcher.LOG.isDebugEnabled())
					Dispatcher.LOG.debug((new StringBuilder()).append("Unable to resolve path ").append(path).append(" against the servlet context").toString());
			}
			return url;
		}

		private ServletContextPageLocator(ServletContext context)
		{
			this$0 = Dispatcher.this;
			super();
			classpathPageLocator = new org.apache.struts2.config.ClasspathConfigurationProvider.ClasspathPageLocator();
			this.context = context;
		}

	}


	private static final Log LOG = LogFactory.getLog(org/apache/struts2/dispatcher/Dispatcher);
	private static ThreadLocal instance = new ThreadLocal();
	private static List dispatcherListeners = new ArrayList();
	private ConfigurationManager configurationManager;
	private static boolean portletSupportActive;
	private static boolean devMode;
	private static String defaultEncoding;
	private static String defaultLocale;
	private static String multipartSaveDir;
	private static final String DEFAULT_CONFIGURATION_PATHS = "struts-default.xml,struts-plugin.xml,struts.xml";
	private boolean paramsWorkaroundEnabled;
	private ServletContext servletContext;
	private Map initParams;

	public static Dispatcher getInstance()
	{
		return (Dispatcher)instance.get();
	}

	public static void setInstance(Dispatcher instance)
	{
		instance.set(instance);
		if (instance != null)
		{
			Container cont = instance.getContainer();
			if (cont != null)
				ObjectFactory.setObjectFactory((ObjectFactory)cont.getInstance(com/opensymphony/xwork2/ObjectFactory));
			else
				LOG.warn("This dispatcher instance doesn't have a container, so the object factory won't be set.");
		} else
		{
			ObjectFactory.setObjectFactory(null);
		}
	}

	public static synchronized void addDispatcherListener(DispatcherListener listener)
	{
		dispatcherListeners.add(listener);
	}

	public static synchronized void removeDispatcherListener(DispatcherListener listener)
	{
		dispatcherListeners.remove(listener);
	}

	public Dispatcher(ServletContext servletContext, Map initParams)
	{
		paramsWorkaroundEnabled = false;
		this.servletContext = servletContext;
		this.initParams = initParams;
	}

	public static void setDevMode(String mode)
	{
		devMode = "true".equals(mode);
	}

	public static void setDefaultLocale(String val)
	{
		defaultLocale = val;
	}

	public static void setDefaultEncoding(String val)
	{
		defaultEncoding = val;
	}

	public static void setMultipartSaveDir(String val)
	{
		multipartSaveDir = val;
	}

	public void cleanup()
	{
		ObjectFactory objectFactory = (ObjectFactory)getContainer().getInstance(com/opensymphony/xwork2/ObjectFactory);
		if (objectFactory == null)
			LOG.warn("Object Factory is null, something is seriously wrong, no clean up will be performed");
		if (objectFactory instanceof ObjectFactoryDestroyable)
			try
			{
				((ObjectFactoryDestroyable)objectFactory).destroy();
			}
			catch (Exception e)
			{
				LOG.error((new StringBuilder()).append("exception occurred while destroying ObjectFactory [").append(objectFactory).append("]").toString(), e);
			}
		instance.set(null);
		synchronized (org/apache/struts2/dispatcher/Dispatcher)
		{
			if (dispatcherListeners.size() > 0)
			{
				DispatcherListener l;
				for (Iterator i$ = dispatcherListeners.iterator(); i$.hasNext(); l.dispatcherDestroyed(this))
					l = (DispatcherListener)i$.next();

			}
		}
		configurationManager.destroyConfiguration();
		configurationManager = null;
	}

	private void init_DefaultProperties()
	{
		configurationManager.addConfigurationProvider(new DefaultPropertiesProvider());
	}

	private void init_LegacyStrutsProperties()
	{
		configurationManager.addConfigurationProvider(new LegacyPropertiesConfigurationProvider());
	}

	private void init_TraditionalXmlConfigurations()
	{
		String configPaths = (String)initParams.get("config");
		if (configPaths == null)
			configPaths = "struts-default.xml,struts-plugin.xml,struts.xml";
		String files[] = configPaths.split("\\s*[,]\\s*");
		String arr$[] = files;
		int len$ = arr$.length;
		for (int i$ = 0; i$ < len$; i$++)
		{
			String file = arr$[i$];
			if (file.endsWith(".xml"))
			{
				if ("xwork.xml".equals(file))
					configurationManager.addConfigurationProvider(new XmlConfigurationProvider(file, false));
				else
					configurationManager.addConfigurationProvider(new StrutsXmlConfigurationProvider(file, false, servletContext));
			} else
			{
				throw new IllegalArgumentException("Invalid configuration file name");
			}
		}

	}

	private void init_ZeroConfiguration()
	{
		String packages = (String)initParams.get("actionPackages");
		if (packages != null)
		{
			String names[] = packages.split("\\s*[,]\\s*");
			if (names.length > 0)
			{
				ClasspathConfigurationProvider provider = new ClasspathConfigurationProvider(names);
				provider.setPageLocator(new ServletContextPageLocator(servletContext));
				configurationManager.addConfigurationProvider(provider);
			}
		}
	}

	private void init_CustomConfigurationProviders()
	{
		String configProvs = (String)initParams.get("configProviders");
		if (configProvs != null)
		{
			String classes[] = configProvs.split("\\s*[,]\\s*");
			String arr$[] = classes;
			int len$ = arr$.length;
			for (int i$ = 0; i$ < len$; i$++)
			{
				String cname = arr$[i$];
				try
				{
					Class cls = ClassLoaderUtils.loadClass(cname, getClass());
					ConfigurationProvider prov = (ConfigurationProvider)cls.newInstance();
					configurationManager.addConfigurationProvider(prov);
				}
				catch (InstantiationException e)
				{
					throw new ConfigurationException((new StringBuilder()).append("Unable to instantiate provider: ").append(cname).toString(), e);
				}
				catch (IllegalAccessException e)
				{
					throw new ConfigurationException((new StringBuilder()).append("Unable to access provider: ").append(cname).toString(), e);
				}
				catch (ClassNotFoundException e)
				{
					throw new ConfigurationException((new StringBuilder()).append("Unable to locate provider class: ").append(cname).toString(), e);
				}
			}

		}
	}

	private void init_MethodConfigurationProvider()
	{
	}

	private void init_FilterInitParameters()
	{
		configurationManager.addConfigurationProvider(new ConfigurationProvider() {

			final Dispatcher this$0;

			public void destroy()
			{
			}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -