2012-05-04 2 views
0

인트라넷 http 서버에서 이진 파일을 읽고 공용으로 다운로드해야합니다.인트라넷에서 JSP 다운로드

SCHEMA

인트라넷 파일 서버 (아파치) = 1 < - 파일 시스템에 저장하지 않고> 인터넷 인증 된 사용자 = 3

하우투 방출이 -> 공공 HTTP 서버 (아파치 톰캣) = 2 < on server 2

답변을 주셔서 감사합니다.

영어로 죄송합니다.

답변

0

java.net.URL (또는 다른 http 클라이언트)을 사용하여 1에서 읽은 다음 3에 응답하여 인쇄하십시오.

(Apache HTTP Server 또는 Nginx에서는 역방향 프록시를 사용하여이를 수행 할 수 있습니다.)

0

나는 단지이 상황에서 두 가지 방법으로 생각할 수 :

  • 는 인트라넷에 인터넷 요청을 리디렉션합니다. JSP 페이지 사용에

:

<% response.sendRedirect("http://intranet_address");%> 

또는

<c:redirect url="http://intranet_address"/>

표준 태그 라이브러리를 사용하여. 서블릿 페이지 사용에

:

response.setStatus(302); 
response.setHeader("Location", "http://intranet_address"); or just 

response.sendRedirect("http://intranet_address"); 
  • 서버 2

I에 저장하지 않고 서버 1에서 읽고 인터넷 사용자에게 직접 전송하는 서버 (2)에 프록시의 종류를 사용하여 인트라넷에서 첫 번째 접근법을 시도한 적이 없지만 인트라넷 주소가 인터넷 사용자에게는 유효하지 않다는 사실을 고려할 때 작동하지 않을 것이라고 생각합니다.

이제 프록시 계층을 사용하는 두 번째 접근 방식 만 남았습니다. 프록시 함수는 여러 가지 방법으로 구현 될 수 있습니다. 하나는 단순한 Servlet 뒤에있는 Bean으로 파일 서버 1에 대한 URL을 열고 파일을 읽고 서블릿 응답 스트림을 통해 사용자에게 보내거나 어쩌면 어떤 종류의 포함 된 HTTPClient.

편집 : 이진 파일을 다운로드 할 예정이므로 JSP는 좋은 선택이 아닙니다. 텍스트 데이터를 처리하기위한 것입니다. 바이너리 스트림을 처리하려면 Servlet이 필요합니다. 당신은 당신의 HttpServletResponse를에 다음과 같은 것들을 설정할 수 있습니다

resp.setContentType("application/octet-stream"); 
resp.setContentLength(length); 
resp.setHeader("Content-Disposition", "attachment; filename=\"" + filename + "\""); 

때문에 내용이 사용자가 설정 한 이름의 첨부 파일로 전송됩니다.

관련 문제