SortedMap<String,String[]> sMap = Collections.synchronizedSortedMap(new TreeMap<String,String[]>(request.getParameterMap()));
synchronized(sMap)
{
for(String key : sMap.keySet())
{
String[] value = sMap.get(key);
for(int i=0; i<value.length; i++)
{
out.println(key + " : " + value[i] + "<br>");
}
}
}
--------------------------
원시 웹페이지에서 체크박스 또는 라디오 버튼, 그리고 입력상자의 이름을 같은 이름으로 하여
다른 웹페이지로 전달하고자 할 때,
전달 받는 웹페이지에서 처리하는 방법으로,
1. request.getQueryString() 으로 전달받는 방법
String queryString = request.getQueryString();
out.print(queryString + "<br><br>----<br><br>");
2. Enumeration 객체를 통해 전달 받는 방법.
Enumeration e = request.getParameterNames();
while( e.hasMoreElements())
{
String name = (String)e.nextElement();
String[] values = request.getParameterValues(name);
for(int i=0; i<values.length; i++)
{
out.println(name + " : " + values[i] + "<br>");
}
}
3. request.getParameterMap()을 통해 전달 받는 방법.
SortedMap<String,String[]> sMap = Collections.synchronizedSortedMap
( new TreeMap<String,String[]>(request.getParameterMap()));
synchronized(sMap)
{
for(String key : sMap.keySet())
{
String[] value = sMap.get(key);
for(int i=0; i<value.length; i++)
{
out.println(key + " : " + value[i] + "<br>");
}
}
}
---------------
3.번 항목은 request.getParameterMap() 메소드를 통해 전달받은 파라메터 리스트를
TreeMap 객체를 통해 SortedMap 인터페이스를 구현하여, 전달받은 파라메터 리스트의
파라메터 이름순으로 정렬하는 기능까지 한다.
<String, String[]> Generic은 전달받는 파라메터이름과 값들이 모두 String 타입으로 전달
되기 때문에 설정했으며, 특히 <String[]> 제너릭은, SortedMap.get(key) 메소드가
SortedMap에 담겨있는 [값]을 읽어 반환할 때 벡터타입으로 반환하기 때문에 사용했다.
전달되는 파라메터가 String paramertName = String parameterValue 형식이기 때문에
(ex:http://xxx.yyy.zzz?AAA=BBB&CCC=DDD&............)
<String, String> 형태의 제너릭을 사용했었는데, ClassCastException을 발생시켰다.
제너릭과 for(Type variable : Object){}는 JDK 5 이상의 버전에서만 동작한다.
Collections.synchronizedSortedMap, synchronized() 는 객체의 직렬화(멀티 쓰레드간 충돌
방지)를 위해 사용했다.
특히, for( in ) 문장을 통해 Map의 특징인 중복불가에 대한 문제도 함께 해결 할 수 있다.
-------------------
이 외로, 전통적인 방법으로 Iterator 객체를 사용하는 방법도 있다.
Map paramMap = new SortedMap(request.getParameterMap());
Iterator it = paramMap.keySet().iterator();
String key = null;
String[] value = null;
while(it.haNext())
{
key = it.next();
value = paramMap.get(key);
for(int i=0; i<value.length; i++)
{
out.println(key + " : " + value[i] + "<br>");
}
}