• Jetty + Servlet 实现文件下载


    Jetty非常适合做嵌入式web开发,正如Jetty的口号"Don’t deploy your application in Jetty, deploy Jetty in your application!"。

    这个简单的例子是使用Jetty提供文件下载:

    首先pom.xml配置文件如下

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
    
      <groupId>com.luangeng</groupId>
      <artifactId>jettydownload</artifactId>
      <version>1.0-SNAPSHOT</version>
      <packaging>jar</packaging>
    
      <name>jettydownload</name>
      <url>http://maven.apache.org</url>
    
      <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <jetty.version>8.1.9.v20130131</jetty.version>
      </properties>
    
      <dependencies>
        <!-- jetty -->
        <dependency>
          <groupId>org.eclipse.jetty.aggregate</groupId>
          <artifactId>jetty-webapp</artifactId>
          <version>${jetty.version}</version>
        </dependency>
        <dependency>
          <groupId>org.eclipse.jetty</groupId>
          <artifactId>jetty-jsp</artifactId>
          <version>${jetty.version}</version>
        </dependency>
    
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>3.8.1</version>
          <scope>test</scope>
        </dependency>
      </dependencies>
    </project>
    View Code

    ---

    main方法启动Jetty:

    package com.luangeng;
    
    import org.eclipse.jetty.server.Connector;
    import org.eclipse.jetty.server.Handler;
    import org.eclipse.jetty.server.Server;
    import org.eclipse.jetty.server.handler.DefaultHandler;
    import org.eclipse.jetty.server.handler.HandlerCollection;
    import org.eclipse.jetty.server.nio.SelectChannelConnector;
    import org.eclipse.jetty.servlet.ServletContextHandler;
    import org.eclipse.jetty.webapp.WebAppContext;
    
    public class App 
    {
        public static void main( String[] args ) throws Exception {
    
            Server server = new Server();
            server.setStopAtShutdown(true);
            SelectChannelConnector connector = new SelectChannelConnector();
            connector.setPort(8080);
            connector.setReuseAddress(true);
            server.setConnectors(new Connector[] { connector });
            ServletContextHandler context = new ServletContextHandler();
            context.setContextPath("/lg");
            context.addServlet(DownLoadServlet.class, "/download");
            context.addServlet(TestServlet.class, "/test/*");
            HandlerCollection handlers = new HandlerCollection();
            handlers.setHandlers(new Handler[] { context, new DefaultHandler() });
            server.setHandler(handlers);
    
            server.start();
            server.join();
    
        }
    }

    ---

    提供简单的测试 TestServlet.java

    package com.luangeng;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.io.PrintWriter;
    
    /**
     * Created by LG.
     */
    public class TestServlet extends HttpServlet {
    
        public void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
    
    
                response.setContentType("text/html");
                PrintWriter out = response.getWriter();
                out.println("<HTML>");
                out.println("<HEAD><TITLE>test</TITLE></HEAD>");
                out.println("<BODY>");
                out.println("GET method");
                out.println("</BODY>");
                out.println("</HTML>");
                out.flush();
                out.close();
    
        }
        public void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
    
            response.setContentType("text/html");
            PrintWriter out = response.getWriter();
            out.println("<HTML>");
            out.println("<HEAD><TITLE>test</TITLE></HEAD>");
            out.println("<BODY>");
            out.println("POST method");
            out.println("</BODY>");
            out.println("</HTML>");
            out.flush();
            out.close();
        }
    
    
    
    }

    ---

    完成下载功能的Servlet:

    DownloadServlet.java

    package com.luangeng;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.*;
    import java.net.URLEncoder;
    
    /**
     * Created by LG.
     */
    public class DownLoadServlet extends HttpServlet {
    
        public void doGet(HttpServletRequest request, HttpServletResponse response) {
    
            //PrintWriter pw = null;
            FileInputStream in = null;
            OutputStream outs = null;
    
            //String path = request.getParameter("filepath");
            String path = "/Users/LG/test.txt";
            //path = new String(fileName.getBytes("iso8859-1"),"UTF-8");
    
            try {
                File file = new File(path);
                if(!file.exists())
                {
                    response.setStatus(404);
                    //pw.println("file not found!");
                    //request.getRequestDispatcher("/err.jsp").forward(request, response);
                    return;
                }
                response.setContentType("text/html");
                String realname = path.substring(path.indexOf("/")+1);
                response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(realname, "UTF-8"));
                in = new FileInputStream(path);
                outs = response.getOutputStream();
                byte buffer[] = new byte[1024];
                int len = 0;
                while ((len = in.read(buffer)) > 0) {
                    outs.write(buffer, 0, len);
                }
    
                System.out.println(response.getStatus());
            }
            catch(Exception e)
            {
                //pw.println(e.getMessage());
                response.setStatus(300);
                //log
            }
            finally {
                response.setStatus(200);
                try {
                    if(outs != null) {
                        outs.flush();
                        outs.close();
                    }
                    if(in != null) {
                        in.close();
                    }
    
                } catch (IOException e) {
                }
    //            if(pw!=null) {
    //                pw.flush();
    //                pw.close();
    //            }
            }
        }
    
        public void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            doGet(request, response);
        }
    
    }

    ---

    浏览器访问网址 http://localhost:8080/lg/download 即可看到下载

     

    end

  • 相关阅读:
    【秒懂音视频开发】03_重识音频
    【秒懂音视频开发】02_重识声音
    【秒懂音视频开发】01_移动通信技术的发展
    [mysql]错误解决之"Failed to start MySQL Server"
    Ubuntu 将Python从默认的2.7升级到3.* 版本
    宝塔面板后台设置免费SSL证书Let's Encrypt(三)
    Let's Encrypt 证书申请及配置(二)
    快速签发 Let's Encrypt 证书指南(一)
    DJANGO中多种重定向方法使用
    反解法|逆向思维
  • 原文地址:https://www.cnblogs.com/luangeng/p/6079604.html
Copyright © 2020-2023  润新知