关于tomcat中getParameterValues处理方式的疑问

先上代码

@Override
	public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException
	{
		Enumeration e = req.getParameterNames();
		String attributeName;
		String attributeValues[];
		output(req);	
		while (e.hasMoreElements()) {
			attributeName = (String) e.nextElement();
			attributeValues = req.getParameterValues(attributeName);
//			a = req.getParameter(attributeName);
			attributeValues[0] = "hasUpdated";
		}
		output(req);	
		chain.doFilter(req, resp);
	}

 问题是第9行的代码是否有改变请求中的参数值?

测试了多个tomcat,在tomcat6.0.13中会改变,看了下tomcat的源码,不会改变参数值的代码都是这样写的,采用的是ApplicationHttpRequest

@Override
    public String[] getParameterValues(String name) {

        parseParameters();
        Object value = parameters.get(name);
        if (value == null)
            return null;
        else if (value instanceof String[])
            return ((String[]) value);
        else if (value instanceof String) {
            String values[] = new String[1];
            values[0] = (String) value;
            return (values);
        } else {
            String values[] = new String[1];
            values[0] = value.toString();
            return (values);
        }

    }

 会去new一个新的字符串数组进行保存,但是tomcat6.0.13并不会进入这个request。

 

后续会深入研究下tomcat的源码,及java string对象的剖析。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章