- 目标:创建一个链接,点击后可直接下载所示文件
- 需求:通过HTML显示下载链接页面,并将该链接指向一个servlet,通过该servlet处理下载请求。
- 代码实现:
HTML
<body>
<a href="../servlet/JarReturn">点击下载 servlet-api.jar文件</a>
</body>
servlet
public class JarReturn extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("application/jar");
ServletContext ctx = getServletContext();
InputStream is = ctx.getResourceAsStream("/download/servlet-api.jar");
int read = 0;
byte[] bytes = new byte[1024];
OutputStream os = response.getOutputStream();
while ((read = is.read(bytes)) != -1) {
os.write(bytes, 0, read);
}
os.flush();
os.close();
}
}
web.xml
<servlet>
<servlet-name>JarReturn</servlet-name>
<servlet-class>returnJAR.JarReturn</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>JarReturn</servlet-name>
<url-pattern>/servlet/JarReturn</url-pattern>
</servlet-mapping>
项目目录图
总结:这里把HTML和下载文件放在同一个文件夹download
下,之前碰到了一个小问题,只知道把文件全部放在根目录,不知道到底href
链接和<url-pattern>
的指向是从哪儿开始的,经过一番测试,弄清楚了:其中href是相对于自身HTML文件所在文件夹目录,而后者是相对于该web应用的原始根目录。
在我写的里面,要想让HTML中的href链接到servlet,就必须先返回根目录。因此就有了<a href="../servlet/JarReturn">...</a>