我正在使用嵌入式Jetty来创建一个静态网站.ServletContextHandler.setResourceBase("...")与ResourceHandler.setResourceBase("...")具有相同的效果吗?
例:
// ServletContextHandler case
ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
context.setResourceBase("/tmp/...");
// ResourceHandler case
ResourceHandler resourceHandler = new ResourceHandler();
resourceHandler.setResourceBase("/tmp/...");
Run Code Online (Sandbox Code Playgroud)
我试过测试它们.ResourceHandler正是我想要的.但否则不会.他们之间有什么区别?
(抱歉我的英语不好:P)
更改后,下面是整个代码.Context("/")提供静态文件,wsContext("/ ws")提供Web套接字端点.当然,Context("/")也能够为Web套接字端点提供服务.
server = new Server();
server.setStopAtShutdown(true);
ServerConnector connector = new ServerConnector(server);
connector.setPort(8000);
server.addConnector(connector);
// 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.setResourceBase(System.getProperty("webapp.path"));
ServletContextHandler wsContext = new ServletContextHandler();
wsContext.setContextPath("/ws");
ContextHandlerCollection contexts=new ContextHandlerCollection();
contexts.setHandlers(new Handler[]{context, wsContext});
server.setHandler(contexts);
context.addServlet(DefaultServlet.class, "/");
// Initialize javax.websocket layer
ServerContainer wsContainer = WebSocketServerContainerInitializer.configureContext(wsContext);
// Add WebSocket endpoint to javax.websocket layer
// code omitted...
server.start();
logger.info("WebServer started.");
Run Code Online (Sandbox Code Playgroud)
使用该设置,resourceHandler永远不会调用,因为链末尾的DefaultServlet处理(或Default404Servlet)ServletContextHandler将始终响应,resourceHandler甚至不允许执行.
如果你有一个ServletContextHandler,不采用ResourceHandler使用DefaultServlet该ServletContextHandler设置并为您的静态文件.
ResourceHandler非常简单,如果你想要更多的控制/功能,请DefaultServlet在你的配置中使用ServletContextHandler.
好的,开始了......
它ServletContextHandler.setBaseResource(Resource)是ServletContext自己配置其上下文范围的地方resourceBase.
(注意:setResourceBase()的参数是一个URL字符串,可以指向一个file://目录甚至一个jar:file://位置.几乎任何支持的东西Resource.newResource(String))
${resourceBase}/是各种方法的查找点,javax.servlet.ServletContext例如:
String getRealPath(String path)URL getResource(String path)InputStream getResourceAsStream(String path)Set<String> getResources(String path)DefaultServlet,这可能会提供静态资源(如*.html,*.css,*.js从指定)${resourceBase}/${request.pathInfo}ResourceHandler不参加ServletContextHandler是不合适的ServletContextHandler.
另外,不要忘记设置ServletContextHandler.setContextPath(String)所需的上下文路径(通常"/")
是的,您甚至可以在一个配置中拥有多个DefaultServlet配置ServletContextHandler.
| 归档时间: |
|
| 查看次数: |
8188 次 |
| 最近记录: |