Author: husted Date: Mon Nov 13 19:43:08 2006 New Revision: 474641 URL: http://svn.apache.org/viewvc?view=rev&rev=474641 Log: WW-1483 JavaDoc and IDEA refactorings only. No functional changes.
Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/FilterDispatcher.java Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java?view=diff&rev=474641&r1=474640&r2=474641 ============================================================================== --- struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java (original) +++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java Mon Nov 13 19:43:08 2006 @@ -26,13 +26,10 @@ import java.net.URL; import java.util.ArrayList; import java.util.HashMap; -import java.util.HashSet; import java.util.List; import java.util.Locale; import java.util.Map; import java.util.Properties; -import java.util.Set; -import java.util.TreeSet; import javax.servlet.ServletContext; import javax.servlet.ServletException; @@ -53,14 +50,11 @@ 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.impl.StrutsActionProxyFactory; -import org.apache.struts2.impl.StrutsObjectFactory; 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; -import com.opensymphony.xwork2.util.ClassLoaderUtil; import com.opensymphony.xwork2.util.FileManager; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionProxy; @@ -97,35 +91,78 @@ */ public class Dispatcher { + /** + * Provide a logging instance. + */ private static final Log LOG = LogFactory.getLog(Dispatcher.class); + /** + * Provide a thread local instance. + */ private static ThreadLocal<Dispatcher> instance = new ThreadLocal<Dispatcher>(); + + /** + * Store list of DispatcherListeners. + */ private static List<DispatcherListener> dispatcherListeners = new ArrayList<DispatcherListener>(); + /** + * Store ConfigurationManager instance, set on init. + */ private ConfigurationManager configurationManager; + + /** + * Store whether portlet support is active + * (set to true by Jsr168Dispatcher). + */ private static boolean portletSupportActive; + + /** + * Store state of StrutsConstants.STRUTS_DEVMODE setting. + */ private static boolean devMode; + + /** + * Store state of StrutsConstants.STRUTS_I18N_ENCODING setting. + */ private static String defaultEncoding; + + /** + * Store state of StrutsConstants.STRUTS_LOCALE setting. + */ private static String defaultLocale; - private static String multipartMaxSize; + + /** + * Store state of StrutsConstants.STRUTS_MULTIPART_SAVEDIR setting. + */ private static String multipartSaveDir; - private static final String DEFAULT_CONFIGURATION_PATHS = "struts-default.xml,struts-plugin.xml,struts.xml"; - // used to get WebLogic to play nice + /** + * Provide list of default configuration files. + */ + private static final String DEFAULT_CONFIGURATION_PATHS = "struts-default.xml,struts-plugin.xml,struts.xml"; + + /** + * Store state of STRUTS_DISPATCHER_PARAMETERSWORKAROUND. + * <p/> + * The workaround is for WebLogic. + * We try to autodect WebLogic on Dispatcher init. + * The workaround can also be enabled manually. + */ private boolean paramsWorkaroundEnabled = false; /** - * Gets the current instance for this thread + * Provide the dispatcher instance for the current thread. * * @return The dispatcher instance */ public static Dispatcher getInstance() { - return (Dispatcher) instance.get(); + return instance.get(); } /** - * Sets the dispatcher instance for this thread + * Store the dispatcher instance for this thread. * * @param instance The instance */ @@ -134,59 +171,71 @@ } /** - * Adds a dispatcher lifecycle listener + * Add a dispatcher lifecycle listener. * - * @param l The listener + * @param listener The listener to add */ - public static synchronized void addDispatcherListener(DispatcherListener l) { - dispatcherListeners.add(l); + public static synchronized void addDispatcherListener(DispatcherListener listener) { + dispatcherListeners.add(listener); } /** - * Removes a dispatcher lifecycle listener + * Remove a specific dispatcher lifecycle listener. * - * @param l The listener + * @param listener The listener */ - public static synchronized void removeDispatcherListener(DispatcherListener l) { - dispatcherListeners.remove(l); + public static synchronized void removeDispatcherListener(DispatcherListener listener) { + dispatcherListeners.remove(listener); } /** - * The constructor with its servlet context instance (optional) + * Create the Dispatcher instance for a given ServletContext and set of initialization parameters. * - * @param servletContext The servlet context + * @param servletContext Our servlet context + * @param initParams The set of initialization parameters */ public Dispatcher(ServletContext servletContext, Map initParams) { init(servletContext, initParams); } - + + /** + * Modify state of StrutsConstants.STRUTS_DEVMODE setting. + * @param mode New setting + */ @Inject(StrutsConstants.STRUTS_DEVMODE) public static void setDevMode(String mode) { devMode = "true".equals(mode); } + /** + * Modify state of StrutsConstants.STRUTS_LOCALE setting. + * @param val New setting + */ @Inject(value=StrutsConstants.STRUTS_LOCALE, required=false) public static void setDefaultLocale(String val) { defaultLocale = val; } + /** + * Modify state of StrutsConstants.STRUTS_I18N_ENCODING setting. + * @param val New setting + */ @Inject(StrutsConstants.STRUTS_I18N_ENCODING) public static void setDefaultEncoding(String val) { defaultEncoding = val; } - @Inject(StrutsConstants.STRUTS_MULTIPART_MAXSIZE) - public static void setMultipartMaxSize(String val) { - multipartMaxSize = val; - } - + /** + * Modify state of StrutsConstants.STRUTS_MULTIPART_SAVEDIR setting. + * @param val New setting + */ @Inject(StrutsConstants.STRUTS_MULTIPART_SAVEDIR) public static void setMultipartSaveDir(String val) { multipartSaveDir = val; } /** - * Cleans up thread local variables + * Release local threads and destroy any DispatchListeners. */ public void cleanup() { ObjectFactory objectFactory = ObjectFactory.getObjectFactory(); @@ -213,13 +262,14 @@ } /** - * Initializes the instance + * Load configurations, including both XML and zero-configuration strategies, + * and update optional settings, including whether to reload configurations and resource files. * - * @param servletContext The servlet context + * @param servletContext Our servlet context + * @param initParams The set of initialization parameters */ private void init(final ServletContext servletContext, final Map<String,String> initParams) { - configurationManager = new ConfigurationManager(BeanSelectionProvider.DEFAULT_BEAN_NAME); configurationManager.addConfigurationProvider(new LegacyPropertiesConfigurationProvider()); @@ -228,21 +278,19 @@ if (configPaths == null) { configPaths = DEFAULT_CONFIGURATION_PATHS; } - if (configPaths != null) { - String[] files = configPaths.split("\\s*[,]\\s*"); - for (String file : files) { - if (file.endsWith(".xml")) { - if ("xwork.xml".equals(file)) { - configurationManager.addConfigurationProvider(new XmlConfigurationProvider(file, false)); - } else { - configurationManager.addConfigurationProvider(new StrutsXmlConfigurationProvider(file, false, servletContext)); - } + String[] files = configPaths.split("\\s*[,]\\s*"); + for (String file : files) { + if (file.endsWith(".xml")) { + if ("xwork.xml".equals(file)) { + configurationManager.addConfigurationProvider(new XmlConfigurationProvider(file, false)); } else { - throw new IllegalArgumentException("Invalid configuration file name"); + configurationManager.addConfigurationProvider(new StrutsXmlConfigurationProvider(file, false, servletContext)); } + } else { + throw new IllegalArgumentException("Invalid configuration file name"); } } - + // Load configuration from a scan of the classloader String packages = initParams.get("actionPackages"); if (packages != null) { @@ -290,20 +338,16 @@ // Preload the configuration Configuration config = configurationManager.getConfiguration(); Container container = config.getContainer(); - - - boolean reloadi18n = Boolean.valueOf(container.getInstance(String.class, StrutsConstants.STRUTS_I18N_RELOAD)).booleanValue(); + + boolean reloadi18n = Boolean.valueOf(container.getInstance(String.class, StrutsConstants.STRUTS_I18N_RELOAD)); LocalizedTextUtil.setReloadBundles(reloadi18n); ObjectTypeDeterminer objectTypeDeterminer = container.getInstance(ObjectTypeDeterminer.class); ObjectTypeDeterminerFactory.setInstance(objectTypeDeterminer); -// devMode = "true".equals(container.getInstance(String.class, StrutsConstants.STRUTS_DEVMODE)); -// Settings.set(StrutsConstants.STRUTS_I18N_RELOAD, "true"); -// Settings.set(StrutsConstants.STRUTS_CONFIGURATION_XML_RELOAD, "true"); - //check for configuration reloading - FileManager.setReloadingConfigs("true".equals(container.getInstance(String.class, StrutsConstants.STRUTS_CONFIGURATION_XML_RELOAD))); + FileManager.setReloadingConfigs("true".equals(container.getInstance(String.class, + StrutsConstants.STRUTS_CONFIGURATION_XML_RELOAD))); String pkg = container.getInstance(String.class, StrutsConstants.STRUTS_CONTINUATIONS_PACKAGE); if (pkg != null) { @@ -316,7 +360,8 @@ LOG.info("WebLogic server detected. Enabling Struts parameter access work-around."); paramsWorkaroundEnabled = true; } else { - paramsWorkaroundEnabled = "true".equals(container.getInstance(String.class, StrutsConstants.STRUTS_DISPATCHER_PARAMETERSWORKAROUND)); + paramsWorkaroundEnabled = "true".equals(container.getInstance(String.class, + StrutsConstants.STRUTS_DISPATCHER_PARAMETERSWORKAROUND)); } synchronized(Dispatcher.class) { @@ -329,10 +374,13 @@ } /** - * Loads the action and executes it. This method first creates the action context from the given - * parameters then loads an <tt>ActionProxy</tt> from the given action name and namespace. After that, - * the action is executed and output channels throught the response object. Actions not found are - * sent back to the user via the [EMAIL PROTECTED] Dispatcher#sendError} method, using the 404 return code. + * Load Action class for mapping and invoke the appropriate Action method, or go directly to the Result. + * <p/> + * This method first creates the action context from the given parameters, + * and then loads an <tt>ActionProxy</tt> from the given action name and namespace. + * After that, the Action method is executed and output channels through the response object. + * Actions not found are sent back to the user via the [EMAIL PROTECTED] Dispatcher#sendError} method, + * using the 404 return code. * All other errors are reported by throwing a ServletException. * * @param request the HttpServletRequest object @@ -340,8 +388,11 @@ * @param mapping the action mapping object * @throws ServletException when an unknown error occurs (not a 404, but typically something that * would end up as a 5xx by the servlet container) + * @param context Our ServletContext object */ - public void serviceAction(HttpServletRequest request, HttpServletResponse response, ServletContext context, ActionMapping mapping) throws ServletException { + public void serviceAction(HttpServletRequest request, HttpServletResponse response, ServletContext context, + ActionMapping mapping) throws ServletException { + Map<String, Object> extraContext = createContextMap(request, response, mapping, context); // If there was a previous value stack, then create a new copy and pass it in to be used by the new Action @@ -398,7 +449,7 @@ } /** - * Creates a context map containing all the wrapped request objects + * Create a context map containing all the wrapped request objects * * @param request The servlet request * @param response The servlet response @@ -408,6 +459,7 @@ */ public Map<String,Object> createContextMap(HttpServletRequest request, HttpServletResponse response, ActionMapping mapping, ServletContext context) { + // request map wrapping the http request objects Map requestMap = new RequestMap(request); @@ -435,7 +487,7 @@ } /** - * Merges all application and servlet attributes into a single <tt>HashMap</tt> to represent the entire + * Merge all application and servlet attributes into a single <tt>HashMap</tt> to represent the entire * <tt>Action</tt> context. * * @param requestMap a Map of all request attributes. @@ -459,7 +511,7 @@ extraContext.put(ActionContext.SESSION, sessionMap); extraContext.put(ActionContext.APPLICATION, applicationMap); - Locale locale = null; + Locale locale; if (defaultLocale != null) { locale = LocalizedTextUtil.localeFromString(defaultLocale, request.getLocale()); } else { @@ -486,39 +538,10 @@ } /** - * Returns the maximum upload size allowed for multipart requests (this is configurable). - * - * @return the maximum upload size allowed for multipart requests - */ - private static int getMaxSize() { - Integer maxSize = new Integer(Integer.MAX_VALUE); - try { - String maxSizeStr = multipartMaxSize; - - if (maxSizeStr != null) { - try { - maxSize = new Integer(maxSizeStr); - } catch (NumberFormatException e) { - LOG.warn("Unable to format 'struts.multipart.maxSize' property setting. Defaulting to Integer.MAX_VALUE"); - } - } else { - LOG.warn("Unable to format 'struts.multipart.maxSize' property setting. Defaulting to Integer.MAX_VALUE"); - } - } catch (IllegalArgumentException e1) { - LOG.warn("Unable to format 'struts.multipart.maxSize' property setting. Defaulting to Integer.MAX_VALUE"); - } - - if (LOG.isDebugEnabled()) { - LOG.debug("maxSize=" + maxSize); - } - - return maxSize.intValue(); - } - - /** - * Returns the path to save uploaded files to (this is configurable). + * Return the path to save uploaded files to (this is configurable). * * @return the path to save uploaded files to + * @param servletContext Our ServletContext */ private String getSaveDir(ServletContext servletContext) { String saveDir = multipartSaveDir.trim(); @@ -546,7 +569,7 @@ } /** - * Prepares a request, including setting the encoding and locale + * Prepare a request, including setting the encoding and locale. * * @param request The request * @param response The response @@ -580,14 +603,18 @@ } /** - * Wraps and returns the given response or returns the original response object. This is used to transparently - * handle multipart data as a wrapped class around the given request. Override this method to handle multipart - * requests in a special way or to handle other types of requests. Note, [EMAIL PROTECTED] org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper} is - * flexible - you should look to that first before overriding this method to handle multipart data. + * Wrap and return the given request or return the original request object. + * </p> + * This method transparently handles multipart data as a wrapped class around the given request. + * Override this method to handle multipart requests in a special way or to handle other types of requests. + * Note, [EMAIL PROTECTED] org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper} is + * flexible - look first to that object before overriding this method to handle multipart data. * * @param request the HttpServletRequest object. + * @param servletContext Our ServletContext object * @return a wrapped request or original request. * @see org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper + * @throws java.io.IOException on any error. */ public HttpServletRequest wrapRequest(HttpServletRequest request, ServletContext servletContext) throws IOException { // don't wrap more than once @@ -607,12 +634,13 @@ } /** - * Sends an HTTP error response code. + * Send an HTTP error response code. * * @param request the HttpServletRequest object. * @param response the HttpServletResponse object. * @param code the HttpServletResponse error code (see [EMAIL PROTECTED] javax.servlet.http.HttpServletResponse} for possible error codes). * @param e the Exception that is reported. + * @param ctx the ServletContext object. */ public void sendError(HttpServletRequest request, HttpServletResponse response, ServletContext ctx, int code, Exception e) { @@ -664,7 +692,7 @@ } /** - * Returns <tt>true</tt>, if portlet support is active, <tt>false</tt> otherwise. + * Return <tt>true</tt>, if portlet support is active, <tt>false</tt> otherwise. * * @return <tt>true</tt>, if portlet support is active, <tt>false</tt> otherwise. */ @@ -673,7 +701,7 @@ } /** - * Set the flag that portlet support is active or not. + * Modify the portlet support mode. * @param portletSupportActive <tt>true</tt> or <tt>false</tt> */ public static void setPortletSupportActive(boolean portletSupportActive) { @@ -681,7 +709,7 @@ } /** - * Resolves pages from the servlet context, failing over to the classpath + * Search classpath for a page. */ private final class ServletContextPageLocator implements PageLocator { private final ServletContext context; @@ -707,7 +735,9 @@ } } - /** Simple accessor for a static method */ + /** + * Provide an accessor class for static XWork utility. + */ public class Locator { public Location getLocation(Object obj) { Location loc = LocationUtils.getLocation(obj); @@ -719,7 +749,7 @@ } /** - * Gets the current configuration manager instance + * Expose the ConfigurationManager instance. * * @return The instance */ @@ -728,7 +758,7 @@ } /** - * Sets the current configuration manager instance + * Modify the ConfigurationManager instance * * @param mgr The configuration manager */ @@ -736,6 +766,10 @@ this.configurationManager = mgr; } + /** + * Expose the dependency injection container. + * @return Our dependency injection container + */ public Container getContainer() { return getConfigurationManager().getConfiguration().getContainer(); } Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/FilterDispatcher.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/FilterDispatcher.java?view=diff&rev=474641&r1=474640&r2=474641 ============================================================================== --- struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/FilterDispatcher.java (original) +++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/FilterDispatcher.java Mon Nov 13 19:43:08 2006 @@ -350,7 +350,17 @@ /** - * Process Action or request for a static resource. + * Process an action or handle a request a static resource. + * <p/> + * The filter tries to match the request to an action mapping. + * If mapping is found, the action processes is delegated to the dispatcher's serviceAction method. + * If action processing fails, doFilter will try to create an error page via the dispatcher. + * <p/> + * Otherwise, if the request is for a static resource, + * the resource is copied directly to the response, with the appropriate caching headers set. + * <p/> + * If the request does not match an action mapping, or a static resource page, + * then it passes through. * * @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain) */ @@ -405,7 +415,8 @@ } /** - * Find static resource. + * Locate a static resource and copy directly to the response, + * setting the appropriate caching headers. * * @param name The resource name * @param response The request