2011-10-15 3 views
6

다른 서블릿에서 서블릿 POST 메서드를 호출하고 서블릿 매개 변수에서 BLOB를 전달해야합니다. 이것이 가능하면 어떻게 할 수 있습니까? 추신 : 아파치 HttpClient를 사용할 수 없습니다.다른 서블릿에서 서블릿 호출하기

+0

Apache HttpClient는 오픈 소스입니다 ... 복사하여 붙여 넣으시겠습니까? –

+0

Google App Engine을 사용하기 때문에 사용할 수없는 일부 클래스에 제한을 부과합니다. – fernandohur

답변

8

직접 HTTP 요청을 만들어 보내야합니다. 방법을 GET에서 POST로 변경하고 multipart/form-data 요청을 보내려고하기 때문에 forward/redirect/include를 사용할 수 없습니다.

HttpClient (및 다른 타사 라이브러리?)는 분명히 옵션이 아니기 때문에 가장 좋은 방법은 java.net.URLConnection으로 제공된 표준 Java SE API를 사용하는 것입니다. 길고 길게 짧음 : Using java.net.URLConnection to fire and handle HTTP requests 하단에는 multipart/form-data 예제가 있습니다.

이 문제는 서블릿과 관련이 없습니다. 즉, main() 메서드를 사용하는 일반 바닐라 Java 응용 프로그램에서이 코드를 실행할 수 있어야합니다. 이를 통해보다 쉽게 ​​테스트하고 미세 조정할 수 있습니다. 일단 작동 시키면 서블릿이 동일한 코드를 실행하게하십시오. 이 문제에 관련없는


, 나는 모두 서블릿 같은 웹 어플리케이션 컨텍스트에서 실행 확실히 경우, 어딘가 주요 설계 오류가 있다는 인상을 가지고있다. POST 요청을 보내려는 다른 서블릿은 너무 빡빡하게 결합되어 있으므로 리팩터링해야합니다.

1

응용 프로그램에서 다른 웹 서비스로 전화를 걸고 싶습니까? 그렇다면 HttpClient과 같은 것이 당신이 원하는 것입니다. 앱에서 프로그래밍 방식으로 다른 서블릿을 호출하려는 경우 forward to it 또는 include it 중 하나를 찾고 있습니다.

+0

내 앱에서 다른 서블릿을 호출하려하지만 POST 메서드에 있어야합니다. 일반적으로 response.redirect (...)하지만 GET 메서드를 호출합니다 ... POST를 어떻게 호출 할 수 있습니까? – fernandohur

+0

내가 말한 것은 : 당신이하고자하는 것에 따라 앞으로 또는 포함하기. 자세한 내용은 JEE 튜토리얼의 [ "다른 웹 자원 호출] (http://download.oracle.com/javaee/6/tutorial/doc/bnagi.html)을 참조하십시오. –

7

발송자를 애플리케이션의 다른 서블릿으로 가져 와서 전달하거나 @ Ryan이 제안한대로 포함시킬 수 있습니다. 코드는 첫 번째 서블릿 내부에서 이와 같아야합니다.

ServletContext context = this.getServletContext(); 
RequestDispatcher dispatcher = context.getRequestDispatcher("/otherurltoservlet"); 

// change your request and response accordingly 

dispatcher.forward(request, response); 
+0

내가 필요한 건 내 애플 리케이션의 다른 서블릿에서 POST 메소드를 호출하는 것이다. 그 전화를 "otherurlososervlet"의 POST 메서드라고할까요? – fernandohur

+0

첫 번째 서블릿이 게시를 통해 호출 된 경우 두 번째 호출은 dispatcher.forward 체인의 게시물을 통해 호출됩니다. – rmarimon

+0

여기 GET to POST 관련 질문이 있습니다. http://stackoverflow.com/questions/4374548/does-jspforward-or-requestdispatcher-forward-use-get-or-post – rmarimon

관련 문제