【Head First Servlets and JSP】迷你MVC:JarDownload的完整实现

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

时间: 2024-10-01 02:13:42

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

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

基本上是<Head First Servlets and JSP>内容的整理.扩充.顺便推荐一个供参考的JSP教程:JSP Tutorial内容很全面,还有一些有趣的实例. 完整代码参考 EL隐式对象汇总 pageContext使用参考 EL表达式的基本规则 关于EL的一些细节 通过EL获得request参数 从request得到更多信息 获得Request Method? xxxxScope有意义吗? 通过EL调用函数 EL与数学运算 1.EL隐式对象汇总.如下所示: 更详细的内容可以参考 

jsp+servlet+mvc模式图

在我们的开发中,最常用的开发模式莫过于MVC模式,即M--MODEL.V--View.C--Controller,这样不仅可以方便开发人员分工协作,提高开发效率,增强程序的可维护性和拓展性,而且利用Controller将Model与View分离,降低他们之间的耦合度.下面的一张图将说明在servlet和jsp中mvc的应用. 看了这张图,我们大概可以看出mvc在servlet+jsp开发中各个模块的具体体现,可能上面画的还是无法具体的描述出mvc中他们所代表的具体含义和作用,下面我们来具体说明一

【Head First Servlets and JSP】实践记录01:从有脚本到无脚本

试图章节式的阅读<Head First Servlets and JSP>总感觉不对劲,这本书前后的联系性很强,有点类似于“连续剧”,而不是通常的“知识清单”. 可以建立多态的bean引用吗 使用type,但没有class scope属性默认为“page” 从有脚本到无脚本 1.快速搭建一个测试环境:输入用户名,返回“Hello, 用户名” index.html <!DOCTYPE html> <html lang="en"> <head>

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

到目前为止,我们的MVC+EF Core 完整教程的理论部分就全部结束了,共20篇,覆盖了核心的主要知识点. 下一阶段是实战部分,我们将会把这些知识点串联起来,用10篇(天)来完成一个开源项目. 现向园友征集题材,你提需求我来实现. 请在评论中提出你的需求,并加以简明扼要的描述. 题材最好是有趣的.有一定应用价值的,例如像Trello这样的效率管理系统. 我将会在选取一个相对适合的题材,通过敏捷开发,快速迭代,将详细开发过程记录下来,抛砖引玉,供大家参考. 前面已完成的20篇我们以技术为主导,后

ASP.NET 学习小记 -- “迷你”MVC实现(2)

Controller的激活 ASP.NET MVC的URL路由系统通过注册的路由表对HTTO请求进行解析从而得到一个用户封装路由数据的RouteData对象,而这个过程是通过自定义的UrlRoutingModule对HttpApplication的PostResolveRequestCache事件进行注册实现的.RouteData中已经包含了目标Controller的名称,现在我们需要根据该名称激活对应的Controller对象. MvcRouteHandler 对于这个"迷你版"的M

【Head First Servlets and JSP】笔记 26: web 应用部署

[须知] 物理目录结构与虚拟目录结构的差异 WAR 实际上就是 JAR 什么东西应该放在 WEB-INF 文件夹下? [了解] <mime-mapping> 相关 <env-entry> 相关 [传统 web.xml 参考] <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"

【Head First Servlets and JSP】笔记21:EL以及&lt;jsp:useBean ....&gt;的补充

1.EL的英文是Expression Language,译成中文就是“表达式语言”.这是一种给前端程序员使用的脚本语言,EL与Java表达式相比并没有什么“天壤之别”,在后端程序员看来多少有点“多此一举”. 2.然而,我们不能强求每一个前端程序员都去学习JAVA,EL相对于JAVA来说学习成本更低,更容易理解. 3.在以前写的代码上实践测试一下,首先把Scriptlet给禁了,(El也是可以禁的) <?xml version="1.0" encoding="UTF-8&

【Head First Servlets and JSP】笔记13:session &amp; cookie

session的接口 杀死会话 cookie的性质 cookie的接口 再总结——cookie.session的前世今生 简单的定制cookie示例 1.session的接口,配合一些代码来理解. 2.杀死会话——杀死的含义是使session无效化(在JVM中清除??). 立刻杀死,已知方式有两种, 在DD中设定“默认期限” 在代码中对具体session设定“期限” 3.cookie的特性 4.cookie的接口 从客户请求得到cookie——稍微现代点的方法是这样的: Cookie[] coo

【Head First Servlets and JSP】笔记7:如何创建一个全局的dog?

重定向与请求分派 “局部”参数——ServletConfig——servlet初始化参数 “全局”参数——ServletContext——上下文初始化参数 Web app的“构造器”——ServletContextListener 实战:如何创建一个全局的dog? 1.重定向与请求分派. resp.sendRedirect("http://www.cnblogs.com/xkxf/"); RequestDispatcher view = req.getRequestDispatcher