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>

---

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

Jetty + Servlet 实现文件下载的更多相关文章

  1. 使用Spring Boot操作Hive JDBC时,启动时报出错误:NoSuchMethodError: org.eclipse.jetty.servlet.ServletMapping.setDef

    使用Spring Boot操作Hive JDBC时,启动时报出错误:NoSuchMethodError: org.eclipse.jetty.servlet.ServletMapping.setDef ...

  2. Servlet处理文件下载的编码问题,乱码。

    Servlet处理文件下载的编码问题,乱码. //处理文件名乱码问题 // 获得请求头中的User-Agent String agent = request.getHeader("User- ...

  3. servlet实现文件下载所需步骤及说明

      servlet实现文件下载所需步骤及说明 CreateTime--2017年9月1日15:46:22 Author:Marydon 参考链接:http://blog.sina.com.cn/s/b ...

  4. SpringBoot项目 org.springframework.boot.context.embedded.EmbeddedServletContainerException: Unable to start embedded Jetty servlet container报错

    SpringBoot项目启动报错 ERROR 2172 --- [ main] o.s.boot.SpringApplication : Application startup failed org. ...

  5. Servlet 之文件下载

    Servlet 之文件下载 import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; impor ...

  6. 利用Tomcat内置的servlet实现文件下载功能

    起因 最近博客所在的VPS挂了又要重装系统,又要重装各种软件. 以前我也经常更换VPS,每次更换都是各种坑爹事情..比如要下载java.下载tomcat.下载mysql..........以前每次我都 ...

  7. JQuery调用Servlet实现文件下载

    jsp页面上的txt附件,点击后浏览器默认直接打开,结果是乱码. 因为用户上传的txt文件可能是ANSI.Unicode.UTF-8编码的任意一种,上传时后台获取文件内容重写一遍保证浏览器打开正常太过 ...

  8. servlet实现文件下载

     之前没怎么用过这个,这次项目中用到了,于是总结一下: 应该说主要注意三方面: 1.写一个servlet 2.在web.xml中配置这个servlet 3.页面上调用这个servlet   第一: 写 ...

  9. jsp使用servlet实现文件下载

    1.在index.jsp写入如下代码 <a href="demo2">下载</a> 2.在src中创建ServletDemo2类 public class ...

随机推荐

  1. Python 循环语句(while, for)

    # while的使用 # 要注意些循环的时候,要考虑好循环的结束 # 考虑循环结束的方法有2种: # 1.考虑在循环体里改变while 的条件 # 2.在循环体通过break 语句跳出循环 # 方法1 ...

  2. 【转载】Android端百度地图API使用详解

    转载地址:http://www.cnblogs.com/rocomp/p/4994110.html 百度地图API简介 百度地图移动版API(Android)是一套基于Android设备的应用程序接口 ...

  3. C语言一个细节地方的说明【防止使用不当而出错】

    1.运行如下的代码: #include <stdio.h> #include <string.h> int main() { int a; a=1; int s[4]; mem ...

  4. 【bzoj1040】骑士[ZJOI2008](树形dp)

    题目传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1040 这道题,很明显根据仇恨关系构造出的图形是一堆环套树.如果是普通的树,就可以马上裸树 ...

  5. 内核编译错误解答(elf_i386错误)

    内核编译错误解答(elf_i386错误) 在编译内核过程中遇到的问题及解决方法: 1.root@org:/usr/src/linux# make menuconfig  *** Unable to f ...

  6. QT 事件处理 KeyPressEvent 和 定时器时间 Timer

    1. 按键事件响应, 两种方法,一种直接处理Event,过滤出KeyPress,另一种直接处理KeyPressEvent. bool Dialog::event(QEvent *e) { if( e- ...

  7. AppStore审核2.1被拒大礼包过审经历

    本团队的iOS端迭代至今,经历过AppStore审核的数次调整,包括审核时长.严厉程度等,尝过各种花式的拒绝理由,但从没有像2018年初这次来得猛烈和漫长.从首次提交到最后过审几乎花费一个月的时间,下 ...

  8. sql 触发器回顾

    一: 触发器是一种特殊的存储过程﹐它不能被显式地调用﹐而是在往表中插入记录﹑更新记录或者删除记录时被自动地激活.所以触发器可以用来实现对表实施复杂的完整性约束. 二: SQL Server为每个触发器 ...

  9. dtd和schema的区别

    在XML技术里,可以编写一个文档来约束一个XML文档的书写规范,这称之为XML约束. 常用的约束技术XML DTD :XML Schema.XML Schema 也是一种用于定义和描述 XML 文档结 ...

  10. 51nod 1010 stl/数论/二分

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1010 1010 只包含因子2 3 5 基准时间限制:1 秒 空间限制:1 ...