• Servlet 下载文件


    这几天有点懒散,还好没有忘记看书,上周去了国家图书馆翻阅了一些和Java相关的书籍,其实这些书都是自己以前看过或者听过,按理来说,不应该看自己已经看过的书籍,应该找一些最新的书籍去看,但是每次走到书架前,我都忍不住驻留几分钟,然后思考要不要将以前看的书再翻阅下,往往我都是被这种心理所战胜,虽然书是相同的书,人是相同的人,但是时间和地点已经不再,看后的感觉也是不一样,读书千万次,千万次的感觉,千万次的想法,我不知道这种读法会有什么好处。

    以前读书,一目十行,对于技术的书籍类,直接看下API看下代码,看下如何实现一个功能,而现在缺失十目一行,而且不停的想,有什么办法去实现,然后去看书中的示例,看的过程中往往回想和其它的有没有重叠的,有没有相似的,有没有让人学习的方法,就拿生命周期来说吧,Servlet的生命周期似乎已经滚瓜烂熟,什么init,什么doPost,Destroy,这是开始的时候,因为书籍上是这么说,而自己也就这么记,,其实对于生命周期这些的流程或者逻辑控制,完全自己可以将这些过程写下,在每一个过程中用printIn打印出来(别忘了加上时间标记),相信这种方法比那个死记硬背来的更爽,更直接。

    C#中的IHttpHandler也是用来处理Http请求的,而Java中的Servlet也是可以用来处理Http请求的,是否有相似的关系呢?写好后的Servlet 往往是要进行配置的,很多的时候类似一个拦截器,那么IHttpHandler呢?在使用IHttpHandler的时候?是否是也可以配置,让应用程序决定用哪一个?其实是可以的,只不过配置的不是IHttpHandler而是一个IModule的东西,现在想想虽然不是同一个东西,虽然生命周期不一样,但是能隐约感觉到相同的影子。

    再来看看JSP,JSP是Servlet的一种简化,使用JSP只需要完成程序员需要输出到客户端的内容,JSP中的Java脚本如何镶嵌到一个类中,也就是说JSP最终是要被编译为一个Class文件,JSP本质上就是一个Servlet,而Servlet则是个完整的Java类,这个类的Service方法用于生成对客户端的响应。它们两者的区别如下:

    1.jsp经编译后就变成了Servlet.(JSP的本质就是Servlet,JVM只能识别java的类,不能识别JSP的代码,Web容器将JSP的代码编译成JVM能够识别的java类)
    2.jsp更擅长表现于页面显示,servlet更擅长于逻辑控制.
    3.Servlet中没有内置对象,JSP中的内置对象都是必须通过HttpServletRequest对象,HttpServletResponse对象以及HttpServlet对象得到.

    下面给一个例子:Servlet下载文件

    http://blog.csdn.net/shaojie519/article/details/7361526

    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.net.URLEncoder;
    
    import javax.servlet.ServletException;
    import javax.servlet.ServletOutputStream;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class DownLoadServlet extends HttpServlet {
    
        
        public DownLoadServlet() {
            super();
        }
    
    
        public void destroy() {
            super.destroy(); // Just puts "destroy" string in log
            // Put your code here
        }
    
    
        public void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            doPost(request,response);
        }
    
        
        public void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            //处理请求
            //读取要下载的文件
            File f = new File("E:/好久不见.mp3");
            if(f.exists()){
                FileInputStream  fis = new FileInputStream(f);
                String filename=URLEncoder.encode(f.getName(),"utf-8"); //解决中文文件名下载后乱码的问题
                byte[] b = new byte[fis.available()];
                fis.read(b);
                response.setCharacterEncoding("utf-8");
                response.setHeader("Content-Disposition","attachment; filename="+filename+"");
                //获取响应报文输出流对象
                ServletOutputStream  out =response.getOutputStream();
                //输出
                out.write(b);
                out.flush();
                out.close();
            }    
            
        }
    
        /**
         * Initialization of the servlet. <br>
         *
         * @throws ServletException if an error occurs
         */
        public void init() throws ServletException {
            // Put your code here
        }
    
    }
     
    public class DowFileHandler : IHttpHandler
        {
            public void ProcessRequest(HttpContext context)
            {
                // 打开一个下载对话框
                context.Response.ContentType = "image/JPEG";
                context.Response.AddHeader("Content-Disposition", "attachment:filename=aaa.jpg");
                context.Response.WriteFile("脑残片.jpg");           
            }
    
            public bool IsReusable
            {
                get
                {
                    return false;
                }
            }
        }
  • 相关阅读:
    Mysql如何修改unique key
    centos 编译 安装 protobuf
    EasyNetQ简单使用
    微信发送模板消息
    Python删除开头空格
    代码积累-Common
    sql With(NoLock),With(ReadPast)
    webform 使用log4net配置
    log4net.dll添加报错
    js-小数计算问题
  • 原文地址:https://www.cnblogs.com/zuiyirenjian/p/3431136.html
Copyright © 2020-2023  润新知