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文件的好处。

【Head First Servlets and JSP】迷你MVC:JarDownload的完整实现的更多相关文章

  1. 迷你 MVC

    深入研究 蒋金楠(Artech)老师的 MiniMvc(迷你 MVC),看看 MVC 内部到底是如何运行的 2014-04-05 13:52 by 自由的生活, 645 阅读, 2 评论, 收藏, 编 ...

  2. jsp+servlet+mvc模式图

    在我们的开发中,最常用的开发模式莫过于MVC模式,即M--MODEL.V--View.C--Controller,这样不仅可以方便开发人员分工协作,提高开发效率,增强程序的可维护性和拓展性,而且利用C ...

  3. 【Head First Servlets and JSP】笔记23:Expression Language(EL) 完全攻略

    基本上是<Head First Servlets and JSP>内容的整理.扩充.顺便推荐一个供参考的JSP教程:JSP Tutorial内容很全面,还有一些有趣的实例. 完整代码参考 ...

  4. JavaWeb -- Servlet+JSP+JavaBean(MVC)模式

    Servlet+JSP+JavaBean(MVC)模式适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp负责数据显示,javabean负责封装数据. Servlet+JSP ...

  5. JavaWeb核心篇(3)——JSP,MVC,三层架构

    JavaWeb核心篇(3)--JSP,MVC,三层架构 在本篇文章中我们会学习到JSP,MVC,三层架构 虽然JSP已经快被时代所淘汰,但是在一些老旧的工作场所还是有在使用,所以了解一下也不为过 至于 ...

  6. 开源题材征集 + MVC&EF Core 完整教程小结

    到目前为止,我们的MVC+EF Core 完整教程的理论部分就全部结束了,共20篇,覆盖了核心的主要知识点. 下一阶段是实战部分,我们将会把这些知识点串联起来,用10篇(天)来完成一个开源项目. 现向 ...

  7. 【Head First Servlets and JSP】笔记2:MVC迷你教程

    1.采用MVC,不仅要求业务逻辑和表示分离.实际上,业务逻辑甚至根本不知道表示的存在.MVC的关键是,业务逻辑要与表示分离,而要求在中间放上别的东西,这样业务逻辑本身就可以作为一个可以重用的Java类 ...

  8. jsp学习---mvc模式介绍和el表达式,jstl标签库的使用入门

    一.mvc模式介绍 下图是常用的mvc分层模式: 项目中的包命名规则,一般如下: com.amos.domain 封装JavaBean,一般我喜欢用model命名这个包com.amos.dao 封装d ...

  9. HeadFirst jsp 03 (MVC)

    创建一个小的 web 应用, mvc, 麻雀虽小, 五脏俱全 补1: servlet没有main()方法, 他们受控与另外一个Java应用, 这个Java应用称为 容器, tomcat就是这么一个容器 ...

随机推荐

  1. crontab 解析

    一.crontab简介 Linux 提供了一个非常强大且易用的设置周期性执行指令的工具命令--crontab,常常用于设置循环任务的执行. 默认情况下,任何使用者若不被加入/etc/cron.deny ...

  2. 第一百七十八节,jQuery-UI,知问前端--对话框 UI

    jQuery-UI,知问前端--对话框 UI 学习要点: 1.开启多个 dialog 2.修改 dialog 样式 3.dialog()方法的属性 4.dialog()方法的事件 5.dialog 中 ...

  3. Web Services 平台元素

    Web Services 拥有三种基本的元素:SOAP.WSDL 以及 UDDI. 什么是 SOAP? 基本的 Web services 平台是 XML + HTTP. SOAP 指简易对象访问协议 ...

  4. 创建一个动作-Action类:

    让我们创建一个Java文件HelloWorldAction.java的Java资源> SRC下一个的包名com.yiibai.struts2与下面的内容. package com.yiibai. ...

  5. linux oracle sqlplus中文乱码解决

    在oracle用户的~/.bash_profile中添加 NLS_LANG="SIMPLIFIED CHINESE"_CHINA.ZHS16GBKexport NLS_LANG 然 ...

  6. 浅谈DNS

    什么叫域名解析 域名解析是把域名指向网站空间IP,让人们通过注册的域名可以方便地访问到网站一种服务.IP地址是网络上标识站点的数字地址,为了方便记忆,采用域名来代替IP地址标识站点地址.域名解析就是域 ...

  7. Android Studio使用百度地图问题总结

    一.常见问题APP Scode码校验失败 一般出现这个问题都是ak不正确导致 可能出错的地方 1.SHA1值没有正确获取 正确获取SHA1值:在左下角打开Terminal终端,进入debug.keys ...

  8. ubuntu 16.04 系统语言汉化

    转载自:https://jingyan.baidu.com/article/5553fa82cedaa265a2393420.html

  9. 误: Apache shutdown unexpectedly解决办法

    from:http://www.wopus.org/wordpress-basic/getting-started/2536.htmlXAMPP错  2015年10月20日15:58:19 新手上路发 ...

  10. python使用电子邮件模块smtplib的方法(发送图片 附件)实用可行

    Smptp类定义:smtplib.SMTP(host[,port[,local_hostname[,,timeout]]]),作为SMTP的构造函数,功能是与smtp服务器建立连接,在连接成功后,就可 ...