
这适用于
Jetty 9.2.3.v20140905
package org.eclipse.jetty.demo;import java.io.File;import java.io.IOException;import java.io.PrintWriter;import java.net.URLEnprer;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.eclipse.jetty.server.Server;import org.eclipse.jetty.servlet.DefaultServlet;import org.eclipse.jetty.servlet.ServletContextHandler;import org.eclipse.jetty.servlet.ServletHolder;public class VideoServerMain{ @SuppressWarnings("serial") public class IndexerServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setContentType("text/html"); PrintWriter out = resp.getWriter(); out.println("<!DOCTYPE html>"); out.println("<html><head><title>Videos</title></head>"); out.println("<body>"); for (File file : baseDir.listFiles()) { if (file.isFile() && file.getName().endsWith(".mp4")) { String enpredFilename = URLEnprer.enpre(file.getName(), "UTF-8"); out.println("<video style="width: 400px; height: 300px" controls loop>"); out.printf(" <source src="%s" type="video/mp4">%n",enpredFilename); out.println("</video>"); out.printf("<p>%s</p>%n",file.getName()); out.println("<hr/>"); } } out.println("</body>"); out.println("</html>"); } } public static void main(String[] args) { if (args.length != 1) { System.err.printf("ERROR: Usage %s [videos-dir]%n",VideoServerMain.class.getName()); System.exit(-1); } File baseDir = new File(args[0]); if (!baseDir.exists() || !baseDir.isDirectory()) { System.err.printf("ERROR: not a valid directory: %s%n",baseDir); System.exit(-1); } try { new VideoServerMain(baseDir).start(); } catch (Throwable t) { t.printStackTrace(System.err); } } private final File baseDir; public VideoServerMain(File baseDir) { this.baseDir = baseDir; } public void start() throws Exception { Server server = new Server(8080); // Establish Scratch directory for the servlet context (used by JSP compilation) File tempDir = new File(System.getProperty("java.io.tmpdir")); File scratchDir = new File(tempDir.toString(),"embedded-jetty-html5-vide-server"); if (!scratchDir.exists()) { if (!scratchDir.mkdirs()) { throw new IOException("Unable to create scratch directory: " + scratchDir); } } // Setup the basic application "context" for this application at "/" // This is also known as the handler tree (in jetty speak) ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS); context.setContextPath("/"); context.setAttribute("javax.servlet.context.tempdir",scratchDir); context.setResourcebase(baseDir.toURI().toASCIIString()); // Add servlet to present html for found videos ServletHolder holderIndexer = new ServletHolder(new IndexerServlet()); context.addServlet(holderIndexer,"/indexer"); // Make sure that our welcome-file is the indexer servlet context.setWelcomeFiles(new String[]{ "indexer" }); // Allow static file serving of videos themselves, via DefaultServlet // Add Default Servlet (must be named "default") ServletHolder holderDefault = new ServletHolder("default",DefaultServlet.class); holderDefault.setInitParameter("resourcebase",baseDir.getAbsolutePath()); holderDefault.setInitParameter("dirAllowed","true"); holderDefault.setInitParameter("welcomeServlets","true"); holderDefault.setInitParameter("redirectWelcome","true"); context.addServlet(holderDefault,"/"); server.setHandler(context); server.start(); server.join(); }}您似乎有2个问题。
- 的
ResourceHandler
是需求,关于它的浏览器整合太简单了。
浏览器似乎会执行很多部分请求,长时间请求以及在需要时进行恢复。此类请求最好与
DefaultServlet
用于视频标记的HTML无法正常工作,但是当我将其更改为以下代码时,它可以正常工作。
chrome似乎又高兴了。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)