파일을 업로드한 후에 보여지는 pdsList.jsp 에서는 데이터베이스에서 가져온 업로드 파일정보를 보여주고 있는데, 이용자가 파일명을 클릭해서 파일을 다운로드 할 수 있도록 DownloadServlet 을 연결한다.
pdsList.jsp
<%@ page language="java" contentType="text/html; charset=EUC-KR"%>
<%@ page import="java.util.*" %>
<%@ page import="upload.FileInfo"%>
<jsp:useBean id="pdsDAO" class="upload.PdsDAO" scope="session"/>
<html>
<head>
<title>PDS List</title>
<style type="text/css">
TABLE{
font-size:65%;
text-decoration:none;
}
A{
text-decoration:none;
}
</style>
</head>
<body><p><center>
자료실 목록
<hr width=70%><p>
<table border=1 cellspacing=0 width=600>
<tr><th>번호</th><th>작성자</th><th>설 명</th><th>파일명</th><th>날짜</th></tr>
<%
Vector<FileInfo> v = pdsDAO.getList();
String bgColor=null;
for(int i=0;i<v.size();i++) {
bgColor = i%2==0 ? "#FFFFCC" : "white";
%>
<tr bgcolor=<%=bgColor%>><td><%=v.get(i).getNum()%> </td><td><%=v.get(i).getName() %></td>
<td><%=v.get(i).getDescr()%></td>
<td><a href="DownloadServlet?file=<%=v.get(i).getFileName()%>"><%=v.get(i).getFileName()%></a></td>
<td><%=v.get(i).getDate()%></td></tr>
<%}
%>
</table>
</center>
</body>
</html>
DownloadServlet.java
package upload;
import java.io.FileInputStream;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class DownloadServlet extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("application/octet-stream;charset=KSC5601");
String fileName = request.getParameter("file");
//아래처럼 attachment 를 사용하면 브라우저는 무조건 다운로드 창을 띄우고 파일명을 보여준다.
response.setHeader("Content-Disposition", "attachment;filename="+fileName+";");
ServletOutputStream sos = null;
try{
sos = response.getOutputStream();
}catch(Exception e){e.printStackTrace();}
//다음과 같이 스트림을 열고 브라우저에 바이트 데이터를 전송해주면 된다.
FileInputStream fio = null;
byte[] buf = new byte[1024];
fileName = new String(fileName.getBytes("8859_1"),"KSC5601");
File inFile = new File("D:/upload/"+fileName);
byte[] buf = null;
if(inFile.exists()) {
int len = (int)inFile.length();
buf = new byte[len];
}
fio = new FileInputStream("D:/upload/"+fileName);
fio.read(buf);
sos.write(buf);
sos.flush();
fio.close();
sos.close();
}
}