Servlet Filter에 궁금한 점이 있어 글을 올립니다.
현재 환경은 동일 WAS에서 서로다른 두개의 도메인을 사용하고 있습니다.
크게 "UI"와 "비UI"라고 칭하겠습니다.
최초 서버분리를 목적으로 UI쪽에서 전문형태로 변환된 내용을
비UI쪽에 아래소스와 같이 전달후 return을 받고 있습니다.
public byte[] callMethod(String host, int port, String context, byte
[] bytes)
throws IOException {
HttpURLConnection con = null;
try {
URL url = new URL(HTTP_URL_HEADER + host + ":" + port + "/" +
context);
con = (HttpURLConnection) url.openConnection();
if (con == null) {
//에러처러
} else {
con.setDoOutput(true);
con.getOutputStream().write(bytes);
int resCode = con.getResponseCode();
if (resCode == HttpURLConnection.HTTP_OK) {
return URLConnection getStream을 ByteArray로 변환(con);
} else {
//에러처러
}
}
} catch (MalformedURLException mex) {
//생략
} catch (IOException ex) {
//생략
} finally {
if (con != null) {
con.disconnect();
}
return null;
}
}
이것을 하나의 WAS에서 실행 하는것으로 변경되어 바로 method 호출로 변경하자는 고객의
요청이 있는데
비UI쪽은 Servelt 기반으로 되어 있어 불가하다는 입장입니다.
비UI쪽에서 제시하는 방안으로 Servlet Filter를 사용하자고 하는데
제가 이 녀석은 잘 몰라서 과연 어느정도의
기대효과가 있는지와 더 나은 방법이 없는지 조언을 부탁드립니다.
도메인 통합도 가능 하면,
이 문제가 깔끔하게 해결되는 것인지..
library들의 충돌문제 등이 발생할 여지가 있을 듯 해서요.
이때는 어떤 상황을 고려해 볼수 있을 까요?
(예를 들면 log4j)
제가 이쪽에 내공이 부족해서, 더 나은 질문작성을 못했다면 심심한(?) 사과를 드립니다. ^^ ~
안녕히 계세요.
Servlet Filter는 사실별로 복잡한 기술이 아니라서 검색하면 금방 아실 수
있을 거고요.
지금 하시려는 일을 Servlet Filter로 어떻게 해결하자는 건지 한번 물어보셔
야겠습니다. 저는 딱히 떠오르는 아이디어가 없네요.
오히려 저는 RequestDispatcher를 쓰면 딱일 것 같은데 말이죠?
ServletContext.getRequestDispatcher(path)로 dispatcher를 구한 다음
include() 메소드 호출로 비UI 쪽 서블릿을 실행하시면 비슷한 효과를 얻으실
수 있을 것 같습니다.
아니면 해당 Servlet의 service() 메소드를 직접 호출하셔도 되고요. ^^ (이
게 더 간단하겠네요.)
호출하실 때 ServletResponse를 살포시 wrapping해서 출력 결과를 가로채면
지금 쓰고 계시다는 callMethod()의 bytes parameter 같은 출력 내용 버퍼도
운영하실 수 있을 겁니다.
planner 쓴 글: