All,

I was reading-through the request-parameters processing code and I
noticed that while the Parameters class is used to build a Map of
parameter names -> value arrays, that same Map is not used when
Request.getParameterNames is called.

Instead, Request.getParameterNames builds a copy of that same Map and
returns it:

    public Map<String, String[]> getParameterMap() {

        if (parameterMap.isLocked()) {
            return parameterMap;
        }

        Enumeration<String> enumeration = getParameterNames();
        while (enumeration.hasMoreElements()) {
            String name = enumeration.nextElement();
            String[] values = getParameterValues(name);
            parameterMap.put(name, values);
        }

        parameterMap.setLocked(true);

        return parameterMap;

    }

Is there any particular reason not to return the internal Map from the
Parameters class? Spec says that the Map should be immutable, but that
can be easily done in a number of ways.

Is the map being defensively-copied so that the client code can't
destroy the internal representation? That's the only reason I can think
of for this behavior.

I was just thinking that the "copy" technique of course requires twice
the memory (and a bit of CPU time for the copy) for request parameters
in any request that calls any of the getParameter* family of calls.

I don't have any performance data but I'm wondering if anyone might want
to be able to disable this defensive-copy perhaps in a trusted
environment to squeeze a bit more performance out of their server.

Any comments? I'm not suggesting a patch just yet... just wondering if
anyone has any thoughts on the subject.

Thanks,
-chris

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to