Package easyJ.http.servlet

Source Code of easyJ.http.servlet.RequestProcessor

package easyJ.http.servlet;

import java.io.IOException;
import java.util.Collections;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Map;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import easyJ.common.BeanUtil;
import easyJ.common.EasyJException;
import easyJ.http.Globals;
import easyJ.http.config.ModuleConfig;
import easyJ.http.upload.CommonsMultipartRequestHandler;
import easyJ.http.upload.MultipartRequestHandler;
import easyJ.http.upload.MultipartRequestWrapper;

public class RequestProcessor {
    public RequestProcessor() {

    }

    protected static ModuleConfig moduleConfig = null;

    protected static void process(HttpServletRequest request,
            HttpServletResponse response, ServletContext application)
            throws IOException, ServletException, EasyJException {

        // Wrap multipart requests with a special wrapper 对传输文件的封装
        request = processMultipart(request);
        // Set the content type and no-caching headers if requested

        rightValidate(request, response);

        processPopulate(request, response);

        processAction(request, response, application);
    }

    public static ServletAction getAction(HttpServletRequest request,
            HttpServletResponse response) throws EasyJException {
        String URI = request.getRequestURI();
        String context = request.getContextPath() + "/";
        String actionName = URI.substring(context.length(), URI.indexOf(".do"));
        ServletAction action = null;
        action = (ServletAction) BeanUtil.getEmptyObject(actionName);
        return action;
    }

    public static void processAction(HttpServletRequest request,
            HttpServletResponse response, ServletContext application)
            throws IOException, ServletException, EasyJException {
        ServletAction action = getAction(request, response);
        action.process(request, response, application);
    }

    /**
     * check whether this request is legal.
     *
     * @param request
     *                HttpServletRequest
     * @param response
     *                HttpServletResponse
     * @throws EasyJException
     */
    public static void rightValidate(HttpServletRequest request,
            HttpServletResponse response) throws EasyJException {

    }

    /**
     * this method get the action the client want to run first, then judge
     * whether this request need further deal if need then send the request to a
     * class just like action in struts,and in this class the programmer can
     * deal with the request, and invoke the method manually.
     *
     * @param request
     *                HttpServletRequest
     */
    protected static void functionInvoke(HttpServletRequest request,
            HttpServletResponse response) throws EasyJException {
        String templateName = (String) request.getParameter(Globals.TEMPLATE);
    }

    protected static void forward(HttpServletRequest request,
            HttpServletResponse response, String returnPath)
            throws EasyJException {
        RequestDispatcher rd = request.getRequestDispatcher(returnPath);
        try {
            rd.forward(request, response);
        } catch (IOException ex2) {
            ex2.printStackTrace();
            String clientMessage = "服务器忙";
            String location = "easyJ.http.servlet.RequestProcessor.forward(HttpServletRequest request,HttpServletResponse response)";
            String logMessage = "转向目标" + returnPath + " 抛出IOException";
            EasyJException ee = new EasyJException(ex2, location, logMessage,
                    clientMessage);
            throw ee;
        } catch (ServletException ex2) {
            ex2.printStackTrace();
            String clientMessage = "服务器忙";
            String location = "easyJ.http.servlet.RequestProcessor.forward(HttpServletRequest request,HttpServletResponse response)";
            String logMessage = "转向目标" + returnPath + " 抛出ServletException";
            EasyJException ee = new EasyJException(ex2, location, logMessage,
                    clientMessage);
            throw ee;
        }

    }

    protected static void processPopulate(HttpServletRequest request,
            HttpServletResponse response) throws EasyJException,
            ServletException {
        HashMap properties = new HashMap();
        // Iterator of parameter names
        Enumeration names = null;
        // Map for multipart parameters
        Map multipartParameters = null;

        String contentType = request.getContentType();
        String method = request.getMethod();
        boolean isMultipart = false;

        if ((contentType != null)
                && (contentType.startsWith("multipart/form-data"))
                && (method.equalsIgnoreCase("POST"))) {

            // Obtain a MultipartRequestHandler
            MultipartRequestHandler multipartHandler = new CommonsMultipartRequestHandler();

            if (multipartHandler != null) {
                isMultipart = true;
                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())) {
                    return;
                }
                // retrive 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 (isMultipart) {
                properties.put(stripped, multipartParameters.get(name));
            } else {
                properties.put(stripped, request.getParameterValues(name));
            }
        }

        request.setAttribute(Globals.REQUEST_PROPERTIES, properties);
    }

    /**
     * Create a map 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.
     *
     * @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();
        Enumeration enum1;

        Hashtable elements = multipartHandler.getAllElements();
        enum1 = elements.keys();
        while (enum1.hasMoreElements()) {
            String key = (String) enum1.nextElement();
            parameters.put(key, elements.get(key));
        }
        /* 取得通过get方式传过来的数据,也就是query的数据 */
        if (request instanceof MultipartRequestWrapper) {
            request = ((MultipartRequestWrapper) request).getRequest();
            enum1 = request.getParameterNames();
            while (enum1.hasMoreElements()) {
                String key = (String) enum1.nextElement();
                parameters.put(key, request.getParameterValues(key));
            }
        }

        return parameters;
    }

    protected static HttpServletRequest processMultipart(
            HttpServletRequest request) {

        if (!"POST".equalsIgnoreCase(request.getMethod())) {
            return (request);
        }

        String contentType = request.getContentType();
        if ((contentType != null)
                && contentType.startsWith("multipart/form-data")) {
            return (new MultipartRequestWrapper(request));
        } else {
            return (request);
        }

    }

    protected static void processContent(HttpServletRequest request,
            HttpServletResponse response) {

        String contentType = moduleConfig.getControllerConfig()
                .getContentType();
        if (contentType != null) {
            response.setContentType(contentType);
        }

    }

    protected static void processNoCache(HttpServletRequest request,
            HttpServletResponse response) {

        if (moduleConfig.getControllerConfig().getNocache()) {
            response.setHeader("Pragma", "No-cache");
            response.setHeader("Cache-Control", "no-cache");
            response.setDateHeader("Expires", 1);
        }

    }

}
TOP

Related Classes of easyJ.http.servlet.RequestProcessor

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.