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

📄 requestutils.java.svn-base

📁 MVC开源框架
💻 SVN-BASE
📖 第 1 页 / 共 3 页
字号:
        if (bean instanceof ActionForm) {            ((ActionForm) bean).setMultipartRequestHandler(null);        }        MultipartRequestHandler multipartHandler = null;        if ((contentType != null)            && (contentType.startsWith("multipart/form-data"))            && (method.equalsIgnoreCase("POST"))) {            // Get the ActionServletWrapper from the form bean            ActionServletWrapper servlet;            if (bean instanceof ActionForm) {                servlet = ((ActionForm) bean).getServletWrapper();            } else {                throw new ServletException("bean that's supposed to be "                    + "populated from a multipart request is not of type "                    + "\"org.apache.struts.action.ActionForm\", but type "                    + "\"" + bean.getClass().getName() + "\"");            }            // Obtain a MultipartRequestHandler            multipartHandler = getMultipartHandler(request);            if (multipartHandler != null) {                isMultipart = true;                // Set servlet and mapping info                servlet.setServletFor(multipartHandler);                multipartHandler.setMapping((ActionMapping) request                    .getAttribute(Globals.MAPPING_KEY));                // Initialize multipart request class handler                multipartHandler.handleRequest(request);                //stop here if the maximum length has been exceeded                Boolean maxLengthExceeded =                    (Boolean) request.getAttribute(MultipartRequestHandler.ATTRIBUTE_MAX_LENGTH_EXCEEDED);                if ((maxLengthExceeded != null)                    && (maxLengthExceeded.booleanValue())) {                    ((ActionForm) bean).setMultipartRequestHandler(multipartHandler);                    return;                }                //retrieve form values and put into properties                multipartParameters =                    getAllParametersForMultipartRequest(request,                        multipartHandler);                names = Collections.enumeration(multipartParameters.keySet());            }        }        if (!isMultipart) {            names = request.getParameterNames();        }        while (names.hasMoreElements()) {            String name = (String) names.nextElement();            String stripped = name;            if (prefix != null) {                if (!stripped.startsWith(prefix)) {                    continue;                }                stripped = stripped.substring(prefix.length());            }            if (suffix != null) {                if (!stripped.endsWith(suffix)) {                    continue;                }                stripped =                    stripped.substring(0, stripped.length() - suffix.length());            }            Object parameterValue = null;            if (isMultipart) {                parameterValue = multipartParameters.get(name);                parameterValue = rationalizeMultipleFileProperty(bean, name, parameterValue);            } else {                parameterValue = request.getParameterValues(name);            }            // Populate parameters, except "standard" struts attributes            // such as 'org.apache.struts.action.CANCEL'            if (!(stripped.startsWith("org.apache.struts."))) {                properties.put(stripped, parameterValue);            }        }        // Set the corresponding properties of our bean        try {            BeanUtils.populate(bean, properties);        } catch (Exception e) {            throw new ServletException("BeanUtils.populate", e);        } finally {            if (multipartHandler != null) {                // Set the multipart request handler for our ActionForm.                // If the bean isn't an ActionForm, an exception would have been                // thrown earlier, so it's safe to assume that our bean is                // in fact an ActionForm.                ((ActionForm) bean).setMultipartRequestHandler(multipartHandler);            }        }    }    /**     * <p>If the given form bean can accept multiple FormFile objects but the user only uploaded a single, then      * the property will not match the form bean type.  This method performs some simple checks to try to accommodate     * that situation.</p>     * @param bean     * @param name     * @param parameterValue     * @return      * @throws ServletException if the introspection has any errors.     */    private static Object rationalizeMultipleFileProperty(Object bean, String name, Object parameterValue) throws ServletException {    	if (!(parameterValue instanceof FormFile)) return parameterValue;    	FormFile formFileValue = (FormFile) parameterValue;    	try {			Class propertyType = PropertyUtils.getPropertyType(bean, name);			if (propertyType.isAssignableFrom(List.class)) {				ArrayList list = new ArrayList(1);				list.add(formFileValue);				return list;			}			if (propertyType.isArray() && propertyType.getComponentType().equals(FormFile.class)) {				return new FormFile[] { formFileValue };			}    	} catch (IllegalAccessException e) {			throw new ServletException(e);		} catch (InvocationTargetException e) {			throw new ServletException(e);		} catch (NoSuchMethodException e) {			throw new ServletException(e);		}    			// no changes    	return parameterValue;    		}	/**     * <p>Try to locate a multipart request handler for this request. First,     * look for a mapping-specific handler stored for us under an attribute.     * If one is not present, use the global multipart handler, if there is     * one.</p>     *     * @param request The HTTP request for which the multipart handler should     *                be found.     * @return the multipart handler to use, or null if none is found.     * @throws ServletException if any exception is thrown while attempting to     *                          locate the multipart handler.     */    private static MultipartRequestHandler getMultipartHandler(        HttpServletRequest request)        throws ServletException {        MultipartRequestHandler multipartHandler = null;        String multipartClass =            (String) request.getAttribute(Globals.MULTIPART_KEY);        request.removeAttribute(Globals.MULTIPART_KEY);        // Try to initialize the mapping specific request handler        if (multipartClass != null) {            try {                multipartHandler =                    (MultipartRequestHandler) applicationInstance(multipartClass);            } catch (ClassNotFoundException cnfe) {                log.error("MultipartRequestHandler class \"" + multipartClass                    + "\" in mapping class not found, "                    + "defaulting to global multipart class");            } catch (InstantiationException ie) {                log.error("InstantiationException when instantiating "                    + "MultipartRequestHandler \"" + multipartClass + "\", "                    + "defaulting to global multipart class, exception: "                    + ie.getMessage());            } catch (IllegalAccessException iae) {                log.error("IllegalAccessException when instantiating "                    + "MultipartRequestHandler \"" + multipartClass + "\", "                    + "defaulting to global multipart class, exception: "                    + iae.getMessage());            }            if (multipartHandler != null) {                return multipartHandler;            }        }        ModuleConfig moduleConfig =            ModuleUtils.getInstance().getModuleConfig(request);        multipartClass = moduleConfig.getControllerConfig().getMultipartClass();        // Try to initialize the global request handler        if (multipartClass != null) {            try {                multipartHandler =                    (MultipartRequestHandler) applicationInstance(multipartClass);            } catch (ClassNotFoundException cnfe) {                throw new ServletException("Cannot find multipart class \""                    + multipartClass + "\"" + ", exception: "                    + cnfe.getMessage());            } catch (InstantiationException ie) {                throw new ServletException(                    "InstantiationException when instantiating "                    + "multipart class \"" + multipartClass + "\", exception: "                    + ie.getMessage());            } catch (IllegalAccessException iae) {                throw new ServletException(                    "IllegalAccessException when instantiating "                    + "multipart class \"" + multipartClass + "\", exception: "                    + iae.getMessage());            }            if (multipartHandler != null) {                return multipartHandler;            }        }        return multipartHandler;    }    /**     * <p>Create a <code>Map</code> containing all of the parameters supplied     * for a multipart request, keyed by parameter name. In addition to text     * and file elements from the multipart body, query string parameters are     * included as well.</p>     *     * @param request          The (wrapped) HTTP request whose parameters are     *                         to be added to the map.     * @param multipartHandler The multipart handler used to parse the     *                         request.     * @return the map containing all parameters for this multipart request.     */    private static Map getAllParametersForMultipartRequest(        HttpServletRequest request, MultipartRequestHandler multipartHandler) {        Map parameters = new HashMap();        Hashtable elements = multipartHandler.getAllElements();        Enumeration e = elements.keys();        while (e.hasMoreElements()) {            String key = (String) e.nextElement();            parameters.put(key, elements.get(key));        }        if (request instanceof MultipartRequestWrapper) {            request =                (HttpServletRequest) ((MultipartRequestWrapper) request)                .getRequest();            e = request.getParameterNames();            while (e.hasMoreElements()) {                String key = (String) e.nextElement();                parameters.put(key, request.getParameterValues(key));            }        } else {            log.debug("Gathering multipart parameters for unwrapped request");        }        return parameters;    }    /**     * <p>Compute the printable representation of a URL, leaving off the     * scheme/host/port part if no host is specified. This will typically be     * the case for URLs that were originally created from relative or     * context-relative URIs.</p>     *     * @param url URL to render in a printable representation     * @return printable representation of a URL     */    public static String printableURL(URL url) {        if (url.getHost() != null) {            return (url.toString());        }        String file = url.getFile();        String ref = url.getRef();        if (ref == null) {            return (file);        } else {            StringBuffer sb = new StringBuffer(file);            sb.append('#');            sb.append(ref);            return (sb.toString());        }    }    /**     * <p>Return the context-relative URL that corresponds to the specified     * {@link ActionConfig}, relative to the module associated with the     * current modules's {@link ModuleConfig}.</p>     *     * @param request The servlet request we are processing     * @param action  ActionConfig to be evaluated     * @param pattern URL pattern used to map the controller servlet     * @return context-relative URL relative to the module     * @since Struts 1.1     */    public static String actionURL(HttpServletRequest request,        ActionConfig action, String pattern) {        StringBuffer sb = new StringBuffer();        if (pattern.endsWith("/*")) {            sb.append(pattern.substring(0, pattern.length() - 2));            sb.append(action.getPath());        } else if (pattern.startsWith("*.")) {            ModuleConfig appConfig =                ModuleUtils.getInstance().getModuleConfig(request);            sb.append(appConfig.getPrefix());            sb.append(action.getPath());            sb.append(pattern.substring(1));        } else {            throw new IllegalArgumentException(pattern);        }        return sb.toString();    }    /**     * <p>Return the context-relative URL that corresponds to the specified     * <code>ForwardConfig</code>. The URL is calculated based on the     * properties of the {@link ForwardConfig} instance as follows:</p>     *     * <ul>     *     *     * <li>If the <code>contextRelative</code> property is set, it is assumed     * that the <code>path</code> property contains a path that is already     * context-relative:     *     * <ul>     *     * <li>If the <code>path</code> property value starts with a slash, it is     * returned unmodified.</li> <li>If the <code>path</code> property value     * does not start with a slash, a slash is prepended.</li>     *     * </ul></li>     *     * <li>Acquire the <code>forwardPattern</code> property from the     * <code>ControllerConfig</code> for the application module used to     * process this request. If no pattern was configured, default to a     * pattern of <code>$M$P</code>, which is compatible with the hard-coded     * mapping behavior in Struts 1.0.</li>     *     * <li>Process the acquired <code>forwardPattern</code>, performing the     * following substitutions:     *     * <ul>     *     * <li><strong>$M</strong> - Replaced by the module prefix for the     * application module processing this request.</li>     *     * <li><strong>$P</strong> - Replaced by the <code>path</code> property of     * the specified {@link ForwardConfig}, prepended with a slash if it does     * not start with one.</li>     *     * <li><strong>$$</strong> - Replaced by a single dollar sign     * character.</li>     *     * <li><strong>$x</strong> (where "x" is any charater not listed above) -     * Silently omit these two characters from the result value.  (This has     * the side effect of causing all other $+letter combinations to be

⌨️ 快捷键说明

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