# request.getParameterMap()을 통해 파라미터를 받는 방법.
방법 1.
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.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의 특징인 중복불가에 대한 문제도 함께 해결 할 수 있다.
(아직 무슨 말인지 잘 모르겠음 ㅠ_ㅠ....공부가 필요해...)
방법 2.
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>");
}
}
- 출처 : http://tong.nate.com/dandyasd/37123365 -