とは関係ありませんJetty
。
あなたがやろうとしているのServlet
は、静的ファイルを提供する を作成することです。
これを行うには、次のようなものを実装する必要があります。
@WebServlet(name="myAwesomeServlet", urlPatterns={"/filedl"})
public class MyAwesomeServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String fileName = (String) request.getParameter("file");
FileInputStream fis = null;
try {
fis = new FileInputStream(fileName);
response.setContentType("application/octet-stream");
OutputStream out = response.getOutputStream();
IOUtils.copy(fis, out); // this is using apache-commons,
// make sure you provide required JARs
} finally {
IOUtils.closeQuietly(out); // this is using apache-commons,
IOUtils.closeQuietly(fis); // make sure you provide required JARs
}
}
}
を使用できない場合はServlet 3.0 API
、@WebServlet
アノテーションを削除し、サーブレットを手動で にマップしますweb.xml
。
次に、次のように URL を呼び出します。
http://your.awesome.server.com/filedl?file=path/to/file
URL をより RESTful にしたい場合は、次のようにします。
http://your.awesome.server.com/filedl/file/path/to/file
パラメータの解析方法を変更する必要があります。練習問題として残しておきます。このケースは、REST サービスとして実装するのにも適している場合があります (「Building RESTful Web Services with JAX-RS - The Java EE 6 Tutorial 」を参照)。
編集
ダウンロードするファイルを 1 つのフォルダーに何らかの方法で制限したい場合は、これを自分で実装する必要があります。たとえば、次のようにすべてのファイルを強制的に特定のフォルダー内で検索することができます。
String fileName = (String) request.getParameter("file");
File realFileName = new File("/my/restricted/folder", fileName);
...
fis = new FileInputStream(realFileName);
このように、/fieldl/someFile.txt
fill のような URL は からファイルを提供します/my/restricted/folder/someFile.txt
。