Controller에서 Http Header의 ContentType이 Multipart일 경우 InputStream가로채기 문제

117 views
Skip to first unread message

선영욱

unread,
Oct 21, 2009, 12:45:19 AM10/21/09
to Korea Spring User Group
안녕하세요, 간만에 문의 글 올리는 것 같습니다.

Spring을 Spring답게 사용하지 못하는 1인이라 이번에도 도움을 요청 드리고자 합니다.

제가 외부로부터 MIME구조로 된 Stream을 받아야 할 일이 있어서 처음에는 Servlet으로 수신단을 만들어서 서비스로 넘
기는 구조로 작성을 했었습니다.

그런데 서비스 단에서 Spring 설정에 정의된 bean들을 불러올 수 없어서(아마 설정에서 Servlet과 Spring이 처리
되는 Dispatcher가 달라서 그런게 아닐까 싶습니다.) 그 방법을 포기했습니다.

그리고는 Controller를 하나 만들어서 그 곳으로 MIME 구조로 된 Stream을 받아서 서비스로 넘기도록 해서 사용 중
이였습니다.

그런데 문제가 Http Header의 ContentType이 Multipart일 경우 HttpServletRequest에서
InputStream을 가져오려고 하니까 없더라구요.

아마 앞단에서 MultiFileCommonsMultipartResolver 이런 것들이 가로채서 그런게 아닐까 싶습니다.

혹시 이런 경우에 서비스에서 HttpServletRequest안에 있는 InputStream을 다시 가져올 방법이 있을까 궁금합
니다.

아니면 Controller를 사용해서 수신을 받는 것이 아닌 좀 더 FM 방식이 있다면 조언 좀 부탁드리겠습니다.

감사합니다.

Toby Lee

unread,
Oct 21, 2009, 9:16:45 PM10/21/09
to ks...@googlegroups.com
Controller를 사용한다고 Multipart정보가 날라간다는 것은 이상하군요.

아무튼 해결책을 생각해보면 일단 서블릿으로 잘 작성이 되어있는 상황이라면, 문제는 그 servlet에서 스프링의 다른 빈을 DI받아 쓸 수 있어야 한다는 점이겠네요?

서블릿을 유지한 채로 사용하는 방법은 두가지 입니다.

하나는 서블릿을 독립적으로 등록하고 스프링의 유틸리티 메소드를 사용해서 ServletContext를 넘겨주면서 ApplicationContext를 받아오는 방법이 있습니다. 이걸 이용하면 JSP에서도 스프링의 빈을 가져와 사용할 수 있죠. 메소드 이름은 지금 제 PC 앞이 아니라 못 찾겠는데, 현 회장님이나 구 회장이 찾아서 알려줄 것입니다. 

두번째 방법은 서블릿을 스프링의 빈으로 등록하고 마치 컨트롤러 처럼 사용하는 방법이 있습니다. 그에 따른 HandlerMapping과 HandlerAdaptor를 XML에 등록해주고 서블릿 자체를 빈처럼 등록할 수 있습니다. 그러면 당연히 DI도 가능해지겠죠. 이것도 이름이... 지금은 기억이 안나고, 오후에 자리로 돌아가면 알려드리죠.

또 한가지 방법을 찾자면 HttpRequest에서가 아니라 스프링이 제공하는 Multipart 처리 기능을 이용하는 것입니다. 다만 기존 서블릿으로 구현했던 코드를  스프링의 MVC Controller에서 사용하는 방식으로 수정해야겠죠. 

2009/10/21 선영욱 <twinmo...@gmail.com>

안영회

unread,
Oct 21, 2009, 9:30:18 PM10/21/09
to ks...@googlegroups.com
하나는 서블릿을 독립적으로 등록하고 스프링의 유틸리티 메소드를 사용해서 ServletContext를 넘겨주면서 ApplicationContext를 받아오는 방법이 있습니다. 이걸 이용하면 JSP에서도 스프링의 빈을 가져와 사용할 수 있죠. 메소드 이름은 지금 제 PC 앞이 아니라 못 찾겠는데, 현 회장님이나 구 회장이 찾아서 알려줄 것입니다.


검색하면 바로 찾을 수 있군요.

jsp에서 Spring Context 활용하기



Reply all
Reply to author
Forward
0 new messages