Jetty很是適合作嵌入式web開發,正如Jetty的口號"Don’t deploy your application in Jetty, deploy Jetty in your application!"。html
這個簡單的例子是使用Jetty提供文件下載:java
首先pom.xml配置文件以下web
<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>
---apache
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();
}
}
---app
提供簡單的測試 TestServlet.javaeclipse
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(); } }
---webapp
完成下載功能的Servlet:jsp
DownloadServlet.javamaven
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