Search in sources :

Example 1 with MappingImpl

use of org.apache.catalina.connector.MappingImpl in project Payara by payara.

the class StandardContext method getRequestDispatcher.

/**
 * Return a <code>RequestDispatcher</code> instance that acts as a
 * wrapper for the resource at the given path.  The path must begin
 * with a "/" and is interpreted as relative to the current context root.
 */
@Override
public RequestDispatcher getRequestDispatcher(String path) {
    // Validate the path argument
    if (path == null) {
        return null;
    }
    if (!path.startsWith("/") && !path.isEmpty()) {
        String msg = MessageFormat.format(rb.getString(LogFacade.INCORRECT_OR_NOT_EMPTY_PATH), path);
        throw new IllegalArgumentException(msg);
    }
    // Get query string
    String queryString = null;
    int pos = path.indexOf('?');
    if (pos >= 0) {
        queryString = path.substring(pos + 1);
        path = path.substring(0, pos);
    }
    path = RequestUtil.normalize(path);
    if (path == null)
        return (null);
    pos = path.length();
    // Use the thread local URI and mapping data
    DispatchData dd = dispatchData.get();
    if (dd == null) {
        dd = new DispatchData();
        dispatchData.set(dd);
    }
    MessageBytes uriMB = dd.uriMB;
    uriMB.recycle();
    // Retrieve the thread local mapping data
    MappingData mappingData = dd.mappingData;
    // Map the URI
    CharChunk uriCC = uriMB.getCharChunk();
    try {
        uriCC.append(getPath(), 0, getPath().length());
        /*
             * Ignore any trailing path params (separated by ';') for mapping
             * purposes
             */
        int semicolon = path.indexOf(';');
        if (pos >= 0 && semicolon > pos) {
            semicolon = -1;
        }
        uriCC.append(path, 0, semicolon > 0 ? semicolon : pos);
        getMapper().map(uriMB, mappingData);
        if (mappingData.wrapper == null) {
            return (null);
        }
        /*
             * Append any trailing path params (separated by ';') that were
             * ignored for mapping purposes, so that they're reflected in the
             * RequestDispatcher's requestURI
             */
        if (semicolon > 0) {
            uriCC.append(path, semicolon, pos - semicolon);
        }
    } catch (Exception e) {
        // Should never happen
        log.log(Level.WARNING, LogFacade.MAPPING_ERROR_EXCEPTION, e);
        return (null);
    }
    Wrapper wrapper = (Wrapper) mappingData.wrapper;
    String wrapperPath = mappingData.wrapperPath.toString();
    String pathInfo = mappingData.pathInfo.toString();
    HttpServletMapping mappingForDispatch = new MappingImpl(mappingData);
    mappingData.recycle();
    // Construct a RequestDispatcher to process this request
    return new ApplicationDispatcher(wrapper, mappingForDispatch, uriCC.toString(), wrapperPath, pathInfo, queryString, null);
}
Also used : Wrapper(org.apache.catalina.Wrapper) MessageBytes(org.glassfish.grizzly.http.util.MessageBytes) MappingData(org.glassfish.grizzly.http.server.util.MappingData) MappingImpl(org.apache.catalina.connector.MappingImpl) SecurityConstraint(org.apache.catalina.deploy.SecurityConstraint) CharChunk(org.glassfish.grizzly.http.util.CharChunk) LifecycleException(org.apache.catalina.LifecycleException) MalformedObjectNameException(javax.management.MalformedObjectNameException) IOException(java.io.IOException) ServletException(javax.servlet.ServletException) NamingException(javax.naming.NamingException) MBeanRegistrationException(javax.management.MBeanRegistrationException) MalformedURLException(java.net.MalformedURLException) HttpServletMapping(javax.servlet.http.HttpServletMapping)

Aggregations

IOException (java.io.IOException)1 MalformedURLException (java.net.MalformedURLException)1 MBeanRegistrationException (javax.management.MBeanRegistrationException)1 MalformedObjectNameException (javax.management.MalformedObjectNameException)1 NamingException (javax.naming.NamingException)1 ServletException (javax.servlet.ServletException)1 HttpServletMapping (javax.servlet.http.HttpServletMapping)1 LifecycleException (org.apache.catalina.LifecycleException)1 Wrapper (org.apache.catalina.Wrapper)1 MappingImpl (org.apache.catalina.connector.MappingImpl)1 SecurityConstraint (org.apache.catalina.deploy.SecurityConstraint)1 MappingData (org.glassfish.grizzly.http.server.util.MappingData)1 CharChunk (org.glassfish.grizzly.http.util.CharChunk)1 MessageBytes (org.glassfish.grizzly.http.util.MessageBytes)1