1、首先,写一个download.html放至D:\apache-tomcat-7.0.77\webapps\JarDownload-v1。

<!DOCTYPE HTML>
<html>
<body>
<form action="JarDownload.do" method="get">
<br />
提取码:<input type="text" name="passwd" /><br />
<br />
<input type="submit" />
</form> <br />
<p>提取码为123456。</p>
</body>
</html>

2、启动tomcat,并通过浏览器测试页面。

先执行命令行指令D:\apache-tomcat-7.0.77\bin>startup.sh

然后打开浏览器,输入URL:http://localhost:8080/JarDownload-v1/download.html

3、编写web.xml并测试,放至D:\apache-tomcat-7.0.77\webapps\JarDownload-v1\WEB-INF,最好重启一下tomcat。

<?xml version="1.0" encoding="ISO-8859-1" ?>

<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4"> <servlet>
<servlet-name>Test</servlet-name>
<servlet-class>com.example.web.JarDownload</servlet-class>
</servlet> <servlet-mapping>
<servlet-name>Test</servlet-name>
<url-pattern>/JarDownload.do</url-pattern>
</servlet-mapping> </web-app>

4、准备一个测试Jar包,放在D:\apache-tomcat-7.0.77\webapps\JarDownload-v1

5、编写全名为com.example.web.JarDownload的Servlet,编译成.class文件后部署到D:\apache-tomcat-7.0.77\webapps\JarDownload-v1\WEB-INF\classes\com\example\web

package com.example.web;

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*; public class JarDownload extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException {
resp.setContentType("application/jar"); // 想让浏览器知道的事情 ServletContext ctx = getServletContext();
InputStream is = ctx.getResourceAsStream("/hello.jar"); int read = 0;
byte[] bytes = new byte[1024]; OutputStream os = resp.getOutputStream();
while ((read = is.read(bytes)) != -1) {
os.write(bytes, 0, read);
} // 把JAR包先读到内存里再转写到输出流中。
os.flush();
os.close();
}
}

6、最后,测试一下能否通过网页下载这个Jar包。

7、经过检查,发现JarDownload.do的的确是hello.jar(只是名称不同罢了),但是文件名却是url-pattern,修改一下html和web.xml就可以了。

这里体现了把逻辑名映射到servlet文件的好处。

最新文章

  1. android中ADT和SDK的关系
  2. OmniPlan文档链接
  3. git命令之git tag 给当前分支打标签
  4. Angularjs与bootstrap.datetimepicker结合实现日期选择器
  5. 如何查看JSP和Servlet版本
  6. 【转】AOP知识点
  7. eclipse中加放js文件报js语法错误解决办法
  8. mysql基础操作整理(一)
  9. JavaScript 常用小代码
  10. CSS图片文字同行居中
  11. 肝 hibernate 配置and增删改查 and 测试
  12. Redis内存分析工具redis-rdb-tools
  13. hdu-1686(kmp)
  14. awk 处理文本:行转列,列转行
  15. UE4 二维相关
  16. 【php】php5.0以上,instanceof 用法
  17. linux常用服务程序一键安装
  18. 基于GTK+3 开发远程控制管理软件(C语言实现)系列 一 开篇
  19. Unity关于方法事件生命周期官方文档
  20. 利用ReentrantLock简单实现一个阻塞队列

热门文章

  1. Java基础10 接口的继承与抽象类(转载)
  2. 基于HTML5 audio元素播放声音jQuery小插件
  3. 解决android studio引用远程仓库下载慢(转)
  4. AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。
  5. 【泰语歌】กลับคำสาหล่า 歌手:Mike Piromporn
  6. python3----字符串格式化(format)
  7. Windows下使用Visual Studio 2010 编译ffmpeg全过程
  8. ApiDoc 和 Swagger 接口文档
  9. Unity3d 创建线程 子线程与主线程通信
  10. python 基础 10.0 nosql 简介--redis 连接池及管道