http://www.silverwolf.co.kr/9926
클라이언트에 JAR 파일을 전송한다면 Response 객체에 HTML 페이지가 아니라 JAR 바이트를 내려보내야 합니다. 먼저 JAR 파일을 바이트로 읽어 이를 Response의 출력 스트림에 기록해야 합니다.
01.
//
import 구문
02.
public
class
CodeReturn
extends
HttpServlet
{
03.
public
void
doGet(HttpServletRequest
request, HttpServletResponse response)
throws
IOException,
ServletException {
04.
//
이 코딩의 목적은 브라우저에게 지금 우리가 내려보내는 것이 JAR라는 사실을 알리려는 것입니다. HTML 페이지가 아니기에
application/jar 라고 타입을 설정하는 것입니다.
05.
response.setContentType(
"application/jar"
);
06.
07.
ServletContext
ctx = getServletContext();08.
//
이 코드를 풀어서 말해보면 "자원(/bookCode.jar 파일)을 입력 스트림으로 주세요" 라는
뜻입니다.
09.
InputStream
is = ctx.getResourceAsStream(
"/bookCode.jar"
);
10.
11.
int
read
=
0
;
12.
byte
[]
bytes =
new
byte
[
1024
];
13.
14.
//
전형적인 I/O 코딩입니다. 먼저 JAR 바이트를 읽어, 출력 스트림에 바이트를 기록합니다.
15.
OutputStream
os = response.getOutputStream();16.
while
((read
= is.read(bytes)) != -
1
)
{
17.
os.write(bytes,
0
,
read);
18.
}19.
os.flush();20.
os.close();21.
}22.
}
getResourceAsStream()의 인자값으로 들어오는 파일 경로는 반드시 /로 시작해야 합니다. 여기서 /는 해당 웹 애플리케이션 루트를 의미합니다. 따라서 bookCode.jar 파일은 JarDownload 아래에 위치합니다.
반응형
'차근차근 > JAVA JSP' 카테고리의 다른 글
Request 객체 (0) | 2014.07.26 |
---|---|
Response 객체 (0) | 2014.07.26 |
[Tip] getWriter() 와 getOutputStream() 차이점 (0) | 2014.07.26 |
inputstreamreader (0) | 2014.07.26 |
[ Java ] e.toString(), e.getMessage(), e.printStackTrace()의 차이점 (0) | 2014.07.26 |