Tag Archives: 클래스

Virtual Method Invoke

Virtual Method Invoke를 이용하면 무엇을 실행하게 될지 알수 없는 동적 바인딩인 메서드를 실행할수 있다.

이를 통해 웹서비스에서 많이 볼수 있는 플러그인이라던가, 위젯을 손쉽게 구현할 수 있다.

[code]import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class DynamicClassLoader {
  public Object execute(Class clazz, String runner, Object… args)
  throws ClassNotFoundException, SecurityException,
  InstantiationException, IllegalAccessException {

    Method[] methods = clazz.getMethods();

    try {
      for (Method method : methods) {
        if (method.getName().equals(runner)) {
          return method.invoke(this, args);
        }
      }
    } catch (IllegalArgumentException e) {
      e.printStackTrace();
    } catch (IllegalAccessException e) {
      e.printStackTrace();
    } catch (InvocationTargetException e) {
      e.printStackTrace();
    }
    return null;
  }
}[/code]

첫번째 인자로 읽어들일 클래스를 넣어주고, 두번째 인자로 수행할 메서드명을 입력한다.

그 이후에는 인자값들을 넣어주면 된다. 가변인자를 사용한다.

가변인자와 발전된 for문 형식때문에 위의 소스는 JDK 5이상에서만 작동한다.

invoke를 통해서 마치 자신이 해당 클래스에서 호출한 메서드인것처럼 작동하게 된다.

CookieUtil Class

예전 게시판 만들다가 만들었던 쿠키 관련 유틸 클래스이다.
URLDecoder의 decode가 deprecation되었는데, 어떻게 강제로 해버렸다.
좀더 깔끔한 해결책 아시는분은 알려주시면 감사하겠습니다.

[CODE]import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class CookieUtil
{
 public static boolean setCookie(HttpServletResponse response, String name, String value)
 {
  try
  {
   Cookie cookie = new Cookie(name, URLEncoder.encode(value, “EUC-KR”));
   cookie.setMaxAge(24*60*60);
   response.addCookie(cookie);
   
   return true;
  }
  catch (UnsupportedEncodingException e)
  {
   e.printStackTrace();
   
   return false;
  }
 }
 
 @SuppressWarnings(“deprecation”)
 public static String getCookie(HttpServletRequest request, String name)
 {
  Cookie[] cookies = request.getCookies();
  if(cookies == null)
  {
   return “”;
  }
 
  for(int i = 0 ; i < cookies.length ; i++)
  {
   if(cookies[i].getName().equals(name))
   {
    return URLDecoder.decode(cookies[i].getValue());
   }
  }
 
  return “”;
 }
}[/CODE]

사용할때는 비즈니스 로직에 다음과 같이 사용하면 되겠다.
쿠키를 저장할때 :
[CODE]CookieUtil.setCookie(response, “name”, boardForm.getName());
CookieUtil.setCookie(response, “email”, boardForm.getEmail());[/CODE]

쿠키를 읽어올때 :
[CODE]request.setAttribute(“name”, CookieUtil.getCookie(request, “name”));
request.setAttribute(“email”, CookieUtil.getCookie(request, “email”));[/CODE]