關於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對象的剖析。

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